github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/documentation/generator/metadata.go (about) 1 package generator 2 3 import ( 4 "fmt" 5 "reflect" 6 7 "github.com/SAP/jenkins-library/pkg/config" 8 ) 9 10 // readStepMetadata reads and parses the provided step metadata file 11 func readStepMetadata(metadataFilePath string, docuHelperData DocuHelperData) config.StepData { 12 stepMetadata := config.StepData{} 13 metadataFile, err := docuHelperData.OpenFile(metadataFilePath) 14 checkError(err) 15 defer metadataFile.Close() 16 fmt.Printf("Reading metadata file: %v\n", metadataFilePath) 17 err = stepMetadata.ReadPipelineStepData(metadataFile) 18 checkError(err) 19 return stepMetadata 20 } 21 22 // adjustDefaultValues corrects the Default value according to the Type. 23 func adjustDefaultValues(stepMetadata *config.StepData) { 24 for key, parameter := range stepMetadata.Spec.Inputs.Parameters { 25 var typedDefault interface{} = nil 26 if parameter.Type == "bool" { 27 typedDefault = false 28 } 29 if parameter.Default != nil || 30 parameter.Default == typedDefault { 31 continue 32 } 33 fmt.Printf("Changing default value to '%v' for parameter '%s', was '%v'.\n", typedDefault, parameter.Name, parameter.Default) 34 stepMetadata.Spec.Inputs.Parameters[key].Default = typedDefault 35 } 36 } 37 38 // adjustMandatoryFlags corrects the Mandatory flag on each parameter if a non-empty default value is provided 39 func adjustMandatoryFlags(stepMetadata *config.StepData) { 40 for key, parameter := range stepMetadata.Spec.Inputs.Parameters { 41 if parameter.Mandatory { 42 if parameter.Default == nil || 43 parameter.Default == "" || 44 parameter.Type == "[]string" && interfaceArrayLength(parameter.Default) == 0 { 45 continue 46 } 47 fmt.Printf("Changing mandatory flag to '%v' for parameter '%s', default value available '%v'.\n", false, parameter.Name, parameter.Default) 48 stepMetadata.Spec.Inputs.Parameters[key].Mandatory = false 49 } 50 } 51 } 52 53 // applyCustomDefaultValues applies custom default values from the passed config 54 func applyCustomDefaultValues(stepMetadata *config.StepData, stepConfiguration config.StepConfig) { 55 for key, parameter := range stepMetadata.Spec.Inputs.Parameters { 56 configValue := stepConfiguration.Config[parameter.Name] 57 if len(parameter.Conditions) != 0 { 58 fmt.Printf("Skipping custom default values for '%s' as the parameter depends on other parameter values.\n", parameter.Name) 59 continue 60 } 61 if configValue != nil && configValue != "" { 62 switch parameter.Type { 63 case "[]string": 64 if reflect.DeepEqual(parameter.Default, configValue) { 65 continue 66 } 67 fmt.Printf("Applying custom default value '%v' for parameter '%s', was '%v'.\n", configValue, parameter.Name, parameter.Default) 68 stepMetadata.Spec.Inputs.Parameters[key].Default = configValue 69 default: 70 if parameter.Default != configValue { 71 fmt.Printf("Applying custom default value '%v' for parameter '%s', was '%v'.\n", configValue, parameter.Name, parameter.Default) 72 stepMetadata.Spec.Inputs.Parameters[key].Default = configValue 73 } 74 } 75 } 76 } 77 } 78 79 // check length only if interface type is a slice 80 func interfaceArrayLength(i interface{}) int { 81 switch i.(type) { 82 case []string: 83 return len(i.([]string)) 84 case []interface{}: 85 return len(i.([]interface{})) 86 default: 87 return -1 88 } 89 }