name: Test
on:
  pull_request:
  push:
    branches:
      - master
env:
  PY_COLORS: 1

jobs:
  test:
    name: Run tests
    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-latest, windows-latest]
        python-version: ["3.8", "3.9"]
    runs-on: ${{ matrix.platform }}
    env:
      IS_MAIN_PYTHON: ${{ matrix.python-version == '3.8' && matrix.platform == 'ubuntu-latest' }}
    steps:
      - uses: actions/checkout@v4
      - name: Install Python tools
        uses: BrandonLWhite/pipx-install-action@v0.1.1
      - name: Setup Python with poetry caching
        # poetry cache requires poetry to already be installed, weirdly
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: poetry

      - name: Install PyGobject dependencies on Ubuntu
        if: matrix.platform == 'ubuntu-latest'
        run: |
          sudo apt update
          sudo apt install ffmpeg gobject-introspection libgirepository1.0-dev
          poetry install --extras=replaygain --extras=reflink

      - name: Install Python dependencies
        run: poetry install --only=main,test --extras=autobpm

      - if: ${{ env.IS_MAIN_PYTHON != 'true' }}
        name: Test without coverage
        run: poe test

      - if: ${{ env.IS_MAIN_PYTHON == 'true' }}
        name: Test with coverage
        uses: liskin/gh-problem-matcher-wrap@v3
        with:
          linters: pytest
          run: poe test-with-coverage

      - if: ${{ env.IS_MAIN_PYTHON == 'true' }}
        name: Store the coverage report
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: .reports/coverage.xml

  upload-coverage:
    name: Upload coverage report
    needs: test
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v4

      - name: Get the coverage report
        uses: actions/download-artifact@v4
        with:
          name: coverage-report

      - name: Upload code coverage
        uses: codecov/codecov-action@v4
        with:
          files: ./coverage.xml
          use_oidc: true
