From 69233979aa7a10aab0967a0b7e84b465a7208257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 15 Sep 2023 15:52:53 +0300 Subject: [PATCH] cmd/geth, internal/flags: print envvar config source and bad names (#28119) --- internal/flags/helpers.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/internal/flags/helpers.go b/internal/flags/helpers.go index e1116e23d2..614774bae3 100644 --- a/internal/flags/helpers.go +++ b/internal/flags/helpers.go @@ -20,9 +20,11 @@ import ( "fmt" "os" "regexp" + "sort" "strings" "github.com/CortexFoundation/CortexTheseus/internal/version" + "github.com/CortexFoundation/CortexTheseus/log" "github.com/CortexFoundation/CortexTheseus/params" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" @@ -263,3 +265,37 @@ func AutoEnvVars(flags []cli.Flag, prefix string) { } } } + +// CheckEnvVars iterates over all the environment variables and checks if any of +// them look like a CLI flag but is not consumed. This can be used to detect old +// or mistyped names. +func CheckEnvVars(ctx *cli.Context, flags []cli.Flag, prefix string) { + known := make(map[string]string) + for _, flag := range flags { + docflag, ok := flag.(cli.DocGenerationFlag) + if !ok { + continue + } + for _, envvar := range docflag.GetEnvVars() { + known[envvar] = flag.Names()[0] + } + } + keyvals := os.Environ() + sort.Strings(keyvals) + + for _, keyval := range keyvals { + key := strings.Split(keyval, "=")[0] + if !strings.HasPrefix(key, prefix) { + continue + } + if flag, ok := known[key]; ok { + if ctx.Count(flag) > 0 { + log.Info("Config environment variable found", "envvar", key, "shadowedby", "--"+flag) + } else { + log.Info("Config environment variable found", "envvar", key) + } + } else { + log.Warn("Unknown config environment variable", "envvar", key) + } + } +}