diff --git a/go.mod b/go.mod index fe3cabf2..fde4f61c 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/novox/mesh-controller go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022132648-bd7731f3588c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022152521-dfc2c858d94b github.com/jackc/pgx/v5 v5.10.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/go.sum b/go.sum index 0fc0fa3b..c8522d52 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ git.novox.be/novox/mesh-host v0.0.0-20261018171808-9d9e3a46c4f5 h1:E5stfIeCN6uYgA9TCv+4K8JgaURg3zQppvUgJLaDMP4= git.novox.be/novox/mesh-host v0.0.0-20261018171808-9d9e3a46c4f5/go.mod h1:4wyoCr6IIIIarEUuROThWDj7DAvJvIidqMjWcpSnOwE= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022132648-bd7731f3588c h1:UKlwMw6fmesDqe0aL0lfI/ivhorsGjAvh9XefFjhNI4= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022132648-bd7731f3588c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022075101-c61212eba77c h1:YdSbkI42rlVmClybH8BS717ut0vouKIMavO691fpdps= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022075101-c61212eba77c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022152521-dfc2c858d94b h1:cfJ2LK/etUiV1eL58pnaEjmSi34+EVmO4ud9J7pXKOs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022152521-dfc2c858d94b/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op/go.mod h1:FQyySiasQQM8735Ddel3MRojmy4dA1IqCeyJ5jmPMbI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/testdata/beside/CAPTURED b/testdata/beside/CAPTURED index 1dfe88c4..d14a5a7b 100644 --- a/testdata/beside/CAPTURED +++ b/testdata/beside/CAPTURED @@ -9,7 +9,7 @@ a second place to clean besides the catalogue itself. mesh-catalog e0bc919d4945bb5f13f971f74643a0b714cf45da modules/*/module.json, modules/nats/Dockerfile mesh-host 9d9e3a46c4f5943cfffb413d962ce48b75e2fd39 examples/foundation-first-node.lock -mesh-sdk bd7731f3588cf336620526b032bbfe9867f7837e conformance/events/module-event.json +mesh-sdk dfc2c858d94ba877caa96b5e0b84200590c1391f conformance/events/module-event.json To move them, from this repository's root, with the two repositories checked out beside it: diff --git a/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/build.go b/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/build.go index e36de7f5..f4fcd25b 100644 --- a/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/build.go +++ b/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/build.go @@ -394,6 +394,45 @@ func (b *Build) problems(module string) []string { "%s: %q mirrors %q, which names no tag or digest", module, a.Name, a.From)) } problems = append(problems, upstreamFileProblems(module, a)...) + problems = append(problems, pathsProblems(module, a)...) + } + return problems +} + +// pathsProblems is what is wrong with an artifact's `paths` (novox/hq ADR 0499 clause 1): named on a kind whose build +// source is derived or named otherwise, or a path that leaves the module's directory, is its whole directory, or is a +// pattern. +func pathsProblems(module string, a Artifact) []string { + if a.Paths == nil { + return nil + } + switch { + case a.Kind == ArtifactBundle && a.Language == "go": + return []string{fmt.Sprintf("%s: %q is a Go program and names paths: its build source is derived from the "+ + "package it compiles (novox/hq ADR 0267 clause 1, ADR 0499 clause 1)", module, a.Name)} + case a.Kind != ArtifactBundle && a.Kind != ArtifactPackage: + return []string{fmt.Sprintf("%s: %q is a %q and names paths; only a package or a bundle in a language other "+ + "than Go names the paths it is built from (novox/hq ADR 0499 clause 1)", module, a.Name, a.Kind)} + case len(a.Paths) == 0: + return []string{fmt.Sprintf("%s: %q names no path in paths; leave the word out to build from the module's "+ + "directory", module, a.Name)} + } + var problems []string + for _, p := range a.Paths { + clean := path.Clean(p) + switch { + case strings.TrimSpace(p) == "": + problems = append(problems, fmt.Sprintf("%s: %q names an empty path", module, a.Name)) + case strings.HasPrefix(p, "/") || clean == ".." || strings.HasPrefix(clean, "../"): + problems = append(problems, fmt.Sprintf("%s: %q names the path %q, which leaves the module's directory", + module, a.Name, p)) + case clean == ".": + problems = append(problems, fmt.Sprintf("%s: %q names the module's whole directory (%q) as a path; leave "+ + "the word out for that", module, a.Name, p)) + case strings.ContainsAny(p, "*?[]{}\\"): + problems = append(problems, fmt.Sprintf("%s: %q names %q, which is a pattern; paths names files and "+ + "directories", module, a.Name, p)) + } } return problems } diff --git a/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/manifest.go b/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/manifest.go index 870ea4d0..0c721c74 100644 --- a/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/manifest.go +++ b/vendor/git.novox.be/novox/mesh-sdk/go/catalogue/manifest.go @@ -1191,6 +1191,17 @@ type Artifact struct { // (novox/hq ADR 0193). Absent for nearly every bundle, which is then one file per entrypoint. External []string `json:"external,omitempty"` + // Paths are the files and directories, relative to the module's directory, a package or a bundle in a language + // other than Go is built from (novox/hq ADR 0499 clause 1): with the module's manifest they are its build source, + // and a module whose every artifact names them takes its fingerprint's tree from them alone (clause 2). Absent means + // the module's directory, as before. + // + // **Named, because the build source of a package sharing a repository cannot be derived.** A Go program's is + // (ADR 0267 clause 1), an archive's `from` names it and an image's is the context its manifest names, so each of those + // refuses the word. A path stays inside the module's directory and is no pattern: a build source that could reach + // out of it, or grow with a directory listing, would be one no fingerprint pins. + Paths []string `json:"paths,omitempty"` + // Env is what a tools bundle is given on a machine (novox/hq ADR 0192): words and their values, // paths and constants composed with ${dir:…} and ${port:…} exactly as a container's environment // is, never a secret's content. The node's runtime hands it to this bundle and to no other. diff --git a/vendor/modules.txt b/vendor/modules.txt index 6ae05ecf..30efdfb1 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022132648-bd7731f3588c +# git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022152521-dfc2c858d94b ## explicit; go 1.26.0 git.novox.be/novox/mesh-sdk/go git.novox.be/novox/mesh-sdk/go/asks