Our release process is as follows:
- In a new branch
release/vX.Y.Z
, update the changelog to reflect and summarize all changes in the release. This involves:- Running
unclog build -u
and copy pasting the output at the top of theCHANGELOG.md
file, making sure to update the header with the new version. - Running
unclog release --editor <editor> --version vX.Y.Z
to create a summary of all of the changes in this release.- Your text editor will open. Write the release summary, and close the editor. Make sure to include a comment on whether or not the release contains consensus-breaking changes.
- Add this same summary to
CHANGELOG.md
as well.
- Committing the updated
CHANGELOG.md
file and.changelog
directory to the repo.
- Running
- Push this to a branch
release/vX.Y.Z
according to the version number of the anticipated release (e.g.release/v0.18.0
) and open a draft PR. - If there were changes in the
ibc-derive
crate, we need to publish a new version of that crate.- bump the version in
crates/ibc-derive/Cargo.toml
- Publish
ibc-derive
withcargo publish -p ibc-derive
- bump the version in
- Bump the versions of all crates to the new version in their Cargo.toml and in
the root
Cargo.toml
as well, and push these changes to the release PR.- If you released a new version of
ibc-derive
in step 3, make sure to update that dependency.
- If you released a new version of
- Run
cargo doc -p ibc --all-features --open
locally to double-check that all the documentation compiles and seems up-to-date and coherent. Fix any potential issues here and push them to the release PR. - Run
cargo publish -p ibc --dry-run
to double-check that publishing will work. Fix any potential issues here and push them to the release PR. - Mark the PR as Ready for Review and incorporate feedback on the release.
- Once approved, merge the PR, and pull the
main
branch. - Create a signed tag
git tag -s -a vX.Y.Z
. In the tag message, write the version and the link to the corresponding section of the changelog. Then push the tag to GitHub withgit push --tags
.- The release workflow will run the
release.sh
script in a CI worker.
- The release workflow will run the
- If some crates have not been released, check the cause of the failure and
act accordingly:
- In case of intermittent problems with the registry, rerun the script locally to publish any missing crates from this release. This step requires the appropriate privileges to push crates to crates.io.
- In case the problems arise from the source files, fix them, bump a new
patch version (e.g.
v0.48.1
) and repeat the process with its corresponding new tag.
- Once the tag is pushed, create a GitHub release and append
[📖CHANGELOG](https://github.com/cosmos/ibc-rs/blob/main/CHANGELOG.md#vXYZ)
to the release description.
All done! 🎉