diff --git a/build_test.go b/build_test.go index 2e7f58c..78a46c4 100644 --- a/build_test.go +++ b/build_test.go @@ -475,7 +475,7 @@ func TestBuildSourceEligibilitySurvivesLaterCheckoutCleanup(t *testing.T) { import("fmt";"os";"gitea.maximumdirect.net/eric/ReleaseKit/buildinfo") func main(){ if len(os.Args)>1 && os.Args[1]=="version" {fmt.Println("fixture",buildinfo.Version())} } ` - for _, mode := range []string{"clean", "dirty before build", "changed during build"} { + for _, mode := range []string{"clean", "dirty before build", "changed during build", "commit during build"} { t.Run(mode, func(t *testing.T) { repository := newBuildConsumer(t, source) writeBuildFixture(t, repository, "docs/releases/v1.2.3.md", "# Fixture v1.2.3\n") @@ -488,8 +488,14 @@ func main(){ if len(os.Args)>1 && os.Args[1]=="version" {fmt.Println("fixture",b } var writer *sourceChangeWriter request := releasekit.BuildRequest{RepositoryDir: repository, Version: "v1.2.3", Spec: releasekit.BuildSpec{MainPackage: "./cmd/app", BinaryName: "fixture", Targets: []releasekit.Target{{OS: runtime.GOOS, Arch: runtime.GOARCH}}}, OutputDir: t.TempDir()} - if mode == "changed during build" { - writer = &sourceChangeWriter{change: mutate} + if mode == "changed during build" || mode == "commit during build" { + writer = &sourceChangeWriter{change: func() { + mutate() + if mode == "commit during build" { + buildGit(t, repository, "add", "--all") + buildGit(t, repository, "commit", "-m", "source advanced during compilation") + } + }} request.Output = writer } result, err := releasekit.Build(context.Background(), request) @@ -503,6 +509,7 @@ func main(){ if len(os.Args)>1 && os.Args[1]=="version" {fmt.Println("fixture",b return } buildGit(t, repository, "restore", "cmd/app/main.go") + buildGit(t, repository, "checkout", "--detach", "v1.2.3") delivered, err := releasekit.Deliver(context.Background(), releasekit.DeliveryRequest{RepositoryDir: repository, Product: "Fixture", Version: "v1.2.3", Build: &result}) if err == nil || !strings.Contains(err.Error(), "build source") || delivered.State != releasekit.DeliveryNotAttempted { t.Fatalf("dirty source delivered: %#v %v", delivered, err) diff --git a/docs/roadmap/remediation.md b/docs/roadmap/remediation.md index c41cabb..e98e05e 100644 --- a/docs/roadmap/remediation.md +++ b/docs/roadmap/remediation.md @@ -91,7 +91,8 @@ the supported API and CLI receipt path. set only after completed builds observe clean source and unchanged HEAD. Local dirty builds remain supported; binary delivery rejects their results and receipts even after checkout cleanup. API tests cover clean, initially dirty, -and changed-during-build source; a CLI regression covers receipt delivery after +changed-during-build source, and HEAD advancement; a CLI regression covers +receipt delivery after cleanup. The offline suite and public boundary checks pass. ### R2 — High: Some successful page writes are reported as not attempted