diff --git a/app/cmd/common.go b/app/cmd/common.go index ebc2e52b0784ad0f3563ee274fc857b9bd4ae31e..3210c2e0b3fcff9e1ebc28c155d27ca65f0329be 100644 --- a/app/cmd/common.go +++ b/app/cmd/common.go @@ -75,3 +75,13 @@ type WatchOption struct { Watch bool Interval int } + +// InteractiveOption allow user to choose whether the mode is interactive +type InteractiveOption struct { + Interactive bool +} + +// SetFlag set the option flag to this cmd +func (b *InteractiveOption) SetFlag(cmd *cobra.Command) { + cmd.Flags().BoolVarP(&b.Interactive, "interactive", "i", false, "Interactive mode") +} diff --git a/app/cmd/open.go b/app/cmd/open.go index 6898d59f4227c7ad3a4554cfafb801fb4b37440c..33adcaafd90140b96e1eb2f6a9df7d649b0137a7 100644 --- a/app/cmd/open.go +++ b/app/cmd/open.go @@ -6,10 +6,13 @@ import ( "os/exec" "runtime" + "github.com/AlecAivazis/survey" "github.com/spf13/cobra" ) type OpenOption struct { + InteractiveOption + Name string Config bool } @@ -20,6 +23,7 @@ func init() { rootCmd.AddCommand(openCmd) openCmd.PersistentFlags().StringVarP(&openOption.Name, "name", "n", "", "Open a specific Jenkins by name") openCmd.PersistentFlags().BoolVarP(&openOption.Config, "config", "c", false, "Open the configuration page of Jenkins") + openOption.SetFlag(openCmd) } var openCmd = &cobra.Command{ @@ -29,10 +33,19 @@ var openCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { var jenkins *JenkinsServer - if openOption.Name == "" { - jenkins = getCurrentJenkins() - } else { + if openOption.Name == "" && openOption.Interactive { + jenkinsNames := getJenkinsNames() + prompt := &survey.Select{ + Message: "Choose a Jenkins that you want to open:", + Options: jenkinsNames, + } + survey.AskOne(prompt, &(openOption.Name)) + } + + if openOption.Name != "" { jenkins = findJenkinsByName(openOption.Name) + } else { + jenkins = getCurrentJenkins() } if jenkins != nil && jenkins.URL != "" {