Release Runbook
Branch policy
- Feature work lands on feature branches, merged into
developafter CI is green. developmerges tomainonly when release-ready —mainshould always be releasable.- Release tags are cut from a green
mainonly, never fromdevelopor a feature branch.
Quality gate (required before every PR)
cargo fmt --all --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace
./target/release/broski --workspace . run ci
cd website && npm ci && npm run lint:all
The last two lines dogfood Broski on itself and validate the docs portal (markdown lint + a full Docusaurus production build) — both are required, not optional, before a release.
Cutting a release
- Ensure
mainis green: full quality gate above, plus CI on GitHub Actions. - Tag the release (
vX.Y.Z) frommain. - The tag push triggers
.github/workflows/release.yml, which builds and publishes release artifacts. - Verify the release workflow run completed and artifacts are attached.
- Validate the install script end to end and confirm
broski --versionreports the new tag. - Publish release notes (this docs portal's
releases/section) and update any version references —docs/index.md's "Current Versioning" line, the relevantreleases/vX.Y.mdpage, and the sidebar entry inwebsite/sidebars.tsif a new minor line was cut. - If a rollback is needed: revert the tag's release artifacts and re-point the install script's
stablechannel at the last known-good tag; do not force-push over a published tag.
Isolation guidance for release validation
- Generic/CI tests should use host-agnostic isolation (
best_effortoroff) unless strict isolation is the feature under test. - Linux strict isolation (
bwrap) is validated in dedicated tests/jobs — don't assume it runs on every contributor's machine or in every CI job.