tools/version-tracker/pkg/util/version/version.go (39 lines of code) (raw):

package version import ( "fmt" "os/exec" "regexp" "strings" "github.com/aws/eks-anywhere-build-tooling/tools/version-tracker/pkg/util/command" ) // GetGoVersion gets the Go version corresponding to the given Go binary // using the `go version -m` command. func GetGoVersion(goBinaryLocation string) (string, error) { goVersionCmd := exec.Command("go", "version", "-m", goBinaryLocation) commandOutput, err := command.ExecCommand(goVersionCmd) if err != nil { return "", fmt.Errorf("running Go version command: %v", err) } // The first line could be a warning, so no ^ in the sprintf below pattern := regexp.MustCompile(fmt.Sprintf(`%s: go(.*)\.\d+`, goBinaryLocation)) matches := pattern.FindStringSubmatch(commandOutput) return matches[1], nil } func EnsurePatchVersion(version string) string { hasLeadingV := (version[0] == 'v') // Remove 'v' prefix if present if hasLeadingV { version = strings.TrimPrefix(version, "v") } // Regular expression to match version components re := regexp.MustCompile(`^(\d+\.\d+)(?:\.(\d+))?(.*)$`) matches := re.FindStringSubmatch(version) if len(matches) < 2 { // If the version string doesn't match the expected format, return it unchanged return version } majorMinor := matches[1] patch := matches[2] metadata := matches[3] if patch == "" { // If patch version is missing, add ".0" version = fmt.Sprintf("%s.0%s", majorMinor, metadata) } if hasLeadingV { version = fmt.Sprintf("v%s", version) } // If patch version is present, return the original version return version }