@@ -7,11 +7,13 @@ import (
77 "regexp"
88 "strings"
99
10+ "github.com/blang/semver"
1011 "github.com/onsi/ginkgo/v2"
1112 configassets "github.com/scylladb/scylla-operator/assets/config"
1213 scyllav1 "github.com/scylladb/scylla-operator/pkg/api/scylla/v1"
1314 "github.com/scylladb/scylla-operator/pkg/genericclioptions"
1415 "github.com/scylladb/scylla-operator/pkg/helpers/slices"
16+ scyllasemver "github.com/scylladb/scylla-operator/pkg/semver"
1517 "github.com/scylladb/scylla-operator/test/e2e/framework"
1618 "github.com/spf13/cobra"
1719 apierrors "k8s.io/apimachinery/pkg/util/errors"
@@ -27,7 +29,7 @@ const (
2729 digestRegexp = `[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`
2830)
2931
30- var tagWithOptionalDigestRegexp = regexp .MustCompile ("^" + referenceTagRegexp + "(?:@" + digestRegexp + ")?$" )
32+ var tagOrDigestRegexp = regexp .MustCompile ("^(?: " + referenceTagRegexp + "(?:@" + digestRegexp + ")?|" + digestRegexp + ") $" )
3133
3234type IngressControllerOptions struct {
3335 Address string
@@ -191,37 +193,64 @@ func (o *TestFrameworkOptions) Validate(args []string) error {
191193 errors = append (errors , fmt .Errorf ("gcs-service-account-key-path and s3-credentials-file-path can't be set simultanously" ))
192194 }
193195
194- if ! tagWithOptionalDigestRegexp .MatchString (o .ScyllaDBVersion ) {
196+ if ! tagOrDigestRegexp .MatchString (o .ScyllaDBVersion ) {
195197 errors = append (errors , fmt .Errorf (
196- "invalid scylladb-version format: %q. Expected format: <tag>[ @<digest>] " ,
198+ "invalid scylladb-version format: %q. Expected format: <tag>, <tag> @<digest>, or <digest> " ,
197199 o .ScyllaDBVersion ,
198200 ))
199201 }
200202
201- if ! tagWithOptionalDigestRegexp .MatchString (o .ScyllaDBUpdateFrom ) {
203+ if _ , err := semver .Parse (o .ScyllaDBVersion ); err != nil {
204+ semScyllaDBVersion , fullScyllaDBVersion , err := scyllasemver .GetImageVersionAndDigest ("scylla" , o .ScyllaDBVersion )
205+ if err != nil {
206+ return fmt .Errorf ("failed to resolve ScyllaDB version: %w" , err )
207+ }
208+ fmt .Println ("Extracted ScyllaDB version:" , fullScyllaDBVersion )
209+ o .ScyllaDBVersion = semScyllaDBVersion
210+ }
211+
212+ if ! tagOrDigestRegexp .MatchString (o .ScyllaDBUpdateFrom ) {
202213 errors = append (errors , fmt .Errorf (
203- "invalid scylladb-update-from-version format: %q. Expected format: <tag>[ @<digest>] " ,
214+ "invalid scylladb-update-from-version format: %q. Expected format: <tag>, <tag> @<digest>, or <digest> " ,
204215 o .ScyllaDBUpdateFrom ,
205216 ))
206217 }
207218
208- if ! tagWithOptionalDigestRegexp .MatchString (o .ScyllaDBUpgradeFrom ) {
219+ if _ , err := semver .Parse (o .ScyllaDBUpdateFrom ); err != nil {
220+ semScyllaDBUpdateFromVersion , fullScyllaDBUpdateFromVersion , err := scyllasemver .GetImageVersionAndDigest ("scylla" , o .ScyllaDBUpdateFrom )
221+ if err != nil {
222+ return fmt .Errorf ("failed to resolve ScyllaDB update from version: %w" , err )
223+ }
224+ fmt .Println ("Extracted ScyllaDB update from version:" , fullScyllaDBUpdateFromVersion )
225+ o .ScyllaDBUpdateFrom = semScyllaDBUpdateFromVersion
226+ }
227+
228+ if ! tagOrDigestRegexp .MatchString (o .ScyllaDBUpgradeFrom ) {
209229 errors = append (errors , fmt .Errorf (
210- "invalid scylladb-upgrade-from-version format: %q. Expected format: <tag>[ @<digest>] " ,
230+ "invalid scylladb-upgrade-from-version format: %q. Expected format: <tag>, <tag> @<digest>, or <digest> " ,
211231 o .ScyllaDBUpgradeFrom ,
212232 ))
213233 }
214234
215- if ! tagWithOptionalDigestRegexp .MatchString (o .ScyllaDBManagerVersion ) {
235+ if _ , err := semver .Parse (o .ScyllaDBUpgradeFrom ); err != nil {
236+ semScyllaDBUpgradeFromVersion , fullScyllaDBUpgradeFromVersion , err := scyllasemver .GetImageVersionAndDigest ("scylla" , o .ScyllaDBUpgradeFrom )
237+ if err != nil {
238+ return fmt .Errorf ("failed to resolve ScyllaDB upgrade from version: %w" , err )
239+ }
240+ fmt .Println ("Extracted ScyllaDB upgrade from version:" , fullScyllaDBUpgradeFromVersion )
241+ o .ScyllaDBUpgradeFrom = semScyllaDBUpgradeFromVersion
242+ }
243+
244+ if ! tagOrDigestRegexp .MatchString (o .ScyllaDBManagerVersion ) {
216245 errors = append (errors , fmt .Errorf (
217- "invalid scylladb-manager-version format: %q. Expected format: <tag>[ @<digest>] " ,
246+ "invalid scylladb-manager-version format: %q. Expected format: <tag>, <tag> @<digest>, or <digest> " ,
218247 o .ScyllaDBManagerVersion ,
219248 ))
220249 }
221250
222- if ! tagWithOptionalDigestRegexp .MatchString (o .ScyllaDBManagerAgentVersion ) {
251+ if ! tagOrDigestRegexp .MatchString (o .ScyllaDBManagerAgentVersion ) {
223252 errors = append (errors , fmt .Errorf (
224- "invalid scylladb-manager-agent-version format: %q. Expected format: <tag>[ @<digest>] " ,
253+ "invalid scylladb-manager-agent-version format: %q. Expected format: <tag>, <tag> @<digest>, or <digest> " ,
225254 o .ScyllaDBManagerAgentVersion ,
226255 ))
227256 }
0 commit comments