@@ -29,10 +29,12 @@ type RemoteAPI struct {
2929}
3030
3131type Release struct {
32- SHA string `json:"sha"`
33- Remote * RemoteSHA `json:"remote,omitempty"`
34- ExcludeTargets []string `json:"exclude_targets,omitempty"`
35- BuildContainer string `json:"build_container,omitempty"`
32+ SHA string `json:"sha"`
33+ Remote * RemoteSHA `json:"remote,omitempty"`
34+ ExcludeTargets []string `json:"exclude_targets,omitempty"`
35+ BuildContainer string `json:"build_container,omitempty"`
36+ SemVer string `json:"sem_ver,omitempty"`
37+ Version * semver.Version `json:"-"`
3638}
3739
3840type OptionFlag struct {
@@ -60,10 +62,10 @@ type VersionRef struct {
6062}
6163
6264type TargetsDef struct {
63- Releases map [VersionRef ]Release `json:"releases"`
64- OptionFlags OptionFlags `json:"flags"`
65- Tags map [string ]TagDef `json:"tags"`
66- Targets map [string ]Target `json:"targets"`
65+ Releases map [VersionRef ]* Release `json:"releases"`
66+ OptionFlags OptionFlags `json:"flags"`
67+ Tags map [string ]TagDef `json:"tags"`
68+ Targets map [string ]* Target `json:"targets"`
6769}
6870
6971func ReadTargetsDefFromBytes (data []byte ) (* TargetsDef , error ) {
@@ -74,6 +76,9 @@ func ReadTargetsDefFromBytes(data []byte) (*TargetsDef, error) {
7476 if err := defs .validateSHA (); err != nil {
7577 return nil , err
7678 }
79+ if err := defs .fillSemVer (); err != nil {
80+ return nil , err
81+ }
7782 defs .fillExcludeTargets ()
7883 return & defs , nil
7984}
@@ -125,9 +130,9 @@ func (opts OptionFlags) HasOptionValue(name, value string) bool {
125130 return false
126131}
127132
128- func (target Target ) SupportsVersion (r * VersionRef ) bool {
133+ func (target * Target ) SupportsRelease (r * Release ) bool {
129134 if len (target .VersionSupported .String ()) > 0 {
130- return target .VersionSupported .Check (& r . v )
135+ return target .VersionSupported .Check (r . Version )
131136 }
132137 return true
133138}
@@ -144,24 +149,38 @@ func (def *TargetsDef) validateSHA() error {
144149 return fmt .Errorf ("%v: %w" , k , err )
145150 }
146151 v .SHA = sha
147- def .Releases [k ] = v
148152 }
149153 }
150154 return nil
151155}
152156
153157func (def * TargetsDef ) fillExcludeTargets () {
154158 for k := range def .Releases {
155- exclude := make ([]string , 0 )
159+ r := def .Releases [k ]
160+ r .ExcludeTargets = make ([]string , 0 )
156161 for t := range def .Targets {
157- if ! def .Targets [t ].SupportsVersion ( & k ) {
158- exclude = append (exclude , t )
162+ if ! def .Targets [t ].SupportsRelease ( r ) {
163+ r . ExcludeTargets = append (r . ExcludeTargets , t )
159164 }
160165 }
166+ slices .Sort (r .ExcludeTargets )
167+ }
168+ }
169+
170+ func (def * TargetsDef ) fillSemVer () error {
171+ for k := range def .Releases {
161172 r := def .Releases [k ]
162- r .ExcludeTargets = exclude
163- def .Releases [k ] = r
173+ if r .SemVer != "" {
174+ if v , err := semver .NewVersion (r .SemVer ); err != nil {
175+ return err
176+ } else {
177+ r .Version = v
178+ }
179+ } else {
180+ r .Version = & k .v
181+ }
164182 }
183+ return nil
165184}
166185
167186func (def * TargetsDef ) IsRefSupported (ref string ) bool {
@@ -178,15 +197,15 @@ func (def *TargetsDef) IsTargetSupported(name, ref string) bool {
178197 if err != nil {
179198 return false
180199 }
181- _ , ok := def .Releases [* v ]
200+ r , ok := def .Releases [* v ]
182201 if ! ok {
183202 return false
184203 }
185204 target , ok := def .Targets [name ]
186205 if ! ok {
187206 return false
188207 }
189- return target .SupportsVersion ( v )
208+ return target .SupportsRelease ( r )
190209}
191210
192211func (def * TargetsDef ) IsOptionFlagSupported (target , name , value string ) bool {
@@ -265,12 +284,7 @@ func (def *TargetsDef) ExcludeTargetsFromRef(ref string) ([]string, error) {
265284 if ! ok {
266285 return nil , ErrMissingRef
267286 }
268-
269- excl := make ([]string , len (r .ExcludeTargets ))
270- copy (excl , r .ExcludeTargets )
271- slices .Sort (excl )
272-
273- return excl , nil
287+ return r .ExcludeTargets , nil
274288}
275289
276290func SetTargets (defs * TargetsDef ) {
0 commit comments