mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	correctly remove duplicated secrets and ssh keys
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
		@@ -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))
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user