Files
mesh-controller/internal/buildreads/buildreads.go
T

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
}