49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
package helpers
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"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 `(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
|
|
args := os.Args
|
|
for i := 0; i < len(args); i++ {
|
|
if args[i] == "--home" && i+1 < len(args) {
|
|
return filepath.Clean(args[i+1]), nil
|
|
} else if strings.HasPrefix(args[i], "--home=") {
|
|
return filepath.Clean(args[i][7:]), nil
|
|
}
|
|
}
|
|
|
|
// get the home directory from the environment variable
|
|
// 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
|
|
}
|
|
|
|
// get user home directory
|
|
userHomeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return filepath.Join(userHomeDir, name), nil
|
|
}
|