Releasing¶
Releases are driven by the release.yml
workflow. The project is pre-1.0; see SECURITY.md for the support policy.
What a release publishes¶
- The Rust crate
patronus-arkto crates.io. - The Python wheels and source distribution to PyPI.
The pipeline¶
- Validate — on manual dispatch, CI runs:
- Build artifacts —
PyO3/maturin-actionbuildsabi3-py311wheels for Linux x86_64, macOS ARM64, and Windows x86_64, plus a source distribution. Every wheel is installed and smoke-tested; the source distribution must rebuild into a wheel. - Publish — choose one workflow channel:
buildonly stores the artifacts;testpypiuploads the Python artifacts to TestPyPI;productionpublishes the Rust crate first and then uploads the Python artifacts to PyPI.
Cutting a release¶
- Update
CHANGELOG.md— move items from Unreleased into a new versioned section with the date. - Bump and cross-check the version in
rust/Cargo.toml,python/Cargo.toml, andpython/pyproject.toml. - Ensure generated docs are current:
- Commit the release prep and tag it:
- Manually run the Release workflow on that tag. Start with
testpypi; after installation succeeds, rerun the same tag withproduction. - After publishing, verify install commands from crates.io and PyPI, then add live package
badges to
README.md. - Enable a GitHub Security Advisory draft channel for coordinated disclosure (per
SECURITY.md).
TestPyPI and PyPI publishing use trusted publishing. Configure the GitHub environments
testpypi and release as trusted publishers for .github/workflows/release.yml. crates.io
publishing uses the CARGO_REGISTRY_TOKEN secret in the release environment.
For a local macOS check before dispatching the workflow:
maturin build --manifest-path python/Cargo.toml --release --out dist
.venv/bin/python -m pip install --force-reinstall dist/*.whl
.venv/bin/python -c "import patronus_ark"
Versioning¶
Pre-1.0, treat any change to detection thresholds, the asset manifest, or public result shapes as potentially breaking for downstream users and document it prominently in the changelog, even if the semver bump is small.
Documentation site¶
The docs site is deployed separately by the docs.yml
workflow on every push to main that touches docs/ or mkdocs.yml — it is not tied to the
package release.