-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.go
95 lines (79 loc) · 2.32 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
type Recentbuild struct {
Branch string `json:"branch"`
BuildUrl string `json:"build_url"`
StartTime string `json:"start_time"`
BuildTimeMillis int `json:"build_time_millis"`
Status string `json:"status"`
BuildNum int `json:"build_num"`
UserName string `json:"username"`
RepoName string `json:"reponame"`
}
type Items struct {
Item []Item `json:"items"`
}
type Item struct {
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Arg string `json:"arg"`
Icon icon `json:"icon"`
}
type icon struct {
Path string `json:"path"`
}
func circleci() {
var token *string = flag.String("t", "secret", "CirclCI Token")
var filter *string = flag.String("f", "reponame, branch, username, status...", "Search Filter")
flag.Parse()
url := "https://circleci.com/api/v1.1/recent-builds?circle-token=" + *token
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
res, _ := client.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
var r []Recentbuild
json.Unmarshal(body, &r)
var items []Item
for _, v := range r {
if strings.Contains(v.RepoName+v.Branch+v.Status+v.UserName, *filter) {
title := "#" + fmt.Sprint(v.BuildNum) +
" / " + v.RepoName +
" / " + v.Branch
sec := v.BuildTimeMillis / 1000
subtitle := "user: " + v.UserName +
" / start: " + v.StartTime +
" / buildtime: " + fmt.Sprint(sec) + "sec"
var color string
if v.Status == "no_tests" || v.Status == "not_run" || v.Status == "not_running" {
color = "gray"
} else if v.Status == "fixed" || v.Status == "success" {
color = "green"
} else if v.Status == "queued" || v.Status == "scheduled" {
color = "purple"
} else if v.Status == "canceled" || v.Status == "failed" || v.Status == "infrastructure_fail" || v.Status == "timeout" {
color = "red"
} else if v.Status == "retried" || v.Status == "running" {
color = "blue"
}
items = append(items, Item{
Title: title,
Subtitle: subtitle,
Arg: v.BuildUrl,
Icon: icon{Path: color + ".png"}})
}
}
j, _ := json.Marshal(Items{Item: items})
fmt.Println(string(j))
}
func main() {
circleci()
}