version.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package version
  2. import (
  3. "fmt"
  4. "runtime/debug"
  5. "strings"
  6. )
  7. // PostgreSQLCompatVersion is the PostgreSQL server version reported to clients
  8. // for driver compatibility. It is intentionally independent of the PizzaSQL
  9. // build version returned by String() and pizzasql_version().
  10. const PostgreSQLCompatVersion = "14.0"
  11. var (
  12. Version = "dev"
  13. Commit = "unknown"
  14. Date = "unknown"
  15. Dirty = ""
  16. )
  17. func init() {
  18. info, ok := debug.ReadBuildInfo()
  19. if !ok {
  20. return
  21. }
  22. for _, setting := range info.Settings {
  23. switch setting.Key {
  24. case "vcs.revision":
  25. if Commit == "unknown" && setting.Value != "" {
  26. Commit = shortCommit(setting.Value)
  27. }
  28. case "vcs.time":
  29. if Date == "unknown" && setting.Value != "" {
  30. Date = setting.Value
  31. }
  32. case "vcs.modified":
  33. if setting.Value == "true" {
  34. Dirty = "-dirty"
  35. }
  36. }
  37. }
  38. }
  39. func shortCommit(commit string) string {
  40. if len(commit) > 12 {
  41. return commit[:12]
  42. }
  43. return commit
  44. }
  45. func String() string {
  46. v := Version
  47. if v == "" || v == "dev" {
  48. v = Commit
  49. }
  50. if v == "" || v == "unknown" {
  51. v = "dev"
  52. }
  53. if Dirty != "" && !strings.HasSuffix(v, Dirty) {
  54. v += Dirty
  55. }
  56. if Date == "" || Date == "unknown" {
  57. return v
  58. }
  59. return fmt.Sprintf("%s_%s", v, normalizeDate(Date))
  60. }
  61. func normalizeDate(date string) string {
  62. d := strings.TrimSpace(date)
  63. if idx := strings.LastIndexAny(d, "+-"); idx > 0 {
  64. d = d[:idx] + "TZ" + d[idx+1:]
  65. }
  66. d = strings.ReplaceAll(d, "-", "_")
  67. d = strings.ReplaceAll(d, ":", "_")
  68. d = strings.ReplaceAll(d, " ", "_")
  69. return d
  70. }
  71. func PrometheusLabel() string {
  72. return strings.ReplaceAll(String(), "\"", "")
  73. }