builder: order embedded files deterministically

This commit is contained in:
Elias Naur
2026-02-06 15:16:21 +01:00
committed by deadprogram
parent a846ee2321
commit fca8784dc3
+9 -4
View File
@@ -19,6 +19,7 @@ import (
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@@ -281,9 +282,13 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
allFiles[file.Name] = append(allFiles[file.Name], file) allFiles[file.Name] = append(allFiles[file.Name], file)
} }
} }
for name, files := range allFiles { // Sort embedded files by name to maintain output determinism.
name := name embedNames := make([]string, 0, len(allFiles))
files := files for _, files := range allFiles {
embedNames = append(embedNames, files[0].Name)
}
slices.Sort(embedNames)
for _, name := range embedNames {
job := &compileJob{ job := &compileJob{
description: "make object file for " + name, description: "make object file for " + name,
run: func(job *compileJob) error { run: func(job *compileJob) error {
@@ -298,7 +303,7 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
sum := sha256.Sum256(data) sum := sha256.Sum256(data)
hexSum := hex.EncodeToString(sum[:16]) hexSum := hex.EncodeToString(sum[:16])
for _, file := range files { for _, file := range allFiles[name] {
file.Size = uint64(len(data)) file.Size = uint64(len(data))
file.Hash = hexSum file.Hash = hexSum
if file.NeedsData { if file.NeedsData {