40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
// Package buildreads is which repositories other than a module's own its build reads source from, as its manifest
|
|
// names them (novox/hq 04-ISSUES/131): the artifacts' `context` repositories. One rule for build-agent, which says it
|
|
// in a build's outcome, and for the controller, which reads it from a done key's manifest (R4e, issue 1851): it lives
|
|
// here, not in internal/builder, so it outlasts build-agent (R4g).
|
|
package buildreads
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// Of is every repository other than the module's own that this build's recipes read source from, each once and in a
|
|
// fixed order, so two builds of one commit report the same thing the same way.
|
|
func Of(manifest catalogue.Manifest) []catalogue.ArtifactContext {
|
|
if manifest.Build == nil {
|
|
return nil
|
|
}
|
|
seen := map[string]bool{}
|
|
var out []catalogue.ArtifactContext
|
|
for _, a := range manifest.Build.Artifacts {
|
|
if a.Context == nil || a.Context.Repository == "" {
|
|
continue
|
|
}
|
|
key := a.Context.Repository + "#" + a.Context.Ref
|
|
if seen[key] {
|
|
continue
|
|
}
|
|
seen[key] = true
|
|
out = append(out, *a.Context)
|
|
}
|
|
sort.Slice(out, func(i, j int) bool {
|
|
if out[i].Repository != out[j].Repository {
|
|
return out[i].Repository < out[j].Repository
|
|
}
|
|
return out[i].Ref < out[j].Ref
|
|
})
|
|
return out
|
|
}
|