resource.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package resource
  2. import (
  3. _ "embed"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. //go:embed VERSION
  12. var version string
  13. var Version string
  14. var SemanticVersioning string
  15. //go:embed LICENSE
  16. var License string
  17. //go:embed REPORT
  18. var Report string
  19. //go:embed NAME
  20. var Name string
  21. //go:embed ENV_PREFIX
  22. var EnvPrefix string
  23. //go:embed build_date.dat.ignore
  24. var buildDateTxt string
  25. var BuildTime time.Time
  26. //go:embed commit_data.dat.ignore
  27. var GitCommitHash string
  28. //go:embed tag_data.dat.ignore
  29. var GitTag string
  30. //go:embed tag_commit_data.dat.ignore
  31. var GitTagCommitHash string
  32. //go:embed random_data.dat.ignore
  33. var randomData string
  34. func init() {
  35. initCleanFile() // 最先执行
  36. // 其他操作
  37. initName()
  38. initLicense()
  39. initBuildDate()
  40. initVersion()
  41. }
  42. func initCleanFile() {
  43. License = utilsClenFileDataMoreLine(License)
  44. Report = utilsClenFileDataMoreLine(Report)
  45. version = utilsClenFileData(version)
  46. Name = utilsClenFileData(Name)
  47. buildDateTxt = utilsClenFileData(buildDateTxt)
  48. GitCommitHash = utilsClenFileData(GitCommitHash)
  49. GitTag = utilsClenFileData(GitTag)
  50. GitTagCommitHash = utilsClenFileData(GitTagCommitHash)
  51. EnvPrefix = utilsClenFileData(EnvPrefix)
  52. }
  53. func initName() {
  54. if Name != "" {
  55. return
  56. }
  57. _args0, err := os.Executable()
  58. if err != nil {
  59. if len(os.Args) > 0 {
  60. _args0 = os.Args[0]
  61. } else {
  62. panic(fmt.Sprintf("name was empty: %s", err.Error()))
  63. }
  64. }
  65. if _args0 == "" {
  66. panic("name was empty")
  67. }
  68. _args0Name := filepath.Base(_args0)
  69. if _args0Name == "" {
  70. panic("name was empty")
  71. }
  72. _args0NamePosix := strings.TrimSuffix(_args0Name, ".exe")
  73. if _args0NamePosix == "" {
  74. panic("name was empty")
  75. }
  76. Name = _args0NamePosix
  77. }
  78. func initLicense() {
  79. License = strings.Split(License, "--- 下述为中文翻译,仅供参考,以上述英文协议原文为准。 ---")[0]
  80. License = strings.TrimRight(License, "\n")
  81. License = strings.TrimSpace(License)
  82. }
  83. func initBuildDate() {
  84. if buildDateTxt == "" {
  85. BuildTime = time.Now()
  86. return
  87. }
  88. res, err := strconv.ParseInt(buildDateTxt, 10, 64)
  89. if err != nil {
  90. panic(fmt.Sprintf("get build timestamp error: %s", err.Error()))
  91. }
  92. BuildTime = time.Unix(res, 0)
  93. }
  94. func initVersion() {
  95. ver := getDefaultVersion()
  96. if ver != "" {
  97. SemanticVersioning = ver
  98. Version = "v" + SemanticVersioning
  99. return
  100. }
  101. ver = getGitTagVersion()
  102. if ver != "" {
  103. SemanticVersioning = ver
  104. Version = "v" + SemanticVersioning
  105. return
  106. }
  107. ver = getRandomVersion()
  108. if ver != "" {
  109. SemanticVersioning = ver
  110. Version = "v" + SemanticVersioning
  111. return
  112. }
  113. panic("Get Version Failed")
  114. }
  115. func getDefaultVersion() (defVer string) {
  116. defVer = strings.TrimPrefix(strings.ToLower(version), "v")
  117. if defVer == "" || !utilsIsSemanticVersion(defVer) {
  118. return ""
  119. }
  120. return defVer
  121. }
  122. func getGitTagVersion() (gitVer string) {
  123. gitVer = strings.TrimPrefix(strings.ToLower(GitTag), "v")
  124. if GitCommitHash != "" && (GitTagCommitHash == "" || gitVer == "") {
  125. return fmt.Sprintf("0.0.0+dev.%d.%s", BuildTime.Unix(), GitCommitHash)
  126. } else if GitCommitHash != "" && GitTagCommitHash != "" && gitVer != "" && utilsIsSemanticVersion(gitVer) {
  127. if (GitCommitHash != GitTagCommitHash || strings.HasPrefix(gitVer, "0.")) && !strings.Contains(gitVer, "dev") {
  128. return gitVer + fmt.Sprintf("+dev.%d.%s", BuildTime.Unix(), GitCommitHash)
  129. }
  130. return gitVer
  131. } else {
  132. return ""
  133. }
  134. }
  135. func getRandomVersion() (randVer string) {
  136. return fmt.Sprintf("0.0.0+dev.%d.%s", BuildTime.Unix(), randomData)
  137. }