grafana/pkg/build/versions/parse.go
Kevin Minehart 7a2edd35d5
CI: Support more version formats in publishing (#94575)
* cleanup dead code
* add tests and rewrite publish grafanacom steps to reuse
* add pkg/build tests; don't upload CDN assets on grafana releases
2024-10-15 09:27:13 -05:00

32 lines
903 B
Go

package versions
import "regexp"
var semverRegex = regexp.MustCompile(`^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`)
type Semver struct {
Major string
Minor string
Patch string
Prerelease string
BuildMetadata string
}
func ParseSemver(version string) Semver {
matches := semverRegex.FindStringSubmatch(version)
results := make(map[string]string)
for i, name := range semverRegex.SubexpNames() {
if i != 0 && name != "" {
results[name] = matches[i]
}
}
return Semver{
Major: results["major"],
Minor: results["minor"],
Patch: results["patch"],
Prerelease: results["prerelease"],
BuildMetadata: results["buildmetadata"],
}
}