Files
MINGW-packages/.github/workflows/main.yml
Christoph Reiter 6ff1a1f8a6 CI: upload a process minidump in case something crashes
In case something crashes in CI this will show us some
information on which program crashed and why.

We register procdump as a JIT debugger which dumps the process
memory into a new file if triggered. To enable the JIT debugger
in the context of cygwin we need to set MSYS=winjitdebug.

The resulting dump file can for example be analyzed with
minidump-stackwalk or minidump_stackwalk
2022-07-23 18:51:36 +02:00

173 lines
5.3 KiB
YAML

name: main
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
on:
push:
pull_request:
jobs:
build:
if: ${{ github.event_name != 'push' || github.ref != 'refs/heads/master'}}
strategy:
fail-fast: false
matrix:
include: [
{ msystem: MINGW64, runner: windows-2022 },
{ msystem: MINGW32, runner: windows-2022 },
{ msystem: UCRT64, runner: windows-2022 },
{ msystem: CLANG64, runner: windows-2022 },
{ msystem: CLANG32, runner: windows-2022 },
# { msystem: CLANGARM64, runner: ['Windows', 'ARM64', 'CI'] }
]
name: ${{ matrix.msystem }}
runs-on: ${{ matrix.runner }}
env:
MSYS: winjitdebug
steps:
- name: Get CPU Name
run : |
Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name
- name: Setup JIT minidump
if: ${{ matrix.msystem != 'CLANGARM64' }}
run: |
Set-Location '${{ runner.temp }}'
Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/Procdump.zip' -OutFile Procdump.zip
Expand-Archive Procdump.zip -DestinationPath .
New-Item -Path '_dumps' -ItemType Directory
.\procdump64.exe -accepteula -ma -i "${{ runner.temp }}/_dumps"
.\procdump.exe -accepteula -ma -i "${{ runner.temp }}/_dumps"
- uses: actions/checkout@v3
with:
path: temp
fetch-depth: 0
persist-credentials: false
# to match the autobuild environment
- uses: actions/setup-python@v3
with:
python-version: '3.9'
architecture: 'x64'
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ contains(matrix.msystem, 'ARM64') && 'MSYS' || matrix.msystem }}
install: git python base-devel pactoys
update: true
release: ${{ runner.arch != 'ARM64' }}
location: 'D:\M'
- name: Add staging repo
shell: msys2 {0}
run: |
cp /etc/pacman.conf /etc/pacman.conf.bak
grep -qF '[clangarm64]' /etc/pacman.conf || sed -i '1s|^|[clangarm64]\nInclude = /etc/pacman.d/mirrorlist.mingw\n|' /etc/pacman.conf
sed -i '1s|^|[staging]\nServer = https://repo.msys2.org/staging/\nSigLevel = Never\n|' /etc/pacman.conf
- name: Update using staging
run: |
msys2 -c 'pacman --noconfirm -Suuy'
msys2 -c 'pacman --noconfirm -Suu'
- name: Move Checkout
run: |
If (Test-Path "C:\_") { rm -r -fo "C:\_" }
Copy-Item -Path ".\temp" -Destination "C:\_" -Recurse
- name: CI-Build
shell: msys2 {0}
id: build
run: |
cd /C/_
if [[ "$MSYSTEM" != "${{ matrix.msystem }}" ]]; then
MSYSTEM=${{ matrix.msystem }}
set +e
. shell ${MSYSTEM,,}
set -e
fi
pacman -S --noconfirm ${MINGW_PACKAGE_PREFIX}-ntldd
MINGW_ARCH=${{ matrix.msystem }} ./.ci/ci-build.sh
- name: "Upload binaries"
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.msystem }}-packages
path: C:/_/artifacts/*.pkg.tar.*
if-no-files-found: ignore
- name: "Upload dumps"
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.msystem }}-dumps
path: ${{ runner.temp }}/_dumps/*.dmp
if-no-files-found: ignore
- name: "Clean up runner"
if: ${{ always() }}
continue-on-error: true
run: |
If (Test-Path "C:\_") { rm -r -fo "C:\_" }
msys2 -c 'mv -f /etc/pacman.conf.bak /etc/pacman.conf'
msys2 -c 'pacman --noconfirm -Suuy'
msys2 -c 'pacman --noconfirm -Suu'
check:
needs: [build]
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
continue-on-error: true
with:
name: MINGW64-packages
path: C:/_/artifacts
- name: Check whether to Run
id: check-run
run: |
python .ci/ci-check.py --whether-to-run
- uses: msys2/setup-msys2@v2
if: steps.check-run.outputs.run == 'true'
with:
msystem: MINGW64
install: mingw-w64-x86_64-python-pip
release: false # since we aren't building anything
- name: Add staging repo
if: steps.check-run.outputs.run == 'true'
shell: msys2 {0}
run: |
sed -i '1s|^|[staging]\nServer = https://repo.msys2.org/staging/\nSigLevel = Never\n|' /etc/pacman.conf
- name: Update using staging
if: steps.check-run.outputs.run == 'true'
run: |
msys2 -c 'pacman --noconfirm -Suuy'
msys2 -c 'pacman --noconfirm -Suu'
- name: Run Checks
if: steps.check-run.outputs.run == 'true'
shell: msys2 {0}
run: |
python .ci/ci-check.py
package-grokker:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v3
id: artifacts
continue-on-error: true
with:
name: MINGW64-packages
path: artifacts
- name: Grok packages
uses: jeremyd2019/package-grokker/grok-artifacts@main
if: steps.artifacts.outcome == 'success'
with:
repo: mingw64
path: artifacts