1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-11-06 09:09:19 +02:00

feat(build): add buildSettingsInfo for gradleExecuteBuild (#5043)

* creating build settings info from gradle build

* fix linting issue and typo

* fixing step description

* Apply suggestions from code review

Co-authored-by: Tilo Körner <70266685+tiloKo@users.noreply.github.com>

* Address code review comments

* Fix tests

* Fix tests

* Fix tests

* Fix test

---------

Co-authored-by: Christopher Fenner <26137398+CCFenner@users.noreply.github.com>
Co-authored-by: Tilo Körner <70266685+tiloKo@users.noreply.github.com>
Co-authored-by: Vyacheslav Starostin <32613074+vstarostin@users.noreply.github.com>
Co-authored-by: Vyacheslav Starostin <vyacheslav.starostin@sap.com>
This commit is contained in:
Anil Keshav
2024-10-15 09:14:23 +02:00
committed by GitHub
parent af05acad58
commit bc8225cffb
5 changed files with 68 additions and 20 deletions

View File

@@ -9,6 +9,7 @@ import (
"strings"
"text/template"
"github.com/SAP/jenkins-library/pkg/buildsettings"
"github.com/SAP/jenkins-library/pkg/command"
"github.com/SAP/jenkins-library/pkg/gradle"
"github.com/SAP/jenkins-library/pkg/log"
@@ -18,7 +19,8 @@ import (
)
const (
gradleBomFilename = "bom-gradle"
gradleBomFilename = "bom-gradle"
stepNameForBuildSettings = "gradleExecuteBuild"
)
var (
@@ -189,6 +191,25 @@ func runGradleExecuteBuild(config *gradleExecuteBuildOptions, telemetryData *tel
return err
}
log.Entry().Debugf("creating build settings information...")
dockerImage, err := GetDockerImageValue(stepNameForBuildSettings)
if err != nil {
return fmt.Errorf("failed to retrieve dockerImage configuration: %w", err)
}
gradleConfig := buildsettings.BuildOptions{
CreateBOM: config.CreateBOM,
Publish: config.Publish,
BuildSettingsInfo: config.BuildSettingsInfo,
DockerImage: dockerImage,
}
buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&gradleConfig, stepNameForBuildSettings)
if err != nil {
log.Entry().Warnf("failed to create build settings info: %v", err)
}
pipelineEnv.custom.buildSettingsInfo = buildSettingsInfo
log.Entry().Info("Publishing of artifacts to staging repository...")
if config.Publish {
if err := publishArtifacts(config, utils, pipelineEnv); err != nil {

View File

@@ -38,6 +38,7 @@ type gradleExecuteBuildOptions struct {
ExcludeCreateBOMForProjects []string `json:"excludeCreateBOMForProjects,omitempty"`
ExcludePublishingForProjects []string `json:"excludePublishingForProjects,omitempty"`
BuildFlags []string `json:"buildFlags,omitempty"`
BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"`
}
type gradleExecuteBuildReports struct {
@@ -78,7 +79,8 @@ func (p *gradleExecuteBuildReports) persist(stepConfig gradleExecuteBuildOptions
type gradleExecuteBuildCommonPipelineEnvironment struct {
custom struct {
artifacts piperenv.Artifacts
artifacts piperenv.Artifacts
buildSettingsInfo string
}
}
@@ -89,6 +91,7 @@ func (p *gradleExecuteBuildCommonPipelineEnvironment) persist(path, resourceName
value interface{}
}{
{category: "custom", name: "artifacts", value: p.custom.artifacts},
{category: "custom", name: "buildSettingsInfo", value: p.custom.buildSettingsInfo},
}
errCount := 0
@@ -242,6 +245,7 @@ func addGradleExecuteBuildFlags(cmd *cobra.Command, stepConfig *gradleExecuteBui
cmd.Flags().StringSliceVar(&stepConfig.ExcludeCreateBOMForProjects, "excludeCreateBOMForProjects", []string{}, "Defines which projects/subprojects will be ignored during bom creation. Only if applyCreateBOMForAllProjects is set to true")
cmd.Flags().StringSliceVar(&stepConfig.ExcludePublishingForProjects, "excludePublishingForProjects", []string{}, "Defines which projects/subprojects will be ignored during publishing. Only if applyCreateBOMForAllProjects is set to true")
cmd.Flags().StringSliceVar(&stepConfig.BuildFlags, "buildFlags", []string{}, "Defines a list of tasks and/or arguments to be provided for gradle in the respective order to be executed. This list takes precedence if specified over 'task' parameter")
cmd.Flags().StringVar(&stepConfig.BuildSettingsInfo, "buildSettingsInfo", os.Getenv("PIPER_buildSettingsInfo"), "build settings info is typically filled by the step automatically to create information about the build settings that were used during the gradle build. This information is typically used for compliance related processes.")
}
@@ -421,6 +425,20 @@ func gradleExecuteBuildMetadata() config.StepData {
Aliases: []config.Alias{},
Default: []string{},
},
{
Name: "buildSettingsInfo",
ResourceRef: []config.ResourceReference{
{
Name: "commonPipelineEnvironment",
Param: "custom/buildSettingsInfo",
},
},
Scope: []string{"STEPS", "STAGES", "PARAMETERS"},
Type: "string",
Mandatory: false,
Aliases: []config.Alias{},
Default: os.Getenv("PIPER_buildSettingsInfo"),
},
},
},
Containers: []config.Container{
@@ -440,6 +458,7 @@ func gradleExecuteBuildMetadata() config.StepData {
Type: "piperEnvironment",
Parameters: []map[string]interface{}{
{"name": "custom/artifacts", "type": "piperenv.Artifacts"},
{"name": "custom/buildSettingsInfo"},
},
},
},

View File

@@ -9,15 +9,15 @@ import (
)
type BuildSettings struct {
GolangBuild []BuildOptions `json:"golangBuild,omitempty"`
GradleBuild []BuildOptions `json:"gradleBuild,omitempty"`
HelmExecute []BuildOptions `json:"helmExecute,omitempty"`
KanikoExecute []BuildOptions `json:"kanikoExecute,omitempty"`
MavenBuild []BuildOptions `json:"mavenBuild,omitempty"`
MtaBuild []BuildOptions `json:"mtaBuild,omitempty"`
PythonBuild []BuildOptions `json:"pythonBuild,omitempty"`
NpmExecuteScripts []BuildOptions `json:"npmExecuteScripts,omitempty"`
CnbBuild []BuildOptions `json:"cnbBuild,omitempty"`
GolangBuild []BuildOptions `json:"golangBuild,omitempty"`
GradleExecuteBuild []BuildOptions `json:"gradleExecuteBuild,omitempty"`
HelmExecute []BuildOptions `json:"helmExecute,omitempty"`
KanikoExecute []BuildOptions `json:"kanikoExecute,omitempty"`
MavenBuild []BuildOptions `json:"mavenBuild,omitempty"`
MtaBuild []BuildOptions `json:"mtaBuild,omitempty"`
PythonBuild []BuildOptions `json:"pythonBuild,omitempty"`
NpmExecuteScripts []BuildOptions `json:"npmExecuteScripts,omitempty"`
CnbBuild []BuildOptions `json:"cnbBuild,omitempty"`
}
type BuildOptions struct {
@@ -74,9 +74,9 @@ func CreateBuildSettingsInfo(config *BuildOptions, buildTool string) (string, er
jsonResult, err = json.Marshal(BuildSettings{
GolangBuild: settings,
})
case "gradleBuild":
case "gradleExecuteBuild":
jsonResult, err = json.Marshal(BuildSettings{
GradleBuild: settings,
GradleExecuteBuild: settings,
})
case "helmExecute":
jsonResult, err = json.Marshal(BuildSettings{

View File

@@ -1,6 +1,3 @@
//go:build unit
// +build unit
package buildsettings
import (
@@ -28,9 +25,9 @@ func TestCreateBuildSettingsInfo(t *testing.T) {
expected: "{\"golangBuild\":[{\"dockerImage\":\"golang:latest\"}]}",
},
{
config: BuildOptions{CreateBOM: true},
buildTool: "gradleBuild",
expected: "{\"gradleBuild\":[{\"createBOM\":true}]}",
config: BuildOptions{CreateBOM: true, DockerImage: "gradle:latest"},
buildTool: "gradleExecuteBuild",
expected: "{\"gradleExecuteBuild\":[{\"createBOM\":true,\"dockerImage\":\"gradle:latest\"}]}",
},
{
config: BuildOptions{Publish: true},
@@ -77,7 +74,7 @@ func TestCreateBuildSettingsInfo(t *testing.T) {
for _, testCase := range testTableConfig {
buildSettings, err := CreateBuildSettingsInfo(&testCase.config, testCase.buildTool)
assert.Nil(t, err)
assert.Equal(t, buildSettings, testCase.expected)
assert.Equal(t, testCase.expected, buildSettings)
}
})

View File

@@ -157,6 +157,16 @@ spec:
- PARAMETERS
- STAGES
- STEPS
- name: buildSettingsInfo
type: string
description: build settings info is typically filled by the step automatically to create information about the build settings that were used during the gradle build. This information is typically used for compliance related processes.
scope:
- STEPS
- STAGES
- PARAMETERS
resourceRef:
- name: commonPipelineEnvironment
param: custom/buildSettingsInfo
outputs:
resources:
- name: reports
@@ -169,6 +179,7 @@ spec:
params:
- name: custom/artifacts
type: "piperenv.Artifacts"
- name: custom/buildSettingsInfo
containers:
- name: gradle
image: gradle:6-jdk11-alpine