Merge pull request #3032 from crazy-max/bake-secrets-dupes

correctly remove duplicated secrets and ssh keys
This commit is contained in:
Tõnis Tiigi 2025-03-03 16:40:14 -08:00 committed by GitHub
commit 48a591b1e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 56 additions and 2 deletions

View File

@ -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
}

View File

@ -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))
})
}

View File

@ -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
}

View File

@ -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))
})
}