github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/config/flags.go (about)

     1  package config
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/spf13/cobra"
     8  	flag "github.com/spf13/pflag"
     9  )
    10  
    11  // AvailableFlagValues returns all flags incl. values which are available to the command.
    12  func AvailableFlagValues(cmd *cobra.Command, filters *StepFilters) map[string]interface{} {
    13  	flagValues := map[string]interface{}{}
    14  	flags := cmd.Flags()
    15  	//only check flags where value has been set
    16  	flags.Visit(func(pflag *flag.Flag) {
    17  
    18  		switch pflag.Value.Type() {
    19  		case "string":
    20  			flagValues[pflag.Name] = pflag.Value.String()
    21  		case "stringSlice":
    22  			flagValues[pflag.Name], _ = flags.GetStringSlice(pflag.Name)
    23  		case "bool":
    24  			flagValues[pflag.Name], _ = flags.GetBool(pflag.Name)
    25  		case "int":
    26  			flagValues[pflag.Name], _ = flags.GetInt(pflag.Name)
    27  		default:
    28  			fmt.Printf("Meta data type not set or not known: '%v'\n", pflag.Value.Type())
    29  			os.Exit(1)
    30  		}
    31  		filters.Parameters = append(filters.Parameters, pflag.Name)
    32  	})
    33  	return flagValues
    34  }
    35  
    36  // MarkFlagsWithValue marks a flag as changed if value is available for the flag through the step configuration.
    37  func MarkFlagsWithValue(cmd *cobra.Command, stepConfig StepConfig) {
    38  	flags := cmd.Flags()
    39  	flags.VisitAll(func(pflag *flag.Flag) {
    40  		//mark as available in case default is available or config is available
    41  		if len(pflag.Value.String()) > 0 || stepConfig.Config[pflag.Name] != nil {
    42  			pflag.Changed = true
    43  		}
    44  	})
    45  }