github.com/jaylevin/jenkins-library@v1.230.4/pkg/buildsettings/buildSettings.go (about) 1 package buildsettings 2 3 import ( 4 "encoding/json" 5 "reflect" 6 7 "github.com/SAP/jenkins-library/pkg/log" 8 "github.com/pkg/errors" 9 ) 10 11 type BuildSettings struct { 12 GolangBuild []BuildOptions `json:"golangBuild,omitempty"` 13 GradleBuild []BuildOptions `json:"gradleBuild,omitempty"` 14 HelmExecute []BuildOptions `json:"helmExecute,omitempty"` 15 KanikoExecute []BuildOptions `json:"kanikoExecute,omitempty"` 16 MavenBuild []BuildOptions `json:"mavenBuild,omitempty"` 17 MtaBuild []BuildOptions `json:"mtaBuild,omitempty"` 18 PythonBuild []BuildOptions `json:"pythonBuild,omitempty"` 19 NpmExecuteScripts []BuildOptions `json:"npmExecuteScripts,omitempty"` 20 } 21 22 type BuildOptions struct { 23 Profiles []string `json:"profiles,omitempty"` 24 Publish bool `json:"publish,omitempty"` 25 CreateBOM bool `json:"createBOM,omitempty"` 26 LogSuccessfulMavenTransfers bool `json:"logSuccessfulMavenTransfers,omitempty"` 27 GlobalSettingsFile string `json:"globalSettingsFile,omitempty"` 28 DefaultNpmRegistry string `json:"defaultNpmRegistry,omitempty"` 29 BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"` 30 DockerImage string `json:"dockerImage,omitempty"` 31 } 32 33 func CreateBuildSettingsInfo(config *BuildOptions, buildTool string) (string, error) { 34 currentBuildSettingsInfo := BuildOptions{ 35 CreateBOM: config.CreateBOM, 36 GlobalSettingsFile: config.GlobalSettingsFile, 37 LogSuccessfulMavenTransfers: config.LogSuccessfulMavenTransfers, 38 Profiles: config.Profiles, 39 Publish: config.Publish, 40 DefaultNpmRegistry: config.DefaultNpmRegistry, 41 DockerImage: config.DockerImage, 42 } 43 var jsonMap map[string][]interface{} 44 var jsonResult []byte 45 46 if config.BuildSettingsInfo != "" { 47 48 err := json.Unmarshal([]byte(config.BuildSettingsInfo), &jsonMap) 49 if err != nil { 50 return "", errors.Wrapf(err, "failed to unmarshal existing build settings json '%v'", config.BuildSettingsInfo) 51 } 52 53 if build, exist := jsonMap[buildTool]; exist { 54 if reflect.TypeOf(build).Kind() == reflect.Slice { 55 jsonMap[buildTool] = append(build, currentBuildSettingsInfo) 56 } 57 } else { 58 var settings []interface{} 59 settings = append(settings, currentBuildSettingsInfo) 60 jsonMap[buildTool] = settings 61 } 62 63 jsonResult, err = json.Marshal(&jsonMap) 64 if err != nil { 65 return "", errors.Wrapf(err, "Creating build settings failed with json marshalling") 66 } 67 } else { 68 var settings []BuildOptions 69 settings = append(settings, currentBuildSettingsInfo) 70 var err error 71 switch buildTool { 72 case "golangBuild": 73 jsonResult, err = json.Marshal(BuildSettings{ 74 GolangBuild: settings, 75 }) 76 case "gradleBuild": 77 jsonResult, err = json.Marshal(BuildSettings{ 78 GradleBuild: settings, 79 }) 80 case "helmExecute": 81 jsonResult, err = json.Marshal(BuildSettings{ 82 HelmExecute: settings, 83 }) 84 case "kanikoExecute": 85 jsonResult, err = json.Marshal(BuildSettings{ 86 KanikoExecute: settings, 87 }) 88 case "mavenBuild": 89 jsonResult, err = json.Marshal(BuildSettings{ 90 MavenBuild: settings, 91 }) 92 case "mtaBuild": 93 jsonResult, err = json.Marshal(BuildSettings{ 94 MtaBuild: settings, 95 }) 96 case "pythonBuild": 97 jsonResult, err = json.Marshal(BuildSettings{ 98 PythonBuild: settings, 99 }) 100 case "npmExecuteScripts": 101 jsonResult, err = json.Marshal(BuildSettings{ 102 NpmExecuteScripts: settings, 103 }) 104 default: 105 log.Entry().Warningf("buildTool '%s' not supported for creation of build settings", buildTool) 106 return "", nil 107 } 108 if err != nil { 109 return "", errors.Wrapf(err, "Creating build settings failed with json marshalling") 110 } 111 } 112 113 log.Entry().Infof("build settings information successfully created with '%v", string(jsonResult)) 114 115 return string(jsonResult), nil 116 117 }