cargo smart-release
Fearlessly release workspace crates without dealing with dependencies or versions.
Via cargo
, which can be obtained using rustup
cargo install cargo-smart-release
When developing various crates in a workspace I tend to edit code, and depending on the kind of edit, either increase the patch level, minor version or major version
right after, depending on the basic rules of semver
. Use cargo smart-release --bump minor --skip-tag --skip-publish --execute
for this which has the benefit of
it automatically adjusting other workspace dependencies when needed.
When ready for relasing a particular crate or set of crates of interest, run cargo smart-release [<crate-name> ...]
to simulate a release. For particularly thorough
but error-prone simulations (as in false positives) one could run cargo smart-release --dry-run-cargo-publish
. After evaluating the release procedure and following
instructions, one should end up with a fully automatic release of multiple crates. There are various other options that shouldn't be needed in the common case, use
cargo smart-release --help
to see them.
--execute
flaggitoxide
technology to the fullestcargo release
cargo-release
is the reason this tool exists, as it got me addicted to an all automatic release workflow that knows git. This works perfectly
for simple workspaces or single-crate workspaces, as of 2021-08-12, so use it: cargo install cargo-release
.
Here is what cargo smart-release
does differently: "It tries really hard to do what I want most of the time when publishing workspace gitoxide
crates".
gitoxide
to have a reason to make it much more convenient and more feasible for application authors (aka dog-fooding)crate = { version = "1" }
instead of `crate = "1".^
, like =
gitoxide
, there are no regression tests at allThanks to [cargo release] for showing the way, but also motivating me to finally take full control of releases.