CI/CD
Continuous integration runs on every push and pull request via GitHub Actions. There is no continuous deployment — production deploys are triggered manually with make deploy.
Pipeline
The CI workflow (.github/workflows/ci.yaml) runs a single test job across a matrix of:
- OS: Ubuntu, macOS
- Python: 3.11, 3.12, 3.13
Each matrix entry runs the following steps:
- Check out the repository.
- Set up the target Python version.
- Install
uv. - Run
make build, which executes in order:uv sync --all-groups— install all dependenciesmake reformat— run Ruff formattermake lint— run Ruff linter with auto-fixmake type_check— run ty type checkermake docs— build the MkDocs sitemake test— run pytest with coverage
- Generate a coverage report.
- Upload coverage to Codecov.
The matrix uses fail-fast: false, so all combinations run to completion even if one fails.
Coverage
Coverage is collected by pytest-cov with branch coverage enabled. Reports are uploaded to Codecov with the unittests flag, tagged by OS and Python version.
The current fail_under threshold is 0 (no minimum enforced).
Pre-commit Hooks
Locally, pre-commit runs Ruff check and format on every commit. CI runs the same checks as part of make build, so any formatting or lint issues caught locally will also fail in CI.