From 86a0ee0d7c245592307b9bd7659bab05526cc136 Mon Sep 17 00:00:00 2001 From: Rano | Ranadeep Date: Tue, 14 May 2024 15:09:46 +0200 Subject: [PATCH] Release v0.53.0 (#1224) * exclude ibc-primitives * format release md * add context for rate-limit * fix cargo release dry run check * update on release md --- Makefile | 10 +++++++-- RELEASES.md | 65 ++++++++++++++++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 7947b9501..fd1f04070 100644 --- a/Makefile +++ b/Makefile @@ -37,10 +37,16 @@ test: ## Run tests with all features and without default features. cargo test --all-targets --no-default-features check-release: ## Check that the release build compiles. - cargo release --workspace --no-push --no-tag --no-publish --exclude ibc-derive --exclude ibc-client-tendermint-cw + cargo release --workspace --no-push --no-tag \ + --exclude ibc-derive \ + --exclude ibc-primitives \ + --exclude ibc-client-tendermint-cw release: ## Perform an actual release and publishes to crates.io. - cargo release --workspace --no-push --no-tag --exclude ibc-derive --exclude ibc-client-tendermint-cw --allow-branch HEAD --execute + cargo release --workspace --no-push --no-tag --allow-branch HEAD --execute \ + --exclude ibc-derive \ + --exclude ibc-primitives \ + --exclude ibc-client-tendermint-cw build-tendermint-cw: ## Build the WASM file for the ICS-07 Tendermint light client. @echo "Building the WASM file for the ICS-07 Tendermint light client" diff --git a/RELEASES.md b/RELEASES.md index 17353e95b..9e260ab10 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -24,7 +24,7 @@ Our release process is as follows: 4. 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. + update that dependency. - Verify that there is no dev-dependency among the workspace crates. This is important, as `cargo-release` ignores dev-dependency edges. You may use `cargo-depgraph`: @@ -38,41 +38,60 @@ Our release process is as follows: because of release order complicacy (except maybe inside `ibc-testkit`, as it is the top crate that depends on `ibc` crate and no other crate depends on it). - - In order to resolve such a situation, the dev dependencies other than `ibc-testkit` - can be manually released to crates.io first so that the subsequent crates that - depend on them can then be released via the release process. For instructions - on how to release a crate on crates.io, refer [here](https://doc.rust-lang.org/cargo/reference/publishing.html). -5. Run `cargo doc -p ibc --all-features --open` locally to double-check that all + - In order to resolve such a situation, the dev dependencies other than + `ibc-testkit` can be manually released to crates.io first so that the + subsequent crates that depend on them can then be released via the release + process. For instructions on how to release a crate on crates.io, refer + [here](https://doc.rust-lang.org/cargo/reference/publishing.html). +5. Beware of [crates-io rate limit][cargo-release-rate-limit]. It is 5 for + publishing new crates and 30 for publishing existing crates. But the number + of our crates has reached 31. So we publish a leaf crate, `ibc-primitives` + manually and release the rest of the 30 crates via CI. + - Release `ibc-primitives` by running: + ```sh + cargo release -p ibc-primitives --no-push --no-tag --allow-branch main --execute + ``` + - Validate the number of crates that need to be released via CI, it can not + be more than 30. + - There should be a 10 minutes delay between the release of `ibc-primitives` + and the release of the rest of the crates on CI. + - If new crates are added, we need to recompute the set of crates that we + want to release via CI. The rest must be released manually. +6. 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. -6. Mark the PR as **Ready for Review** and incorporate feedback on the release. +7. Mark the PR as **Ready for Review** and incorporate feedback on the release. Once approved, merge the PR. -7. Checkout the `main` and pull it with `git checkout main && git pull origin main`. -8. Create a signed tag `git tag -s -a vX.Y.Z`. In the tag message, write the +8. Checkout the `main` and pull it with + `git checkout main && git pull origin main`. +9. 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 with `git push origin vX.Y.Z`. - The [release workflow][release.yaml] will run the `cargo release --execute` - command in a CI worker. -9. If some crates have not been released, check the cause of the failure and - act accordingly: + command in a CI worker. +10. If some crates have not been released, check the cause of the failure and + act accordingly: 1. In case of intermittent problems with the registry, try `cargo release` - locally to publish any missing crates from this release. This step - requires the appropriate privileges to push crates to [crates.io]. + locally to publish any missing crates from this release. This step + requires the appropriate privileges to push crates to [crates.io]. 2. If there is any new crate published locally, add - [ibcbot](https://crates.io/users/ibcbot) to its owners list. - 3. In case 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. -10. Once the tag is pushed, wait for the CI bot to create a GitHub release, - then update the release description and append: - `[📖CHANGELOG](https://github.com/cosmos/ibc-rs/blob/main/CHANGELOG.md#vXYZ)` + [ibcbot](https://crates.io/users/ibcbot) to its owners list. + 3. In case 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. +11. Once the tag is pushed, wait for the CI bot to create a GitHub release, then + update the release description and append: + `[📖CHANGELOG](https://github.com/cosmos/ibc-rs/blob/main/CHANGELOG.md#vXYZ)` ### Communications (non-technical) release pipeline -- Notify the communications team about the pending release and prepare an announcement. -- Coordinate with other organizations that are active in IBC development (e.g., Interchain) and keep them in the loop. +- Notify the communications team about the pending release and prepare an + announcement. +- Coordinate with other organizations that are active in IBC development (e.g., + Interchain) and keep them in the loop. All done! 🎉 [crates.io]: https://crates.io [release.yaml]: https://github.com/cosmos/ibc-rs/blob/main/.github/workflows/release.yaml +[cargo-release-rate-limit]: https://github.com/crate-ci/cargo-release/blob/4b09269/src/steps/mod.rs#L214-L268