Releasing¶
CI/CD Workflows¶
Three GitHub Actions workflows are in place:
ci.yml — Continuous Integration¶
Triggers: All pushes and pull requests
| Job | Description |
|---|---|
| Lint | cargo fmt --check, cargo clippy |
| Build & Test | Build package, run unit tests |
| Docs | Verify documentation builds |
docs.yml — Documentation Deployment¶
Triggers: Push to main, version tags, manual dispatch
Builds versioned documentation with MkDocs + mike and deploys to gh-pages branch.
| Trigger | Version on Docs Site | Alias |
|---|---|---|
Push to main/poc |
dev |
— |
Tag v1.0.0 |
1.0.0 |
latest |
| Manual with input | (specified) | latest |
release.yml — Release Builds¶
Triggers: GitHub Release published
Builds wheels for all platforms (Linux, macOS, Windows) and supported Python versions, then uploads to the GitHub Release.
Branch & Tags¶
- Development in feature branches, merged to
main - Releases created by tagging commits with
vX.Y.Z - Tags trigger automated builds and deployments
Version Numbers¶
Versions are maintained in two files:
| File | Format | Example |
|---|---|---|
pyproject.toml |
PEP 440 | 2.0.0, 2.0.0.dev0 |
Cargo.toml |
SemVer | 2.0.0, 2.0.0-dev |
Progression:
Changelog¶
Keep a Changelog format. Add to [Unreleased] during development with a target release version:
Then rename to [X.Y.Z] - YYYY-MM-DD at release.
Release Checklist¶
1. Pre-Release Verification¶
2. Update Version & Changelog¶
Edit pyproject.toml and Cargo.toml:
Update CHANGELOG.md:
- Rename
[Unreleased]→[X.Y.Z] - YYYY-MM-DD - Add new empty
[Unreleased]section
3. Commit, Tag, and Push to GitHub¶
4. Create GitHub Release¶
This triggers:
release.yml→ Builds and attaches wheelsdocs.yml→ Deploys documentation
5. Upload built wheels to PyPi¶
This step is currently manual but should be automated at some point.
5. Post-Release¶
Bump to next dev version: