files.go 888 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package assets
  2. import (
  3. "crypto/md5"
  4. "embed"
  5. "encoding/hex"
  6. "io"
  7. "io/fs"
  8. "log/slog"
  9. "strconv"
  10. "time"
  11. )
  12. //go:embed static
  13. var _publicFS embed.FS
  14. //go:embed templates
  15. var _templateFS embed.FS
  16. var PublicFS, _ = fs.Sub(_publicFS, "static")
  17. var TemplateFS, _ = fs.Sub(_templateFS, "templates")
  18. func getFSHash(files fs.FS) string {
  19. hash := md5.New()
  20. err := fs.WalkDir(files, ".", func(path string, d fs.DirEntry, err error) error {
  21. if err != nil {
  22. return err
  23. }
  24. if d.IsDir() {
  25. return nil
  26. }
  27. file, err := files.Open(path)
  28. if err != nil {
  29. return err
  30. }
  31. if _, err := io.Copy(hash, file); err != nil {
  32. return err
  33. }
  34. return nil
  35. })
  36. if err == nil {
  37. return hex.EncodeToString(hash.Sum(nil))[:10]
  38. }
  39. slog.Warn("Could not compute assets cache", "err", err)
  40. return strconv.FormatInt(time.Now().Unix(), 10)
  41. }
  42. var PublicFSHash = getFSHash(PublicFS)