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
Anil Keshav a92dd234b1
feat (buildSettingsInfo) new common cpe which holds build settings json value (#3272)
* create build settings for maven

* cases for when mavenBuild may be present

* fixing unit test for mavenBuild to include cpe

* changing position of buildSettngsJson to be called atfter build runs

* package

* extending the struct for other build types

* adding values for mta build settings

* changing config data type

* adding npm build settings

* unit tests

* fix trailing space

* typo correction in yaml

* Vitalii/build settings info (#3277)

* Add buildsettings package

* Improve buildSetting package for mta, npm

* Add unit-test

* Fix

* Fix

Co-authored-by: Vitalii Sidorov <vitalii.sidorov@sap.com>

* review changes

* removing buildTool param

* changing npm script name

* fix npmExecute tests

* including build settings info in npm struct

Co-authored-by: Your Name <you@example.com>
Co-authored-by: kingvvgo <56587879+kingvvgo@users.noreply.github.com>
Co-authored-by: Vitalii Sidorov <vitalii.sidorov@sap.com>
Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
2021-11-16 15:02:57 +01:00

105 lines
3.3 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 (i *BuildOptions) ToJson() ([]byte, error) {
tmp, err := json.Marshal(i)
if err != nil {
return nil, errors.Wrap(err, "failed to generate valid JSON.")
} else {
return tmp, nil
}
}
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,
}
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 infomration successfully created with '%v", string(jsonResult))
return string(jsonResult), nil
}