From 0cac467f7673929c909aaf99e207d90280ab61a5 Mon Sep 17 00:00:00 2001 From: William Shao Date: Thu, 13 Feb 2025 15:18:50 -0500 Subject: [PATCH] chore!: add v22.2.0 upgrade handler (#3538) * chore: add v22.2.0 upgrade handler * fix upgrade script to handle new format --- CHANGELOG.md | 10 ++++- app/app.go | 4 +- app/upgrades/v22_2_0/constants.go | 15 +++++++ app/upgrades/v22_2_0/upgrades.go | 31 +++++++++++++++ .../scripts/upgrade_test_scripts/run_gaia.sh | 39 +++++++++++++------ .../run_upgrade_commands.sh | 39 +++++++++++++------ 6 files changed, 113 insertions(+), 25 deletions(-) create mode 100644 app/upgrades/v22_2_0/constants.go create mode 100644 app/upgrades/v22_2_0/upgrades.go diff --git a/CHANGELOG.md b/CHANGELOG.md index ead93f243cf..2da07e77cc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,15 @@ ### DEPENDENCIES - Bump [ibc-apps/middleware/packet-forward-middleware](https://github.com/cosmos/ibc-apps/tree/main/middleware/packet-forward-middleware) to [v8.1.1](https://github.com/cosmos/ibc-apps/releases/tag/middleware%2Fpacket-forward-middleware%2Fv8.1.1) - ([\#3533](https://github.com/cosmos/gaia/pull/3533)) + ([\#3534](https://github.com/cosmos/gaia/pull/3534)) +- Add `v22.2.0` upgrade handler ([\#3538](https://github.com/cosmos/gaia/pull/3538)) + +### STATE BREAKING + +- Bump [ibc-apps/middleware/packet-forward-middleware](https://github.com/cosmos/ibc-apps/tree/main/middleware/packet-forward-middleware) to + [v8.1.1](https://github.com/cosmos/ibc-apps/releases/tag/middleware%2Fpacket-forward-middleware%2Fv8.1.1) + ([\#3534](https://github.com/cosmos/gaia/pull/3534)) +- Add `v22.2.0` upgrade handler ([\#3538](https://github.com/cosmos/gaia/pull/3538)) ## Previous Versions diff --git a/app/app.go b/app/app.go index 277970e8ead..d27cb5b2a36 100644 --- a/app/app.go +++ b/app/app.go @@ -69,14 +69,14 @@ import ( gaiaante "github.com/cosmos/gaia/v22/ante" "github.com/cosmos/gaia/v22/app/keepers" "github.com/cosmos/gaia/v22/app/upgrades" - v22 "github.com/cosmos/gaia/v22/app/upgrades/v22" + v22_2_0 "github.com/cosmos/gaia/v22/app/upgrades/v22_2_0" ) var ( // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string - Upgrades = []upgrades.Upgrade{v22.Upgrade} + Upgrades = []upgrades.Upgrade{v22_2_0.Upgrade} ) var ( diff --git a/app/upgrades/v22_2_0/constants.go b/app/upgrades/v22_2_0/constants.go new file mode 100644 index 00000000000..027d5d446ce --- /dev/null +++ b/app/upgrades/v22_2_0/constants.go @@ -0,0 +1,15 @@ +package v22_2_0 //nolint:revive + +import ( + "github.com/cosmos/gaia/v22/app/upgrades" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v22.2.0" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, +} diff --git a/app/upgrades/v22_2_0/upgrades.go b/app/upgrades/v22_2_0/upgrades.go new file mode 100644 index 00000000000..d66dbee37f9 --- /dev/null +++ b/app/upgrades/v22_2_0/upgrades.go @@ -0,0 +1,31 @@ +package v22_2_0 //nolint:revive + +import ( + "context" + + upgradetypes "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/cosmos/gaia/v22/app/keepers" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + keepers *keepers.AppKeepers, +) upgradetypes.UpgradeHandler { + return func(c context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx := sdk.UnwrapSDKContext(c) + ctx.Logger().Info("Starting module migrations...") + + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade v22.2.0 complete") + return vm, nil + } +} diff --git a/contrib/scripts/upgrade_test_scripts/run_gaia.sh b/contrib/scripts/upgrade_test_scripts/run_gaia.sh index c0181b27295..14e32a6b3fd 100755 --- a/contrib/scripts/upgrade_test_scripts/run_gaia.sh +++ b/contrib/scripts/upgrade_test_scripts/run_gaia.sh @@ -1,29 +1,44 @@ -#!/bin/sh +#!/bin/bash set -o errexit -o nounset # find the highest upgrade version number($UPGRADE_VERSION_NUMBER) within the 'app/upgrades' dir. # the highest upgrade version is used to propose upgrade and create /cosmovisor/upgrades/$UPGRADE_VERSION/bin dir. UPGRADES_DIR=$(realpath ./app/upgrades) -UPGRADE_VERSION_NUMBER=0 +UPGRADE_VERSION="v0" + +version_gt() { + IFS='_' read -ra LEFT_PARTS <<< "${1#v}" + IFS='_' read -ra RIGHT_PARTS <<< "${2#v}" + + for ((i=0; i < ${#LEFT_PARTS[@]} || i < ${#RIGHT_PARTS[@]}; i++)); do + LEFT_NUM=${LEFT_PARTS[i]:-0} # Default to 0 if missing + RIGHT_NUM=${RIGHT_PARTS[i]:-0} # Default to 0 if missing + + if (( LEFT_NUM > RIGHT_NUM )); then + return 0 # Left is greater + elif (( LEFT_NUM < RIGHT_NUM )); then + return 1 # Right is greater + fi + done + + return 1 # Equal versions, so not greater +} for dir in "$UPGRADES_DIR"/*; do if [ -d "$dir" ]; then DIR_NAME=$(basename "$dir") - VERSION_NUMBER="${DIR_NAME#v}" - if [ "$VERSION_NUMBER" -gt "$UPGRADE_VERSION_NUMBER" ]; then - UPGRADE_VERSION_NUMBER=$VERSION_NUMBER + + if version_gt "$DIR_NAME" "$UPGRADE_VERSION"; then + UPGRADE_VERSION="$DIR_NAME" fi fi done -if [ -n "$UPGRADE_VERSION_NUMBER" ]; then - echo "Upgrade to version: $UPGRADE_VERSION_NUMBER" -else - echo "No upgrade version found in app/upgrades." -fi +# Convert "_" to "." in the final output +UPGRADE_VERSION="${UPGRADE_VERSION//_/.}" -UPGRADE_VERSION=v$UPGRADE_VERSION_NUMBER +echo "Latest upgrade version: $UPGRADE_VERSION" NODE_HOME=$(realpath ./build/.gaia) echo "NODE_HOME = ${NODE_HOME}" BINARY=$NODE_HOME/cosmovisor/genesis/bin/gaiad @@ -41,6 +56,7 @@ rm -rf ./build/.gaia mkdir -p "$NODE_HOME"/cosmovisor/genesis/bin cp ./build/gaiadold "$NODE_HOME"/cosmovisor/genesis/bin/gaiad +chmod a+x $BINARY $BINARY init upgrader --chain-id $CHAINID --home "$NODE_HOME" if ! test -f "./build/gaiadnew"; then @@ -50,6 +66,7 @@ fi mkdir -p "$NODE_HOME"/cosmovisor/upgrades/$UPGRADE_VERSION/bin cp ./build/gaiadnew "$NODE_HOME"/cosmovisor/upgrades/$UPGRADE_VERSION/bin/gaiad +chmod a+x "$NODE_HOME"/cosmovisor/upgrades/$UPGRADE_VERSION/bin/gaiad GOPATH=$(go env GOPATH) diff --git a/contrib/scripts/upgrade_test_scripts/run_upgrade_commands.sh b/contrib/scripts/upgrade_test_scripts/run_upgrade_commands.sh index 241e9afe634..cb1a0320bfa 100755 --- a/contrib/scripts/upgrade_test_scripts/run_upgrade_commands.sh +++ b/contrib/scripts/upgrade_test_scripts/run_upgrade_commands.sh @@ -1,27 +1,43 @@ -#!/bin/sh +#!/bin/bash set -o errexit -o nounset UPGRADES_DIR=$(realpath ./app/upgrades) -UPGRADE_VERSION_NUMBER=0 +UPGRADE_VERSION="v0" + +version_gt() { + IFS='_' read -ra LEFT_PARTS <<< "${1#v}" + IFS='_' read -ra RIGHT_PARTS <<< "${2#v}" + + for ((i=0; i < ${#LEFT_PARTS[@]} || i < ${#RIGHT_PARTS[@]}; i++)); do + LEFT_NUM=${LEFT_PARTS[i]:-0} # Default to 0 if missing + RIGHT_NUM=${RIGHT_PARTS[i]:-0} # Default to 0 if missing + + if (( LEFT_NUM > RIGHT_NUM )); then + return 0 # Left is greater + elif (( LEFT_NUM < RIGHT_NUM )); then + return 1 # Right is greater + fi + done + + return 1 # Equal versions, so not greater +} for dir in "$UPGRADES_DIR"/*; do if [ -d "$dir" ]; then DIR_NAME=$(basename "$dir") - VERSION_NUMBER="${DIR_NAME#v}" - if [ "$VERSION_NUMBER" -gt "$UPGRADE_VERSION_NUMBER" ]; then - UPGRADE_VERSION_NUMBER=$VERSION_NUMBER + + if version_gt "$DIR_NAME" "$UPGRADE_VERSION"; then + UPGRADE_VERSION="$DIR_NAME" fi fi done -if [ -n "$UPGRADE_VERSION_NUMBER" ]; then - echo "Upgrade to version: $UPGRADE_VERSION_NUMBER" -else - echo "No upgrade version found in app/upgrades." -fi +# Convert "_" to "." in the final output +UPGRADE_VERSION="${UPGRADE_VERSION//_/.}" + +echo "Latest upgrade version: $UPGRADE_VERSION" -UPGRADE_VERSION=v$UPGRADE_VERSION_NUMBER UPGRADE_HEIGHT=$1 if [ -z "$1" ]; then @@ -35,6 +51,7 @@ echo "NODE_HOME = ${NODE_HOME}" BINARY=$NODE_HOME/cosmovisor/genesis/bin/gaiad echo "BINARY = ${BINARY}" +chmod a+x $BINARY $BINARY version