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  }