From 6cc2e43e64faf472eebbd98653a72471f9d936dc Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Tue, 19 May 2020 13:26:13 -0400 Subject: [PATCH] semver parsing fails pipeline step --- cmd/drone-docker/main.go | 7 ++++++- tags.go | 23 +++++++++++++---------- tags_test.go | 32 ++++++++++++++++++++++++++------ 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/cmd/drone-docker/main.go b/cmd/drone-docker/main.go index 80833e5..a1d92ba 100644 --- a/cmd/drone-docker/main.go +++ b/cmd/drone-docker/main.go @@ -298,10 +298,15 @@ func run(c *cli.Context) error { c.String("commit.ref"), c.String("repo.branch"), ) { - plugin.Build.Tags = docker.DefaultTagSuffix( + tag, err := docker.DefaultTagSuffix( c.String("commit.ref"), c.String("tags.suffix"), ) + if err != nil { + logrus.Printf("cannot build docker image for %s, invalid semantic version", c.String("commit.ref")) + return err + } + plugin.Build.Tags = tag } else { logrus.Printf("skipping automated docker build for %s", c.String("commit.ref")) return nil diff --git a/tags.go b/tags.go index 8972fcc..32114d9 100644 --- a/tags.go +++ b/tags.go @@ -9,10 +9,13 @@ import ( // DefaultTagSuffix returns a set of default suggested tags // based on the commit ref with an attached suffix. -func DefaultTagSuffix(ref, suffix string) []string { - tags := DefaultTags(ref) +func DefaultTagSuffix(ref, suffix string) ([]string, error) { + tags, err := DefaultTags(ref) + if err != nil { + return nil, err + } if len(suffix) == 0 { - return tags + return tags, nil } for i, tag := range tags { if tag == "latest" { @@ -21,7 +24,7 @@ func DefaultTagSuffix(ref, suffix string) []string { tags[i] = fmt.Sprintf("%s-%s", tag, suffix) } } - return tags + return tags, nil } func splitOff(input string, delim string) string { @@ -36,19 +39,19 @@ func splitOff(input string, delim string) string { // DefaultTags returns a set of default suggested tags based on // the commit ref. -func DefaultTags(ref string) []string { +func DefaultTags(ref string) ([]string, error) { if !strings.HasPrefix(ref, "refs/tags/") { - return []string{"latest"} + return []string{"latest"}, nil } v := stripTagPrefix(ref) version, err := semver.NewVersion(v) if err != nil { - return []string{"latest"} + return []string{"latest"}, err } if version.PreRelease != "" || version.Metadata != "" { return []string{ version.String(), - } + }, nil } v = stripTagPrefix(ref) @@ -59,13 +62,13 @@ func DefaultTags(ref string) []string { return []string{ 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), - } + }, nil } return []string{ 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), - } + }, nil } // UseDefaultTag for keep only default branch for latest tag diff --git a/tags_test.go b/tags_test.go index 49838d5..6c3feb2 100644 --- a/tags_test.go +++ b/tags_test.go @@ -34,20 +34,35 @@ func TestDefaultTags(t *testing.T) { {"refs/tags/1.0.0", []string{"1", "1.0", "1.0.0"}}, {"refs/tags/v1.0.0", []string{"1", "1.0", "1.0.0"}}, {"refs/tags/v1.0.0-alpha.1", []string{"1.0.0-alpha.1"}}, - - // malformed or errors - {"refs/tags/x1.0.0", []string{"latest"}}, - {"v1.0.0", []string{"latest"}}, } for _, test := range tests { - got, want := DefaultTags(test.Before), test.After + tags, err := DefaultTags(test.Before) + if err != nil { + t.Error(err) + continue + } + got, want := tags, test.After if !reflect.DeepEqual(got, want) { t.Errorf("Got tag %v, want %v", got, want) } } } +func TestDefaultTagsError(t *testing.T) { + var tests = []string{ + "refs/tags/x1.0.0", + "refs/tags/20190203", + } + + for _, test := range tests { + _, err := DefaultTags(test) + if err == nil { + t.Errorf("Expect tag error for %s", test) + } + } +} + func TestDefaultTagSuffix(t *testing.T) { var tests = []struct { Before string @@ -105,7 +120,12 @@ func TestDefaultTagSuffix(t *testing.T) { } for _, test := range tests { - got, want := DefaultTagSuffix(test.Before, test.Suffix), test.After + tag, err := DefaultTagSuffix(test.Before, test.Suffix) + if err != nil { + t.Error(err) + continue + } + got, want := tag, test.After if !reflect.DeepEqual(got, want) { t.Errorf("Got tag %v, want %v", got, want) }