Versioning
THORNode follows a custom variation of semantic version structure: MAJOR.MINOR.PATCH (e.g. 3.7.0).
- The MAJOR version currently is updated per genesis export soft-fork.
- The MINOR version is updated for each consensus breaking release.
- The PATCH version is updated for each release and generally does not break consensus - Bifrost-only patches, API fixes, etc. In some specific cases (on stagenetfor release candidates) the PATCH version may be used to indicate a consensus breaking change.
Release Preparation
- Create a milestone using the release version (e.g. Release-3.7.0).
- Tag issues and PRs using the milestone, so we can identify which PR is on which version.
- PRs require 3 approvals from the dev team - once approved, merge to developbranch.
Stagenet Release
- 
Create a new RC release at https://gitlab.com/thorchain/thornode/-/releases for the version (e.g. v3.7.0-rc1) with the last commit for the release indevelopas the tag target. Run./scripts/prlog.py Release-3.7.0to generate the output for the change log.
- 
Checkout the release commit locally, then create the stagenetbranch from it, and push it to the remote (force push may be necessary):git checkout v3.7.0-rc1 git branch -D stagenet git checkout -b stagenet git push -f origin stagenet
- 
The build-thornodejob in the pipeline for thestagenetbranch will build the release image. The upstreamnode-launchervalues forstagenetimages do not need to be kept up-to-date - they are for reference and state can be kept locally since there may be multiple privatestagenetdeployments.
- 
Ensure authors of any large changes or features have provided a test plan. 
- 
Send the upgrade proposal from one of the active validators ( make shellinnode-launcher):thornode tx thorchain propose-upgrade [version] [height] --node http://localhost:27147 --chain-id thorchain-stagenet-2 --keyring-backend file --from thorchain
- 
Approve the upgrade from all other nodes via the make upgrade-votetarget innode-launcher.
- 
Post in Discord #stagenetchannel once the upgrade has succeeded tagging@hereand requesting code authors to test their changes.
- 
Testing will vary depending on the contents of the release, but general process should include: - Assist authors of large features and changes in completion of their test plan.
- Ensure stagenetsuccessfully completes a churn.
- Operators of stagenetshould test any node or operator specific functionality changes.
- UIs should be sanity checked against any new API changes.
 
- 
If there are bugs requiring a re-cut of the release, create a new release candidate (e.g. v3.7.0-rc2) and repeat the process from step 1, but add an additional commit directly on thestagenetbranch before pushing that includes a patch release version bump (example). Since the embedded version cannot support the RC suffix, subsequent RCs onstagenetwill correspond to a patch version bump onstagenetonly (e.g.3.7.1forv3.7.0-rc2).
- 
Once stagenethas baked for the agreed period with no further issues, proceed with themainnetrelease process.
Mainnet Release
- 
Determine the upgrade height and time - this must be at least 1 week out to accommodate agreements with exchanges and other stakeholders. 
- 
Copy the contents of the final RC release (e.g. v3.7.0-rc1) to a new release (e.g.v3.7.0) at https://gitlab.com/thorchain/thornode/-/releases, also including the upgrade height and time in the following format:- **Proposed Block**: `21210000` - **Date**: 22-May-2025 @ ~1:00pm EDT - https://runescan.io/block/21jj210000 - **Note**: Block time is presently fluctuating - this time is an estimate, but may fluctuate by hours. **Changelog** ...
- 
Checkout the release commit locally, then create the mainnetbranch from it, and push it to the remote (force push may be necessary):git checkout v3.7.0-rc1 git branch -D mainnet git checkout -b mainnet git push -f origin mainnet
- 
The build-thornodejob in the pipeline for themainnetbranch will build the release image.
- 
Send the upgrade proposal from one of the active validators ( make shellinnode-launcher):thornode tx thorchain propose-upgrade [version] [height] --node http://localhost:27147 --chain-id thorchain-1 --keyring-backend file --from thorchain
- 
Announce the upgrade proposal to be voted on in the Discord #thornode-mainnetchannel with the format:### Mainnet 3.6.0 Upgrade Proposal - Validators Only **Changelog**: https://gitlab.com/thorchain/thornode/-/releases/v3.6.0 **Block**: `21210000` **Date**: 22-May-2025 @ ~1:00pm EDT - https://runescan.io/block/21210000 **Note**: Block time is presently fluctuating - this time is an estimate, but may fluctuate by hours. <short description here> Please approve via `make upgrade-vote`: Select: `mainnet` Enter THORNode name: <thornode namespace> Enter THORNode upgrade proposal name: `3.6.0` Select THORNode upgrade proposal vote: `yes` @everyone
- 
Relay the announcement to the Telegram channel and any relevant chats with exchanges to notify them of the upcoming fork. 
- 
PR in node-launcherto extend thethornode.versionswith the upgrade height and new version image.
- 
Send an announcement in Discord #thornode-mainnetchannel instructing nodes to apply so the upgrade is configured and the Cosmos Operator will make the switch at the upgrade height. The announcement can follow the format:## THORNODE ❗️MAINNET❗️UPDATE 3.7.0 https://gitlab.com/thorchain/thornode/-/releases/v3.7.0 NETWORK: MAINNET TYPE: Non-coordianted URGENCY: ASAP The upgrade proposal has passed. Please install to schedule the upgrade at the proposed height. Nodes will automatically update to the new image at the scheduled height, and the node version for active validators will be automatically set at that time. All non-active validators must run `make set-version` after the upgrade height to be eligible for the subsequent churn. ``` make pull make install ``` @everyone