blob: 1520ceeea5d29793e5973e6c099bf0da4cf75a31 [file] [edit]
name: Tests
on:
push:
branches: [ master ]
tags: [ '[0-9]+.[0-9]+.[0-9]+*' ]
pull_request:
branches: [ master ]
permissions: {}
env:
CIBW_TEST_COMMAND: python -m unittest discover --start-directory {project}
CIBW_SKIP: 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
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@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
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@adba99c781d3746d38b3a09b1cf797965bcb7fe6 # v4.3.0
env:
CIBW_ARCHS_MACOS: x86_64 arm64
TOMLI_USE_MYPYC: '1'
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Install build dependencies
run: pip install build
- name: Build
run: python -m build
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
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
permissions:
# This permission is mandatory for Trusted Publishing
id-token: write
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: dist
pattern: artifact-*
merge-multiple: true
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2