// Patial Tech. // Author, Ankit Patial package main import ( "runtime/debug" "strings" ) // Version returns the version of the pgm CLI tool. // It tries to detect the version in the following order: // 1. Build-time ldflags (set via: go build -ldflags "-X main.version=v1.2.3") // 2. VCS information from build metadata (git tag/commit) // 3. Falls back to "dev" if no version information is available func Version() string { // If version was set at build time via ldflags if version != "" && version != "dev" { return version } // Try to get version from build info (Go 1.18+) if info, ok := debug.ReadBuildInfo(); ok { // Check for version in main module if info.Main.Version != "" && info.Main.Version != "(devel)" { return info.Main.Version } // Try to extract from VCS information var revision, modified string for _, setting := range info.Settings { switch setting.Key { case "vcs.revision": revision = setting.Value case "vcs.modified": modified = setting.Value } } // If we have a git revision if revision != "" { // Shorten commit hash to 7 characters if len(revision) > 7 { revision = revision[:7] } // Add -dirty suffix if modified if modified == "true" { return "dev-" + revision + "-dirty" } return "dev-" + revision } } // Fallback to dev return "dev" } // GetVersionString returns a formatted version string for display func GetVersionString() string { v := Version() // Clean up version string for display v = strings.TrimPrefix(v, "v") return "v" + v }