From 014f0a4e9b22cf25a35f01ecd1d61d7f9f40352a Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sat, 10 Jan 2026 15:37:55 +0100 Subject: [PATCH] CI: port two jobs from azure pipelines to GHA This ports vc2022x64vs and vc2022arm64ninjacross to GHA. GHA has some upsides: * 4 instead of 2 cores, so about twice as fast with parallel tests * easier to test in forks (no azure account required) * one less CI system to handle Downsides: GHA is limited to 20 parallel jobs, and meson has many, so some queuing might occur, though it being twice as fast and many of the other jobs being short should lead to faster times anyway. The third job was not ported yet since that includes intel fortran which requires caching since it takes 15 minutes to install, and I lost motivation. Ideally it could be ported as well. --- .github/workflows/windows.yml | 158 ++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 .github/workflows/windows.yml diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 000000000..9c163a425 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,158 @@ +name: windows + +on: + push: + branches: + - 'master' + # Release branches + - '1.*' + paths: + - 'mesonbuild/**' + - 'test cases/**' + - 'unittests/**' + - '.github/workflows/*.yml' + - 'ci/run.ps1' + - 'run_project_tests.py' + - 'run_tests.py' + - 'run_unittests.py' + pull_request: + paths: + - 'mesonbuild/**' + - 'test cases/**' + - 'unittests/**' + - '.github/workflows/*.yml' + - 'ci/run.ps1' + - 'run_project_tests.py' + - 'run_tests.py' + - 'run_unittests.py' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +jobs: + vs2022: + runs-on: windows-2022 + timeout-minutes: 120 + name: ${{ matrix.name }} + + strategy: + fail-fast: false + matrix: + include: + - name: vc2022x64vs + arch: x64 + compiler: msvc2022 + backend: vs2022 + # mysteriously, several tests fail because vs cannot find + # executables such as cmd.exe ??? + ifort: false + - name: vc2022arm64ninjacross + arch: amd64_arm64 + compiler: msvc2022 + backend: ninja + extraargs: --cross arm64cl.txt --cross-only + # ifort doesn't support arm64 + ifort: false + + steps: + - uses: actions/checkout@v6 + + - name: Setup Python + uses: actions/setup-python@v6 + with: + python-version: '3.7' + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.arch }} + + - name: Install PyPy + if: matrix.arch == 'x64' + shell: pwsh + run: | + $pypyUrl = "https://downloads.python.org/pypy/pypy3.8-v7.3.9-win64.zip" + $pypyZip = "${{ runner.temp }}\pypy38.zip" + $pypyDir = "${{ runner.temp }}\pypy38" + Invoke-WebRequest -Uri $pypyUrl -OutFile $pypyZip + Expand-Archive $pypyZip -DestinationPath $pypyDir + $pypyPath = "$pypyDir\pypy3.8-v7.3.9-win64" + "PYPY_PATH=$pypyPath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + & "$pypyPath\pypy3.exe" -m ensurepip + + - name: Install Python 2.7 + if: matrix.arch == 'x64' + shell: pwsh + run: | + $python27Url = "https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi" + $python27Msi = "${{ runner.temp }}\python27.msi" + Invoke-WebRequest -Uri $python27Url -OutFile $python27Msi + Start-Process msiexec.exe -Wait -ArgumentList "/I $python27Msi /quiet" + + - name: Install pkg-config + shell: pwsh + run: | + $pkgconfigDir = "${{ runner.temp }}\pkgconfig" + New-Item -ItemType Directory -Path $pkgconfigDir -Force + Invoke-WebRequest -Uri "https://raw.githubusercontent.com/mesonbuild/cidata/refs/heads/master/win32/pkg-config.exe" -OutFile "$pkgconfigDir\pkg-config.exe" + echo "$pkgconfigDir" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Install NASM + shell: pwsh + run: choco install -y nasm + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable-x86_64-pc-windows-msvc + components: clippy + + - name: Add Rust library path (Windows) + run: | + $rustlib = (rustc --print sysroot) + "\bin" + echo $rustlib | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + shell: pwsh + + - name: Install dependencies + shell: pwsh + run: | + python -m pip --disable-pip-version-check install --upgrade pefile pytest-xdist pytest-subtests fastjsonschema cython + + - name: Run tests + env: + MESON_CI_JOBNAME: windows-${{ matrix.name }} + shell: pwsh + run: | + # Remove Chocolatey, MinGW, Strawberry Perl from path + $env:Path = ($env:Path.Split(';') | Where-Object { $_ -notmatch 'mingw|Strawberry|Chocolatey|PostgreSQL' }) -join ';' + + if ( '${{ matrix.arch }}' -eq 'x64' ) { + $env:Path = $env:Path + ";$env:PYPY_PATH" + } + + echo "=== PATH BEGIN ===" + echo ($env:Path).Replace(';',"`n") + echo "=== PATH END ===" + + $progs = @("python","ninja","pkg-config","cl","rc","link","pypy3","ifort") + foreach ($prog in $progs) { + echo "" + echo "Locating ${prog}:" + where.exe $prog + } + + echo "" + echo "Ninja / MSBuild version:" + if ($env:backend -eq 'ninja') { + ninja --version + } else { + MSBuild /version + } + + echo "" + echo "Python version:" + python --version + + echo "=== Running tests ===" + python 2>&1 run_tests.py --backend "${{ matrix.backend }}" ${{ matrix.extraargs }}