2020-09-17 11:01:19 +02:00
package cmd
import (
2021-12-09 13:54:18 +02:00
"github.com/SAP/jenkins-library/pkg/abap/aakaas"
2020-09-17 11:01:19 +02:00
abapbuild "github.com/SAP/jenkins-library/pkg/abap/build"
"github.com/SAP/jenkins-library/pkg/abaputils"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/SAP/jenkins-library/pkg/telemetry"
2021-12-09 13:54:18 +02:00
"github.com/pkg/errors"
2020-09-17 11:01:19 +02:00
)
func abapAddonAssemblyKitCheckCVs ( config abapAddonAssemblyKitCheckCVsOptions , telemetryData * telemetry . CustomData , cpe * abapAddonAssemblyKitCheckCVsCommonPipelineEnvironment ) {
2021-12-09 13:54:18 +02:00
utils := aakaas . NewAakBundle ( )
if err := runAbapAddonAssemblyKitCheckCVs ( & config , telemetryData , & utils , cpe ) ; err != nil {
2020-09-17 11:01:19 +02:00
log . Entry ( ) . WithError ( err ) . Fatal ( "step execution failed" )
}
}
2021-12-09 13:54:18 +02:00
func runAbapAddonAssemblyKitCheckCVs ( config * abapAddonAssemblyKitCheckCVsOptions , telemetryData * telemetry . CustomData , utils * aakaas . AakUtils , cpe * abapAddonAssemblyKitCheckCVsCommonPipelineEnvironment ) error {
2023-01-12 16:47:11 +02:00
log . Entry ( ) . Info ( "╔══════════════════════════════╗" )
log . Entry ( ) . Info ( "║ abapAddonAssemblyKitCheckCVs ║" )
log . Entry ( ) . Info ( "╚══════════════════════════════╝" )
2020-09-30 10:30:53 +02:00
conn := new ( abapbuild . Connector )
2021-12-09 13:54:18 +02:00
if err := conn . InitAAKaaS ( config . AbapAddonAssemblyKitEndpoint , config . Username , config . Password , * utils ) ; err != nil {
return err
}
2020-09-30 10:30:53 +02:00
log . Entry ( ) . Infof ( "Reading Product Version Information from addonDescriptor (aka addon.yml) file: %s" , config . AddonDescriptorFileName )
2021-12-09 13:54:18 +02:00
addonDescriptor , err := ( * utils ) . ReadAddonDescriptor ( config . AddonDescriptorFileName )
2020-09-17 11:01:19 +02:00
if err != nil {
return err
}
2023-01-12 16:47:11 +02:00
for i , repo := range addonDescriptor . Repositories {
componentVersion := new ( aakaas . ComponentVersion )
if err := componentVersion . ConstructComponentVersion ( addonDescriptor . Repositories [ i ] , * conn ) ; err != nil {
2020-09-17 11:01:19 +02:00
return err
}
2023-01-12 16:47:11 +02:00
if err := componentVersion . Validate ( ) ; err != nil {
return err
}
componentVersion . CopyVersionFieldsToRepo ( & addonDescriptor . Repositories [ i ] )
log . Entry ( ) . Infof ( "Using cCTS %t" , repo . UseClassicCTS )
log . Entry ( ) . Infof ( "CommitId %s" , repo . CommitID )
if ! repo . UseClassicCTS && repo . CommitID == "" {
return errors . Errorf ( "CommitID missing in repo '%s' of the addon.yml" , repo . Name )
}
2020-09-17 11:01:19 +02:00
}
2020-09-30 10:30:53 +02:00
// now Software Component Versions fields are valid, but maybe Product Version was checked before, so copy that part from CPE
// we don't care for errors
// scenario 1: config.AddonDescriptor is empty since checkCVs is the first step in the pipeline, then the empty result is fine anyway
// scenario 2: for some reason config.AddonDescriptor is corrupt - then we insert the valid data but delete the repositories which will ensure issue is found later on
addonDescriptorCPE , _ := abaputils . ConstructAddonDescriptorFromJSON ( [ ] byte ( config . AddonDescriptor ) )
if len ( addonDescriptorCPE . AddonProduct ) == 0 {
log . Entry ( ) . Info ( "No Product Version information present yet in the addonDescriptor of CommonPipelineEnvironment" )
} else {
log . Entry ( ) . Infof ( "Information for Product Version %s taken from addonDescriptor of CommonPipelineEnvironment" , addonDescriptorCPE . AddonProduct )
}
addonDescriptorCPE . SetRepositories ( addonDescriptor . Repositories )
cpe . abap . addonDescriptor = string ( addonDescriptorCPE . AsJSON ( ) )
log . Entry ( ) . Info ( "Wrote addonDescriptor to CommonPipelineEnvironment" )
2020-09-17 11:01:19 +02:00
return nil
}
2022-11-08 09:47:38 +02:00
// take the product part from CPE and the repositories part from the YAML file
2020-09-17 11:01:19 +02:00
func combineYAMLRepositoriesWithCPEProduct ( addonDescriptor abaputils . AddonDescriptor , addonDescriptorFromCPE abaputils . AddonDescriptor ) abaputils . AddonDescriptor {
addonDescriptorFromCPE . Repositories = addonDescriptor . Repositories
return addonDescriptorFromCPE
}