Release process for rustyfarian-network.
Covers versioning, pre-flight checks, publish targets, and post-release steps.
- Scheme: SemVer (pre-1.0 — minor bumps signal breaking changes)
- Lockstep: all 13 workspace crates move together at the same version
- Snapshot convention: none (we tag the release commit, no
-SNAPSHOTbetween releases) - Who decides version: maintainer, based on
CHANGELOG.md[Unreleased]content
- Release branch:
prepare-release→ merged tomainafter publish - Tag format:
vX.Y.Z(annotated) - Tagging: manual on the release commit on
main
Before any release:
- Working tree clean on
prepare-release(untrackedreview-queue/is OK) -
just fmtclean -
just verifypasses (fmt-check + cargo deny + check + clippy) -
just testpasses (all pure-crate host tests) - At least one hardware example builds via
just build-example <name>for each tier touched (sanity check; not exhaustive) -
cargo auditshows no new advisories beyond those allow-listed indeny.toml -
CHANGELOG.md[Unreleased]has entries for the target version -
[workspace.package].versionin rootCargo.tomlmatches the target version; no member crate overrides it (each declaresversion.workspace = true)
Single source of truth: [workspace.package].version in the root Cargo.toml.
Each member crate inherits via version.workspace = true, so a release bump is one edit.
Post-release bump target: none (next-version bump happens when the next [Unreleased] block is finalised)
Target registry: none — tag-only on GitHub Tag command (on the release commit):
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin vX.Y.ZBranch push: git push origin main (or open a PR from prepare-release → main and merge)
Credentials: standard GitHub push credentials (no registry tokens needed)
Signing: not required (commit / tag GPG signing optional, follow whatever git is already configured to do)
Location: CHANGELOG.md
Format: Keep a Changelog 1.1.0
Process: rename ## [Unreleased] to ## [X.Y.Z] - YYYY-MM-DD; create a fresh empty ## [Unreleased] block above it for next cycle
- Create release page at:
https://github.com/datenkollektiv/rustyfarian-network/releases/new - Use tag
vX.Y.Z - Title:
vX.Y.Z - Body: paste the
## [X.Y.Z]section fromCHANGELOG.md - No artifact attachments (workspace is library crates; users consume via git dep)
- Merge
prepare-release→main(fast-forward) - Update
docs/ROADMAP.mdif any items shipped in this release are still listed as in-progress - Verify the GitHub release page is publicly visible and the tag resolves
If a release must be retracted after tagging:
- Delete remote tag:
git push --delete origin vX.Y.Z - Delete local tag:
git tag -d vX.Y.Z - Delete the GitHub release page (via web UI or
gh release delete vX.Y.Z) - Revert the release commit on
main:git revert <release-commit-sha>and push
Note: because nothing is published to a registry, rollback is fully reversible.
Each release produces files in release/:
YYYY-MM-DD-<version>-preflight.md— pre-flight assessmentYYYY-MM-DD-<version>-plan.md— ordered execution planYYYY-MM-DD-<version>-record.md— what was published and what remains