diff --git a/tagging/tagging.go b/tagging/tagging.go index c9f0d56..97dd4b6 100644 --- a/tagging/tagging.go +++ b/tagging/tagging.go @@ -7,6 +7,16 @@ import ( "github.com/coreos/go-semver/semver" ) +func splitOff(input string, delim string) string { + parts := strings.SplitN(input, delim, 2) + + if len(parts) == 2 { + return parts[0] + } + + return input +} + // DefaultTags returns a set of default suggested tags. func DefaultTags(ref string) []string { if !strings.HasPrefix(ref, "refs/tags/") { @@ -27,17 +37,21 @@ func DefaultTags(ref string) []string { } } + v = stripTagPrefix(ref) + v = splitOff(splitOff(v, "+"), "-") + dotParts := strings.SplitN(v, ".", 3) + if version.Major == 0 { return []string{ - fmt.Sprintf("%d.%d", version.Major, version.Minor), - fmt.Sprintf("%d.%d.%d", version.Major, version.Minor, version.Patch), + fmt.Sprintf("%0*d.%0*d", len(dotParts[0]), version.Major, len(dotParts[1]), version.Minor), + fmt.Sprintf("%0*d.%0*d.%0*d", len(dotParts[0]), version.Major, len(dotParts[1]), version.Minor, len(dotParts[2]), version.Patch), } } return []string{ - fmt.Sprint(version.Major), - fmt.Sprintf("%d.%d", version.Major, version.Minor), - fmt.Sprintf("%d.%d.%d", version.Major, version.Minor, version.Patch), + fmt.Sprintf("%0*d", len(dotParts[0]), version.Major), + fmt.Sprintf("%0*d.%0*d", len(dotParts[0]), version.Major, len(dotParts[1]), version.Minor), + fmt.Sprintf("%0*d.%0*d.%0*d", len(dotParts[0]), version.Major, len(dotParts[1]), version.Minor, len(dotParts[2]), version.Patch), } } diff --git a/tagging/tagging_test.go b/tagging/tagging_test.go index 5f7de89..57bffbb 100644 --- a/tagging/tagging_test.go +++ b/tagging/tagging_test.go @@ -21,6 +21,7 @@ func TestDefaultTags(t *testing.T) { // malformed or errors {"refs/tags/x1.0.0", []string{"latest"}}, {"v1.0.0", []string{"latest"}}, + {"refs/tags/v18.06.0", []string{"18", "18.06", "18.06.0"}}, } for _, test := range tests {