From 9a3cde1bf8a9179ff7b78fcee2d846b05a3a5cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Garc=C3=ADa=20Veytia=20=28Puerco=29?= Date: Wed, 28 Apr 2021 18:05:43 -0500 Subject: [PATCH 1/3] Improve release.IsValidReleaseBuild() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adolfo García Veytia (Puerco) --- pkg/release/release.go | 4 ++++ pkg/release/release_test.go | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/pkg/release/release.go b/pkg/release/release.go index bdfbe4fc5e2..8992469e36a 100644 --- a/pkg/release/release.go +++ b/pkg/release/release.go @@ -210,6 +210,10 @@ func ReadDockerizedVersion(workDir string) (string, error) { // IsValidReleaseBuild checks if build version is valid for release. func IsValidReleaseBuild(build string) (bool, error) { + // If the tag has a plus sign, then we force the versionBuildRe to match + if strings.Contains(build, "+") { + return regexp.MatchString("("+versionReleaseRE+`(\.`+versionBuildRE+")"+versionDirtyRE+"?)", build) + } return regexp.MatchString("("+versionReleaseRE+`(\.`+versionBuildRE+")?"+versionDirtyRE+"?)", build) } diff --git a/pkg/release/release_test.go b/pkg/release/release_test.go index 3d2d2cc4ac1..d3a2f092415 100644 --- a/pkg/release/release_test.go +++ b/pkg/release/release_test.go @@ -331,6 +331,23 @@ func TestIsValidReleaseBuild(t *testing.T) { rErr: false, }, }, + "InvalidCopiedBuild": { + // This trimmed tag often gets copied when double clicking + // on the CloudBuild console: + build: "v1.22.0-alpha.0.787+e6", + want: want{ + r: false, + rErr: false, + }, + }, + "ValidCopiedBuild": { + // Full tag from previous test case: + build: "v1.22.0-alpha.0.787+e6b4fa381152d6", + want: want{ + r: true, + rErr: false, + }, + }, } for name, tc := range cases { From c9001231893daa3def552f41d421cf0706cedac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Garc=C3=ADa=20Veytia=20=28Puerco=29?= Date: Wed, 28 Apr 2021 18:07:50 -0500 Subject: [PATCH 2/3] Use IsValidReleaseBuild() in ReleaseOptions.Validate() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adolfo García Veytia (Puerco) --- pkg/anago/anago.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/anago/anago.go b/pkg/anago/anago.go index bec109a4a77..651c5afc371 100644 --- a/pkg/anago/anago.go +++ b/pkg/anago/anago.go @@ -99,6 +99,15 @@ func (o *Options) Validate(state *State) error { return errors.Errorf("invalid release branch: %s", o.ReleaseBranch) } + // Verify the build version is correct: + correct, err := release.IsValidReleaseBuild(o.BuildVersion) + if err != nil { + return errors.Wrap(err, "checking for a valid build version") + } + if !correct { + return errors.New("invalid BuildVersion specified") + } + semverBuildVersion, err := util.TagStringToSemver(o.BuildVersion) if err != nil { return errors.Wrapf(err, "invalid build version: %s", o.BuildVersion) From 5f40fcbf39776b07ba172a4759aeef3588dacf2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Garc=C3=ADa=20Veytia=20=28Puerco=29?= Date: Wed, 28 Apr 2021 18:08:54 -0500 Subject: [PATCH 3/3] Perform local options validation before submitting GCB job MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adolfo García Veytia (Puerco) --- cmd/krel/cmd/release.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmd/krel/cmd/release.go b/cmd/krel/cmd/release.go index 8be024ad169..4b5871d7d3f 100644 --- a/cmd/krel/cmd/release.go +++ b/cmd/krel/cmd/release.go @@ -20,6 +20,7 @@ import ( "fmt" "strings" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -132,7 +133,13 @@ func init() { func runRelease(options *anago.ReleaseOptions) error { options.NoMock = rootOpts.nomock rel := anago.NewRelease(options) + if submitJob { + // Perform a local check of the specified options + // before launching a Cloud Build job: + if err := options.Validate(&anago.State{}); err != nil { + return errors.Wrap(err, "prechecking release options") + } return rel.Submit(stream) } return rel.Run()