Take a module in from the builder's done key of its trunk fingerprint: one record of the key's artifacts, its manifest judged against the catalogue trunk's predefined keys (issue 1851, A3, A4b, A4c)

This commit is contained in:
2026-10-22 19:05:04 +02:00
parent f00b6aff8b
commit d984f0a55d
19 changed files with 1907 additions and 27 deletions
+39
View File
@@ -0,0 +1,39 @@
// 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
}