From fe17ebda89d07e43d113303d95a0065bbf77f32d Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:23:46 +0100 Subject: [PATCH] correctly remove duplicated secrets and ssh keys Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- util/buildflags/secrets.go | 16 +++++++++++++++- util/buildflags/secrets_test.go | 13 +++++++++++++ util/buildflags/ssh.go | 16 +++++++++++++++- util/buildflags/ssh_test.go | 13 +++++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/util/buildflags/secrets.go b/util/buildflags/secrets.go index 70d1c615..498a588b 100644 --- a/util/buildflags/secrets.go +++ b/util/buildflags/secrets.go @@ -27,7 +27,7 @@ func (s Secrets) Normalize() Secrets { if len(s) == 0 { return nil } - return removeDupes(s) + return removeSecretDupes(s) } func (s Secrets) ToPB() []*controllerapi.Secret { @@ -155,3 +155,17 @@ func parseSecret(value string) (*controllerapi.Secret, error) { } return s.ToPB(), nil } + +func removeSecretDupes(s []*Secret) []*Secret { + var res []*Secret + m := map[string]int{} + for _, sec := range s { + if i, ok := m[sec.ID]; ok { + res[i] = sec + } else { + m[sec.ID] = len(res) + res = append(res, sec) + } + } + return res +} diff --git a/util/buildflags/secrets_test.go b/util/buildflags/secrets_test.go index 720d21e6..9c6ee293 100644 --- a/util/buildflags/secrets_test.go +++ b/util/buildflags/secrets_test.go @@ -81,4 +81,17 @@ func TestSecrets(t *testing.T) { result := actual.Equals(expected) require.True(t, result.True()) }) + + t.Run("RemoveDupes", func(t *testing.T) { + secrets := Secrets{ + {ID: "mysecret", Env: "FOO"}, + {ID: "mysecret", Env: "BAR"}, + {ID: "mysecret2", Env: "BAZ"}, + }.Normalize() + + expected := `[{"id":"mysecret","env":"BAR"},{"id":"mysecret2","env":"BAZ"}]` + actual, err := json.Marshal(secrets) + require.NoError(t, err) + require.JSONEq(t, expected, string(actual)) + }) } diff --git a/util/buildflags/ssh.go b/util/buildflags/ssh.go index 482bc04a..80367552 100644 --- a/util/buildflags/ssh.go +++ b/util/buildflags/ssh.go @@ -28,7 +28,7 @@ func (s SSHKeys) Normalize() SSHKeys { if len(s) == 0 { return nil } - return removeDupes(s) + return removeSSHDupes(s) } func (s SSHKeys) ToPB() []*controllerapi.SSH { @@ -131,3 +131,17 @@ func IsGitSSH(repo string) bool { } return url.Scheme == gitutil.SSHProtocol } + +func removeSSHDupes(s []*SSH) []*SSH { + var res []*SSH + m := map[string]int{} + for _, ssh := range s { + if i, ok := m[ssh.ID]; ok { + res[i] = ssh + } else { + m[ssh.ID] = len(res) + res = append(res, ssh) + } + } + return res +} diff --git a/util/buildflags/ssh_test.go b/util/buildflags/ssh_test.go index d33eb064..80636d63 100644 --- a/util/buildflags/ssh_test.go +++ b/util/buildflags/ssh_test.go @@ -82,4 +82,17 @@ func TestSSHKeys(t *testing.T) { result := actual.Equals(expected) require.True(t, result.True()) }) + + t.Run("RemoveDupes", func(t *testing.T) { + sshkeys := SSHKeys{ + {ID: "default"}, + {ID: "key", Paths: []string{"path/to/foo"}}, + {ID: "key", Paths: []string{"path/to/bar"}}, + }.Normalize() + + expected := `[{"id":"default"},{"id":"key","paths":["path/to/bar"]}]` + actual, err := json.Marshal(sshkeys) + require.NoError(t, err) + require.JSONEq(t, expected, string(actual)) + }) }