// 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 }