@@ -15,9 +15,7 @@ import (
1515 apiclient "github.com/flashbots/cvm-reverse-proxy/internal/api/client"
1616 "github.com/flashbots/cvm-reverse-proxy/internal/api/versionsapi"
1717 "github.com/flashbots/cvm-reverse-proxy/internal/logger"
18-
1918 "github.com/spf13/cobra"
20- "golang.org/x/mod/semver"
2119)
2220
2321func newAddCmd () * cobra.Command {
@@ -54,19 +52,8 @@ func runAdd(cmd *cobra.Command, _ []string) (retErr error) {
5452 return err
5553 }
5654 log := logger .NewTextLogger (flags .logLevel )
57- log .Debug ("Using flags" , "dryRun" , flags .dryRun , "kind" , flags .kind , "latest" , flags .latest , "ref" , flags .ref ,
58- "release" , flags .release , "stream" , flags .stream , "version" , flags .version )
59-
60- log .Debug ("Validating flags" )
61- if err := flags .validate (log ); err != nil {
62- return err
63- }
64-
65- log .Debug ("Creating version struct" )
66- ver , err := versionsapi .NewVersion (flags .ref , flags .stream , flags .version , flags .kind )
67- if err != nil {
68- return fmt .Errorf ("creating version: %w" , err )
69- }
55+ log .Debug ("Using flags" , "dryRun" , flags .dryRun , "kind" , flags .version .Kind (), "latest" , flags .latest , "ref" , flags .version .Ref (),
56+ "stream" , flags .version .Stream (), "version" , flags .version .Version ())
7057
7158 log .Debug ("Creating versions API client" )
7259 client , clientClose , err := versionsapi .NewClient (cmd .Context (), flags .region , flags .bucket , flags .distributionID , flags .dryRun , log )
@@ -81,35 +68,35 @@ func runAdd(cmd *cobra.Command, _ []string) (retErr error) {
8168 }()
8269
8370 log .Info ("Adding version" )
84- if err := ensureVersion (cmd .Context (), client , flags .kind , ver , versionsapi .GranularityMajor , log ); err != nil {
71+ if err := ensureVersion (cmd .Context (), client , flags .version , versionsapi .GranularityMajor , log ); err != nil {
8572 return err
8673 }
8774
88- if err := ensureVersion (cmd .Context (), client , flags .kind , ver , versionsapi .GranularityMinor , log ); err != nil {
75+ if err := ensureVersion (cmd .Context (), client , flags .version , versionsapi .GranularityMinor , log ); err != nil {
8976 return err
9077 }
9178
9279 if flags .latest {
93- if err := updateLatest (cmd .Context (), client , flags .kind , ver , log ); err != nil {
80+ if err := updateLatest (cmd .Context (), client , flags .version , log ); err != nil {
9481 return fmt .Errorf ("setting latest version: %w" , err )
9582 }
9683 }
9784
98- log .Info (fmt .Sprintf ("List major->minor URL: %s" , ver .ListURL (versionsapi .GranularityMajor )))
99- log .Info (fmt .Sprintf ("List minor->patch URL: %s" , ver .ListURL (versionsapi .GranularityMinor )))
85+ log .Info (fmt .Sprintf ("List major->minor URL: %s" , flags . version .ListURL (versionsapi .GranularityMajor )))
86+ log .Info (fmt .Sprintf ("List minor->patch URL: %s" , flags . version .ListURL (versionsapi .GranularityMinor )))
10087
10188 return nil
10289}
10390
104- func ensureVersion (ctx context.Context , client * versionsapi.Client , kind versionsapi. VersionKind , ver versionsapi.Version , gran versionsapi.Granularity ,
91+ func ensureVersion (ctx context.Context , client * versionsapi.Client , ver versionsapi.Version , gran versionsapi.Granularity ,
10592 log * slog.Logger ,
10693) error {
10794 verListReq := versionsapi.List {
10895 Ref : ver .Ref (),
10996 Stream : ver .Stream (),
11097 Granularity : gran ,
11198 Base : ver .WithGranularity (gran ),
112- Kind : kind ,
99+ Kind : ver . Kind () ,
113100 }
114101 verList , err := client .FetchVersionList (ctx , verListReq )
115102 var notFoundErr * apiclient.NotFoundError
@@ -141,11 +128,11 @@ func ensureVersion(ctx context.Context, client *versionsapi.Client, kind version
141128 return nil
142129}
143130
144- func updateLatest (ctx context.Context , client * versionsapi.Client , kind versionsapi. VersionKind , ver versionsapi.Version , log * slog.Logger ) error {
131+ func updateLatest (ctx context.Context , client * versionsapi.Client , ver versionsapi.Version , log * slog.Logger ) error {
145132 latest := versionsapi.Latest {
146133 Ref : ver .Ref (),
147134 Stream : ver .Stream (),
148- Kind : kind ,
135+ Kind : ver . Kind () ,
149136 }
150137 latest , err := client .FetchVersionLatest (ctx , latest )
151138 var notFoundErr * apiclient.NotFoundError
@@ -165,7 +152,7 @@ func updateLatest(ctx context.Context, client *versionsapi.Client, kind versions
165152 Ref : ver .Ref (),
166153 Stream : ver .Stream (),
167154 Version : ver .Version (),
168- Kind : kind ,
155+ Kind : ver . Kind () ,
169156 }
170157 if err := client .UpdateVersionLatest (ctx , latest ); err != nil {
171158 return fmt .Errorf ("updating latest version: %w" , err )
@@ -175,60 +162,20 @@ func updateLatest(ctx context.Context, client *versionsapi.Client, kind versions
175162}
176163
177164type addFlags struct {
178- version string
179- stream string
180- ref string
181- release bool
165+ version versionsapi.Version
182166 latest bool
183167 dryRun bool
184168 region string
185169 bucket string
186170 distributionID string
187- kind versionsapi.VersionKind
188171 logLevel slog.Level
189172}
190173
191- func (f * addFlags ) validate (log * slog.Logger ) error {
192- if ! semver .IsValid (f .version ) {
193- return fmt .Errorf ("version %q is not a valid semantic version" , f .version )
194- }
195- if semver .Canonical (f .version ) != f .version {
196- return fmt .Errorf ("version %q is not a canonical semantic version" , f .version )
197- }
198-
199- if f .ref == "" && ! f .release {
200- return fmt .Errorf ("either --ref or --release must be set" )
201- }
202-
203- if f .kind == versionsapi .VersionKindUnknown {
204- return fmt .Errorf ("unknown version kind %q" , f .kind )
205- }
206-
207- if f .release {
208- log .Debug (fmt .Sprintf ("Setting ref to %q, as release flag is set" , versionsapi .ReleaseRef ))
209- f .ref = versionsapi .ReleaseRef
210- } else {
211- log .Debug ("Setting latest to true, as release flag is not set" )
212- f .latest = true // always set latest for non-release versions
213- }
214-
215- if err := versionsapi .ValidateRef (f .ref ); err != nil {
216- return fmt .Errorf ("invalid ref %w" , err )
217- }
218-
219- if err := versionsapi .ValidateStream (f .ref , f .stream ); err != nil {
220- return fmt .Errorf ("invalid stream %w" , err )
221- }
222-
223- return nil
224- }
225-
226174func parseAddFlags (cmd * cobra.Command ) (addFlags , error ) {
227175 ref , err := cmd .Flags ().GetString ("ref" )
228176 if err != nil {
229177 return addFlags {}, err
230178 }
231- ref = versionsapi .CanonicalizeRef (ref )
232179 stream , err := cmd .Flags ().GetString ("stream" )
233180 if err != nil {
234181 return addFlags {}, err
@@ -275,17 +222,24 @@ func parseAddFlags(cmd *cobra.Command) (addFlags, error) {
275222 return addFlags {}, err
276223 }
277224
225+ if release {
226+ ref = versionsapi .ReleaseRef
227+ } else {
228+ latest = true // always set latest for non-release versions
229+ }
230+
231+ ver , err := versionsapi .NewVersion (ref , stream , version , kind )
232+ if err != nil {
233+ return addFlags {}, fmt .Errorf ("creating version: %w" , err )
234+ }
235+
278236 return addFlags {
279- version : version ,
280- stream : stream ,
281- ref : versionsapi .CanonicalizeRef (ref ),
282- release : release ,
237+ version : ver ,
283238 latest : latest ,
284239 dryRun : dryRun ,
285240 region : region ,
286241 bucket : bucket ,
287242 distributionID : distributionID ,
288243 logLevel : logLevel ,
289- kind : kind ,
290244 }, nil
291245}
0 commit comments