From 5ecb5e9220432a540d52ea4081b09e7402c1425c Mon Sep 17 00:00:00 2001 From: Spencer Judge Date: Wed, 28 Feb 2024 10:26:23 -0800 Subject: [PATCH 1/2] Print env vars which override the env file --- temporalcli/commands.env_test.go | 8 ++++++++ temporalcli/commands.go | 24 ++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/temporalcli/commands.env_test.go b/temporalcli/commands.env_test.go index 24721eec..9bb09fe6 100644 --- a/temporalcli/commands.env_test.go +++ b/temporalcli/commands.env_test.go @@ -69,4 +69,12 @@ func TestEnv_Simple(t *testing.T) { res = h.Execute("env", "list") h.NoError(res.Err) h.NotContains(res.Stdout.String(), "myenv2") + + // Ensure env var overrides env file + res = h.Execute("env", "set", "myenv1.address", "something:1234") + h.NoError(res.Err) + h.NoError(os.Setenv("TEMPORAL_ADDRESS", "overridden:1235")) + defer os.Unsetenv("TEMPORAL_ADDRESS") + res = h.Execute("workflow", "list", "--env", "myenv1") + h.Contains(res.Stderr.String(), "Env var overrode --env setting") } diff --git a/temporalcli/commands.go b/temporalcli/commands.go index 6f85347d..3040137e 100644 --- a/temporalcli/commands.go +++ b/temporalcli/commands.go @@ -229,10 +229,13 @@ func UnmarshalProtoJSONWithOptions(b []byte, m proto.Message, jsonShorthandPaylo return opts.Unmarshal(b, m) } -func (c *CommandContext) populateFlagsFromEnv(flags *pflag.FlagSet) error { +// Set flag values from environment file & variables. Returns a map of flags->values which were +// overridden by environment variables. +func (c *CommandContext) populateFlagsFromEnv(flags *pflag.FlagSet) (func(*slog.Logger), error) { if flags == nil { - return nil + return func(logger *slog.Logger) {}, nil } + var logCalls []func(*slog.Logger) var flagErr error flags.VisitAll(func(flag *pflag.Flag) { // If the flag was already changed by the user, we don't overwrite @@ -254,11 +257,21 @@ func (c *CommandContext) populateFlagsFromEnv(flags *pflag.FlagSet) error { flag.Name, anns[0], envVal, err) return } + if flag.Changed { + logCalls = append(logCalls, func(l *slog.Logger) { + l.Info("Env var overrode --env setting", "env_var", anns[0], "flag", flag.Name, "value", envVal) + }) + } flag.Changed = true } } }) - return flagErr + logFn := func(logger *slog.Logger) { + for _, call := range logCalls { + call(logger) + } + } + return logFn, flagErr } // Returns error if JSON output enabled @@ -307,7 +320,8 @@ func (c *TemporalCommand) initCommand(cctx *CommandContext) { c.Command.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { // Populate environ. We will make the error return here which will cause // usage to be printed. - if err := cctx.populateFlagsFromEnv(cmd.Flags()); err != nil { + logCalls, err := cctx.populateFlagsFromEnv(cmd.Flags()) + if err != nil { return err } @@ -319,6 +333,8 @@ func (c *TemporalCommand) initCommand(cctx *CommandContext) { res := c.preRun(cctx) + logCalls(cctx.Logger) + // Always disable color if JSON output is on (must be run after preRun so JSONOutput is set) if cctx.JSONOutput { color.NoColor = true From 3bd6f126f5aa0b496556c7f4d25e85694038c384 Mon Sep 17 00:00:00 2001 From: Spencer Judge Date: Wed, 28 Feb 2024 11:22:25 -0800 Subject: [PATCH 2/2] Fix review feedback --- temporalcli/commands.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/temporalcli/commands.go b/temporalcli/commands.go index 3040137e..720cf7e6 100644 --- a/temporalcli/commands.go +++ b/temporalcli/commands.go @@ -229,8 +229,8 @@ func UnmarshalProtoJSONWithOptions(b []byte, m proto.Message, jsonShorthandPaylo return opts.Unmarshal(b, m) } -// Set flag values from environment file & variables. Returns a map of flags->values which were -// overridden by environment variables. +// Set flag values from environment file & variables. Returns a callback to log anything interesting +// since logging will not yet be initialized when this runs. func (c *CommandContext) populateFlagsFromEnv(flags *pflag.FlagSet) (func(*slog.Logger), error) { if flags == nil { return func(logger *slog.Logger) {}, nil @@ -259,7 +259,7 @@ func (c *CommandContext) populateFlagsFromEnv(flags *pflag.FlagSet) (func(*slog. } if flag.Changed { logCalls = append(logCalls, func(l *slog.Logger) { - l.Info("Env var overrode --env setting", "env_var", anns[0], "flag", flag.Name, "value", envVal) + l.Info("Env var overrode --env setting", "env_var", anns[0], "flag", flag.Name) }) } flag.Changed = true