GitHub Actions MSYS2 with Python

MSYS2 is useful for end user and developer laptops as well as CI. Using MSYS2 with Python on GitHub Actions CI requires adding MSYS2 to PATH just like the laptop. One factor is that MSYS2 is installed to a temporary directory.

Here is an example YaML workflow using MSYS2 with Python. Note we don’t use MSYS2 Python packages because they tend to be older versions than might be needed. The packages installed below aren’t specifically needed, it’s just an example of real-life use where I often use Ninja, Gfortran, HDF5, and CMake. This is a “build on run” package where the “pytest” command ultimately invokes CMake. We use GitHub Actions timeout parameters to avoid accidentally trying to build pip packages from source.

jobs:

  windows:
    runs-on: windows-latest
    steps:
    - uses: msys2/setup-msys2
      with:
        update: true
        install: >-
          mingw-w64-ucrt-x86_64-ninja
          mingw-w64-ucrt-x86_64-gcc-fortran
          mingw-w64-ucrt-x86_64-hdf5          

    - uses: actions/setup-python
      with:
        python-version: '3.x'

    - uses: actions/checkout

    - run: echo "${{ runner.temp }}/msys64/ucrt64/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

    - run: python -m pip install .[tests]
      timeout-minutes: 2

    - run: pytest
      env:
        CMAKE_GENERATOR: Ninja
      timeout-minutes: 7