The maintainer/owner runbook for cutting a duodiff release. Contributors don't need any of this — see CONTRIBUTING.md.
A release is a vX.Y.Z git tag that matches Cargo.toml's version. Pushing the tag triggers the full pipeline:
.github/workflows/release.yml— builds and attaches the platform binaries to the GitHub Release..github/workflows/publish.yml— publishes the crate to crates.io.
The crate is published once the CARGO_REGISTRY_TOKEN secret is configured, so the publish step runs automatically on tag.
Packaging stays lean via Cargo.toml exclude (the CI config, install scripts, and docs are kept out of the published tarball); cargo publish --dry-run validates the tarball.
- Bump
versioninCargo.toml(and refreshCargo.lockby running a build); confirmcargo publish --dry-runis clean. - In
CHANGELOG.md, retitle the## [Unreleased]entries under a dated## [X.Y.Z] — YYYY-MM-DDheading, and add back an empty## [Unreleased]heading above it as a placeholder for the next cycle. - Merge to
main(CI gate green). - Tag and push:
git tag vX.Y.Z && git push origin vX.Y.Z. - Verify: the GitHub release has the binaries, crates.io shows the new version (and docs.rs built).