Why yet another release tool
New Rust apps and rewrites are mushrooming every day. Choosing which tools to add to your developer toolbox is becoming harder and harder.
I feel obliged to explain why I created this project and how it compares with similar tools.
API breaking change detection
Release-plz is the only release tool that integrates cargo-semver-checks to detect API breaking changes and avoid breaking users builds:
- if the change was not intentional, maintainers can revert the breaking change before releasing the new version.
- if the change was intentional, maintainers can safely merge the release PR because it bumps the major version.
Differences with release-please
Like release-plz, release-please is an open-source project that manages releases via pull requests. However, there are some differences.
No configuration needed 👍
Release-please requires two configuration files in cargo workspaces: .release-please-manifest.json
and release-please-config.json
.
Most of the fields you have to write in these two files are already in the
Cargo.toml
files.
Release-plz obtains all the information it needs from the Cargo.toml
files
and the cargo registry,
so no configuration files are required.
Versions retrieved from the cargo registry 👍
Release-please considers a package "published" only when the relative git tag exists. Release-please doesn't interact at all with cargo registries. However, some Rust projects don't create git tags. Instead, they just publish the package to crates.io.
Release-plz looks at the cargo registry if the relative git tag doesn't exist, making it compatible with both workflows and with the majority of the Rust projects.
Conventional commits aren't required 👍
Release-please requires conventional commits to work.
For example, it only generates a release PR if your commit messages
start with fix:
, feat:
, or deps:
(there are some exceptions based on the language).
Release-plz, instead, generates a release PR for every commit affecting one of your packages,
regardless of the commit message.
Release-plz also generates a release PR if you change the dependencies of your packages
(either in the Cargo.toml
or in the Cargo.lock
files).
No multiple programming languages support 👎
Release-please supports multiple programming languages, while release-plz only supports Rust projects.
Differences with other Rust release tools
These are other release tools in the Rust ecosystem, but they primarily focus on the CLI use case, while release-plz focuses mainly on CI.
- cargo-release:
- Bumps the version and publishes Rust packages from the CLI.
- It supports automatic releases with
cargo release --unpublished
- It doesn't have first-class support for changelogs. See this issue.
- It supports hooks (release-plz doesn't).
- cargo-workspaces:
- It's a set of commands to manage cargo workspaces and their crates.
- The
publish
command releases the packages from the CLI similarly tocargo-release
.
- cargo-smart-release:
- Updates and publishes packages from the CLI.
- It's very similar to release-plz, but it is not meant to be run in CI (see this comment from the author).