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