1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-09-16 09:26:22 +02:00

errorcause and remove telemetry warnings (#4951)

This commit is contained in:
Tilo Körner
2024-06-20 10:44:12 +02:00
committed by GitHub
parent 1b728ccd3e
commit bf9c743fb6
23 changed files with 189 additions and 108 deletions

View File

@@ -11,14 +11,16 @@ import (
func abapAddonAssemblyKitCheck(config abapAddonAssemblyKitCheckOptions, telemetryData *telemetry.CustomData, commonPipelineEnvironment *abapAddonAssemblyKitCheckCommonPipelineEnvironment) {
utils := aakaas.NewAakBundle()
telemetryData.BuildTool = "AAKaaS"
err := runAbapAddonAssemblyKitCheck(&config, telemetryData, utils, commonPipelineEnvironment)
err := runAbapAddonAssemblyKitCheck(&config, utils, commonPipelineEnvironment)
if err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitCheck(config *abapAddonAssemblyKitCheckOptions, telemetryData *telemetry.CustomData, utils aakaas.AakUtils, commonPipelineEnvironment *abapAddonAssemblyKitCheckCommonPipelineEnvironment) error {
func runAbapAddonAssemblyKitCheck(config *abapAddonAssemblyKitCheckOptions, utils aakaas.AakUtils, commonPipelineEnvironment *abapAddonAssemblyKitCheckCommonPipelineEnvironment) error {
log.Entry().Info("╔═══════════════════════════╗")
log.Entry().Info("║ abapAddonAssemblyKitCheck ║")

View File

@@ -11,12 +11,14 @@ import (
func abapAddonAssemblyKitCheckCVs(config abapAddonAssemblyKitCheckCVsOptions, telemetryData *telemetry.CustomData, cpe *abapAddonAssemblyKitCheckCVsCommonPipelineEnvironment) {
utils := aakaas.NewAakBundle()
if err := runAbapAddonAssemblyKitCheckCVs(&config, telemetryData, &utils, cpe); err != nil {
telemetryData.BuildTool = "AAKaaS"
if err := runAbapAddonAssemblyKitCheckCVs(&config, &utils, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitCheckCVs(config *abapAddonAssemblyKitCheckCVsOptions, telemetryData *telemetry.CustomData, utils *aakaas.AakUtils, cpe *abapAddonAssemblyKitCheckCVsCommonPipelineEnvironment) error {
func runAbapAddonAssemblyKitCheckCVs(config *abapAddonAssemblyKitCheckCVsOptions, utils *aakaas.AakUtils, cpe *abapAddonAssemblyKitCheckCVsCommonPipelineEnvironment) error {
log.Entry().Info("╔══════════════════════════════╗")
log.Entry().Info("║ abapAddonAssemblyKitCheckCVs ║")

View File

@@ -22,7 +22,7 @@ func TestCheckCVsStep(t *testing.T) {
config.Password = "dummyPassword"
t.Run("step success", func(t *testing.T) {
config.AddonDescriptorFileName = "success"
err := runAbapAddonAssemblyKitCheckCVs(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitCheckCVs(&config, &utils, &cpe)
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
err = json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
@@ -34,13 +34,13 @@ func TestCheckCVsStep(t *testing.T) {
})
t.Run("step error - in validate(no CommitID)", func(t *testing.T) {
config.AddonDescriptorFileName = "noCommitID"
err := runAbapAddonAssemblyKitCheckCVs(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitCheckCVs(&config, &utils, &cpe)
assert.Error(t, err, "Must end with error")
assert.Contains(t, err.Error(), "CommitID missing in repo")
})
t.Run("step error - in ReadAddonDescriptor", func(t *testing.T) {
config.AddonDescriptorFileName = "failing"
err := runAbapAddonAssemblyKitCheckCVs(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitCheckCVs(&config, &utils, &cpe)
assert.Error(t, err, "Must end with error")
assert.Contains(t, "error in ReadAddonDescriptor", err.Error())
})
@@ -48,7 +48,7 @@ func TestCheckCVsStep(t *testing.T) {
config.AddonDescriptorFileName = "success"
bundle.SetBody("ErrorBody")
bundle.SetError("error during validation")
err := runAbapAddonAssemblyKitCheckCVs(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitCheckCVs(&config, &utils, &cpe)
assert.Error(t, err, "Must end with error")
})
}

View File

@@ -11,12 +11,13 @@ import (
func abapAddonAssemblyKitCheckPV(config abapAddonAssemblyKitCheckPVOptions, telemetryData *telemetry.CustomData, cpe *abapAddonAssemblyKitCheckPVCommonPipelineEnvironment) {
utils := aakaas.NewAakBundle()
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
if err := runAbapAddonAssemblyKitCheckPV(&config, telemetryData, utils, cpe); err != nil {
telemetryData.BuildTool = "AAKaaS"
if err := runAbapAddonAssemblyKitCheckPV(&config, utils, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitCheckPV(config *abapAddonAssemblyKitCheckPVOptions, telemetryData *telemetry.CustomData, utils aakaas.AakUtils, cpe *abapAddonAssemblyKitCheckPVCommonPipelineEnvironment) error {
func runAbapAddonAssemblyKitCheckPV(config *abapAddonAssemblyKitCheckPVOptions, utils aakaas.AakUtils, cpe *abapAddonAssemblyKitCheckPVCommonPipelineEnvironment) error {
log.Entry().Info("╔═════════════════════════════╗")
log.Entry().Info("║ abapAddonAssemblyKitCheckPV ║")

View File

@@ -22,7 +22,7 @@ func TestCheckPVStep(t *testing.T) {
config.Password = "dummyPassword"
t.Run("step success", func(t *testing.T) {
config.AddonDescriptorFileName = "success"
err := runAbapAddonAssemblyKitCheckPV(&config, nil, utils, &cpe)
err := runAbapAddonAssemblyKitCheckPV(&config, utils, &cpe)
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
err = json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
@@ -33,7 +33,7 @@ func TestCheckPVStep(t *testing.T) {
})
t.Run("step error - in ReadAddonDescriptor", func(t *testing.T) {
config.AddonDescriptorFileName = "failing"
err := runAbapAddonAssemblyKitCheckPV(&config, nil, utils, &cpe)
err := runAbapAddonAssemblyKitCheckPV(&config, utils, &cpe)
assert.Error(t, err, "Did expect error")
assert.Equal(t, err.Error(), "error in ReadAddonDescriptor")
})
@@ -41,7 +41,7 @@ func TestCheckPVStep(t *testing.T) {
config.AddonDescriptorFileName = "success"
bundle.SetBody("ErrorBody")
bundle.SetError("error during validation")
err := runAbapAddonAssemblyKitCheckPV(&config, nil, utils, &cpe)
err := runAbapAddonAssemblyKitCheckPV(&config, utils, &cpe)
assert.Error(t, err, "Did expect error")
})
}

View File

@@ -37,7 +37,7 @@ func TestRunAbapAddonAssemblyKitCheck(t *testing.T) {
},
}
err := runAbapAddonAssemblyKitCheck(&config, nil, utils, &cpe)
err := runAbapAddonAssemblyKitCheck(&config, utils, &cpe)
assert.NoError(t, err)
})
@@ -53,7 +53,7 @@ func TestRunAbapAddonAssemblyKitCheck(t *testing.T) {
},
}
err := runAbapAddonAssemblyKitCheck(&config, nil, utils, &cpe)
err := runAbapAddonAssemblyKitCheck(&config, utils, &cpe)
assert.EqualError(t, err, "addonDescriptor must contain at least one software component repository")
})

View File

@@ -19,15 +19,17 @@ func abapAddonAssemblyKitCreateTargetVector(config abapAddonAssemblyKitCreateTar
c.Stderr(log.Writer())
client := piperhttp.Client{}
telemetryData.BuildTool = "AAKaaS"
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
err := runAbapAddonAssemblyKitCreateTargetVector(&config, telemetryData, &client, cpe)
err := runAbapAddonAssemblyKitCreateTargetVector(&config, &client, cpe)
if err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitCreateTargetVector(config *abapAddonAssemblyKitCreateTargetVectorOptions, telemetryData *telemetry.CustomData, client piperhttp.Sender, cpe *abapAddonAssemblyKitCreateTargetVectorCommonPipelineEnvironment) error {
func runAbapAddonAssemblyKitCreateTargetVector(config *abapAddonAssemblyKitCreateTargetVectorOptions, client piperhttp.Sender, cpe *abapAddonAssemblyKitCreateTargetVectorCommonPipelineEnvironment) error {
conn := new(abapbuild.Connector)
if err := conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, client, config.AbapAddonAssemblyKitOriginHash, config.AbapAddonAssemblyKitCertificateFile, config.AbapAddonAssemblyKitCertificatePass); err != nil {
return err

View File

@@ -45,7 +45,7 @@ func TestCreateTargetVectorStep(t *testing.T) {
t.Run("step success test", func(t *testing.T) {
//act
err := runAbapAddonAssemblyKitCreateTargetVector(&config, nil, client, &cpe)
err := runAbapAddonAssemblyKitCreateTargetVector(&config, client, &cpe)
//assert
assert.NoError(t, err, "Did not expect error")
@@ -62,7 +62,7 @@ func TestCreateTargetVectorStep(t *testing.T) {
Error: errors.New("dummy"),
}
//act
err := runAbapAddonAssemblyKitCreateTargetVector(&config, nil, client, &cpe)
err := runAbapAddonAssemblyKitCreateTargetVector(&config, client, &cpe)
//assert
assert.Error(t, err, "Must end with error")
})
@@ -77,7 +77,7 @@ func TestCreateTargetVectorStep(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitCreateTargetVector(&config, nil, client, &cpe)
err := runAbapAddonAssemblyKitCreateTargetVector(&config, client, &cpe)
//assert
assert.Error(t, err, "Must end with error")
})
@@ -104,7 +104,7 @@ func TestCreateTargetVectorStep(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitCreateTargetVector(&config, nil, client, &cpe)
err := runAbapAddonAssemblyKitCreateTargetVector(&config, client, &cpe)
//assert
assert.Error(t, err, "Must end with error")
})

View File

@@ -13,14 +13,15 @@ import (
func abapAddonAssemblyKitPublishTargetVector(config abapAddonAssemblyKitPublishTargetVectorOptions, telemetryData *telemetry.CustomData) {
utils := aakaas.NewAakBundleWithTime(time.Duration(config.MaxRuntimeInMinutes), time.Duration(config.PollingIntervalInSeconds))
telemetryData.BuildTool = "AAKaaS"
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
if err := runAbapAddonAssemblyKitPublishTargetVector(&config, telemetryData, &utils); err != nil {
if err := runAbapAddonAssemblyKitPublishTargetVector(&config, &utils); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitPublishTargetVector(config *abapAddonAssemblyKitPublishTargetVectorOptions, telemetryData *telemetry.CustomData, utils *aakaas.AakUtils) error {
func runAbapAddonAssemblyKitPublishTargetVector(config *abapAddonAssemblyKitPublishTargetVectorOptions, utils *aakaas.AakUtils) error {
conn := new(abapbuild.Connector)
if err := conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, *utils, config.AbapAddonAssemblyKitOriginHash, config.AbapAddonAssemblyKitCertificateFile, config.AbapAddonAssemblyKitCertificatePass); err != nil {

View File

@@ -37,7 +37,7 @@ func TestPublishTargetVectorStep(t *testing.T) {
utils := bundle.GetUtils()
//act
err := runAbapAddonAssemblyKitPublishTargetVector(&config, nil, &utils)
err := runAbapAddonAssemblyKitPublishTargetVector(&config, &utils)
//assert
assert.NoError(t, err, "Did not expect error")
})
@@ -54,7 +54,7 @@ func TestPublishTargetVectorStep(t *testing.T) {
utils := bundle.GetUtils()
//act
err := runAbapAddonAssemblyKitPublishTargetVector(&config, nil, &utils)
err := runAbapAddonAssemblyKitPublishTargetVector(&config, &utils)
//assert
assert.NoError(t, err, "Did not expect error")
})
@@ -67,7 +67,7 @@ func TestPublishTargetVectorStep(t *testing.T) {
utils := bundle.GetUtils()
//act
err := runAbapAddonAssemblyKitPublishTargetVector(&config, nil, &utils)
err := runAbapAddonAssemblyKitPublishTargetVector(&config, &utils)
//assert
assert.Error(t, err, "Must end with error")
})
@@ -80,7 +80,7 @@ func TestPublishTargetVectorStep(t *testing.T) {
utils := bundle.GetUtils()
//act
err := runAbapAddonAssemblyKitPublishTargetVector(&config, nil, &utils)
err := runAbapAddonAssemblyKitPublishTargetVector(&config, &utils)
//assert
assert.Error(t, err, "Must end with error")
})

View File

@@ -23,15 +23,15 @@ func abapAddonAssemblyKitRegisterPackages(config abapAddonAssemblyKitRegisterPac
c.Stderr(log.Writer())
client := piperhttp.Client{}
telemetryData.BuildTool = "AAKaaS"
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
err := runAbapAddonAssemblyKitRegisterPackages(&config, telemetryData, &client, cpe, reader)
if err != nil {
if err := runAbapAddonAssemblyKitRegisterPackages(&config, &client, cpe, reader); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitRegisterPackages(config *abapAddonAssemblyKitRegisterPackagesOptions, telemetryData *telemetry.CustomData, client piperhttp.Sender,
func runAbapAddonAssemblyKitRegisterPackages(config *abapAddonAssemblyKitRegisterPackagesOptions, client piperhttp.Sender,
cpe *abapAddonAssemblyKitRegisterPackagesCommonPipelineEnvironment, fileReader readFile) error {
var addonDescriptor abaputils.AddonDescriptor

View File

@@ -47,7 +47,7 @@ func TestRegisterPackagesStep(t *testing.T) {
}
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
err := runAbapAddonAssemblyKitRegisterPackages(&config, client, &cpe, mockReader)
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
@@ -70,7 +70,7 @@ func TestRegisterPackagesStep(t *testing.T) {
}
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
err := runAbapAddonAssemblyKitRegisterPackages(&config, client, &cpe, mockReader)
assert.Error(t, err, "Did expect error")
})
@@ -90,7 +90,7 @@ func TestRegisterPackagesStep(t *testing.T) {
}
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
err := runAbapAddonAssemblyKitRegisterPackages(&config, client, &cpe, mockReader)
assert.Error(t, err, "Did expect error")
})
t.Run("step error - registerPackages - invalid input", func(t *testing.T) {
@@ -107,7 +107,7 @@ func TestRegisterPackagesStep(t *testing.T) {
}
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
err := runAbapAddonAssemblyKitRegisterPackages(&config, client, &cpe, mockReader)
assert.Error(t, err, "Did expect error")
})
}

View File

@@ -14,14 +14,15 @@ import (
func abapAddonAssemblyKitReleasePackages(config abapAddonAssemblyKitReleasePackagesOptions, telemetryData *telemetry.CustomData, cpe *abapAddonAssemblyKitReleasePackagesCommonPipelineEnvironment) {
utils := aakaas.NewAakBundleWithTime(time.Duration(config.MaxRuntimeInMinutes), time.Duration(config.PollingIntervalInSeconds))
telemetryData.BuildTool = "AAKaaS"
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
if err := runAbapAddonAssemblyKitReleasePackages(&config, telemetryData, &utils, cpe); err != nil {
if err := runAbapAddonAssemblyKitReleasePackages(&config, &utils, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitReleasePackages(config *abapAddonAssemblyKitReleasePackagesOptions, telemetryData *telemetry.CustomData, utils *aakaas.AakUtils,
func runAbapAddonAssemblyKitReleasePackages(config *abapAddonAssemblyKitReleasePackagesOptions, utils *aakaas.AakUtils,
cpe *abapAddonAssemblyKitReleasePackagesCommonPipelineEnvironment) error {
conn := new(abapbuild.Connector)
if err := conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, *utils, config.AbapAddonAssemblyKitOriginHash, config.AbapAddonAssemblyKitCertificateFile, config.AbapAddonAssemblyKitCertificatePass); err != nil {

View File

@@ -39,7 +39,7 @@ func TestReleasePackagesStep(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitReleasePackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReleasePackages(&config, &utils, &cpe)
//assert
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
@@ -60,7 +60,7 @@ func TestReleasePackagesStep(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitReleasePackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReleasePackages(&config, &utils, &cpe)
//assert
assert.Error(t, err, "Did expect error")
assert.Equal(t, err.Error(), "Parameter missing. Please provide the name of the package which should be released")
@@ -81,7 +81,7 @@ func TestReleasePackagesStep(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitReleasePackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReleasePackages(&config, &utils, &cpe)
//assert
assert.Error(t, err, "Did expect error")
assert.Equal(t, err.Error(), "Release of all packages failed/timed out - Aborting as abapEnvironmentAssembleConfirm step is not needed: Timed out")
@@ -116,7 +116,7 @@ func TestReleasePackagesStepMix(t *testing.T) {
adoDesc, _ := json.Marshal(addonDescriptor)
config.AddonDescriptor = string(adoDesc)
//act
err := runAbapAddonAssemblyKitReleasePackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReleasePackages(&config, &utils, &cpe)
//assert
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor

View File

@@ -15,13 +15,15 @@ import (
func abapAddonAssemblyKitReserveNextPackages(config abapAddonAssemblyKitReserveNextPackagesOptions, telemetryData *telemetry.CustomData, cpe *abapAddonAssemblyKitReserveNextPackagesCommonPipelineEnvironment) {
utils := aakaas.NewAakBundleWithTime(time.Duration(config.MaxRuntimeInMinutes), time.Duration(config.PollingIntervalInSeconds))
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
if err := runAbapAddonAssemblyKitReserveNextPackages(&config, telemetryData, &utils, cpe); err != nil {
telemetryData.BuildTool = "AAKaaS"
if err := runAbapAddonAssemblyKitReserveNextPackages(&config, &utils, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapAddonAssemblyKitReserveNextPackages(config *abapAddonAssemblyKitReserveNextPackagesOptions, telemetryData *telemetry.CustomData, utils *aakaas.AakUtils,
func runAbapAddonAssemblyKitReserveNextPackages(config *abapAddonAssemblyKitReserveNextPackagesOptions, utils *aakaas.AakUtils,
cpe *abapAddonAssemblyKitReserveNextPackagesCommonPipelineEnvironment) error {
log.Entry().Info("╔═════════════════════════════════════════╗")

View File

@@ -45,7 +45,7 @@ func TestReserveNextPackagesStep(t *testing.T) {
})
bodyList := []string{responseReserveNextPackageReleased, responseReserveNextPackagePlanned, responseReserveNextPackagePostReleased, "myToken", responseReserveNextPackagePostPlanned, "myToken"}
bundle.SetBodyList(bodyList)
err := runAbapAddonAssemblyKitReserveNextPackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReserveNextPackages(&config, &utils, &cpe)
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
err = json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
@@ -71,7 +71,7 @@ func TestReserveNextPackagesStep(t *testing.T) {
})
bodyList := []string{responseReserveNextPackageReleased, responseReserveNextPackagePlanned, responseReserveNextPackagePostReleased, "myToken", responseReserveNextPackagePostPlanned, "myToken"}
bundle.SetBodyList(bodyList)
err := runAbapAddonAssemblyKitReserveNextPackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReserveNextPackages(&config, &utils, &cpe)
assert.NoError(t, err, "Did not expect error")
var addonDescriptorFinal abaputils.AddonDescriptor
err = json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
@@ -87,7 +87,7 @@ func TestReserveNextPackagesStep(t *testing.T) {
},
},
})
err := runAbapAddonAssemblyKitReserveNextPackages(&config, nil, &utils, &cpe)
err := runAbapAddonAssemblyKitReserveNextPackages(&config, &utils, &cpe)
assert.Error(t, err, "Did expect error")
})
t.Run("step error - timeout", func(t *testing.T) {
@@ -102,7 +102,8 @@ func TestReserveNextPackagesStep(t *testing.T) {
bodyList := []string{responseReserveNextPackageCreationTriggered, responseReserveNextPackagePostPlanned, "myToken"}
bundle.SetBodyList(bodyList)
bundle.SetMaxRuntime(time.Duration(1 * time.Microsecond))
err := runAbapAddonAssemblyKitReserveNextPackages(&config, nil, &utils, &cpe)
bundle.ClientMock.ErrorInsteadOfDump = true
err := runAbapAddonAssemblyKitReserveNextPackages(&config, &utils, &cpe)
assert.Error(t, err, "Did expect error")
})
}

View File

@@ -24,14 +24,17 @@ func abapEnvironmentAssembleConfirm(config abapEnvironmentAssembleConfirmOptions
Exec: &c,
}
telemetryData.BuildTool = "ABAP Build Framework"
client := piperhttp.Client{}
err := runAbapEnvironmentAssembleConfirm(&config, telemetryData, &autils, &client, cpe)
err := runAbapEnvironmentAssembleConfirm(&config, &autils, &client, cpe)
if err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapEnvironmentAssembleConfirm(config *abapEnvironmentAssembleConfirmOptions, telemetryData *telemetry.CustomData, com abaputils.Communication, client abapbuild.HTTPSendLoader, cpe *abapEnvironmentAssembleConfirmCommonPipelineEnvironment) error {
func runAbapEnvironmentAssembleConfirm(config *abapEnvironmentAssembleConfirmOptions, com abaputils.Communication, client abapbuild.HTTPSendLoader, cpe *abapEnvironmentAssembleConfirmCommonPipelineEnvironment) error {
conn := new(abapbuild.Connector)
var connConfig abapbuild.ConnectorConfiguration
connConfig.CfAPIEndpoint = config.CfAPIEndpoint

View File

@@ -1,6 +1,7 @@
package cmd
import (
"fmt"
"path"
"path/filepath"
"time"
@@ -33,47 +34,42 @@ func abapEnvironmentAssemblePackages(config abapEnvironmentAssemblePackagesOptio
client := piperhttp.Client{}
utils := piperutils.Files{}
err := runAbapEnvironmentAssemblePackages(&config, telemetryData, &autils, &utils, &client, cpe)
if err != nil {
telemetryData.BuildTool = "ABAP Build Framework"
if err := runAbapEnvironmentAssemblePackages(&config, &autils, &utils, &client, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapEnvironmentAssemblePackages(config *abapEnvironmentAssemblePackagesOptions, telemetryData *telemetry.CustomData, com abaputils.Communication, utils piperutils.FileUtils, client abapbuild.HTTPSendLoader, cpe *abapEnvironmentAssemblePackagesCommonPipelineEnvironment) error {
connBuild := new(abapbuild.Connector)
if errConBuild := initAssemblePackagesConnection(connBuild, config, com, client); errConBuild != nil {
return errConBuild
}
func runAbapEnvironmentAssemblePackages(config *abapEnvironmentAssemblePackagesOptions, com abaputils.Communication, utils piperutils.FileUtils, client abapbuild.HTTPSendLoader, cpe *abapEnvironmentAssemblePackagesCommonPipelineEnvironment) error {
log.Entry().Info("╔═════════════════════════════════╗")
log.Entry().Info("║ abapEnvironmentAssemblePackages ║")
log.Entry().Info("╚═════════════════════════════════╝")
addonDescriptor := new(abaputils.AddonDescriptor)
if err := addonDescriptor.InitFromJSONstring(config.AddonDescriptor); err != nil {
return errors.Wrap(err, "Reading AddonDescriptor failed [Make sure abapAddonAssemblyKit...CheckCVs|CheckPV|ReserveNextPackages steps have been run before]")
}
builds, err := executeBuilds(addonDescriptor, *connBuild, time.Duration(config.MaxRuntimeInMinutes)*time.Minute, time.Duration(config.PollIntervalsInMilliseconds)*time.Millisecond)
if err != nil {
return errors.Wrap(err, "Starting Builds for Repositories with reserved AAKaaS packages failed")
builds, assembleError := runAssemblePackages(config, com, utils, client, addonDescriptor)
if assembleError != nil && builds != nil {
addonDescriptor.ErrorText = assembleError.Error()
log.Entry().Info("---------------------------------")
log.Entry().Error("During the Assembly errors occured on following levels:")
for _, build := range builds {
var errorText string
if build.repo.ErrorText == "" {
errorText = "<No Error>"
} else {
errorText = build.repo.ErrorText
}
log.Entry().Errorf("Software Component %s: %s", build.repo.Name, errorText)
}
log.Entry().Errorf("Product %s: %s", addonDescriptor.AddonProduct, addonDescriptor.ErrorText)
}
err = checkIfFailedAndPrintLogs(builds)
if err != nil {
return errors.Wrap(err, "Checking for failed Builds and Printing Build Logs failed")
}
_, err = downloadResultToFile(builds, "SAR_XML", false) //File is present in ABAP build system and uploaded to AAKaaS, no need to fill up jenkins with it
if err != nil {
return errors.Wrap(err, "Download of Build Artifact SAR_XML failed")
}
var filesToPublish []piperutils.Path
filesToPublish, err = downloadResultToFile(builds, "DELIVERY_LOGS.ZIP", true)
if err != nil {
return errors.Wrap(err, "Download of Build Artifact DELIVERY_LOGS.ZIP failed")
}
log.Entry().Infof("Publishing %v files", len(filesToPublish))
piperutils.PersistReportsAndLinks("abapEnvironmentAssemblePackages", "", utils, filesToPublish, nil)
var reposBackToCPE []abaputils.Repository
for _, b := range builds {
reposBackToCPE = append(reposBackToCPE, b.repo)
@@ -81,7 +77,38 @@ func runAbapEnvironmentAssemblePackages(config *abapEnvironmentAssemblePackagesO
addonDescriptor.SetRepositories(reposBackToCPE)
cpe.abap.addonDescriptor = addonDescriptor.AsJSONstring()
return nil
return assembleError
}
func runAssemblePackages(config *abapEnvironmentAssemblePackagesOptions, com abaputils.Communication, utils piperutils.FileUtils, client abapbuild.HTTPSendLoader, addonDescriptor *abaputils.AddonDescriptor) ([]buildWithRepository, error) {
connBuild := new(abapbuild.Connector)
if errConBuild := initAssemblePackagesConnection(connBuild, config, com, client); errConBuild != nil {
return nil, errConBuild
}
builds, err := executeBuilds(addonDescriptor, *connBuild, time.Duration(config.MaxRuntimeInMinutes)*time.Minute, time.Duration(config.PollIntervalsInMilliseconds)*time.Millisecond)
if err != nil {
return builds, errors.Wrap(err, "Starting Builds for Repositories with reserved AAKaaS packages failed")
}
if err := checkIfFailedAndPrintLogs(builds); err != nil {
return builds, errors.Wrap(err, "Checking for failed Builds and Printing Build Logs failed")
}
if _, err := downloadResultToFile(builds, "SAR_XML", false); err != nil {
return builds, errors.Wrap(err, "Download of Build Artifact SAR_XML failed")
}
var filesToPublish []piperutils.Path
filesToPublish, err = downloadResultToFile(builds, "DELIVERY_LOGS.ZIP", true)
if err != nil {
return builds, errors.Wrap(err, "Download of Build Artifact DELIVERY_LOGS.ZIP failed")
}
log.Entry().Infof("Publishing %v files", len(filesToPublish))
piperutils.PersistReportsAndLinks("abapEnvironmentAssemblePackages", "", utils, filesToPublish, nil)
return builds, nil
}
func executeBuilds(addonDescriptor *abaputils.AddonDescriptor, conn abapbuild.Connector, maxRuntimeInMinutes time.Duration, pollInterval time.Duration) ([]buildWithRepository, error) {
@@ -101,6 +128,7 @@ func executeBuilds(addonDescriptor *abaputils.AddonDescriptor, conn abapbuild.Co
err := buildRepo.start(addonDescriptor)
if err != nil {
buildRepo.build.RunState = abapbuild.Failed
buildRepo.repo.ErrorText = fmt.Sprint(err)
log.Entry().Error(err)
log.Entry().Info("Continueing with other builds (if any)")
} else {
@@ -108,6 +136,7 @@ func executeBuilds(addonDescriptor *abaputils.AddonDescriptor, conn abapbuild.Co
if err != nil {
buildRepo.build.RunState = abapbuild.Failed
log.Entry().Error(err)
buildRepo.repo.ErrorText = fmt.Sprint(err)
log.Entry().Error("Continuing with other builds (if any) but keep in Mind that even if this build finishes beyond timeout the result is not trustworthy due to possible side effects!")
}
}
@@ -256,7 +285,14 @@ func checkIfFailedAndPrintLogs(builds []buildWithRepository) error {
if err := builds[i].build.PrintLogs(); err != nil {
return err
}
cause, err := builds[i].build.DetermineFailureCause()
if err != nil {
return err
} else if cause != "" {
builds[i].repo.ErrorText = cause
}
}
}
if buildFailed {
return errors.New("At least the assembly of one package failed")

View File

@@ -95,7 +95,7 @@ func TestStep(t *testing.T) {
PollIntervalsInMilliseconds: 1,
}
err := runAbapEnvironmentAssemblePackages(config, nil, autils, &mock.FilesMock{}, &client, cpe)
err := runAbapEnvironmentAssemblePackages(config, autils, &mock.FilesMock{}, &client, cpe)
assert.NoError(t, err)
assert.NotContains(t, cpe.abap.addonDescriptor, `"InBuildScope"`)
})
@@ -106,7 +106,7 @@ func TestStep(t *testing.T) {
PollIntervalsInMilliseconds: 1,
}
err := runAbapEnvironmentAssemblePackages(config, nil, autils, &mock.FilesMock{}, &client, cpe)
err := runAbapEnvironmentAssemblePackages(config, autils, &mock.FilesMock{}, &client, cpe)
assert.NoError(t, err)
assert.Contains(t, cpe.abap.addonDescriptor, `SAPK-001AAINITAPC1.SAR`)
assert.Contains(t, cpe.abap.addonDescriptor, `"InBuildScope":true`)

View File

@@ -94,12 +94,15 @@ func newAbapEnvironmentBuildUtils(maxRuntime time.Duration, pollingInterval time
func abapEnvironmentBuild(config abapEnvironmentBuildOptions, telemetryData *telemetry.CustomData, cpe *abapEnvironmentBuildCommonPipelineEnvironment) {
utils := newAbapEnvironmentBuildUtils(time.Duration(config.MaxRuntimeInMinutes), time.Duration(config.PollingIntervalInSeconds))
if err := runAbapEnvironmentBuild(&config, telemetryData, utils, cpe); err != nil {
telemetryData.BuildTool = "ABAP Build Framework"
if err := runAbapEnvironmentBuild(&config, utils, cpe); err != nil {
telemetryData.ErrorCode = err.Error()
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapEnvironmentBuild(config *abapEnvironmentBuildOptions, telemetryData *telemetry.CustomData, utils abapEnvironmentBuildUtils, cpe *abapEnvironmentBuildCommonPipelineEnvironment) error {
func runAbapEnvironmentBuild(config *abapEnvironmentBuildOptions, utils abapEnvironmentBuildUtils, cpe *abapEnvironmentBuildCommonPipelineEnvironment) error {
log.Entry().Info("╔════════════════════════════════╗")
log.Entry().Info("║ abapEnvironmentBuild ║")

View File

@@ -76,7 +76,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.PublishAllDownloadedResultFiles = true
utils := newAbapEnvironmentBuildTestsUtils()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
finalValues := `[{"value_id":"PHASE","value":"AUNIT"},{"value_id":"PACKAGES","value":"/BUILD/AUNIT_DUMMY_TESTS"},{"value_id":"MyId1","value":"AunitValue1"},{"value_id":"MyId2","value":"AunitValue2"},{"value_id":"BUILD_FRAMEWORK_MODE","value":"P"}]`
assert.NoError(t, err)
@@ -93,7 +93,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.AbapSourceClient = "001"
utils := newAbapEnvironmentBuildTestsUtilsWithClient()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
finalValues := `[{"value_id":"PHASE","value":"AUNIT"},{"value_id":"SUN","value":"SUMMER"}]`
assert.NoError(t, err)
@@ -111,7 +111,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.PublishResultFilenames = []string{"SAR_XML"}
utils := newAbapEnvironmentBuildTestsUtils()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
assert.NoError(t, err)
})
@@ -130,7 +130,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.UseFieldsOfAddonDescriptor = `[{"use":"Name","renameTo":"MyId1"},{"use":"Status","renameTo":"MyId2"}]`
utils := newAbapEnvironmentBuildTestsUtils()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
finalValues := `[{"value_id":"PACKAGES","value":"/BUILD/AUNIT_DUMMY_TESTS"}]`
err = json.Unmarshal([]byte(finalValues), &expectedValueList)
@@ -152,7 +152,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.PublishResultFilenames = []string{"SAR_XML"}
utils := newAbapEnvironmentBuildTestsUtils()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
assert.Error(t, err)
})
@@ -168,7 +168,7 @@ func TestRunAbapEnvironmentBuild(t *testing.T) {
config.PublishAllDownloadedResultFiles = true
utils := newAbapEnvironmentBuildTestsUtils()
// test
err := runAbapEnvironmentBuild(&config, nil, utils, &cpe)
err := runAbapEnvironmentBuild(&config, utils, &cpe)
// assert
assert.Error(t, err)
})

View File

@@ -26,21 +26,19 @@ const (
warning resultState = "WARNING"
erroneous resultState = "ERRONEOUS"
aborted resultState = "ABORTED"
// Initializing : Build Framework prepared
Initializing RunState = "INITIALIZING"
// Accepted : Build Framework triggered
Accepted RunState = "ACCEPTED"
// Running : Build Framework performs build
Running RunState = "RUNNING"
// Finished : Build Framework ended successful
Finished RunState = "FINISHED"
// Failed : Build Framework endded with error
Failed RunState = "FAILED"
loginfo msgty = "I"
logwarning msgty = "W"
logerror msgty = "E"
logaborted msgty = "A"
dummyResultName string = "Dummy"
Initializing RunState = "INITIALIZING" // Initializing : Build Framework prepared
Accepted RunState = "ACCEPTED" // Accepted : Build Framework triggered
Running RunState = "RUNNING" // Running : Build Framework performs build
Finished RunState = "FINISHED" // Finished : Build Framework ended successful
Failed RunState = "FAILED" // Failed : Build Framework endded with error
loginfo msgty = "I"
logwarning msgty = "W"
logerror msgty = "E"
logaborted msgty = "A"
dummyResultName string = "Dummy"
)
// ******** structs needed for json convertion ********
@@ -316,6 +314,33 @@ func (b *Build) PrintLogs() error {
return nil
}
func (b *Build) DetermineFailureCause() (string, error) {
if err := b.getTasks(); err != nil {
return "", err
}
//The errors of the last executed task should contain some hints about the cause of the failure
lastTaskIndex := len(b.Tasks) - 1
if lastTaskIndex < 0 {
return "", errors.New("No Tasks to evaluate")
}
failedTask := b.Tasks[lastTaskIndex]
if err := failedTask.getLogs(); err != nil {
return "", err
}
return failedTask.determineFailureCause(), nil
}
func (t *task) determineFailureCause() string {
var cause strings.Builder
for _, logLine := range t.Logs {
if logLine.Msgty == logaborted || logLine.Msgty == logerror {
cause.WriteString(logLine.Logline + "\n")
}
}
causeString := cause.String()
return causeString
}
// GetResults : Gets all Build results
func (b *Build) GetResults() error {
if err := b.getTasks(); err != nil {

View File

@@ -32,6 +32,7 @@ type AddonDescriptor struct {
AddonPatchLevel string
TargetVectorID string `json:",omitempty"`
Repositories []Repository `json:"repositories"`
ErrorText string `json:",omitempty"`
}
// Repository contains fields for the repository/component version
@@ -54,6 +55,7 @@ type Repository struct {
SarXMLFilePath string `json:",omitempty"`
Languages []string `json:"languages,omitempty"`
InBuildScope bool `json:",omitempty"`
ErrorText string `json:",omitempty"`
}
// ReadAddonDescriptorType is the type for ReadAddonDescriptor for mocking