@@ -197,6 +197,8 @@ func (b *bundleParser) derivedProperties(bundle *Bundle) ([]Property, error) {
197197 }
198198 }
199199
200+ // nolint:nestif
201+ // existing code triggering nested complexity, but at least will not make worse with release processing
200202 if bundle .Annotations != nil && bundle .Annotations .PackageName != "" {
201203 pkg := bundle .Annotations .PackageName
202204 version , err := bundle .Version ()
@@ -208,18 +210,9 @@ func (b *bundleParser) derivedProperties(bundle *Bundle) ([]Property, error) {
208210 return nil , err
209211 }
210212 if release == "" && csv .GetSubstitutesFor () != "" {
211- // if the bundle expresses no release version, but
212- // includes the substitutesFor annotation, then we
213- // interpret any build metadata in the version as
214- // the release version.
215- // failure to parse build metadata under these conditions is fatal,
216- // though validation is later
217- parts := strings .SplitN (version , "+" , 2 )
218- if len (parts ) == 2 {
219- version = parts [0 ]
220- release = parts [1 ]
221- } else {
222- return nil , fmt .Errorf ("bundle %q with has substitutesFor annotation but release version not expressed as build metadata: %q" , bundle .Name , version )
213+ version , release , err = extractReleaseVersionFromBuildMetadata (version )
214+ if err != nil {
215+ return nil , fmt .Errorf ("bundle %q error: %v" , bundle .Name , err )
223216 }
224217 }
225218
@@ -232,7 +225,7 @@ func (b *bundleParser) derivedProperties(bundle *Bundle) ([]Property, error) {
232225 return nil , fmt .Errorf ("failed to marshal package property: %s" , err )
233226 }
234227
235- // Annotations file takes precedent over CSV annotations
228+ // Annotations file takes precedence over CSV annotations
236229 derived = append ([]Property {{Type : PackageType , Value : value }}, derived ... )
237230 }
238231
@@ -273,3 +266,21 @@ func propertySet(properties []Property) []Property {
273266
274267 return set
275268}
269+
270+ func extractReleaseVersionFromBuildMetadata (substitutesFor string ) (string , string , error ) {
271+ var version , release string
272+ // if the bundle expresses no release version, but
273+ // includes the substitutesFor annotation, then we
274+ // interpret any build metadata in the version as
275+ // the release version.
276+ // failure to parse build metadata under these conditions is fatal,
277+ // though validation is later
278+ parts := strings .SplitN (substitutesFor , "+" , 2 )
279+ if len (parts ) == 2 {
280+ version = parts [0 ]
281+ release = parts [1 ]
282+ } else {
283+ return "" , "" , fmt .Errorf ("no release version expressed as build metadata: %q" , version )
284+ }
285+ return version , release , nil
286+ }
0 commit comments