name: cygwin

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

on:
  push:
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - ".github/workflows/cygwin.yml"
      - "run*tests.py"
  pull_request:
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - ".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:
      # cache should be saved on failure, but the action doesn't support that
      # https://github.com/actions/cache/issues/92
      - uses: actions/cache@v1
        with:
          # should use 'pip3 cache dir' to discover this path
          path: C:\cygwin\home\runneradmin\.cache\pip
          key: cygwin-pip-${{ github.run_number }}
          restore-keys: cygwin-pip-

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

      - uses: actions/checkout@v3

      - uses: cygwin/cygwin-install-action@master
        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
            ninja
            python2-devel
            python3-devel
            python3-libxml2
            python3-libxslt
            python39-pip
            python39-wheel
            vala
            zlib-devel

      - name: work around gcovr bug https://github.com/gcovr/gcovr/pull/576
        run: |
          export PATH=/usr/bin:/usr/local/bin:$(cygpath ${SYSTEMROOT})/system32
          python3 -m pip --disable-pip-version-check install 'jinja2<3.1.0'
        shell: C:\cygwin\bin\bash.exe --noprofile --norc -o igncr -eo pipefail '{0}'

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

      - name: Run tests
        run: |
          export PATH=/usr/bin:/usr/local/bin:$(cygpath ${SYSTEMROOT})/system32
          python3 ./tools/run_with_cov.py 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: C:\cygwin\bin\bash.exe --noprofile --norc -o igncr -eo pipefail '{0}'

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

      - name: Upload coverage report
        run: ./ci/upload_cov.sh "${{ matrix.NAME }}"
