mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 09:17:49 +08:00
Merge pull request #3032 from crazy-max/bake-secrets-dupes
correctly remove duplicated secrets and ssh keys
This commit is contained in:
commit
48a591b1e1
@ -27,7 +27,7 @@ func (s Secrets) Normalize() Secrets {
|
|||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return removeDupes(s)
|
return removeSecretDupes(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Secrets) ToPB() []*controllerapi.Secret {
|
func (s Secrets) ToPB() []*controllerapi.Secret {
|
||||||
@ -155,3 +155,17 @@ func parseSecret(value string) (*controllerapi.Secret, error) {
|
|||||||
}
|
}
|
||||||
return s.ToPB(), nil
|
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
|
||||||
|
}
|
||||||
|
@ -81,4 +81,17 @@ func TestSecrets(t *testing.T) {
|
|||||||
result := actual.Equals(expected)
|
result := actual.Equals(expected)
|
||||||
require.True(t, result.True())
|
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))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ func (s SSHKeys) Normalize() SSHKeys {
|
|||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return removeDupes(s)
|
return removeSSHDupes(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SSHKeys) ToPB() []*controllerapi.SSH {
|
func (s SSHKeys) ToPB() []*controllerapi.SSH {
|
||||||
@ -131,3 +131,17 @@ func IsGitSSH(repo string) bool {
|
|||||||
}
|
}
|
||||||
return url.Scheme == gitutil.SSHProtocol
|
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
|
||||||
|
}
|
||||||
|
@ -82,4 +82,17 @@ func TestSSHKeys(t *testing.T) {
|
|||||||
result := actual.Equals(expected)
|
result := actual.Equals(expected)
|
||||||
require.True(t, result.True())
|
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))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user