Skip to content

Test

Test #504

Workflow file for this run

name: Test
on:
push:
branches: [main]
paths:
- src/**
- tests/**
- pyproject.toml
- .github/workflows/test.yaml
- .github/workflows/constraints.txt
pull_request:
branches: [main]
paths:
- src/**
- tests/**
- pyproject.toml
- .github/workflows/test.yaml
- .github/workflows/constraints.txt
workflow_dispatch: {}
schedule:
- cron: "40 12 * * 1-5"
concurrency:
cancel-in-progress: true
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
env:
FORCE_COLOR: "1"
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
cache: pip
python-version: "3.12"
- name: Install dependencies
env:
PIP_CONSTRAINT: ${{ github.workspace }}/.github/workflows/constraints.txt
run: |
pipx install hatch
- name: Run lint
env:
HATCH_ENV: lint
run: |
hatch run style
typing:
name: Typing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
cache: pip
python-version: "3.12"
- name: Install dependencies
env:
PIP_CONSTRAINT: ${{ github.workspace }}/.github/workflows/constraints.txt
run: |
pipx install hatch
- name: Run typing
env:
HATCH_ENV: lint
run: |
hatch run typing
test:
name: Pytest (Python ${{ matrix.python-version }}, ${{ matrix.os }}
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
env:
HATCH_ENV: all
HATCH_VERBOSE: "0"
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
experimental: [false]
nightly: [false]
include:
- python-version: "3.14"
os: "ubuntu-latest"
experimental: true
nightly: true
- python-version: "pypy3.10"
os: "ubuntu-latest"
experimental: false
nightly: false
- python-version: "3.12"
os: "windows-latest"
experimental: false
nightly: false
- python-version: "3.12"
os: "macos-latest"
experimental: false
nightly: false
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
if: ${{ !matrix.nightly }}
with:
cache: pip
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- uses: deadsnakes/action@v3.1.0
if: ${{ matrix.nightly }}
with:
python-version: ${{ matrix.python-version }}-dev
- name: Install dependencies
env:
PIP_CONSTRAINT: ${{ github.workspace }}/.github/workflows/constraints.txt
run: |
pipx install hatch
- name: Run tests
run: |
hatch run +py=${{ matrix.python-version }} cov
- uses: actions/upload-artifact@v4
with:
include-hidden-files: true
name: coverage-data-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.nightly && 'nightly' || 'stable' }}
path: ".coverage.*"
- name: Run doctests
run: hatch run +py=${{ matrix.python-version }} doctest
coverage:
name: Coverage
runs-on: ubuntu-latest
needs: test
env:
PYTHON: "3.12"
HATCH_ENV: coverage
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON }}
- name: Install dependencies
env:
PIP_CONSTRAINT: ${{ github.workspace }}/.github/workflows/constraints.txt
run: |
pipx install hatch
- uses: actions/download-artifact@v4
with:
pattern: coverage-data-*
merge-multiple: true
- name: Combine coverage data
run: |
hatch run report
- name: Create coverage XML report
run: |
hatch run xml
- uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}