diff --git a/client/v2/CHANGELOG.md b/client/v2/CHANGELOG.md index 335010baca5b..5fae2c385bdc 100644 --- a/client/v2/CHANGELOG.md +++ b/client/v2/CHANGELOG.md @@ -47,6 +47,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#17709](https://github.com/cosmos/cosmos-sdk/pull/17709) Address codecs have been removed from `autocli.AppOptions` and `flag.Builder`. Instead client/v2 uses the address codecs present in the context (introduced in [#17503](https://github.com/cosmos/cosmos-sdk/pull/17503)). +### Bug Fixes + +* [#20964](https://github.com/cosmos/cosmos-sdk/pull/20964) Fix `GetNodeHomeDirectory` helper in `client/v2/helpers` to respect the `(PREFIX)_HOME` environment variable. + ## [v2.0.0-beta.3] - 2024-07-15 ### Features diff --git a/client/v2/helpers/home.go b/client/v2/helpers/home.go index f62ff30490e9..af3fc2886673 100644 --- a/client/v2/helpers/home.go +++ b/client/v2/helpers/home.go @@ -6,8 +6,13 @@ import ( "strings" ) +// EnvPrefix is the prefix for environment variables that are used by the CLI. +// It should match the one used for viper in the CLI. +var EnvPrefix = "" + // GetNodeHomeDirectory gets the home directory of the node (where the config is located). -// It parses the home flag if set if the `NODE_HOME` environment variable if set (and ignores name). +// It parses the home flag if set if the `(PREFIX)_HOME` environment variable if set (and ignores name). +// When no prefix is set, it reads the `NODE_HOME` environment variable. // Otherwise, it returns the default home directory given its name. func GetNodeHomeDirectory(name string) (string, error) { // get the home directory from the flag @@ -21,12 +26,19 @@ func GetNodeHomeDirectory(name string) (string, error) { } // get the home directory from the environment variable - homeDir := os.Getenv("NODE_HOME") + // to not clash with the $HOME system variable, when no prefix is set + // we check the NODE_HOME environment variable + homeDir, envHome := "", "HOME" + if len(EnvPrefix) > 0 { + homeDir = os.Getenv(EnvPrefix + "_" + envHome) + } else { + homeDir = os.Getenv("NODE_" + envHome) + } if homeDir != "" { return filepath.Clean(homeDir), nil } - // return the default home directory + // get user home directory userHomeDir, err := os.UserHomeDir() if err != nil { return "", err diff --git a/docs/learn/advanced/07-cli.md b/docs/learn/advanced/07-cli.md index b4932ad4c90d..409effef6801 100644 --- a/docs/learn/advanced/07-cli.md +++ b/docs/learn/advanced/07-cli.md @@ -182,7 +182,7 @@ this will be more convenient: ```shell # define env variables in .env, .envrc etc -NODE_HOME= +GAIA_HOME= GAIA_NODE= GAIA_CHAIN_ID="testchain-1" GAIA_KEYRING_BACKEND="test" diff --git a/simapp/simd/main.go b/simapp/simd/main.go index 9643af43bc80..4e7549b21411 100644 --- a/simapp/simd/main.go +++ b/simapp/simd/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + clientv2helpers "cosmossdk.io/client/v2/helpers" "cosmossdk.io/simapp" "cosmossdk.io/simapp/simd/cmd" @@ -12,7 +13,7 @@ import ( func main() { rootCmd := cmd.NewRootCmd() - if err := svrcmd.Execute(rootCmd, "", simapp.DefaultNodeHome); err != nil { + if err := svrcmd.Execute(rootCmd, clientv2helpers.EnvPrefix, simapp.DefaultNodeHome); err != nil { fmt.Fprintln(rootCmd.OutOrStderr(), err) os.Exit(1) } diff --git a/simapp/v2/simdv2/main.go b/simapp/v2/simdv2/main.go index f50850ec6bfa..eb7d9a1b005b 100644 --- a/simapp/v2/simdv2/main.go +++ b/simapp/v2/simdv2/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + clientv2helpers "cosmossdk.io/client/v2/helpers" "cosmossdk.io/core/transaction" serverv2 "cosmossdk.io/server/v2" "cosmossdk.io/simapp/v2" @@ -12,7 +13,7 @@ import ( func main() { rootCmd := cmd.NewRootCmd[transaction.Tx]() - if err := serverv2.Execute(rootCmd, "", simapp.DefaultNodeHome); err != nil { + if err := serverv2.Execute(rootCmd, clientv2helpers.EnvPrefix, simapp.DefaultNodeHome); err != nil { fmt.Fprintln(rootCmd.OutOrStderr(), err) os.Exit(1) }