name: cygwin

concurrency:
  group: cygwin-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - master
      # Stable branches such as 0.56 or 1.0
      - '[0-9]+.[0-9]+'
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - "unittests/**"
      - ".github/workflows/cygwin.yml"
      - "run*tests.py"
  pull_request:
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - "unittests/**"
      - ".github/workflows/cygwin.yml"
      - "run*tests.py"

permissions:
  contents: read

jobs:
  test:
    runs-on: windows-latest
    name: ${{ matrix.NAME }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - NAME: gccx64ninja
            ARCH: x86_64
    env:
      MESON_CI_JOBNAME: cygwin-${{ matrix.NAME }}

    steps:
      # remove inheritable permissions since they break assumptions testsuite
      # makes about file modes
      - run: icacls . /inheritance:r /T /C

      - run: git config --global core.autocrlf input

      - uses: actions/checkout@v4

      - uses: cygwin/cygwin-install-action@v6
        with:
          platform: ${{ matrix.ARCH }}
          packages: |
            cmake
            gcc-fortran
            gcc-objc++
            gcc-objc
            git
            gobject-introspection
            gtk-doc
            libboost-devel
            libglib2.0-devel
            libgtk3-devel
            libxml2-devel
            libxslt-devel
            make
            ninja
            python2-devel
            python3-devel
            python3-libxml2
            python3-libxslt
            python3-gi
            python39-pip
            python39-wheel
            vala
            zlib-devel

      - name: Find pip cache dir
        id: pip-cache
        run: |
          export PATH=/usr/bin:/usr/local/bin:$(cygpath ${SYSTEMROOT})/system32
          echo "dir=$(cygpath -wa $(python3 -m pip cache dir))" >> "$GITHUB_OUTPUT"
        shell: bash --noprofile --norc -o igncr -eo pipefail '{0}'

      - uses: actions/cache/restore@v4
        id: restore-cache
        with:
          path: ${{ steps.pip-cache.outputs.dir }}
          key: cygwin-pip-${{ github.run_number }}
          restore-keys: cygwin-pip-

      - name: Run pip
        run: |
          export PATH=/usr/bin:/usr/local/bin:$(cygpath ${SYSTEMROOT})/system32
          python3 -m pip --disable-pip-version-check install gcovr fastjsonschema pefile pytest pytest-subtests pytest-xdist
        shell: bash --noprofile --norc -o igncr -eo pipefail '{0}'

      - uses: actions/cache/save@v4
        with:
          path: ${{ steps.pip-cache.outputs.dir }}
          key: cygwin-pip-${{ github.run_number }}

      - name: Run tests
        run: |
          export PATH=/usr/bin:/usr/local/bin:$(cygpath ${SYSTEMROOT})/system32
          python3 ./run_tests.py --backend=ninja
        env:
          # Cygwin's static boost installation is broken (some static library
          # variants such as boost_thread are not present)
          SKIP_STATIC_BOOST: 1
        shell: bash --noprofile --norc -o igncr -eo pipefail '{0}'

      - uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.NAME }}
          path: meson-test-run.*
        # test log should be saved on failure
        if: ${{ !cancelled() }}
