| name: Tests |
| on: |
| pull_request: |
| paths-ignore: ['docs/**', 'README.md'] |
| push: |
| branches: [main, stable] |
| paths-ignore: ['docs/**', 'README.md'] |
| jobs: |
| tests: |
| name: ${{ matrix.name || matrix.python }} |
| runs-on: ${{ matrix.os || 'ubuntu-latest' }} |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - {python: '3.14'} |
| - {python: '3.14t'} |
| - {name: Windows, python: '3.14', os: windows-latest} |
| - {name: Mac, python: '3.14', os: macos-latest} |
| - {python: '3.13'} |
| - {python: '3.13t'} |
| - {python: '3.12'} |
| - {python: '3.11'} |
| - {python: '3.10'} |
| - {name: PyPy, python: 'pypy-3.11', tox: pypy311} |
| steps: |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| - uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 # v6.7.0 |
| with: |
| enable-cache: true |
| prune-cache: false |
| - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 |
| with: |
| python-version: ${{ matrix.python }} |
| allow-prereleases: true |
| - run: uv run --locked tox run -e ${{ matrix.tox || format('py{0}', matrix.python) }} |
| - if: endsWith(matrix.python, 't') |
| run: uv run --locked tox run -e parallel |
| typing: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| - uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 # v6.7.0 |
| with: |
| enable-cache: true |
| prune-cache: false |
| - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 |
| with: |
| python-version-file: pyproject.toml |
| - name: cache mypy |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 |
| with: |
| path: ./.mypy_cache |
| key: mypy|${{ hashFiles('pyproject.toml') }} |
| - run: uv run --locked tox run -e typing |