mesh/merge-gate head 66d22dd53eff merged into trunk 7ed119995f69 — pass: builds mesh-delivery → novox; no bus step; every machine composes with the change …
mesh/repo-check head 66d22dd53eff merged into trunk 7ed119995f69 — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh/delivery delivered
mesh/delivery-group group feat/350-one-build-per-change delivered: every member is delivered
A check's builds for its merge have no taker once the pull request closes unmerged, and the delivery should say whether a module was reused from the check or built, and why (novox/hq ADR 0350 §4, §5).
51 lines
2.1 KiB
Go
51 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// One build per change (novox/hq ADR 0350): a pull request closed unmerged has its check builds let go of, and a
|
|
// walk's record says per module whether its build reused a check's build or built, and why.
|
|
|
|
// A pull request closed unmerged asks the controller to let go of what its checks built for its merge (§5); one
|
|
// the controller cannot answer is said, never fatal.
|
|
func TestAPullRequestClosedUnmergedLetsGoOfItsCheckBuilds(t *testing.T) {
|
|
w := newWorldOver(t, newMemStore(), newFakeController(), newFakeForge(), atCC)
|
|
cc := pr(cat, 101, headCC, "feat/claude-code", "modules/claude-code/module.json")
|
|
w.h.PullUpdated(cc)
|
|
w.h.PullClosed(cc)
|
|
if want := []string{"novox/mesh-catalog#101"}; !reflect.DeepEqual(w.ctl.forgot, want) {
|
|
t.Fatalf("closed unmerged, the controller was asked to let go of %v", w.ctl.forgot)
|
|
}
|
|
if s := w.state(IDOf(cat, headCC)); s != Stopped {
|
|
t.Fatalf("closed unmerged it is %s", s)
|
|
}
|
|
|
|
w.ctl.down = true
|
|
du := pr(cat, 102, headDu, "feat/dunst", "modules/dunst/module.json")
|
|
w.h.PullUpdated(du)
|
|
w.h.PullClosed(du)
|
|
if s := w.state(IDOf(cat, headDu)); s != Stopped {
|
|
t.Fatalf("with the controller down, a closed delivery is %s", s)
|
|
}
|
|
}
|
|
|
|
// The walk's record says per module what its build did, and the delivery keeps it beside its walk (§4).
|
|
func TestAWalksRecordSaysWhetherEachModuleWasReusedOrBuilt(t *testing.T) {
|
|
walk := catWalk("plan-1", mergeCC, atCC.Add(time.Minute), "claude-code", "dunst")
|
|
walk.Modules["claude-code"].Made = "reused from the check of novox/mesh-catalog#101 at head cccccccccccc " +
|
|
"(merged into trunk 553b71910000): tools sha256:aa"
|
|
walk.Modules["dunst"].Made = "built: no check of novox/mesh-catalog#101 built it"
|
|
seen := walk.Seen()
|
|
if !strings.HasPrefix(seen.Built["claude-code"], "reused from the check of novox/mesh-catalog#101") ||
|
|
seen.Built["dunst"] != "built: no check of novox/mesh-catalog#101 built it" {
|
|
t.Fatalf("the delivery keeps %v", seen.Built)
|
|
}
|
|
if catWalk("plan-2", mergeCC, atCC, "dunst").Seen().Built != nil {
|
|
t.Fatal("a walk from a controller that says nothing of its builds reads as if it said something")
|
|
}
|
|
}
|