All of mesh-build-go's buildstep Go module leaves mesh-catalog for modules/mesh-delivery-sdk: the step run, fetch and release and the regenerate-and-compare step as the package steprun, the CPU share as steprun/buildcpu, the conformance kit as steprun/conformance, the seat generator as seatgen with cmd/seatgen, and cmd/mesh-pack. The three build modules and the builder's and checker's tests import the SDK and keep no copy; the SDK requires nothing of mesh-catalog. Code the build modules share is the delivery domain's SDK, not one module's package. It carries the build-module round's two new files of that package (dropdetected.go 247c422f, storedbuilds.go 904b8aed). Builds: design 47 G §464, §680, §327, §420, §495 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
//go:build integration
|
|
|
|
package steprun
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/forgekey"
|
|
)
|
|
|
|
func gitIn(t *testing.T, dir string, args ...string) string {
|
|
t.Helper()
|
|
cmd := exec.Command("git", append([]string{"-C", dir, "-c", "user.name=t", "-c", "user.email=t@example.invalid"}, args...)...)
|
|
out, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
t.Fatalf("git %v: %v\n%s", args, err, out)
|
|
}
|
|
return strings.TrimSpace(string(out))
|
|
}
|
|
|
|
// 1474/AC5: a local bare repository with a commit only under refs/pull/1/head (a file:// remote, allowed by the
|
|
// test-only option): the workspace's HEAD is the commit. The forge itself is proven live after the build
|
|
// modules' delivery (ADR 0466 §5).
|
|
func TestFetchCommitFromAPullRefOnly(t *testing.T) {
|
|
root := t.TempDir()
|
|
bare := filepath.Join(root, "r.git")
|
|
work := filepath.Join(root, "work")
|
|
for _, d := range []string{bare, work} {
|
|
if err := os.MkdirAll(d, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
gitIn(t, bare, "init", "-q", "--bare")
|
|
gitIn(t, work, "init", "-q")
|
|
if err := os.WriteFile(filepath.Join(work, "f"), []byte("x"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
gitIn(t, work, "add", "f")
|
|
gitIn(t, work, "commit", "-q", "-m", "pull request head")
|
|
commit := gitIn(t, work, "rev-parse", "HEAD")
|
|
gitIn(t, work, "push", "-q", bare, "HEAD:refs/pull/1/head")
|
|
|
|
ws := filepath.Join(root, "ws")
|
|
if err := os.MkdirAll(ws, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err := FetchCommit(context.Background(), forgekey.ExecRunner, ws, "file://"+bare, commit, "refs/pull/1/head", AllowFileRemote())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if head := gitIn(t, ws, "rev-parse", "HEAD"); head != commit {
|
|
t.Errorf("HEAD = %s, want %s", head, commit)
|
|
}
|
|
}
|