From 7fec28d69ef50426e802c50cbbb60f5570b08c11 Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Wed, 12 Feb 2025 22:36:50 +0100 Subject: [PATCH] fix: secret file reading (#45) (#2664) * fix: secret file reading * do ToUpper for keys not only for cli args * add tests --- cmd/root.go | 18 ++++++++++-------- cmd/root_test.go | 28 ++++++++++++++++++++++++++++ cmd/testdata/secrets.yml | 4 ++++ 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 cmd/root_test.go create mode 100644 cmd/testdata/secrets.yml diff --git a/cmd/root.go b/cmd/root.go index 140e11b..be7ec47 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -331,6 +331,10 @@ func readYamlFile(file string) (map[string]string, error) { } func readEnvs(path string, envs map[string]string) bool { + return readEnvsEx(path, envs, false) +} + +func readEnvsEx(path string, envs map[string]string, caseInsensitive bool) bool { if _, err := os.Stat(path); err == nil { var env map[string]string if ext := filepath.Ext(path); ext == ".yml" || ext == ".yaml" { @@ -342,6 +346,9 @@ func readEnvs(path string, envs map[string]string) bool { log.Fatalf("Error loading from %s: %v", path, err) } for k, v := range env { + if caseInsensitive { + k = strings.ToUpper(k) + } if _, ok := envs[k]; !ok { envs[k] = v } @@ -412,14 +419,9 @@ func newRunCommand(ctx context.Context, input *Input) func(*cobra.Command, []str log.Debugf("Loading secrets from %s", input.Secretfile()) secrets := newSecrets(input.secrets) - _ = readEnvs(input.Secretfile(), secrets) - hasGitHubToken := false - for k := range secrets { - if strings.EqualFold(k, "GITHUB_TOKEN") { - hasGitHubToken = true - } - } - if !hasGitHubToken { + _ = readEnvsEx(input.Secretfile(), secrets, true) + + if _, hasGitHubToken := secrets["GITHUB_TOKEN"]; !hasGitHubToken { secrets["GITHUB_TOKEN"], _ = gh.GetToken(ctx, "") } diff --git a/cmd/root_test.go b/cmd/root_test.go new file mode 100644 index 0000000..fa4f8bd --- /dev/null +++ b/cmd/root_test.go @@ -0,0 +1,28 @@ +package cmd + +import ( + "path" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestReadSecrets(t *testing.T) { + secrets := map[string]string{} + ret := readEnvsEx(path.Join("testdata", "secrets.yml"), secrets, true) + assert.True(t, ret) + assert.Equal(t, `line1 +line2 +line3 +`, secrets["MYSECRET"]) +} + +func TestReadEnv(t *testing.T) { + secrets := map[string]string{} + ret := readEnvs(path.Join("testdata", "secrets.yml"), secrets) + assert.True(t, ret) + assert.Equal(t, `line1 +line2 +line3 +`, secrets["mysecret"]) +} diff --git a/cmd/testdata/secrets.yml b/cmd/testdata/secrets.yml new file mode 100644 index 0000000..2057296 --- /dev/null +++ b/cmd/testdata/secrets.yml @@ -0,0 +1,4 @@ +mysecret: | + line1 + line2 + line3