@@ -304,7 +304,7 @@ func ValidateDirectory(dir string) error {
304304}
305305
306306func loadPayloadMetadata (releaseDir , releaseImage string ) (* Update , error ) {
307- release , arch , err := loadReleaseFromMetadata (releaseDir )
307+ release , err := loadReleaseFromMetadata (releaseDir )
308308 if err != nil {
309309 return nil , err
310310 }
@@ -315,6 +315,12 @@ func loadPayloadMetadata(releaseDir, releaseImage string) (*Update, error) {
315315 return nil , err
316316 }
317317
318+ arch := string (release .Architecture )
319+ if arch == "" {
320+ arch = runtime .GOARCH
321+ klog .V (2 ).Infof ("Architecture from %s (%s) retrieved from runtime: %q" , cincinnatiJSONFile , release .Version , arch )
322+ }
323+
318324 if imageRef .Name != release .Version {
319325 return nil , fmt .Errorf ("Version from %s (%s) differs from %s (%s)" , imageReferencesFile , imageRef .Name , cincinnatiJSONFile , release .Version )
320326 }
@@ -352,52 +358,49 @@ func loadPayloadTasks(releaseDir, cvoDir, releaseImage, clusterProfile string) [
352358 }}
353359}
354360
355- func loadReleaseFromMetadata (releaseDir string ) (configv1.Release , string , error ) {
361+ func loadReleaseFromMetadata (releaseDir string ) (configv1.Release , error ) {
356362 var release configv1.Release
357363 path := filepath .Join (releaseDir , cincinnatiJSONFile )
358364 data , err := os .ReadFile (path )
359365 if err != nil {
360- return release , "" , err
366+ return release , err
361367 }
362368
363369 var metadata metadata
364370 if err := json .Unmarshal (data , & metadata ); err != nil {
365- return release , "" , fmt .Errorf ("unmarshal Cincinnati metadata: %w" , err )
371+ return release , fmt .Errorf ("unmarshal Cincinnati metadata: %w" , err )
366372 }
367373
368374 if metadata .Kind != "cincinnati-metadata-v0" {
369- return release , "" , fmt .Errorf ("unrecognized Cincinnati metadata kind %q" , metadata .Kind )
375+ return release , fmt .Errorf ("unrecognized Cincinnati metadata kind %q" , metadata .Kind )
370376 }
371377
372378 if metadata .Version == "" {
373- return release , "" , errors .New ("missing required Cincinnati metadata version" )
379+ return release , errors .New ("missing required Cincinnati metadata version" )
374380 }
375381
376382 if _ , err := semver .Parse (metadata .Version ); err != nil {
377- return release , "" , fmt .Errorf ("Cincinnati metadata version %q is not a valid semantic version: %v" , metadata .Version , err )
383+ return release , fmt .Errorf ("Cincinnati metadata version %q is not a valid semantic version: %v" , metadata .Version , err )
378384 }
379385
380386 release .Version = metadata .Version
381387
382- var arch string
383- if archInterface , ok := metadata .Metadata ["release.openshift.io/architecture" ]; ok {
384- if archString , ok := archInterface .(string ); ok {
385- if archString == releaseMultiArchID {
386- release .Architecture = configv1 .ClusterVersionArchitectureMulti
387- arch = string (release .Architecture )
388- } else {
389- return release , "" , fmt .Errorf ("Architecture from %s (%s) contains invalid value: %q. Valid value is %q." ,
390- cincinnatiJSONFile , release .Version , archString , releaseMultiArchID )
391- }
392- klog .V (2 ).Infof ("Architecture from %s (%s) is multi: %q" , cincinnatiJSONFile , release .Version , archString )
393- } else {
394- return release , "" , fmt .Errorf ("Architecture from %s (%s) is not a string: %v" ,
395- cincinnatiJSONFile , release .Version , archInterface )
388+ if archRaw , hasArch := metadata .Metadata ["release.openshift.io/architecture" ]; hasArch {
389+ arch , isString := archRaw .(string )
390+ if ! isString {
391+ return release , fmt .Errorf ("Architecture from %s (%s) is not a string: %v" ,
392+ cincinnatiJSONFile , release .Version , archRaw )
396393 }
397- } else {
398- arch = runtime .GOARCH
399- klog .V (2 ).Infof ("Architecture from %s (%s) retrieved from runtime: %q" , cincinnatiJSONFile , release .Version , arch )
394+
395+ if arch != releaseMultiArchID {
396+ return release , fmt .Errorf ("Architecture from %s (%s) contains invalid value: %q. Valid value is %q." ,
397+ cincinnatiJSONFile , release .Version , arch , releaseMultiArchID )
398+ }
399+
400+ release .Architecture = configv1 .ClusterVersionArchitectureMulti
401+ klog .V (2 ).Infof ("Architecture from %s (%s) is multi: %q" , cincinnatiJSONFile , release .Version , arch )
400402 }
403+
401404 if urlInterface , ok := metadata .Metadata ["url" ]; ok {
402405 if urlString , ok := urlInterface .(string ); ok {
403406 release .URL = configv1 .URL (urlString )
@@ -414,7 +417,7 @@ func loadReleaseFromMetadata(releaseDir string) (configv1.Release, string, error
414417 }
415418 }
416419
417- return release , arch , nil
420+ return release , nil
418421}
419422
420423func loadImageReferences (releaseDir string ) (* imagev1.ImageStream , error ) {
0 commit comments