From 686032daa3721878af31aaa23f5a0d0a88610306 Mon Sep 17 00:00:00 2001 From: Skywalkr-dev Date: Fri, 22 May 2026 09:59:45 +0000 Subject: [PATCH] fix: correct lookup for environment variables in cache The current implementation keys the environment cache by the full "NAME=VALUE" string. This causes the generator to treat updates to existing variables as new entries, leading to duplicate environment variables in the final configuration. This change switches the cache key to use only the variable name, ensuring that AddProcessEnv correctly updates existing values instead of appending them. Fixes #798 Signed-off-by: Skywalkr-dev --- generate/generate.go | 1 + generate/generate_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/generate/generate.go b/generate/generate.go index 816305f0..886faeba 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -322,6 +322,7 @@ func NewFromTemplate(r io.Reader) (Generator, error) { func createEnvCacheMap(env []string) map[string]int { envMap := make(map[string]int, len(env)) for i, val := range env { + val, _, _ = strings.Cut(val, "=") envMap[val] = i } return envMap diff --git a/generate/generate_test.go b/generate/generate_test.go index b27dc3fc..914373ea 100644 --- a/generate/generate_test.go +++ b/generate/generate_test.go @@ -155,3 +155,41 @@ func TestMultipleEnvCaching(t *testing.T) { g.AddMultipleProcessEnv([]string{}) assert.Equal(t, []string(nil), g.Config.Process.Env) } + +func TestEnvCachingOverrides(t *testing.T) { + // Test overriding default ENV variables to verify createEnvCacheMap correctly extracts keys + g, err := generate.New("linux") + if err != nil { + t.Fatal(err) + } + + // Override existing default ENVs + g.AddProcessEnv("TERM", "vt100") + g.AddProcessEnv("PATH", "/minimal/path") + g.AddProcessEnv("FOO", "bar") + + expected := []string{ + "PATH=/minimal/path", + "TERM=vt100", + "FOO=bar", + } + assert.Equal(t, expected, g.Config.Process.Env) + + // Test AddMultipleProcessEnv with overrides + g, err = generate.New("linux") + if err != nil { + t.Fatal(err) + } + + g.AddMultipleProcessEnv([]string{ + "TERM=tmux-256color", + "NEW_VAR=123", + }) + + expectedMultiple := []string{ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "TERM=tmux-256color", + "NEW_VAR=123", + } + assert.Equal(t, expectedMultiple, g.Config.Process.Env) +}