version.go 1.3 KB

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