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.9", "3.10", "3.11", "3.12"] runs-on: ${{ matrix.platform }} env: IS_MAIN_PYTHON: ${{ matrix.python-version == '3.9' && 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 and release script dependencies on Ubuntu if: matrix.platform == 'ubuntu-latest' run: | sudo apt update sudo apt install ffmpeg gobject-introspection libcairo2-dev libgirepository-2.0-dev pandoc - name: Get changed lyrics files id: lyrics-update uses: tj-actions/changed-files@v45 with: files: | beetsplug/lyrics.py test/plugins/test_lyrics.py - name: Add pytest annotator uses: liskin/gh-problem-matcher-wrap@v3 with: linters: pytest action: add - if: ${{ env.IS_MAIN_PYTHON != 'true' }} name: Test without coverage run: | poetry install --extras=autobpm --extras=lyrics poe test - if: ${{ env.IS_MAIN_PYTHON == 'true' }} name: Test with coverage env: LYRICS_UPDATED: ${{ steps.lyrics-update.outputs.any_changed }} run: | poetry install --extras=autobpm --extras=lyrics --extras=docs --extras=replaygain --extras=reflink poe docs 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: ${{ !(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork) }}