This checklist is for preparing and validating a crates.io release.
- Confirm
Cargo.tomlhas the intended version. - Confirm
CHANGELOG.mdincludes a release entry. - Confirm
docs/releases/vX.Y.Z.mdis suitable to paste into a GitHub Release. - Confirm README installation snippets reference the intended crate version.
- Confirm all public APIs added in the release are documented in README and rustdoc.
Run the CI-equivalent checks:
RUSTFLAGS="-Dwarnings" cargo check --all-targets
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets
cargo test --all-targets --all-features
cargo doc --no-deps
cargo package --allow-dirtyRun the publish dry run before publishing:
cargo publish --dry-run --allow-dirtyUse --allow-dirty only while validating an unreleased branch. For the actual
publish, use a clean tagged checkout and omit --allow-dirty.
Nightly fuzz checks are intentionally not part of the default CI gate. See
docs/fuzzing.md for the cargo-fuzz smoke run.
Inspect the generated package:
cargo package --list --allow-dirtyThe package should include the source, tests, README, license, changelog, and
release docs. It should not include local build outputs, .omx state, or
target artifacts.
-
Ensure the release PR has merged.
-
Pull the latest
main. -
Verify the worktree is clean.
-
Run the validation commands again without
--allow-dirtywhere possible. -
Publish:
cargo publish
-
Create and push the release tag:
git tag vX.Y.Z git push origin vX.Y.Z
-
Create the GitHub Release using
docs/releases/vX.Y.Z.md. -
Confirm crates.io and docs.rs show the new version.