@@ -97,8 +97,7 @@ type embeddedFS struct {
9797}
9898
9999type EmbeddedMeta struct {
100- MaxModTime time.Time
101- Root * embeddedFileInfo
100+ Root * embeddedFileInfo
102101}
103102
104103func NewEmbeddedFS (data []byte ) fs.ReadDirFS {
@@ -254,7 +253,7 @@ func (fi *embeddedFileInfo) Mode() fs.FileMode {
254253}
255254
256255func (fi * embeddedFileInfo ) ModTime () time.Time {
257- return fi . fs . meta (). MaxModTime
256+ return getExecutableModTime ()
258257}
259258
260259func (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+
276297func 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