env.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package env
  2. import (
  3. "encoding/json"
  4. "os"
  5. "strings"
  6. )
  7. // GetGoctlVersion obtains from the environment variable GOCTL_VERSION, prior to 1.1.11,
  8. // the goctl version was 1.1.10 by default.
  9. // the goctl version is set at runtime in the environment variable GOCTL_VERSION,
  10. // see the detail at https://github.com/tal-tech/go-zero/blob/master/tools/goctl/goctl.go
  11. func GetGoctlVersion() string {
  12. currentVersion := os.Getenv("GOCTL_VERSION")
  13. if currentVersion == "" {
  14. currentVersion = "1.1.10"
  15. }
  16. return currentVersion
  17. }
  18. var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
  19. // IsVersionGatherThan compares whether the current goctl version
  20. // is gather than the target version
  21. func IsVersionGatherThan(version, target string) bool {
  22. versionNumber, versionTag := convertVersion(version)
  23. targetVersionNumber, targetTag := convertVersion(target)
  24. if versionNumber > targetVersionNumber {
  25. return true
  26. } else if versionNumber < targetVersionNumber {
  27. return false
  28. } else { // unchecked case, in normal, the goctl version does not contains suffix in release.
  29. return tag[versionTag] > tag[targetTag]
  30. }
  31. }
  32. // version format: number[.number]*(-tag)
  33. func convertVersion(version string) (versionNumber float64, tag string) {
  34. splits := strings.Split(version, "-")
  35. tag = strings.Join(splits[1:], "")
  36. var flag bool
  37. numberStr := strings.Map(func(r rune) rune {
  38. if r >= '0' && r <= '9' {
  39. return r
  40. }
  41. if r == '.' {
  42. if flag {
  43. return '_'
  44. }
  45. flag = true
  46. return r
  47. }
  48. return '_'
  49. }, splits[0])
  50. numberStr = strings.ReplaceAll(numberStr, "_", "")
  51. versionNumber, _ = json.Number(numberStr).Float64()
  52. return
  53. }