Prepare Sandwich Hime v1 release candidate source
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
package releaseartifact
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestPackageIsByteReproducible(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
binary := writeFixture(t, directory, "himesan", "native binary")
|
||||
license := writeFixture(t, directory, "LICENSE", "license")
|
||||
releaseNotes := writeFixture(t, directory, "RELEASE.md", "release")
|
||||
options := PackageOptions{
|
||||
Version: "v1.0.0-rc.1", Commit: strings.Repeat("a", 40), Tree: strings.Repeat("b", 40), GoVersion: "go1.27.0",
|
||||
GOOS: "darwin", GOARCH: "arm64", BinaryPath: binary, LicensePath: license,
|
||||
ReleaseNotes: releaseNotes, SourceDateEpoch: 1_700_000_000,
|
||||
}
|
||||
options.OutputDirectory = filepath.Join(directory, "first")
|
||||
first, err := Package(options)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
options.OutputDirectory = filepath.Join(directory, "second")
|
||||
second, err := Package(options)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if first.SHA256 != second.SHA256 {
|
||||
t.Fatalf("repeated packages differ: %s != %s", first.SHA256, second.SHA256)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteReceiptSortsGatesAndWritesChecksum(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "receipt.json")
|
||||
checksum, err := WriteReceipt(path, Receipt{
|
||||
Repository: "example.test/development-source", Commit: strings.Repeat("a", 40), Tree: strings.Repeat("b", 40),
|
||||
GOOS: "darwin", GOARCH: "arm64", GoVersion: "go1.27.0",
|
||||
RunnerVersion: "v3.3.0", RunnerName: "mac", GeneratedDigest: strings.Repeat("c", 64),
|
||||
SuccessfulGates: []string{"vet", "test"}, CompletedAt: time.Unix(1_700_000_000, 0).UTC().Format(time.RFC3339),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if checksum == "" {
|
||||
t.Fatal("empty checksum")
|
||||
}
|
||||
if _, err := os.Stat(path + ".sha256"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPackageRejectsUnsafeVersionAndExistingArtifact(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
options := PackageOptions{
|
||||
Version: "../../outside", Commit: strings.Repeat("a", 40), Tree: strings.Repeat("b", 40),
|
||||
GoVersion: "go1.27.0", GOOS: "darwin", GOARCH: "arm64",
|
||||
BinaryPath: writeFixture(t, directory, "himesan", "native binary"),
|
||||
LicensePath: writeFixture(t, directory, "LICENSE", "license"),
|
||||
ReleaseNotes: writeFixture(t, directory, "RELEASE.md", "release"),
|
||||
OutputDirectory: filepath.Join(directory, "output"), SourceDateEpoch: 1_700_000_000,
|
||||
}
|
||||
if _, err := Package(options); err == nil {
|
||||
t.Fatal("unsafe version was accepted")
|
||||
}
|
||||
options.Version = "v1.0.0-rc.1"
|
||||
if _, err := Package(options); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := Package(options); err == nil {
|
||||
t.Fatal("existing immutable artifact was overwritten")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDigestFilesBindsNamesAndBytes(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
one := writeFixture(t, directory, "one", "same")
|
||||
two := writeFixture(t, directory, "two", "same")
|
||||
forward, err := DigestFiles([]string{two, one})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
reverse, err := DigestFiles([]string{one, two})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if forward != reverse {
|
||||
t.Fatal("file ordering changed digest")
|
||||
}
|
||||
}
|
||||
|
||||
func writeFixture(t *testing.T, directory, name, contents string) string {
|
||||
t.Helper()
|
||||
path := filepath.Join(directory, name)
|
||||
if err := os.WriteFile(path, []byte(contents), 0o600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return path
|
||||
}
|
||||
Reference in New Issue
Block a user