Share artifact declaration validation
This commit is contained in:
@@ -90,3 +90,30 @@ func ExpectedBuild(binaryName, version string, targets []Target) []Declaration {
|
||||
}
|
||||
return declarations
|
||||
}
|
||||
|
||||
// ValidateDeclarations matches recorded artifact identities to selected targets.
|
||||
func ValidateDeclarations(binaryName, version string, targets []Target, recorded []Declaration) error {
|
||||
if len(recorded) != len(targets) {
|
||||
return fmt.Errorf("artifact and target counts do not match")
|
||||
}
|
||||
want := make(map[Target]string, len(targets))
|
||||
for _, declaration := range ExpectedBuild(binaryName, version, targets) {
|
||||
target := declaration.Target
|
||||
if !ValidComponent(target.OS) || !ValidComponent(target.Arch) {
|
||||
return fmt.Errorf("invalid target %q/%q", target.OS, target.Arch)
|
||||
}
|
||||
if _, exists := want[target]; exists {
|
||||
return fmt.Errorf("repeats target %q/%q", target.OS, target.Arch)
|
||||
}
|
||||
want[target] = declaration.Filename
|
||||
}
|
||||
seen := make(map[Target]bool, len(recorded))
|
||||
for _, declaration := range recorded {
|
||||
name, ok := want[declaration.Target]
|
||||
if !ok || seen[declaration.Target] || declaration.Filename != name {
|
||||
return fmt.Errorf("artifact %q does not match a selected target and its declared name", declaration.Filename)
|
||||
}
|
||||
seen[declaration.Target] = true
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user