Verify releases use original Git objects
This commit is contained in:
@@ -18,6 +18,41 @@ import (
|
||||
releasekit "go.maximumdirect.net/releasekit"
|
||||
)
|
||||
|
||||
func TestBuildReplacementDerivedSourceIsNotEligibleForDelivery(t *testing.T) {
|
||||
repository := newTaggedDeliveryConsumer(t)
|
||||
original := buildGit(t, repository, "rev-parse", "HEAD")
|
||||
mainPath := filepath.Join(repository, "cmd/app/main.go")
|
||||
main, err := os.ReadFile(mainPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
writeBuildFixture(t, repository, "cmd/app/main.go", string(main)+"\n// replacement source\n")
|
||||
buildGit(t, repository, "add", "cmd/app/main.go")
|
||||
buildGit(t, repository, "commit", "-m", "Replacement source")
|
||||
replacement := buildGit(t, repository, "rev-parse", "HEAD")
|
||||
buildGit(t, repository, "reset", "--hard", original)
|
||||
buildGit(t, repository, "replace", original, replacement)
|
||||
buildGit(t, repository, "reset", "--hard", original)
|
||||
result, err := releasekit.Build(context.Background(), releasekit.BuildRequest{
|
||||
RepositoryDir: repository, Version: "v1.2.3", OutputDir: t.TempDir(),
|
||||
Spec: releasekit.BuildSpec{MainPackage: "./cmd/app", BinaryName: "fixture", Targets: []releasekit.Target{{OS: runtime.GOOS, Arch: runtime.GOARCH}}},
|
||||
})
|
||||
if err != nil || result.SourceVerified || len(result.Artifacts) != 1 || result.CandidateCommit != original {
|
||||
t.Fatalf("replacement build = %#v, error = %v", result, err)
|
||||
}
|
||||
buildGit(t, repository, "replace", "-d", original)
|
||||
buildGit(t, repository, "reset", "--hard", original)
|
||||
server, remote := newFacadeDeliveryServer(t, repository)
|
||||
defer server.Close()
|
||||
delivery, err := releasekit.Deliver(context.Background(), releasekit.DeliveryRequest{
|
||||
RepositoryDir: repository, Product: "Fixture", Version: "v1.2.3",
|
||||
Destination: facadeDeliveryDestination(server.URL), Prebuilt: &result,
|
||||
})
|
||||
if err == nil || delivery.State != releasekit.DeliveryNotAttempted || remote.snapshot().writes != 0 {
|
||||
t.Fatalf("delivery of replacement build = %#v, error = %v", delivery, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildPreservesInvalidVersionAndDeclarationFailureEvidence(t *testing.T) {
|
||||
spec := releasekit.BuildSpec{MainPackage: "./cmd/app", BinaryName: "widget", Targets: []releasekit.Target{{OS: "linux", Arch: "amd64"}, {OS: "linux", Arch: "amd64"}}}
|
||||
invalid, err := releasekit.Build(context.Background(), releasekit.BuildRequest{
|
||||
|
||||
Reference in New Issue
Block a user