generate.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "io/fs"
  8. "log"
  9. "os"
  10. "path"
  11. "runtime"
  12. )
  13. type VersionInfo struct {
  14. Version string `json:"version"`
  15. BuildId int `json:"build_id"`
  16. TotalBuild int `json:"total_build"`
  17. }
  18. func main() {
  19. _, file, _, ok := runtime.Caller(0)
  20. if !ok {
  21. log.Print("Unable to get the current file")
  22. return
  23. }
  24. basePath := path.Join(path.Dir(file), "../../")
  25. versionFile, err := os.Open(path.Join(basePath, "app/dist/version.json"))
  26. if err != nil {
  27. if errors.Is(err, fs.ErrNotExist) {
  28. log.Print("\"dist/version.json\" not found, load from src instead")
  29. versionFile, err = os.Open(path.Join(basePath, "app/src/version.json"))
  30. }
  31. if err != nil {
  32. log.Fatal(err)
  33. return
  34. }
  35. }
  36. defer func(versionFile fs.File) {
  37. err := versionFile.Close()
  38. if err != nil {
  39. log.Fatal(err)
  40. }
  41. }(versionFile)
  42. // Read the version.json file
  43. data, err := io.ReadAll(versionFile)
  44. if err != nil {
  45. log.Fatalf("Failed to read version.json: %v", err)
  46. }
  47. // Parse the JSON data
  48. var versionInfo VersionInfo
  49. err = json.Unmarshal(data, &versionInfo)
  50. if err != nil {
  51. log.Fatalf("Failed to parse JSON: %v", err)
  52. }
  53. // Generate the version.gen.go file content
  54. genContent := fmt.Sprintf(`// Code generated by cmd/version/generate.go; DO NOT EDIT.
  55. package version
  56. func init() {
  57. Version = "%s"
  58. BuildId = %d
  59. TotalBuild = %d
  60. }
  61. `, versionInfo.Version, versionInfo.BuildId, versionInfo.TotalBuild)
  62. genPath := path.Join(basePath, "internal/version/version.gen.go")
  63. err = os.WriteFile(genPath, []byte(genContent), 0644)
  64. if err != nil {
  65. log.Fatalf("Failed to write version.gen.go: %v", err)
  66. }
  67. fmt.Println("version.gen.go has been generated successfully.")
  68. }