-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.go
99 lines (91 loc) · 2.84 KB
/
build.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
96
97
98
99
package commands
import (
"errors"
"fmt"
"os"
"text/tabwriter"
circleci "github.com/mtchavez/circlecigo"
"github.com/urfave/cli"
)
// BuildCmd - build project and interact with builds
var BuildCmd = cli.Command{
Name: "build",
Usage: "build project and interact with builds",
Flags: append(buildFlags, branchFlag),
Action: buildProjectAction,
Subcommands: buildSubcommands,
}
var buildFlags = []cli.Flag{
userFlag,
projectFlag,
}
var buildSubcommands = []cli.Command{
{
Name: "cancel",
Usage: "cancel a specific build",
Action: buildCancelAction,
Flags: append(buildFlags, buildNumFlag),
},
{
Name: "retry",
Usage: "retry a specific build",
Action: buildRetryAction,
Flags: append(buildFlags, buildNumFlag),
},
}
func buildProjectAction(context *cli.Context) error {
token := context.GlobalString("token")
client := circleci.NewClient(token)
user := context.String("user")
project := context.String("project")
branch := context.String("branch")
var build *circleci.Build
var resp *circleci.APIResponse
if branch != "" {
build, resp = client.BuildBranch(user, project, branch, nil)
} else {
build, resp = client.NewBuild(user, project, nil)
}
if resp.Success() {
padding := 1
writer := tabwriter.NewWriter(os.Stdout, 0, 8, padding, '\t', tabwriter.AlignRight)
fmt.Fprintln(writer, "Build\tBranch\tQueued\tURL")
fmt.Fprintln(writer, fmt.Sprintf("%d\t%s\t%s\t%s\t", build.BuildNum, build.Branch, build.QueuedAt, build.BuildURL))
writer.Flush()
return nil
}
failed := errors.New("Failed to build")
return failed
}
func buildCancelAction(context *cli.Context) error {
token := context.GlobalString("token")
buildNum := context.Int("num")
client := circleci.NewClient(token)
build, resp := client.CancelBuild(context.String("user"), context.String("project"), buildNum)
if resp.Success() {
padding := 1
writer := tabwriter.NewWriter(os.Stdout, 0, 8, padding, '\t', tabwriter.AlignRight)
fmt.Fprintln(writer, "Build\tBranch\tStatus\tURL")
fmt.Fprintln(writer, fmt.Sprintf("%d\t%s\t%s\t%s\t", build.BuildNum, build.Branch, build.Status, build.BuildURL))
writer.Flush()
return nil
}
failed := errors.New("Failed to cancel build")
return failed
}
func buildRetryAction(context *cli.Context) error {
token := context.GlobalString("token")
buildNum := context.Int("num")
client := circleci.NewClient(token)
build, resp := client.RetryBuild(context.String("user"), context.String("project"), buildNum)
if resp.Success() {
padding := 1
writer := tabwriter.NewWriter(os.Stdout, 0, 8, padding, '\t', tabwriter.AlignRight)
fmt.Fprintln(writer, "Build\tBranch\tStatus\tURL")
fmt.Fprintln(writer, fmt.Sprintf("%d\t%s\t%s\t%s\t", build.BuildNum, build.Branch, build.Status, build.BuildURL))
writer.Flush()
return nil
}
failed := errors.New("Failed to retry build")
return failed
}