version.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package version
  2. import (
  3. "encoding/json"
  4. "strings"
  5. )
  6. // BuildVersion is the version of goctl.
  7. const BuildVersion = "1.2.3"
  8. // GetGoctlVersion returns BuildVersion
  9. func GetGoctlVersion() string {
  10. return BuildVersion
  11. }
  12. var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
  13. // IsVersionGreaterThan compares whether the current goctl version
  14. // is greater than the target version
  15. func IsVersionGreaterThan(version, target string) bool {
  16. versionNumber, versionTag := convertVersion(version)
  17. targetVersionNumber, targetTag := convertVersion(target)
  18. if versionNumber > targetVersionNumber {
  19. return true
  20. } else if versionNumber < targetVersionNumber {
  21. return false
  22. } else { // unchecked case, in normal, the goctl version does not contains suffix in release.
  23. return tag[versionTag] > tag[targetTag]
  24. }
  25. }
  26. // version format: number[.number]*(-tag)
  27. func convertVersion(version string) (versionNumber float64, tag string) {
  28. splits := strings.Split(version, "-")
  29. tag = strings.Join(splits[1:], "")
  30. var flag bool
  31. numberStr := strings.Map(func(r rune) rune {
  32. if r >= '0' && r <= '9' {
  33. return r
  34. }
  35. if r == '.' {
  36. if flag {
  37. return '_'
  38. }
  39. flag = true
  40. return r
  41. }
  42. return '_'
  43. }, splits[0])
  44. numberStr = strings.Replace(numberStr, "_", "", -1)
  45. versionNumber, _ = json.Number(numberStr).Float64()
  46. return
  47. }