name: Test MinGW

on: [push, pull_request, workflow_dispatch]

permissions:
  contents: read

concurrency: 
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        mingw: ["MINGW32", "MINGW64"]
        include:
          - mingw: "MINGW32"
            name: "MSYS2 MinGW 32-bit"
            package: "mingw-w64-i686"
          - mingw: "MINGW64"
            name: "MSYS2 MinGW 64-bit"
            package: "mingw-w64-x86_64"

    defaults:
      run:
        shell: bash.exe --login -eo pipefail "{0}"
    env:
      MSYSTEM: ${{ matrix.mingw }}
      CHERE_INVOKING: 1

    timeout-minutes: 30
    name: ${{ matrix.name }}

    steps:
      - name: Checkout Pillow
        uses: actions/checkout@v3

      - name: Set up shell
        run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH
        shell: pwsh

      - name: Install dependencies
        run: |
          pacman -S --noconfirm \
              ${{ matrix.package }}-python3-cffi \
              ${{ matrix.package }}-python3-numpy \
              ${{ matrix.package }}-python3-olefile \
              ${{ matrix.package }}-python3-pip \
              ${{ matrix.package }}-python-pyqt6 \
              ${{ matrix.package }}-python3-setuptools \
              ${{ matrix.package }}-freetype \
              ${{ matrix.package }}-gcc \
              ${{ matrix.package }}-ghostscript \
              ${{ matrix.package }}-lcms2 \
              ${{ matrix.package }}-libimagequant \
              ${{ matrix.package }}-libjpeg-turbo \
              ${{ matrix.package }}-libraqm \
              ${{ matrix.package }}-libtiff \
              ${{ matrix.package }}-libwebp \
              ${{ matrix.package }}-openjpeg2 \
              subversion

          python3 -m pip install pyroma pytest pytest-cov pytest-timeout

          pushd depends && ./install_extra_test_images.sh && popd

      - name: Build Pillow
        run: CFLAGS="-coverage" python3 -m pip install --global-option="build_ext" .

      - name: Test Pillow
        run: |
          python3 selftest.py --installed
          python3 -c "from PIL import Image"
          python3 -m pytest -vx --cov PIL --cov Tests --cov-report term --cov-report xml Tests

      - name: Upload coverage
        uses: codecov/codecov-action@v3
        with:
          file: ./coverage.xml
          flags: GHA_Windows
          name: ${{ matrix.name }}

  success:
    permissions:
      contents: none
    needs: build
    runs-on: ubuntu-latest
    name: MinGW Test Successful
    steps:
      - name: Success
        run: echo MinGW Test Successful