diff --git a/app/cmd/job_type.go b/app/cmd/job_type.go new file mode 100644 index 0000000000000000000000000000000000000000..925dbc969f2370c73109fe8cec5c1dfa971e7cc3 --- /dev/null +++ b/app/cmd/job_type.go @@ -0,0 +1,68 @@ +package cmd + +import ( + "fmt" + "log" + "os" + + "github.com/linuxsuren/jenkins-cli/client" + "github.com/linuxsuren/jenkins-cli/util" + "github.com/spf13/cobra" +) + +type JobTypeOption struct { + OutputOption +} + +var jobTypeOption JobTypeOption + +func init() { + jobCmd.AddCommand(jobTypeCmd) + jobTypeCmd.Flags().StringVarP(&jobTypeOption.Format, "output", "o", "json", "Format the output") +} + +var jobTypeCmd = &cobra.Command{ + Use: "type", + Short: "Print the types of job which in your Jenkins", + Long: `Print the types of job which in your Jenkins`, + Run: func(cmd *cobra.Command, args []string) { + jenkins := getCurrentJenkins() + jclient := &client.JobClient{} + jclient.URL = jenkins.URL + jclient.UserName = jenkins.UserName + jclient.Token = jenkins.Token + jclient.Proxy = jenkins.Proxy + jclient.ProxyAuth = jenkins.ProxyAuth + + if status, err := jclient.GetJobTypeCategories(); err == nil { + var data []byte + if data, err = jobTypeOption.Output(status); err == nil { + if len(data) > 0 { + fmt.Printf("%s\n", string(data)) + } + } else { + log.Fatal(err) + } + } else { + log.Fatal(err) + } + }, +} + +func (o *JobTypeOption) Output(obj interface{}) (data []byte, err error) { + if data, err = o.OutputOption.Output(obj); err != nil { + jobCategories := obj.([]client.JobCategory) + table := util.CreateTable(os.Stdout) + table.AddRow("number", "name", "type") + for _, jobCategory := range jobCategories { + for i, item := range jobCategory.Items { + table.AddRow(fmt.Sprintf("%d", i), item.DisplayName, + jobCategory.Name) + } + } + table.Render() + err = nil + data = []byte{} + } + return +} diff --git a/client/job.go b/client/job.go index eacde4ab5512f1f8278a3726dd2f06b6affb50ff..1e4e5bfe6604a97e51a7ffc264f26dcd4783a0bd 100644 --- a/client/job.go +++ b/client/job.go @@ -218,6 +218,41 @@ func (q *JobClient) GetJob(name string) (job *Job, err error) { return } +func (q *JobClient) GetJobTypeCategories() (jobCategories []JobCategory, err error) { + api := fmt.Sprintf("%s/view/all/itemCategories?depth=3", q.URL) + var ( + req *http.Request + response *http.Response + ) + + req, err = http.NewRequest("GET", api, nil) + if err == nil { + q.AuthHandle(req) + } else { + return + } + + client := q.GetClient() + if response, err = client.Do(req); err == nil { + code := response.StatusCode + var data []byte + data, err = ioutil.ReadAll(response.Body) + if code == 200 { + type innerJobCategories struct { + Categories []JobCategory + } + result := &innerJobCategories{} + err = json.Unmarshal(data, result) + jobCategories = result.Categories + } else { + log.Fatal(string(data)) + } + } else { + log.Fatal(err) + } + return +} + func (q *JobClient) UpdatePipeline(name, script string) (err error) { jobItems := strings.Split(name, " ") path := "" @@ -436,3 +471,18 @@ type Pipeline struct { Script string Sandbox bool } + +type JobCategory struct { + Description string + ID string + Items []JobCategoryItem + MinToShow int + Name string + Order int +} + +type JobCategoryItem struct { + Description string + DisplayName string + Order int +}