diff --git a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/gate_test.go b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/gate_test.go index 2a7b64b..92982c4 100644 --- a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/gate_test.go +++ b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/gate_test.go @@ -229,7 +229,7 @@ func TestTheCheckersStatusIsSetOncePerRevisionAndAKeyOfTheGateIsNotItsKey(t *tes key, v := checkerOwed(t, 12, "success", "pass aaaaaaaaaaaa on bbbbbbbbbbbb") p.checkOwed(context.Background(), key, 3, v) p.checkOwed(context.Background(), key, 3, v) - if len(f.calls) != 1 || f.calls[0].key != "gitea.gitea_commit_status" || + if len(f.calls) != 1 || f.calls[0].key != "gitea.gitea_check_status" || f.calls[0].body != `{"context":"mesh/check","description":"pass aaaaaaaaaaaa on bbbbbbbbbbbb","owner":"novox","repo":"mesh-delivery","sha":"`+headA+`","state":"success","target_url":"https://view.example/checks/g.0123456789ab"}` { t.Fatalf("calls = %+v", f.calls) } diff --git a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/integration_test.go b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/integration_test.go index 679a8ae..64d90c1 100644 --- a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/integration_test.go +++ b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge/integration_test.go @@ -95,6 +95,10 @@ accounts { "mesh.mod.gitea.call.gitea_commit_status.n1~mesh-delivery-forge-bridge" "mesh.mod.gitea.tool.gitea_commit_status" "mesh.mod.gitea.tool.gitea_commit_status.*" + "mesh.mod.gitea.call.gitea_check_status.*.n1~mesh-delivery-forge-bridge" + "mesh.mod.gitea.call.gitea_check_status.n1~mesh-delivery-forge-bridge" + "mesh.mod.gitea.tool.gitea_check_status" + "mesh.mod.gitea.tool.gitea_check_status.*" "mesh.mod.gitea.call.gitea_delivery_view.*.n1~mesh-delivery-forge-bridge" "mesh.mod.gitea.call.gitea_delivery_view.n1~mesh-delivery-forge-bridge" "mesh.mod.gitea.tool.gitea_delivery_view" @@ -735,7 +739,7 @@ func sha256Sum(b []byte) []byte { s := sha256.Sum256(b); return s[:] } func TestBridgePerformsTheCheckersStatusOncePerRevisionOfItsOwedKey(t *testing.T) { // 1683/AC5, ADR 0484 ยง2 b := startBed(t, `{"result":{"pulls":[]}}`, nil) calls := make(chan string, 8) - sub, err := b.ctl.Subscribe("mesh.mod.gitea.tool.gitea_commit_status", func(m *nats.Msg) { + sub, err := b.ctl.Subscribe("mesh.mod.gitea.tool.gitea_check_status", func(m *nats.Msg) { calls <- string(m.Data) _ = m.Respond([]byte(`{"result":{},"node":"n0"}`)) }) diff --git a/modules/mesh-delivery-forge-bridge/internal/bridge/acts.go b/modules/mesh-delivery-forge-bridge/internal/bridge/acts.go index f844717..6073dc3 100644 --- a/modules/mesh-delivery-forge-bridge/internal/bridge/acts.go +++ b/modules/mesh-delivery-forge-bridge/internal/bridge/acts.go @@ -31,6 +31,9 @@ type Act struct { // number, body), merge.ts gitea_merge_pull_request (owner, repo, number, head, approved_heads). const ( commitStatusTool = "gitea.gitea_commit_status" + // checkStatusTool is the one tool that writes mesh/check (R4e, issue 1301's option A): gitea_commit_status refuses that + // context, and only this bridge invokes it. Its arguments: owner, repo, sha, state, description, target_url, context. + checkStatusTool = "gitea.gitea_check_status" deliveryViewTool = "gitea.gitea_delivery_view" noteAppendTool = "gitea.gitea_note_append" addCommentTool = "gitea.gitea_add_comment" @@ -77,7 +80,11 @@ func OwedAct(key string, value []byte) (Act, error) { if o.Context != context { return Act{}, fmt.Errorf("the owed status %s says the context %q, not the %q its key names", key, o.Context, context) } - a.Call = Call{Tool: commitStatusTool, Args: map[string]any{"owner": owner, "repo": repo, "sha": head, "context": o.Context, + tool := commitStatusTool + if o.Context == delivery.StatusContextCheck { + tool = checkStatusTool + } + a.Call = Call{Tool: tool, Args: map[string]any{"owner": owner, "repo": repo, "sha": head, "context": o.Context, "state": o.State, "description": o.Text, "target_url": o.Target}} case delivery.OwedView: if err := needsPull(); err != nil { diff --git a/modules/mesh-delivery-forge-bridge/internal/bridge/acts_test.go b/modules/mesh-delivery-forge-bridge/internal/bridge/acts_test.go index 5b555b8..d3a1d90 100644 --- a/modules/mesh-delivery-forge-bridge/internal/bridge/acts_test.go +++ b/modules/mesh-delivery-forge-bridge/internal/bridge/acts_test.go @@ -43,6 +43,26 @@ func TestOwedStatusIsACommitStatusCall(t *testing.T) { // 1341/AC1 } } +func TestOwedMeshCheckGoesThroughTheCheckStatusToolAlone(t *testing.T) { // R4e 1301-S4 option A: only gitea_check_status writes mesh/check + key, err := delivery.CheckerOwedKey("novox/mesh-delivery", 12, headA) + if err != nil { + t.Fatal(err) + } + v, err := delivery.EncodeCheckerOwed(delivery.Owed{Act: delivery.OwedStatus, Context: delivery.StatusContextCheck, State: "success", Text: "pass", Target: "https://view.example/checks/g.1"}) + if err != nil { + t.Fatal(err) + } + a, err := OwedAct(key, v) + if err != nil { + t.Fatal(err) + } + want := Call{Tool: "gitea.gitea_check_status", Args: map[string]any{"owner": "novox", "repo": "mesh-delivery", "sha": headA, + "context": "mesh/check", "state": "success", "description": "pass", "target_url": "https://view.example/checks/g.1"}} + if !reflect.DeepEqual(a.Call, want) { + t.Errorf("call = %+v, want %+v", a.Call, want) + } +} + func TestOwedViewNoteAndCommentCalls(t *testing.T) { // 1341/AC2 cases := []struct { act string diff --git a/modules/mesh-delivery-forge-bridge/manifest_test.go b/modules/mesh-delivery-forge-bridge/manifest_test.go index 40fb8a8..2653931 100644 --- a/modules/mesh-delivery-forge-bridge/manifest_test.go +++ b/modules/mesh-delivery-forge-bridge/manifest_test.go @@ -92,7 +92,7 @@ func TestManifestDeclarations(t *testing.T) { // 1235/AC1 if want := []string{"mesh-delivery-checker.owed", "mesh-delivery-gate.merges", "mesh-delivery-gate.owed"}; !reflect.DeepEqual(sorted(m.Reads), want) { t.Errorf("reads = %v, want %v", m.Reads, want) } - if want := []string{"gitea.gitea_add_comment", "gitea.gitea_commit_status", "gitea.gitea_commit_trees", "gitea.gitea_delivery_view", + if want := []string{"gitea.gitea_add_comment", "gitea.gitea_check_status", "gitea.gitea_commit_status", "gitea.gitea_commit_trees", "gitea.gitea_delivery_view", "gitea.gitea_get_file", "gitea.gitea_merge_pull_request", "gitea.gitea_note_append", "gitea.gitea_open_pulls"}; !reflect.DeepEqual(sorted(m.Invokes), want) { t.Errorf("invokes = %v, want %v", m.Invokes, want) } diff --git a/modules/mesh-delivery-forge-bridge/module.json b/modules/mesh-delivery-forge-bridge/module.json index d411e5f..895944a 100644 --- a/modules/mesh-delivery-forge-bridge/module.json +++ b/modules/mesh-delivery-forge-bridge/module.json @@ -23,6 +23,7 @@ "invokes": [ "gitea.gitea_merge_pull_request", "gitea.gitea_commit_status", + "gitea.gitea_check_status", "gitea.gitea_delivery_view", "gitea.gitea_note_append", "gitea.gitea_add_comment",