The delivery repository's contracts and SDK live under modules/ as mesh-delivery-contracts and mesh-delivery-sdk, their Go module paths renamed to match the folders (the TypeScript names already did), and every importer in mesh-delivery, mesh-catalog, mesh-host, mesh-tools and mesh-sdk follows in the same group: a design as it should be, one path per module, checked by the group's check building every importer. Builds: design 47 G §427, §88 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
33 lines
1.0 KiB
Go
33 lines
1.0 KiB
Go
package build
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds"
|
|
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-sdk/buildstep"
|
|
)
|
|
|
|
// agreedFor are the toolchains the build nodes agree on now, for the languages of the manifest's plan: the toolchains the
|
|
// candidate's fingerprint was computed with, as the indexer recomputes it whenever they change. A language with none agreed
|
|
// is left out, and the build then waits for it as the trunk's does.
|
|
func (b *Builder) agreedFor(ctx context.Context, manifest string) map[string]builds.ToolchainUsed {
|
|
plan, err, _ := b.planOf(ctx, manifest)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
out := map[string]builds.ToolchainUsed{}
|
|
for _, bm := range plan.Modules() {
|
|
if !plan.NeedsToolchain(bm) {
|
|
continue
|
|
}
|
|
language, _ := b.Seats.LanguageOf(bm)
|
|
if tc, none := buildstep.AgreedToolchain(b.Toolchains.Entries(language)); none == "" {
|
|
out[language] = builds.ToolchainUsed{Version: tc.Version, Recipe: tc.Recipe}
|
|
}
|
|
}
|
|
if len(out) == 0 {
|
|
return nil
|
|
}
|
|
return out
|
|
}
|