diff --git a/cmd/mesh-controller/facts.go b/cmd/mesh-controller/facts.go index 32a3b3dd..4cb07134 100644 --- a/cmd/mesh-controller/facts.go +++ b/cmd/mesh-controller/facts.go @@ -19,7 +19,6 @@ import ( snapshot "git.novox.be/novox/mesh-sdk/go/facts" "github.com/novox/mesh-controller/internal/artifacts" "github.com/novox/mesh-controller/internal/broker" - "github.com/novox/mesh-controller/internal/builder" "github.com/novox/mesh-controller/internal/inventory" "github.com/novox/mesh-controller/internal/link" ) @@ -241,17 +240,6 @@ func gatherFacts(ctx context.Context, open *stores, busVersion string) (snapshot scrub.Site(o.Site) } - // What a merge check runs in and reads beside it, as the build seat would be asked for it. - if held, err := inv.Held(ctx); err == nil { - for language, reference := range builder.ToolchainsOf(held) { - if f.Versions.Toolchains == nil { - f.Versions.Toolchains = map[string]string{} - } - f.Versions.Toolchains[language] = catalogue.Recorded(reference) - } - } else { - return snapshot.Facts{}, err - } for _, e := range entries { if dir, core := coreModules[e.Manifest.Module]; core && !e.Provided && e.Source.Repository != "" { for d, ref := range besideRefs(dir, current[e.Manifest.Module].Commit) { diff --git a/internal/inventory/dependencies.go b/internal/inventory/dependencies.go index 4d398fe6..2b7fb3f5 100644 --- a/internal/inventory/dependencies.go +++ b/internal/inventory/dependencies.go @@ -6,7 +6,6 @@ import ( "strings" "git.novox.be/novox/mesh-sdk/go/catalogue" - "github.com/novox/mesh-controller/internal/builder" ) // The kinds of edge in the catalogue's one dependency relation (novox/hq ADR 0162). @@ -147,36 +146,9 @@ func dependenciesWith(entries []Entry, against map[string][]string, held map[str add(name, on.Module, EdgeDeclared) } } - // **A bundle stands on the toolchain it is compiled in** (novox/hq 04-ISSUES/211). A - // manifest names its toolchain by language, not in `build.on`, so the edge was implicit - // and a merge that moved the toolchain and a bundle together built both in one tier — - // the bundle against the toolchain as it was, recorded as built from the new commit. Read - // from the manifest, so it holds before any build has recorded what it stood on; and a - // toolchain that moves rebuilds every bundle compiled in it, which is what a toolchain - // carrying a bundle's dependencies requires. - for _, a := range e.Manifest.Build.Artifacts { - if a.Kind != catalogue.ArtifactBundle { - continue - } - if chain, err := builder.ToolchainFor(a.Language); err == nil { - add(name, chain.Base, EdgeStandsOn) - } - } - } - // **And once it is built**, from the bundles its resolved manifest keeps (novox/hq issue 614): the - // `build` it was declared with is gone by then, and a toolchain that moved rebuilt none of them. - for _, b := range e.Manifest.Bundles { - if chain, err := builder.ToolchainFor(b.Language); err == nil { - add(name, chain.Base, EdgeStandsOn) - } } for _, ref := range against[name] { if rest, ok := strings.CutPrefix(ref, catalogue.ArtifactStoreScheme); ok { - // A copy of an upstream image is no module's artifact (novox/hq ADR 0257): its - // repository is named for the image, and its first segment names no module. - if strings.HasPrefix(rest, builder.MirrorPrefix) { - continue - } if base, _, found := strings.Cut(rest, "/"); found { add(name, base, EdgeStandsOn) } diff --git a/internal/inventory/dependencies_test.go b/internal/inventory/dependencies_test.go index 239b4545..a4a184a4 100644 --- a/internal/inventory/dependencies_test.go +++ b/internal/inventory/dependencies_test.go @@ -67,44 +67,6 @@ func TestDependenciesAreOneRelationWithTheirKinds(t *testing.T) { } } -// novox/hq 04-ISSUES/211: a bundle stands on the toolchain it is compiled in, so a merge moving both -// builds the toolchain first — read from the manifest, before any build recorded it. -func TestABundleStandsOnTheToolchainItIsCompiledIn(t *testing.T) { - entries := []Entry{ - {Manifest: catalogue.Manifest{Module: "mesh-tools"}, Source: Source{Repository: "novox/mesh-tools"}}, - {Manifest: catalogue.Manifest{Module: "mesh-tools-go"}, Source: Source{Repository: "novox/mesh-tools-go"}}, - {Manifest: catalogue.Manifest{Module: "node-tools", Build: &catalogue.Build{Artifacts: []catalogue.Artifact{ - {Name: "runtime", Kind: catalogue.ArtifactBundle, Language: "go", System: "arch", From: "cmd/node-tools"}}}}, - Source: Source{Repository: "novox/mesh-tools"}}, - {Manifest: catalogue.Manifest{Module: "nftables", Build: &catalogue.Build{Artifacts: []catalogue.Artifact{ - {Name: "tools", Kind: catalogue.ArtifactBundle, Language: "typescript", Entrypoints: []string{"tools/index.js"}}}}}, - Source: Source{Repository: "novox/mesh-catalog"}}, - {Manifest: catalogue.Manifest{Module: "photos", Build: &catalogue.Build{Artifacts: []catalogue.Artifact{ - {Name: "server", Kind: catalogue.ArtifactImage, From: "Dockerfile"}}}}, - Source: Source{Repository: "novox/photos"}}, - } - edges := dependenciesOf(entries, nil, nil) - has := func(from, to string) bool { - for _, e := range edges { - if e.From == from && e.To == to && e.Kind == EdgeStandsOn { - return true - } - } - return false - } - if !has("nftables", "mesh-tools") { - t.Errorf("a TypeScript bundle does not stand on the TypeScript toolchain: %v", edges) - } - if !has("node-tools", "mesh-tools-go") { - t.Errorf("a Go bundle does not stand on the Go toolchain: %v", edges) - } - for _, e := range edges { - if e.From == "photos" && e.Kind == EdgeStandsOn { - t.Errorf("an image stands on a toolchain it is not compiled in: %v", e) - } - } -} - // novox/hq 04-ISSUES/212: a toolchain standing on the SDK's package is planned after the SDK, so a // release of the SDK rebuilds the toolchain, and every bundle compiled in it after that. func TestAToolchainStandingOnTheSDKFollowsIt(t *testing.T) { @@ -159,23 +121,6 @@ func TestNothingStandsOnTheBuildAgentOnlyIsBuiltByIt(t *testing.T) { } } -// A copy of an upstream image is no module's artifact (novox/hq ADR 0257), even when a module happens to -// carry the name its repository starts with. -func TestACopyOfAnUpstreamImageIsNoEdge(t *testing.T) { - entries := []Entry{ - {Manifest: catalogue.Manifest{Module: "route-proxy"}}, - {Manifest: catalogue.Manifest{Module: "upstream"}}, - } - against := map[string][]string{ - "route-proxy": {catalogue.ArtifactStoreScheme + "upstream/docker.io/library/golang@sha256:a"}, - } - for _, e := range dependenciesOf(entries, against, nil) { - if e.From == "route-proxy" && e.To == "upstream" { - t.Fatalf("a copy of an upstream image was read as a module's artifact: %+v", e) - } - } -} - // **A built module keeps its build edges** (novox/hq issue 614). A manifest the mesh registers from a // build carries no `build` (catalogue.Resolve drops it), so mesh-tools' `build.on` naming mesh-sdk's // `lib` package and a provider's TypeScript bundle drew no edge once built, and a new SDK rebuilt @@ -216,9 +161,6 @@ func TestABuiltModuleKeepsItsBuildEdges(t *testing.T) { } for _, want := range [][2]string{ {"mesh-tools", "mesh-sdk"}, - {"minio", "mesh-tools"}, - {"umami", "mesh-tools"}, - {"dnsmasq", "mesh-tools-go"}, } { if !has(want[0], want[1]) { t.Errorf("no %s stands-on %s: %+v", want[0], want[1], got)