This document outlines the release process for Interchain Security (ICS).
For details on ICS releases, see RELEASES.md.
For PRs that are changing production code, please add a changelog entry in .changelog
(for details, see contributing guidelines).
To manage and generate the changelog on ICS, we currently use unclog. Read the README.md in the unclog repo for instruction on how to install and use unclog.
Unreleased changes are collected on main
in .changelog/unreleased/
.
However, .changelog/
on main
contains also existing releases (e.g., v3.2.0
).
Thus, when creating a new release branch (e.g., release/v3.3.x
), the following steps are necessary:
- create a new release branch, e.g.,
release/v3.3.x
git checkout main git pull git checkout -b release/v3.3.x
- delete all the sub-folders in
.changelog/
exceptunreleased/
find ./.changelog -mindepth 1 -maxdepth 1 -type d -not -name unreleased | xargs rm -r
- replace the content of
.changelog/epilogue.md
with the following text## Previous Versions [CHANGELOG of previous versions](https://github.com/cosmos/interchain-security/blob/main/CHANGELOG.md)
- push the release branch upstream
git push
Before cutting a release candidate (e.g., v3.3.0-rc0
), the following steps are necessary:
- move to the release branch, e.g.,
release/v3.3.x
git checkout release/v3.3.x
- move all entries in ".changelog/unreleased" to the release version, e.g.,
v3.3.0
, i.e.,unclog release v3.3.0
unclog release
requires an editor. This can be set either by configuring an$EDITOR
environment variable or by manually specify an editor binary path via the--editor
flag.
- add the date as the summary of the release (
unclog release
requires adding a summary), e.g.,*December 5, 2023*
- update
CHANGELOG.md
, i.e.,unclog build > CHANGELOG.md
- open a PR (from this new created branch) against the release branch, e.g.,
release/v3.3.x
Now you can cut the release candidate, e.g., v3.3.0-rc0 (follow the Tagging Procedure).
Once the final release is cut, the new changelog section must be added to main:
- checkout a new branch from the
main
branch, i.e.,git checkout main git pull git checkout -b <username>/backport_changelog
- bring the new changelog section from the release branch into this branch, e.g.,
git checkout release/v3.3.x .changelog/v3.3.0
- remove duplicate entries that are both in
.changelog/unreleased/
and the new changelog section, e.g.,.changelog/v3.3.0
- update
CHANGELOG.md
, i.e.,unclog build > CHANGELOG.md
- open a PR (from this new created branch) against
main
Important: Always create tags from your local machine since all release tags should be signed and annotated.
The following steps are the default for tagging a specific branch commit using git
on your local machine. Usually, release branches are labeled release/v*
:
Ensure you have checked out the commit you wish to tag and then do:
git pull --tags
git tag -s v3.2.0 -m v3.2.0
git push origin v3.2.0
To re-create a tag:
# delete a tag locally
git tag -d v3.2.0
# push the deletion to the remote
git push --delete origin v3.2.0
# redo the tagging
git tag -s v3.2.0 -m v3.2.0
git push origin v3.2.0
For final releases, once the tag is created, use the GitHub interface to create a release. Note that this is not necessary for release candidates.