Regenerate local artifacts and invalidate stale receipts
This commit is contained in:
@@ -152,38 +152,45 @@ func main() {}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildRejectsUnsafeNameAndPreservesExistingOutput(t *testing.T) {
|
||||
repository := newBuildConsumer(t, "package main\nfunc main() {}\n")
|
||||
outputDir := filepath.Join(t.TempDir(), "artifacts")
|
||||
if err := os.MkdirAll(outputDir, 0o755); err != nil {
|
||||
func TestBuildRegeneratesOwnedOutputsAndPreservesUnrelatedFiles(t *testing.T) {
|
||||
const source = `package main
|
||||
import("fmt";"gitea.maximumdirect.net/eric/ReleaseKit/buildinfo")
|
||||
func main(){fmt.Println("fixture",buildinfo.Version())}
|
||||
`
|
||||
repository := newBuildConsumer(t, source)
|
||||
outputDir := t.TempDir()
|
||||
unrelated := filepath.Join(outputDir, "keep.txt")
|
||||
if err := os.WriteFile(unrelated, []byte("keep this file"), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ownedPath := filepath.Join(outputDir, "fixture-v1.2.3-linux-amd64")
|
||||
if err := os.WriteFile(ownedPath, []byte("keep this file"), 0o600); err != nil {
|
||||
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: outputDir}
|
||||
unsafe := request
|
||||
unsafe.Spec.BinaryName = "../unsafe"
|
||||
if _, err := releasekit.Build(context.Background(), unsafe); err == nil {
|
||||
t.Fatal("unsafe binary name accepted")
|
||||
}
|
||||
first, err := releasekit.Build(context.Background(), request)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
request := releasekit.BuildRequest{
|
||||
RepositoryDir: repository,
|
||||
Version: "v1.2.3",
|
||||
Spec: releasekit.BuildSpec{
|
||||
MainPackage: "./cmd/app",
|
||||
BinaryName: "fixture",
|
||||
Targets: []releasekit.Target{{OS: "linux", Arch: "amd64"}},
|
||||
},
|
||||
OutputDir: outputDir,
|
||||
repeated, err := releasekit.Build(context.Background(), request)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
unsafeRequest := request
|
||||
unsafeRequest.Spec.BinaryName = "../unsafe"
|
||||
if result, err := releasekit.Build(context.Background(), unsafeRequest); err == nil || !strings.Contains(err.Error(), "unsafe binary name") {
|
||||
t.Fatalf("Build() result = %#v, error = %v; expected unsafe-name failure", result, err)
|
||||
if repeated.Artifacts[0].SHA256 != first.Artifacts[0].SHA256 {
|
||||
t.Fatal("identical build changed output")
|
||||
}
|
||||
request.Spec.BinaryName = "fixture"
|
||||
if _, err := releasekit.Build(context.Background(), request); err == nil || !strings.Contains(err.Error(), "already exists") {
|
||||
t.Fatalf("Build() error = %v, want existing-output failure", err)
|
||||
writeBuildFixture(t, repository, "cmd/app/main.go", source+"\nfunc init(){if len([]byte(buildinfo.Version()))==0 {panic(\"changed build\")}}\n")
|
||||
changed, err := releasekit.Build(context.Background(), request)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
contents, err := os.ReadFile(ownedPath)
|
||||
if err != nil || string(contents) != "keep this file" {
|
||||
t.Fatalf("caller output = %q, error = %v", contents, err)
|
||||
if changed.Artifacts[0].SHA256 == first.Artifacts[0].SHA256 {
|
||||
t.Fatal("changed source did not regenerate binary")
|
||||
}
|
||||
content, err := os.ReadFile(unrelated)
|
||||
if err != nil || string(content) != "keep this file" {
|
||||
t.Fatalf("unrelated file=%q %v", content, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user