Quality and CI¶
Every quality gate runs through tox, and CI runs the same
envs. So you can reproduce anything CI checks on your own machine with a single
tox -e command.
The test matrix¶
The test suite runs across every supported Python and pytest combination:
$ tox
That covers Python 3.11 through 3.14, each against pytest 8 and pytest 9, plus the quality envs listed below. To run one combination, name it:
$ tox -e py313-pytest8
Each env installs the package into an isolated build and runs the suite in
tests/.
The quality envs¶
These are the same envs CI’s quality job runs:
$ tox -e style,docstyle,style-js,coverage,audit
Env |
What it runs |
|---|---|
|
|
|
|
|
|
|
the suite under |
|
|
The coverage env measures the spawned pytest subprocesses too, not just the
in-process code, then combines the data files before reporting. That’s why the
floor covers the runner and the inner plugin as well.
The frontend build¶
The dashboard bundle is built by its own env, which installs the Node
dependencies and runs the Vite build into pytest_deck/static/:
$ tox -e frontend
CI builds this bundle first, because the Python tests serve the real assets, and
the packaged wheel ships whatever is in static/. If you’re only changing Python
code, you still need a built bundle present for the server tests to pass. See
Development for building it directly with npm.
The docs build¶
The documentation must build clean with warnings treated as errors, which is what ReadTheDocs enforces:
$ pip install -e ".[docs]"
$ sphinx-build -W --keep-going -b html docs docs/_build/html
The -W flag turns any warning into a failure, so a broken cross-reference or an
orphan page fails the build. A green build here matches what ReadTheDocs will do.
What CI enforces¶
On every push and pull request, CI:
builds the frontend bundle once and hands it to the rest of the jobs,
runs the full Python matrix (3.11 to 3.14, pytest 8 and 9), and
runs the quality job:
style,docstyle,style-js,coverage, andaudit.
A change is green when every one of those passes. Since they’re all tox envs, you can run the exact same gates locally before you open a pull request.
Dependency currency is watched by Dependabot (.github/dependabot.yml): weekly
update PRs for the frontend packages, the Python dependencies, and the pinned
GitHub Actions.
Next steps¶
Development: set up your environment and build the frontend.