The checker reads the forge through the seat git's verb file, never a module's tool (milestone 47/G W6.14)
The forge read named the forge module's tools (gitea_get_file, and four more never called), which ADR 0656 §1 and the operator's (d) forbid: whichever module holds the seat git answers. An absent file is the seat's absent, an error its error, and a call that reaches nobody stays not heard, so the check says it could not run. The compare captures no test reads any more go with the commit trees read nothing called. Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ Builds: design 47 G §252, §312, §317
This commit is contained in:
@@ -5,28 +5,29 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/nats-io/nats.go"
|
||||
|
||||
gitseat "git.novox.be/novox/mesh-delivery/contracts/go/seats/git"
|
||||
|
||||
"mesh-delivery-checker/internal/check"
|
||||
)
|
||||
|
||||
// The forge's tool the checker reads with (mesh-catalog modules/gitea): gitea_get_file answers {file: {content}}, the text
|
||||
// of a file at a ref. The checker writes nothing to the forge: the forge bridge sets the statuses (ADR 0484 clause 2).
|
||||
const getFileTool = "gitea.gitea_get_file"
|
||||
// The checker reads the forge through the seat git's read verbs (design 47 *The seat git*; milestone 47/G W6.14), as its
|
||||
// manifest's invokes names them, never by a module's tool: whichever module holds the seat answers. It writes nothing to
|
||||
// the forge: what the checker owes the forge is the forge bridge's to perform (ADR 0484 clause 2).
|
||||
|
||||
// notFoundStatus is the 404 of the forge's error, `Gitea API <path>: <status> <body>`.
|
||||
var notFoundStatus = regexp.MustCompile(`: 404( |$)`)
|
||||
// fileVerb is the seat git's verb file, as invokes names it.
|
||||
var fileVerb = "seat:" + gitseat.Seat + "." + gitseat.VerbFile
|
||||
|
||||
// forgeReads reads the forge through call (mesh-sdk process.Conn.Call as the checker's own account).
|
||||
type forgeReads struct {
|
||||
call func(key string, body any) (json.RawMessage, error)
|
||||
}
|
||||
|
||||
// ask calls a forge tool; a call that reached nobody (no responders: the forge's tool runner re-serving, or the forge
|
||||
// down) is marked Unheard, so the check fails at the forge and is asked again when the part it could not hear runs (issue 1624).
|
||||
// ask calls a verb of the seat git; a call that reached nobody (no responders: the holder's tool runner re-serving, or the
|
||||
// forge down) is marked Unheard, so the check says it could not run and is asked again when the part it could not hear
|
||||
// runs (issue 1373, issue 1624).
|
||||
func (f forgeReads) ask(key string, body any) (json.RawMessage, error) {
|
||||
raw, err := f.call(key, body)
|
||||
if errors.Is(err, nats.ErrNoResponders) || errors.Is(err, nats.ErrTimeout) || errors.Is(err, context.DeadlineExceeded) {
|
||||
@@ -35,58 +36,24 @@ func (f forgeReads) ask(key string, body any) (json.RawMessage, error) {
|
||||
return raw, err
|
||||
}
|
||||
|
||||
func ownerRepo(repository string) (string, string) {
|
||||
owner, repo, _ := strings.Cut(repository, "/")
|
||||
return owner, repo
|
||||
}
|
||||
|
||||
// File is the text of a file of a repository at a ref.
|
||||
// File is the text of a file of a repository at a ref. A file the forge says the ref does not hold wraps
|
||||
// check.ErrNotFound (issue 1845); the seat's error is a failure, never an absent file.
|
||||
func (f forgeReads) File(_ context.Context, repository, path, ref string) (string, error) {
|
||||
owner, repo := ownerRepo(repository)
|
||||
raw, err := f.ask(getFileTool, map[string]string{"owner": owner, "repo": repo, "path": path, "ref": ref})
|
||||
raw, err := f.ask(fileVerb, gitseat.FileInput{Repository: repository, Path: path, Ref: ref})
|
||||
if err != nil {
|
||||
if notFoundStatus.MatchString(err.Error()) {
|
||||
// The forge answers 404 for a file the ref does not hold (issue 1845). The status is matched in its own place,
|
||||
// after the path's colon: the path carries a sha that may hold the digits 404.
|
||||
return "", fmt.Errorf("%w: %v", check.ErrNotFound, err)
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
var a struct {
|
||||
File *struct {
|
||||
Content *string `json:"content"`
|
||||
} `json:"file"`
|
||||
}
|
||||
if err := json.Unmarshal(raw, &a); err != nil || a.File == nil || a.File.Content == nil {
|
||||
return "", fmt.Errorf("the answer of %s is not {file: {content}}: %v", getFileTool, err)
|
||||
}
|
||||
return *a.File.Content, nil
|
||||
}
|
||||
|
||||
// commitTreesTool lists a commit's files under directories (mesh-catalog modules/gitea): {files: {directory: {path: blob}}}.
|
||||
const commitTreesTool = "gitea.gitea_commit_trees"
|
||||
|
||||
// Files lists every file under each directory at a commit, relative to it; a directory the commit lacks wraps
|
||||
// check.ErrNotFound.
|
||||
func (f forgeReads) Files(_ context.Context, repository, commit string, dirs []string) (map[string]map[string]string, error) {
|
||||
owner, repo := ownerRepo(repository)
|
||||
raw, err := f.ask(commitTreesTool, map[string]any{"owner": owner, "repo": repo, "sha": commit, "files": dirs})
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "lacks") || notFoundStatus.MatchString(err.Error()) {
|
||||
return nil, fmt.Errorf("%w: %v", check.ErrNotFound, err)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
var a struct {
|
||||
Files map[string]map[string]string `json:"files"`
|
||||
}
|
||||
var a gitseat.FileAnswer
|
||||
if err := json.Unmarshal(raw, &a); err != nil {
|
||||
return nil, fmt.Errorf("the answer of %s is not {files}: %v", commitTreesTool, err)
|
||||
return "", fmt.Errorf("the answer of %s is not its answer: %v", fileVerb, err)
|
||||
}
|
||||
for _, d := range dirs {
|
||||
if _, ok := a.Files[d]; !ok {
|
||||
return nil, fmt.Errorf("%w: the answer of %s lists no files of %q", check.ErrNotFound, commitTreesTool, d)
|
||||
}
|
||||
switch {
|
||||
case a.Error != "":
|
||||
return "", fmt.Errorf("%s of %s at %s: %s", fileVerb, path, ref, a.Error)
|
||||
case a.Absent:
|
||||
return "", fmt.Errorf("%w: %s holds no %s at %s", check.ErrNotFound, repository, path, ref)
|
||||
case a.Path == "" && a.Blob == "" && a.Content == "":
|
||||
return "", fmt.Errorf("the answer of %s names no file and no error", fileVerb)
|
||||
}
|
||||
return a.Files, nil
|
||||
return a.Content, nil
|
||||
}
|
||||
|
||||
@@ -14,29 +14,43 @@ import (
|
||||
"mesh-delivery-checker/internal/check"
|
||||
)
|
||||
|
||||
// capturedAnswer is what the forge's tool answered (internal/check/testdata/captured/README).
|
||||
func capturedAnswer(t *testing.T, name string) json.RawMessage {
|
||||
// seatAnswer is an answer of the seat git's verb file as its fixtures give it (contracts/seats/git/fixtures/verbs.json).
|
||||
func seatAnswer(t *testing.T, name string) json.RawMessage {
|
||||
t.Helper()
|
||||
raw, err := os.ReadFile(filepath.Join("..", "..", "internal", "check", "testdata", "captured", name+".json"))
|
||||
raw, err := os.ReadFile(filepath.Join("..", "..", "..", "..", "contracts", "seats", "git", "fixtures", "verbs.json"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return raw
|
||||
var fixtures []struct {
|
||||
Name string `json:"name"`
|
||||
Of string `json:"of"`
|
||||
Given json.RawMessage `json:"given"`
|
||||
}
|
||||
if err := json.Unmarshal(raw, &fixtures); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, f := range fixtures {
|
||||
if f.Of == "verb:file.answer" && strings.Contains(string(f.Given), name) {
|
||||
return f.Given
|
||||
}
|
||||
}
|
||||
t.Fatalf("no file answer of the seat git's fixtures holds %q", name)
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestTheForgeReadsParseWhatTheForgeAnswered(t *testing.T) { // 1624/AC4
|
||||
func TestTheForgeReadsParseWhatTheForgeAnswered(t *testing.T) { // 1624/AC4; milestone 47/G W6.14: through the seat git
|
||||
var asked []string
|
||||
f := forgeReads{call: func(key string, body any) (json.RawMessage, error) {
|
||||
b, _ := json.Marshal(body)
|
||||
asked = append(asked, key+" "+string(b))
|
||||
return capturedAnswer(t, "forge-get-file-go-mod"), nil
|
||||
return seatAnswer(t, "seats/index.json"), nil
|
||||
}}
|
||||
text, err := f.File(context.Background(), "novox/mesh-delivery", "modules/mesh-delivery-builder/go.mod", "main")
|
||||
if err != nil || !strings.Contains(text, "git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261021100209-cb54756c3865") {
|
||||
text, err := f.File(context.Background(), "novox/mesh-contracts", "seats/index.json", "main")
|
||||
if err != nil || text != `{"format":1,"seats":["mesh-broker"]}` {
|
||||
t.Errorf("file = %q, %v", text, err)
|
||||
}
|
||||
if len(asked) != 1 || !strings.Contains(asked[0], `"owner":"novox"`) {
|
||||
t.Errorf("asked %v", asked)
|
||||
if want := `seat:git.file {"path":"seats/index.json","ref":"main","repository":"novox/mesh-contracts"}`; len(asked) != 1 || asked[0] != want {
|
||||
t.Errorf("asked %v, want %s", asked, want)
|
||||
}
|
||||
bad := forgeReads{call: func(string, any) (json.RawMessage, error) { return json.RawMessage(`{}`), nil }}
|
||||
if _, err := bad.File(context.Background(), "novox/x", "go.mod", "main"); err == nil {
|
||||
@@ -45,17 +59,17 @@ func TestTheForgeReadsParseWhatTheForgeAnswered(t *testing.T) { // 1624/AC4
|
||||
}
|
||||
|
||||
func TestAFileTheRefDoesNotHoldIsNotFoundAndOtherFailuresAreNot(t *testing.T) { // 1845/AC1, AC4
|
||||
f := forgeReads{call: func(string, any) (json.RawMessage, error) {
|
||||
return nil, errors.New("Gitea API contents/checks/particulars/go.mod?ref=98ca97fc: 404 object does not exist")
|
||||
}}
|
||||
if _, err := f.File(context.Background(), "novox/mesh-catalog", "checks/particulars/go.mod", "98ca97fc"); !errors.Is(err, check.ErrNotFound) {
|
||||
t.Errorf("a 404 is %v, want ErrNotFound", err)
|
||||
f := forgeReads{call: func(string, any) (json.RawMessage, error) { return seatAnswer(t, "seats/gone.json"), nil }}
|
||||
if _, err := f.File(context.Background(), "novox/mesh-contracts", "seats/gone.json", "aaaa"); !errors.Is(err, check.ErrNotFound) {
|
||||
t.Errorf("an absent file is %v, want ErrNotFound", err)
|
||||
}
|
||||
f = forgeReads{call: func(string, any) (json.RawMessage, error) {
|
||||
return nil, errors.New("Gitea API contents/go.mod?ref=1111111111111111111111111111111404abcde: 500 internal error")
|
||||
}}
|
||||
f = forgeReads{call: func(string, any) (json.RawMessage, error) { return seatAnswer(t, "over 512 KiB"), nil }}
|
||||
if _, err := f.File(context.Background(), "novox/mesh-contracts", "seats/big.json", "main"); err == nil || errors.Is(err, check.ErrNotFound) {
|
||||
t.Errorf("the seat's error is %v, want a failure that is not ErrNotFound", err)
|
||||
}
|
||||
f = forgeReads{call: func(string, any) (json.RawMessage, error) { return nil, errors.New("the holder failed") }}
|
||||
if _, err := f.File(context.Background(), "novox/mesh-catalog", "go.mod", "main"); err == nil || errors.Is(err, check.ErrNotFound) {
|
||||
t.Errorf("a 500 is %v, want a failure that is not ErrNotFound", err)
|
||||
t.Errorf("a failed call is %v, want a failure that is not ErrNotFound", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import (
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient"
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliverycheckerclient"
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliveryclient"
|
||||
gitseat "git.novox.be/novox/mesh-delivery/contracts/go/seats/git"
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog"
|
||||
"git.novox.be/novox/mesh-delivery/contracts/go/seats/meshdeliverychecker"
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/buildrun"
|
||||
@@ -348,43 +349,38 @@ func (f *fakeBuildModules) serve(t *testing.T, module string, kept jetstream.Key
|
||||
go func() { _ = p.Pull(f.ctx) }()
|
||||
}
|
||||
|
||||
// serveForge answers the forge's two reads as its tools do, with the answers the forge gave (internal/check/testdata/captured):
|
||||
// the go.mod of the captured file, whose mesh-sdk pin is cb54756c3865, and gitea_compare for the pin: on the trunk, unless the
|
||||
// pin is the one the test set as stale.
|
||||
// serveForge answers the seat git's verb file as its holder does (milestone 47/G W6.14), with the go.mod the forge gave
|
||||
// (internal/check/testdata/captured), whose mesh-sdk pin is cb54756c3865 unless the test set it as stale, and a member's
|
||||
// manifest at its head as the bed holds it, else absent.
|
||||
func (b *bed) serveForge(t *testing.T, nc *nats.Conn) {
|
||||
reply := func(m *nats.Msg, name string) {
|
||||
var result map[string]any
|
||||
_ = json.Unmarshal(mustRead(t, name), &result)
|
||||
answer, _ := json.Marshal(map[string]any{"result": result, "error": "", "node": "n0"})
|
||||
var captured struct {
|
||||
File struct {
|
||||
Content string `json:"content"`
|
||||
} `json:"file"`
|
||||
}
|
||||
if err := json.Unmarshal(mustRead(t, "forge-get-file-go-mod"), &captured); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
respond := func(m *nats.Msg, a gitseat.FileAnswer) {
|
||||
answer, _ := json.Marshal(map[string]any{"result": a, "node": "n0"})
|
||||
_ = m.Respond(answer)
|
||||
}
|
||||
for _, tool := range []string{"gitea_get_file", "gitea_compare"} {
|
||||
tool := tool
|
||||
sub, err := nc.Subscribe("mesh.mod.gitea.tool."+tool, func(m *nats.Msg) {
|
||||
var a map[string]string
|
||||
_ = json.Unmarshal(m.Data, &a)
|
||||
for _, subject := range []string{"mesh.seat.git.call.file", "mesh.seat.git.call.file.>"} {
|
||||
sub, err := nc.Subscribe(subject, func(m *nats.Msg) {
|
||||
var in gitseat.FileInput
|
||||
_ = json.Unmarshal(m.Data, &in)
|
||||
switch {
|
||||
case tool == "gitea_get_file" && strings.HasSuffix(a["path"], "module.json"):
|
||||
// A manifest at a member's head (design 51 *Tagged versions*): the bed's own, else the forge's 404.
|
||||
if content, ok := b.heads.Load(a["owner"] + "/" + a["repo"] + " " + a["path"] + " " + a["ref"]); ok {
|
||||
answer, _ := json.Marshal(map[string]any{"result": map[string]any{"file": map[string]any{"content": content}}, "error": "", "node": "n0"})
|
||||
_ = m.Respond(answer)
|
||||
case strings.HasSuffix(in.Path, "module.json"):
|
||||
// A manifest at a member's head (design 51 *Tagged versions*): the bed's own, else absent.
|
||||
if content, ok := b.heads.Load(in.Repository + " " + in.Path + " " + in.Ref); ok {
|
||||
respond(m, gitseat.FileAnswer{Path: in.Path, Ref: in.Ref, Content: content.(string)})
|
||||
return
|
||||
}
|
||||
answer, _ := json.Marshal(map[string]any{"result": nil, "error": "Gitea API /repos/x/contents/" + a["path"] + ": 404 Not Found", "node": "n0"})
|
||||
_ = m.Respond(answer)
|
||||
case tool == "gitea_get_file" && b.stalePin.Load():
|
||||
content := strings.Replace(string(mustRead(t, "forge-get-file-go-mod")), "cb54756c3865", "9aaa5c80ac5c", 1)
|
||||
var result map[string]any
|
||||
_ = json.Unmarshal([]byte(content), &result)
|
||||
answer, _ := json.Marshal(map[string]any{"result": result, "error": "", "node": "n0"})
|
||||
_ = m.Respond(answer)
|
||||
case tool == "gitea_get_file":
|
||||
reply(m, "forge-get-file-go-mod")
|
||||
case strings.HasPrefix(a["head"], "9aaa5c80ac5c"):
|
||||
reply(m, "forge-compare-branch")
|
||||
respond(m, gitseat.FileAnswer{Path: in.Path, Ref: in.Ref, Absent: true})
|
||||
case b.stalePin.Load():
|
||||
respond(m, gitseat.FileAnswer{Path: in.Path, Ref: in.Ref, Content: strings.Replace(captured.File.Content, "cb54756c3865", "9aaa5c80ac5c", 1)})
|
||||
default:
|
||||
reply(m, "forge-compare-trunk")
|
||||
respond(m, gitseat.FileAnswer{Path: in.Path, Ref: in.Ref, Content: captured.File.Content})
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
@@ -11,6 +11,7 @@ require (
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliverycheckerclient v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliveryclient v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/git v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/meshdelivery v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/meshdeliverychecker v0.0.0-00010101000000-000000000000
|
||||
|
||||
@@ -13,7 +13,5 @@ FetchResult json.Marshal of mesh-build-node's fetch (fetch.go, preview.go) in it
|
||||
(cmd/mesh-build-node/preview_test.go) at the same commit. Captured on 2026-10-21 for issue 1679. Both clean fetches carry `"programs":[]`, which a merging fetch of the build modules answers since issue 1577 (mesh-sdk buildstep.MergeInto's Programs), added by hand to the captured bytes: a fixture without it is an older build module's, and its line warns that no compiled program is refused.
|
||||
|
||||
forge-get-file-go-mod.json is the answer of the forge's gitea_get_file (mesh-catalog modules/gitea, tools/index.ts) for modules/mesh-delivery-builder/go.mod of
|
||||
novox/mesh-delivery at main, and forge-compare-trunk.json the answer of gitea_compare for novox/mesh-sdk base main, head cb54756c3865 (a commit on the
|
||||
trunk: no commit main does not hold); both called through the mesh on 2026-10-21 for issue 1624. forge-compare-branch.json is the answer of the same call for a
|
||||
head that is not on the trunk (novox/mesh-sdk base main, head afbe371003a5, the branch feat/r4c5-sdk), shortened to two of its seven commits and one of its
|
||||
twenty-six files, with the head and the totals set to match.
|
||||
novox/mesh-delivery at main, called through the mesh on 2026-10-21 for issue 1624; the checker's whole-module test answers its content through the seat
|
||||
git's verb file (milestone 47/G W6.14).
|
||||
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
{
|
||||
"base": "main",
|
||||
"commits": [
|
||||
{
|
||||
"author": "jochen",
|
||||
"date": "2026-10-21T19:35:14+02:00",
|
||||
"files": 2,
|
||||
"sha": "9aaa5c80ac5c4820c4eddf488fbb90ac6981a624",
|
||||
"subject": "Accept the gate's recheck status mesh/repo-check among the owed contexts, so a pinned recheck is not refused (issue 1673)"
|
||||
},
|
||||
{
|
||||
"author": "jochen",
|
||||
"date": "2026-10-21T19:26:02+02:00",
|
||||
"files": 3,
|
||||
"sha": "0730ef609216798e787ee8b6542912f5ec613a77",
|
||||
"subject": "Keep the unit level cheap: the merge's real-git tests start processes, so they are integration tests (issue 895)"
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"path": "go/delivery/gate.go",
|
||||
"status": "modified"
|
||||
}
|
||||
],
|
||||
"head": "9aaa5c80ac5c",
|
||||
"repository": "novox/mesh-sdk",
|
||||
"said": [
|
||||
"9aaa5c80ac5c holds 2 commits main does not, touching 1 files"
|
||||
],
|
||||
"total_commits": 2
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"base": "main",
|
||||
"commits": [],
|
||||
"files": [],
|
||||
"head": "cb54756c3865",
|
||||
"repository": "novox/mesh-sdk",
|
||||
"said": [
|
||||
"cb54756c3865 holds 0 commits main does not, touching 0 files",
|
||||
"a file's status is the last listed commit's change to it; for the lines, gitea_pull_request_diff or gitea_get_file"
|
||||
],
|
||||
"total_commits": 0
|
||||
}
|
||||
@@ -125,15 +125,13 @@ func TestManifestDeclarations(t *testing.T) { // 1678/AC1
|
||||
}
|
||||
// 1887/A5b: the checker reads nothing of the controller's plans-building (ADR 0483 superseded by ADR 0525 §7), calls no
|
||||
// build module's tool and holds no capacity: it puts check asks on the Go and Node build seats (ADR 0525 §1, §4).
|
||||
// The forge's reads for a mesh-sdk pin (ADR 0484 clause 9), and of the node seat node-engine its one verb
|
||||
// compose-candidate, asked of every placed node (ADR 0593 §7), never the seat's other verbs.
|
||||
// The forge's commit trees list a contracts module's seats at a member's head (ADR 0636 §4, headseats.go).
|
||||
if want := []string{"gitea.gitea_commit_trees", "gitea.gitea_commits", "gitea.gitea_compare", "gitea.gitea_get_file", "gitea.gitea_list_branches",
|
||||
"mesh-delivery-assigner.assigner_read_assignments", "mesh-delivery-indexer.indexer_read_candidates", "mesh-delivery-indexer.indexer_read_manifests",
|
||||
// The forge's file read through the seat git, never a module's tool (milestone 47/G W6.14), the build seats' drop, and of
|
||||
// the node seat node-engine its one verb compose-candidate, asked of every placed node (ADR 0593 §7), never its other verbs.
|
||||
if want := []string{"mesh-delivery-assigner.assigner_read_assignments", "mesh-delivery-indexer.indexer_read_candidates", "mesh-delivery-indexer.indexer_read_manifests",
|
||||
"mesh-delivery-indexer.indexer_read_modules", "mesh-delivery-indexer.indexer_read_packages", "mesh-delivery-indexer.indexer_read_predefined",
|
||||
"mesh-delivery-indexer.indexer_read_seat_definitions",
|
||||
"seat:mesh-catalog.revision", "seat:mesh-catalog.seat-definitions", "seat:mesh-config.renames", "seat:mesh-hand-acts.hand-act", "seat:node-build-go.drop", "seat:node-build-node.drop", "seat:node-engine.compose-candidate"}; !reflect.DeepEqual(sorted(m.Invokes), want) {
|
||||
t.Errorf("invokes = %v, want the forge's reads, the seats' drop and compose-candidate", m.Invokes)
|
||||
"seat:git.file", "seat:mesh-catalog.revision", "seat:mesh-catalog.seat-definitions", "seat:mesh-config.renames", "seat:mesh-hand-acts.hand-act", "seat:node-build-go.drop", "seat:node-build-node.drop", "seat:node-engine.compose-candidate"}; !reflect.DeepEqual(sorted(m.Invokes), want) {
|
||||
t.Errorf("invokes = %v, want the seat git's file, the seats' drop and compose-candidate", m.Invokes)
|
||||
}
|
||||
if want := []string{"node-build-go", "node-build-node"}; !reflect.DeepEqual(sorted(m.Uses), want) {
|
||||
t.Errorf("uses = %v, want the Go and Node build seats", m.Uses)
|
||||
|
||||
@@ -79,11 +79,6 @@
|
||||
"checker_verdicts"
|
||||
],
|
||||
"invokes": [
|
||||
"gitea.gitea_commit_trees",
|
||||
"gitea.gitea_commits",
|
||||
"gitea.gitea_compare",
|
||||
"gitea.gitea_get_file",
|
||||
"gitea.gitea_list_branches",
|
||||
"mesh-delivery-assigner.assigner_read_assignments",
|
||||
"mesh-delivery-indexer.indexer_read_candidates",
|
||||
"mesh-delivery-indexer.indexer_read_manifests",
|
||||
@@ -91,6 +86,7 @@
|
||||
"mesh-delivery-indexer.indexer_read_packages",
|
||||
"mesh-delivery-indexer.indexer_read_predefined",
|
||||
"mesh-delivery-indexer.indexer_read_seat_definitions",
|
||||
"seat:git.file",
|
||||
"seat:mesh-catalog.revision",
|
||||
"seat:mesh-catalog.seat-definitions",
|
||||
"seat:mesh-config.renames",
|
||||
|
||||
Reference in New Issue
Block a user