diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index baa7376..abc229c 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -10,23 +10,53 @@ on: branches: [ main ] jobs: - build: - - runs-on: ubuntu-latest + tests: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10'] + include: + + - name: Python 3.12 with Coverage + os: ubuntu-latest + python: '3.12' + toxenv: py312-test-cov + + - name: Python 3.12 + os: ubuntu-latest + python: '3.12' + toxenv: py312-test + + - name: Python 3.10 + os: ubuntu-latest + python: '3.10' + toxenv: py310-test + + - name: Python 3.9 + os: ubuntu-latest + python: 3.9 + toxenv: py39-test + + - name: Python 3.8 + os: ubuntu-latest + python: 3.8 + toxenv: py38-test steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + - name: Checkout code + uses: actions/checkout@v4 with: - python-version: ${{ matrix.python-version }} + fetch-depth: 0 + + - name: Set up Python ${{ matrix.python }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} - name: Install dependencies run: | - python -m pip install --upgrade pip - python -m pip install flake8 pytest wheel + python -m pip install --upgrade tox + pip install flake8 pytest-cov wheel tox if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | @@ -34,6 +64,35 @@ jobs: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest + - name: Run Tests run: | - pytest + tox ${{ matrix.toxargs }} -e ${{ matrix.toxenv }} -- ${{ matrix.toxposargs }} + - name: Upload coverage to artifacts + if: ${{ contains(matrix.toxenv,'-cov') }} + uses: actions/upload-artifact@v4 + with: + name: coverage_${{ matrix.toxenv }}.xml + path: coverage.xml + if-no-files-found: error + + upload-coverage-report: + needs: ['tests'] + permissions: + contents: none + runs-on: ubuntu-latest + name: Upload Coverage + steps: + - name: Download coverage artifacts + uses: actions/download-artifact@v4 + with: + path: coverage + pattern: coverage_* + merge-multiple: true + - name: Upload to Codecov + if: ${{ hashFiles('coverage/') != ''}} + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + directory: coverage + fail_ci_if_error: true # optional (default = false) + verbose: true