1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/buildsettings/buildSettings.go
Oliver Nocon 2ae1d9dac1
feat(kanikoExecute): allow building multiple images (#3443)
* feat(kanikoExecute): allow building multiple images

* enhance tests

* chore: allow running tests in parallel

* small fixes

* fix: fix destination bug

* update formatting and defaults

* fix yml formatting

* chore: change cpe parameter names

* chore: improve variable naming
2022-02-07 07:58:41 +01:00

97 lines
3.2 KiB
Go

package buildsettings
import (
"encoding/json"
"reflect"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/pkg/errors"
)
type BuildSettings struct {
MavenBuild []BuildOptions `json:"mavenBuild,omitempty"`
NpmExecuteScripts []BuildOptions `json:"npmExecuteScripts,omitempty"`
KanikoExecute []BuildOptions `json:"kanikoExecute,omitempty"`
MtaBuild []BuildOptions `json:"mtaBuild,omitempty"`
}
type BuildOptions struct {
Profiles []string `json:"profiles,omitempty"`
Publish bool `json:"publish,omitempty"`
CreateBOM bool `json:"createBOM,omitempty"`
LogSuccessfulMavenTransfers bool `json:"logSuccessfulMavenTransfers,omitempty"`
GlobalSettingsFile string `json:"globalSettingsFile,omitempty"`
DefaultNpmRegistry string `json:"defaultNpmRegistry,omitempty"`
BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"`
DockerImage string `json:"dockerImage,omitempty"`
}
func CreateBuildSettingsInfo(config *BuildOptions, buildTool string) (string, error) {
currentBuildSettingsInfo := BuildOptions{
CreateBOM: config.CreateBOM,
GlobalSettingsFile: config.GlobalSettingsFile,
LogSuccessfulMavenTransfers: config.LogSuccessfulMavenTransfers,
Profiles: config.Profiles,
Publish: config.Publish,
DefaultNpmRegistry: config.DefaultNpmRegistry,
DockerImage: config.DockerImage,
}
var jsonMap map[string][]interface{}
var jsonResult []byte
if config.BuildSettingsInfo != "" {
err := json.Unmarshal([]byte(config.BuildSettingsInfo), &jsonMap)
if err != nil {
return "", errors.Wrapf(err, "failed to unmarshal existing build settings json '%v'", config.BuildSettingsInfo)
}
if build, exist := jsonMap[buildTool]; exist {
if reflect.TypeOf(build).Kind() == reflect.Slice {
jsonMap[buildTool] = append(build, currentBuildSettingsInfo)
}
} else {
var settings []interface{}
settings = append(settings, currentBuildSettingsInfo)
jsonMap[buildTool] = settings
}
jsonResult, err = json.Marshal(&jsonMap)
if err != nil {
return "", errors.Wrapf(err, "Creating build settings failed with json marshalling")
}
} else {
var settings []BuildOptions
settings = append(settings, currentBuildSettingsInfo)
var err error
switch buildTool {
case "mavenBuild":
jsonResult, err = json.Marshal(BuildSettings{
MavenBuild: settings,
})
case "npmExecuteScripts":
jsonResult, err = json.Marshal(BuildSettings{
NpmExecuteScripts: settings,
})
case "kanikoExecute":
jsonResult, err = json.Marshal(BuildSettings{
KanikoExecute: settings,
})
case "mtaBuild":
jsonResult, err = json.Marshal(BuildSettings{
MtaBuild: settings,
})
default:
return "", errors.Wrapf(err, "invalid buildTool '%s' for native build - '%s' not supported", buildTool, buildTool)
}
if err != nil {
return "", errors.Wrapf(err, "Creating build settings failed with json marshalling")
}
}
log.Entry().Infof("build settings information successfully created with '%v", string(jsonResult))
return string(jsonResult), nil
}