github.com/SAP/jenkins-library@v1.362.0/cmd/abapAddonAssemblyKitCheck.go (about)

     1  package cmd
     2  
     3  import (
     4  	"github.com/SAP/jenkins-library/pkg/abap/aakaas"
     5  	abapbuild "github.com/SAP/jenkins-library/pkg/abap/build"
     6  	"github.com/SAP/jenkins-library/pkg/abaputils"
     7  	"github.com/SAP/jenkins-library/pkg/log"
     8  	"github.com/SAP/jenkins-library/pkg/piperutils"
     9  	"github.com/SAP/jenkins-library/pkg/telemetry"
    10  )
    11  
    12  func abapAddonAssemblyKitCheck(config abapAddonAssemblyKitCheckOptions, telemetryData *telemetry.CustomData, commonPipelineEnvironment *abapAddonAssemblyKitCheckCommonPipelineEnvironment) {
    13  	utils := aakaas.NewAakBundle()
    14  
    15  	err := runAbapAddonAssemblyKitCheck(&config, telemetryData, utils, commonPipelineEnvironment)
    16  	if err != nil {
    17  		log.Entry().WithError(err).Fatal("step execution failed")
    18  	}
    19  }
    20  
    21  func runAbapAddonAssemblyKitCheck(config *abapAddonAssemblyKitCheckOptions, telemetryData *telemetry.CustomData, utils aakaas.AakUtils, commonPipelineEnvironment *abapAddonAssemblyKitCheckCommonPipelineEnvironment) error {
    22  
    23  	log.Entry().Info("╔═══════════════════════════╗")
    24  	log.Entry().Info("║ abapAddonAssemblyKitCheck ║")
    25  	log.Entry().Info("╚═══════════════════════════╝")
    26  
    27  	conn := new(abapbuild.Connector)
    28  	if err := conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, utils, "", config.AbapAddonAssemblyKitCertificateFile, config.AbapAddonAssemblyKitCertificatePass); err != nil {
    29  		return err
    30  	}
    31  
    32  	log.Entry().Infof("reading addonDescriptor (aka addon.yml) file: %s", config.AddonDescriptorFileName)
    33  	addonDescriptor, err := utils.ReadAddonDescriptor(config.AddonDescriptorFileName)
    34  	if err != nil {
    35  		return err
    36  	}
    37  	log.Entry().Info("building product modelling (and resolving potential wildcards)")
    38  	pvh, err := aakaas.NewProductVersionHeader(&addonDescriptor, conn)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	printProductVersionHeader(*pvh)
    43  
    44  	log.Entry().Info("calling AAKaaS to check product modelling...")
    45  	if err := pvh.CheckAndResolveVersion(conn); err != nil {
    46  		return err
    47  	}
    48  	log.Entry().Info("... success!")
    49  	pvh.SyncAddonDescriptorVersionFields(&addonDescriptor)
    50  	log.Entry().Info("resolved version fields:")
    51  	printAddonDescriptorVersionFields(addonDescriptor)
    52  	log.Entry().Info("transferring addonDescriptor to commonPipelineEnvironment for usage by subsequent steps of the pipeline")
    53  	commonPipelineEnvironment.abap.addonDescriptor = string(addonDescriptor.AsJSON())
    54  
    55  	publishAddonYaml(config, utils)
    56  	return nil
    57  }
    58  
    59  func printProductVersionHeader(pvh aakaas.ProductVersionHeader) {
    60  	logLine30 := "──────────────────────────────"
    61  	log.Entry().Infof("┌─%-30v─┬─%-30v─┐", logLine30, logLine30)
    62  	log.Entry().Infof("│ %-30v │ %-30v │", "Product Name", pvh.ProductName)
    63  	log.Entry().Infof("│ %-30v │ %-30v │", "Product Version", pvh.SemanticProductVersion)
    64  	log.Entry().Infof("├─%-30v─┼─%-30v─┤", logLine30, logLine30)
    65  	log.Entry().Infof("│ %-30v │ %-30v │", "Software Component Name", "Software Component Version")
    66  	log.Entry().Infof("├─%-30v─┼─%-30v─┤", logLine30, logLine30)
    67  	for _, pvc := range pvh.Content {
    68  		log.Entry().Infof("│ %-30v │ %-30v │", pvc.SoftwareComponentName, pvc.SemanticSoftwareComponentVersion)
    69  	}
    70  	log.Entry().Infof("└─%-30v─┴─%-30v─┘", logLine30, logLine30)
    71  }
    72  
    73  func printAddonDescriptorVersionFields(addonDescriptor abaputils.AddonDescriptor) {
    74  	logLine30 := "──────────────────────────────"
    75  	logLine4 := "────"
    76  	log.Entry().Infof("┌─%-30v─┬─%-4v─┬─%-4v─┬─%-4v─┐", logLine30, logLine4, logLine4, logLine4)
    77  	log.Entry().Infof("│ %-30v │ %-4v │ %-4v │ %-4v │", "Name", "Vers", "SP", "Pat.")
    78  	log.Entry().Infof("├─%-30v─┼─%-4v─┼─%-4v─┼─%-4v─┤", logLine30, logLine4, logLine4, logLine4)
    79  	log.Entry().Infof("│ %-30v │ %-4v │ %-4v │ %-4v │", addonDescriptor.AddonProduct, addonDescriptor.AddonVersion, addonDescriptor.AddonSpsLevel, addonDescriptor.AddonPatchLevel)
    80  	for _, repo := range addonDescriptor.Repositories {
    81  		log.Entry().Infof("│ %-30v │ %-4v │ %-4v │ %-4v │", repo.Name, repo.Version, repo.SpLevel, repo.PatchLevel)
    82  	}
    83  	log.Entry().Infof("└─%-30v─┴─%-4v─┴─%-4v─┴─%-4v─┘", logLine30, logLine4, logLine4, logLine4)
    84  }
    85  
    86  func publishAddonYaml(config *abapAddonAssemblyKitCheckOptions, utils aakaas.AakUtils) {
    87  	var filesToPublish []piperutils.Path
    88  	log.Entry().Infof("adding %s to be published", config.AddonDescriptorFileName)
    89  	filesToPublish = append(filesToPublish, piperutils.Path{Target: config.AddonDescriptorFileName, Name: "AddonDescriptor", Mandatory: true})
    90  	log.Entry().Infof("publishing %v files", len(filesToPublish))
    91  	if err := piperutils.PersistReportsAndLinks("abapAddonAssemblyKitCheckPV", "", utils, filesToPublish, nil); err != nil {
    92  		log.Entry().WithError(err).Error("failed to persist report information")
    93  	}
    94  }