Releases depend on:
-
cargo-release, which you can install by running
cargo install cargo-release
. Steps were tested with cargo-release 0.21.4. -
Some way to sign tags. Rain uses and recommends gitsign, which uses your GitHub or other online identity to sign tags. Make sure to configure gitsign with:
git config --local gpg.x509.program gitsign # Use gitsign for signing git config --local gpg.format x509 # gitsign expects x509 args
(or git config --global
to configure this for all repositories)
For a smoother experience, set gitsign.connectorID
to the OAuth path you're using.
The nextest workspace consists of a set of crates, each independently versioned. Releases are managed in a somewhat distributed way, with most of the process being managed by GitHub Actions runners.
- First, check out the local branch
main
and fetch/rebase toorigin/main
. - Determine which crates need to be released and their version numbers. Most of the time this will just be nextest-runner and cargo-nextest, though if there are changes to other crates they'll need to be released as well.
- For
nextest-runner
, always update the minor version number (0.27.0 to 0.28.0). - For
cargo-nextest
, always update the patch version number (0.9.38 to 0.9.39). - For other crates, look at the changes that were made. Keep in mind that
nextest-metadata
has a minimum supported cargo-nextest version. If metadata generated by older versions of cargo-nextest can't be read by nextest-metadata, it's considered a breaking change.
- For
- Prepare changelogs. Every crate MUST have a changelog in the Keep a Changelog format, updated to the latest version. If unreleased changelogs have been maintained, this can be as simple as adding a version header.
(Don't bump the version in Cargo.toml
-- this will be done in the step below.)
We're going to now use cargo-release
to create and push tags for each changed crate.
For each changed crate, in topological order (internal dependencies like nextest-filtering
first, cargo-nextest
last), run:
cargo release -p <crate-name> <version>
For example, cargo release -p nextest-runner 0.28.0
. This will perform a dry run.
If everything looks good, run the same command with --execute
. This will do a few things:
- Create a commit with a version bump, e.g.
[nextest-runner] version 0.28.0
. - Create a signed tag pointing to this commit, e.g.
nextest-runner-0.28.0
. - Push this commit and this tag to the remote (default
origin
).
To customize the remote that https://github.com/nextest-rs/nextest is at, use --push-remote
.
The GitHub Actions release.yml
workflow will then pick up the tag, and will create a GitHub release corresponding to the tag. Additionally, for cargo-nextest
, the workflow will also kick off binary builds.
Once that is completed (and for cargo-nextest, binary builds have finished and release metadata has been pushed), the crates will automatically be published to crates.io.
Note: there are some issues with races and spurious network failures that happen sometimes. If it looks like an intermittent failure, feel free to retry the GitHub Actions job. The steps are meant to be idempotent.