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  }