Skip to content

Commit 79350b4

Browse files
committed
reproducible build
1 parent 1199e94 commit 79350b4

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

modules/assetfs/embed.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ type embeddedFS struct {
9797
}
9898

9999
type EmbeddedMeta struct {
100-
MaxModTime time.Time
101-
Root *embeddedFileInfo
100+
Root *embeddedFileInfo
102101
}
103102

104103
func NewEmbeddedFS(data []byte) fs.ReadDirFS {
@@ -254,7 +253,7 @@ func (fi *embeddedFileInfo) Mode() fs.FileMode {
254253
}
255254

256255
func (fi *embeddedFileInfo) ModTime() time.Time {
257-
return fi.fs.meta().MaxModTime
256+
return getExecutableModTime()
258257
}
259258

260259
func (fi *embeddedFileInfo) IsDir() bool {
@@ -273,6 +272,28 @@ func (fi *embeddedFileInfo) Info() (fs.FileInfo, error) {
273272
return fi, nil
274273
}
275274

275+
// getExecutableModTime returns the modification time of the executable file.
276+
// In bindata, we can't use the ModTime of the files because we need to make the build reproducible
277+
var getExecutableModTime = sync.OnceValue(func() (modTime time.Time) {
278+
exePath, err := os.Executable()
279+
if err != nil {
280+
return modTime
281+
}
282+
exePath, err = filepath.Abs(exePath)
283+
if err != nil {
284+
return modTime
285+
}
286+
exePath, err = filepath.EvalSymlinks(exePath)
287+
if err != nil {
288+
return modTime
289+
}
290+
st, err := os.Stat(exePath)
291+
if err != nil {
292+
return modTime
293+
}
294+
return st.ModTime()
295+
})
296+
276297
func GenerateEmbedBindata(fsRootPath, outputFile string) error {
277298
output, err := os.OpenFile(outputFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
278299
if err != nil {
@@ -290,7 +311,6 @@ func GenerateEmbedBindata(fsRootPath, outputFile string) error {
290311
return err
291312
}
292313
for _, dirEntry := range dirEntries {
293-
fi, err := dirEntry.Info()
294314
if err != nil {
295315
return err
296316
}
@@ -331,10 +351,6 @@ func GenerateEmbedBindata(fsRootPath, outputFile string) error {
331351
outputOffset += child.DataLen
332352

333353
parent.Children = append(parent.Children, child)
334-
modTime := fi.ModTime()
335-
if meta.MaxModTime.Before(modTime) {
336-
meta.MaxModTime = modTime
337-
}
338354
}
339355
}
340356
return nil

0 commit comments

Comments
 (0)