Various CI features have been implemented to ease the release process, but some parts of it are still intended to be manual (e.g., each CHANGELOG for each individual crate should be written by hand prior to release). We subscribe to the philosophy outlined on the keepachangelog site. The short version is that (almost) every PR should include a manually written entry to one or more CHANGELOGs in the repository under the ## Unreleased header.
Before cutting a release, review every entry under ## Unreleased in each
CHANGELOG.md and verify that every item links to its originating pull request.
The following steps are handled automatically by the release-plz workflow. In the event it fails, they can be performed manually.
Manual release steps
-
Go through each publishable crate (i.e., each
wdl-*crate,wdl, andsprocket) and increment the version inCargo.toml(as well as match any internal dependency versions that need to be bumped). -
Update each CHANGELOG.md file with a new release header.
-
Create a new tag for each new crate version excluding
sprocket, with the format{CRATE_NAME}-v{VERSION}(whereVERSIONmatches the latest version in the rootCargo.toml)- For new
sprocketreleases, the tag name format isv{VERSION}
git tag {CRATE_NAME}-v{VERSION} git push --tags - For new
-
Publish each crate to crates.io
cargo publish --workspace
-
If updating
sprocket, create a new GitHub release with the titlev{VERSION}and mark it as the latest release
The body of the sprocket GitHub releases must be updated manually, regardless of the success of the release-plz workflow.
By default, the release will only include the changelog of the sprocket crate. Each crate's most recent CHANGELOG entries should be copy and pasted into the release notes.
These should be ordered with sprocket first, followed by the remaining crates topologically (starting with wdl-grammar).
Note that the individual CHANGELOG.md files hard-wrap lines at ~80 columns. The GitHub release body should not hard-wrap lines—each bullet point should be a single unwrapped line so that it renders cleanly on GitHub.
Format each section so that it looks like:
### `<crate name>`
<copy and pasted CHANGELOG entries>
After the release is complete, the following tasks should be performed. For each downstream repository, read its RELEASE.md before starting—the steps may have changed since the last release.
- Follow the release process in
stjude-rust-labs/sprocket.bio. - Follow the release process in
stjude-rust-labs/sprocket-action. - Follow the release process in
stjude-rust-labs/sprocket-vscodeif applicable. - Follow the release process in
stjude-rust-labs/sprocket-zedif applicable. - Follow the release process in
stjude-rust-labs/sprocket.nvimif applicable. - Release the latest version on the St. Jude HPC module system.
- Update the Docker pull command in
README.mdto use the latestsprocketrelease tag. - Update the official WDL documentation for the Sprocket entries if anything changed.
- Post a message to Slack channels with the updated version.