The indexer fills the catalog graph entry's main from the module's manifest (milestone 47/G W3.1's main, W4.3)
The entry's main is the from of the Go artifact the module's process runs, which the check's first tier builds when the module acts. Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog"
|
||||
"git.novox.be/novox/mesh-delivery/sdk/graph"
|
||||
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
||||
)
|
||||
|
||||
// The catalog graph (novox/hq ADR 0656; design 47, *Two graphs, one source of truth*): at each revision one entry per
|
||||
@@ -22,11 +23,12 @@ const CatalogEntryLayout = 1
|
||||
|
||||
// CatalogEntryOf is the catalog graph entry of one module: the module graph's node of it as a recompute computed it
|
||||
// (its build, provision and verb edges, the verb edges left out on a cycle, ADR 0614), with where the trunk holds it and
|
||||
// its manifest's digest. The verdict and the acting rules are the revision's to add (they are not the node's).
|
||||
func CatalogEntryOf(module string, cur meshcatalog.ModulesByModuleValue, n graph.Node) meshcatalog.CatalogEntry {
|
||||
// its manifest's digest and the main package its process runs (MainOf). The verdict and the acting rules are the revision's to add (they are not the node's).
|
||||
func CatalogEntryOf(module string, cur meshcatalog.ModulesByModuleValue, m catalogue.Manifest, n graph.Node) meshcatalog.CatalogEntry {
|
||||
e := meshcatalog.CatalogEntry{V: CatalogEntryLayout, Module: module, Repository: cur.Repository, Path: cur.Path,
|
||||
Commit: cur.Commit, Manifest: cur.Manifest, Fp: n.FP, None: n.None, Bases: n.Bases, Packages: n.Packages,
|
||||
Provides: n.Provides, Requires: n.Requires, Awaits: n.Awaits, Invokes: n.Invokes, Serves: n.Serves, LeftOut: n.LeftOut}
|
||||
Provides: n.Provides, Requires: n.Requires, Awaits: n.Awaits, Invokes: n.Invokes, Serves: n.Serves, LeftOut: n.LeftOut,
|
||||
Main: MainOf(m)}
|
||||
for language, t := range n.Toolchains {
|
||||
if e.Toolchains == nil {
|
||||
e.Toolchains = map[string]meshcatalog.BuildEdge{}
|
||||
@@ -63,3 +65,24 @@ func CatalogRevisionOf(rev meshcatalog.CatalogRevision, entries map[string]meshc
|
||||
}
|
||||
return rev, objects, nil
|
||||
}
|
||||
|
||||
// MainOf is the Go main package the check's first tier builds when the module acts (the seat mesh-catalog's entry
|
||||
// field main): the from of the first Go artifact a process resource of the manifest runs, as the manifest names it;
|
||||
// empty when it runs none.
|
||||
func MainOf(m catalogue.Manifest) string {
|
||||
if m.Build == nil {
|
||||
return ""
|
||||
}
|
||||
for _, r := range m.Resources {
|
||||
if fmt.Sprint(r["type"]) != "process" {
|
||||
continue
|
||||
}
|
||||
name := fmt.Sprint(r["artifact"])
|
||||
for _, a := range m.Build.Artifacts {
|
||||
if a.Name == name && a.Language == "go" && a.From != "" {
|
||||
return a.From
|
||||
}
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ func (ix *Indexer) keepTrunkRevision(ctx context.Context, edges map[string]graph
|
||||
}
|
||||
entries := make(map[string]meshcatalog.CatalogEntry, len(edges))
|
||||
for name, e := range edges {
|
||||
entries[name] = CatalogEntryOf(name, e.cur, whole[name])
|
||||
entries[name] = CatalogEntryOf(name, e.cur, e.manifest, whole[name])
|
||||
}
|
||||
ix.mu.Lock()
|
||||
src := int64(ix.source.rev)
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"maps"
|
||||
"os"
|
||||
"reflect"
|
||||
"slices"
|
||||
"strings"
|
||||
@@ -18,6 +19,7 @@ import (
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds"
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-forge-bridge/forgemsg"
|
||||
sdkstep "git.novox.be/novox/mesh-delivery/sdk/buildstep"
|
||||
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
||||
"git.novox.be/novox/mesh-sdk/go/keys"
|
||||
"git.novox.be/novox/mesh-sdk/go/process"
|
||||
|
||||
@@ -291,7 +293,16 @@ func TestBasesAreComputedFirstAndNoFingerprintTakesTheBuilder(t *testing.T) { //
|
||||
entries := map[string]meshcatalog.CatalogEntry{}
|
||||
for name := range mods.vals {
|
||||
m, _ := moduleOf(t, mods, name)
|
||||
entries[name] = CatalogEntryOf(name, m, graphOf(t, ix, name))
|
||||
entries[name] = CatalogEntryOf(name, m, catalogue.Manifest{}, graphOf(t, ix, name))
|
||||
}
|
||||
// W3.1's main: the Go main package the module's process runs, read from its manifest (here the indexer's own); a
|
||||
// manifest that runs no process names none.
|
||||
own, err := os.ReadFile("../../module.json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if m, err := catalogue.Decode(own); err != nil || MainOf(m) != "cmd/mesh-delivery-indexer" || MainOf(catalogue.Manifest{}) != "" {
|
||||
t.Errorf("the indexer's main = %q (%v), want cmd/mesh-delivery-indexer", MainOf(m), err)
|
||||
}
|
||||
if e := entries["avahi"]; e.Fp != want["avahi"] || e.Commit == "" || e.Manifest == "" || !reflect.DeepEqual(e.Bases, []string{"mesh-tools"}) ||
|
||||
e.Toolchains["go"] != (meshcatalog.BuildEdge{Module: "mesh-build-go", Version: "go1.27.1", Recipe: "1"}) {
|
||||
|
||||
Reference in New Issue
Block a user