Verify build source eligibility after HEAD advancement
This commit is contained in:
@@ -475,7 +475,7 @@ func TestBuildSourceEligibilitySurvivesLaterCheckoutCleanup(t *testing.T) {
|
|||||||
import("fmt";"os";"gitea.maximumdirect.net/eric/ReleaseKit/buildinfo")
|
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())} }
|
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) {
|
t.Run(mode, func(t *testing.T) {
|
||||||
repository := newBuildConsumer(t, source)
|
repository := newBuildConsumer(t, source)
|
||||||
writeBuildFixture(t, repository, "docs/releases/v1.2.3.md", "# Fixture v1.2.3\n")
|
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
|
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()}
|
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" {
|
if mode == "changed during build" || mode == "commit during build" {
|
||||||
writer = &sourceChangeWriter{change: mutate}
|
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
|
request.Output = writer
|
||||||
}
|
}
|
||||||
result, err := releasekit.Build(context.Background(), request)
|
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
|
return
|
||||||
}
|
}
|
||||||
buildGit(t, repository, "restore", "cmd/app/main.go")
|
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})
|
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 {
|
if err == nil || !strings.Contains(err.Error(), "build source") || delivered.State != releasekit.DeliveryNotAttempted {
|
||||||
t.Fatalf("dirty source delivered: %#v %v", delivered, err)
|
t.Fatalf("dirty source delivered: %#v %v", delivered, err)
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ the supported API and CLI receipt path.
|
|||||||
set only after completed builds observe clean source and unchanged HEAD. Local
|
set only after completed builds observe clean source and unchanged HEAD. Local
|
||||||
dirty builds remain supported; binary delivery rejects their results and
|
dirty builds remain supported; binary delivery rejects their results and
|
||||||
receipts even after checkout cleanup. API tests cover clean, initially dirty,
|
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.
|
cleanup. The offline suite and public boundary checks pass.
|
||||||
|
|
||||||
### R2 — High: Some successful page writes are reported as not attempted
|
### R2 — High: Some successful page writes are reported as not attempted
|
||||||
|
|||||||
Reference in New Issue
Block a user