Show missing lines in CI coverage report #973
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Tests | |
| on: | |
| push: | |
| branches: [ master ] | |
| tags: [ '[0-9]+.[0-9]+.[0-9]+*' ] | |
| pull_request: | |
| branches: [ master ] | |
| env: | |
| CIBW_TEST_COMMAND: python -m unittest discover --start-directory {project} | |
| CIBW_SKIP: cp38-* cp39-* cp310-* | |
| CIBW_ENVIRONMENT_PASS_LINUX: TOMLI_USE_MYPYC | |
| FORCE_COLOR: 1 | |
| PIP_DISABLE_PIP_VERSION_CHECK: 1 | |
| jobs: | |
| linters: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.11' | |
| - name: Install pre-commit | |
| run: | | |
| pip install pre-commit | |
| - name: run linters | |
| # pre-commit also runs in pre-commit.ci, but let's have it here too | |
| # to block `pypi-publish` job from triggering if pre-commit fails | |
| run: | | |
| pre-commit run --all-files | |
| tests: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| python-version: ['pypy3.11', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15-dev'] | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| continue-on-error: ${{ matrix.python-version == '3.15-dev' }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install package | |
| run: | | |
| pip install . | |
| - name: Test with unittest | |
| run: | | |
| python -m unittest | |
| coverage: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Install package and coverage deps | |
| run: | | |
| pip install . coverage | |
| - name: Measure coverage | |
| run: | | |
| # Coverage should be 100% without external tests | |
| rm -rf tests/data/valid/_external/ | |
| rm -rf tests/data/invalid/_external/ | |
| coverage run -m unittest | |
| coverage report --fail-under=100 --show-missing | |
| - name: Report coverage | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| binary-wheels: | |
| name: Binary wheels for ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-11-arm') && 'Windows (arm64)' || startsWith(matrix.os, 'windows-') && 'Windows' || endsWith(matrix.os, '-arm') && 'Linux (arm64)' || 'Linux' }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-latest] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Switch build backend to setuptools | |
| run: | | |
| pip install -r scripts/requirements.txt | |
| python scripts/use_setuptools.py | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@v3.3.1 | |
| env: | |
| CIBW_ARCHS_MACOS: x86_64 arm64 | |
| TOMLI_USE_MYPYC: '1' | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: artifact-binary-${{ matrix.os }} | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| pure-python-wheel-and-sdist: | |
| name: Build a pure Python wheel and source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install build dependencies | |
| run: pip install build | |
| - name: Build | |
| run: python -m build | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: artifact-pure-python | |
| path: dist/* | |
| if-no-files-found: error | |
| allgood: | |
| runs-on: ubuntu-latest | |
| needs: | |
| - tests | |
| - coverage | |
| - linters | |
| - binary-wheels | |
| - pure-python-wheel-and-sdist | |
| steps: | |
| - run: echo "Great success!" | |
| pypi-publish: | |
| # Only publish if all other jobs succeed | |
| needs: [ allgood ] | |
| if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| path: dist | |
| pattern: artifact-* | |
| merge-multiple: true | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Install twine | |
| run: | | |
| pip install twine | |
| - name: Check and publish | |
| run: | | |
| twine check --strict dist/* | |
| twine upload dist/* | |
| env: | |
| TWINE_USERNAME: __token__ | |
| TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} |