Report only fully hashed build artifacts
This commit is contained in:
@@ -521,6 +521,61 @@ func TestBuildReportsMissingMainPackage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildRetainsOnlyHashedArtifactsAfterReadFailure(t *testing.T) {
|
||||
repository := newBuildConsumer(t, "package main\nfunc main() {}\n")
|
||||
realGo, err := exec.LookPath("go")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
bin := t.TempDir()
|
||||
count := filepath.Join(t.TempDir(), "count")
|
||||
script := `#!/bin/sh
|
||||
if [ "$1" != build ]; then exec "$RELEASEKIT_REAL_GO" "$@"; fi
|
||||
output=
|
||||
previous=
|
||||
for arg in "$@"; do
|
||||
if [ "$previous" = -o ]; then output=$arg; fi
|
||||
previous=$arg
|
||||
done
|
||||
"$RELEASEKIT_REAL_GO" "$@" || exit $?
|
||||
if [ -f "$RELEASEKIT_BUILD_COUNT" ]; then
|
||||
rm "$output"
|
||||
mkdir "$output"
|
||||
else
|
||||
: > "$RELEASEKIT_BUILD_COUNT"
|
||||
fi
|
||||
`
|
||||
if err := os.WriteFile(filepath.Join(bin, "go"), []byte(script), 0o700); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Setenv("PATH", bin+string(os.PathListSeparator)+os.Getenv("PATH"))
|
||||
t.Setenv("RELEASEKIT_REAL_GO", realGo)
|
||||
t.Setenv("RELEASEKIT_BUILD_COUNT", count)
|
||||
secondArch := "arm64"
|
||||
if runtime.GOARCH == secondArch {
|
||||
secondArch = "amd64"
|
||||
}
|
||||
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}, {OS: runtime.GOOS, Arch: secondArch}}},
|
||||
})
|
||||
var pathErr *os.PathError
|
||||
if !errors.As(err, &pathErr) || !strings.Contains(err.Error(), "hash build output") || len(result.Artifacts) != 1 || len(result.Targets) != 2 || result.MainPackage != "./cmd/app" || result.BinaryName != "fixture" || result.CandidateCommit == "" || result.SourceVerified {
|
||||
t.Fatalf("partial build = %#v, error = %v", result, err)
|
||||
}
|
||||
contents, readErr := os.ReadFile(result.Artifacts[0].Path)
|
||||
if readErr != nil {
|
||||
t.Fatal(readErr)
|
||||
}
|
||||
digest := sha256.Sum256(contents)
|
||||
if result.Artifacts[0].SHA256 != hex.EncodeToString(digest[:]) {
|
||||
t.Fatalf("completed artifact digest = %q", result.Artifacts[0].SHA256)
|
||||
}
|
||||
if info, statErr := os.Stat(pathErr.Path); statErr != nil || !info.IsDir() {
|
||||
t.Fatalf("failed output was not retained: %v", statErr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildReportsIncorrectVersionOutputAndRetainsBinary(t *testing.T) {
|
||||
repository := newBuildConsumer(t, `package main
|
||||
import (
|
||||
|
||||
Reference in New Issue
Block a user