/
cli.go
117 lines (91 loc) · 2.93 KB
/
cli.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package main
import (
"flag"
"fmt"
"io"
)
const (
ExitCodeOK = iota
ExitCodeError
ExitCodeReviewFailed
ExitCodeParseFlagsError
ExitCodeInvalidFlagError
)
type CLI struct {
outStream, errStream io.Writer
}
func (cli *CLI) Run(args []string) int {
var (
owner string
repo string
token string
number int
version bool
)
flags := flag.NewFlagSet(Name, flag.ContinueOnError)
flags.Usage = func() {
fmt.Fprint(cli.outStream, usage)
}
flags.StringVar(&owner, "owner", "", "")
flags.StringVar(&owner, "o", "", "")
flags.StringVar(&repo, "repo", "", "")
flags.StringVar(&repo, "r", "", "")
flags.StringVar(&token, "token", "", "")
flags.StringVar(&token, "t", "", "")
flags.IntVar(&number, "number", 0, "")
flags.IntVar(&number, "n", 0, "")
flags.BoolVar(&version, "version", false, "")
flags.BoolVar(&version, "v", false, "")
if err := flags.Parse(args[1:]); err != nil {
return ExitCodeParseFlagsError
}
if version {
fmt.Fprint(cli.outStream, OutputVersion())
return ExitCodeOK
}
if len(owner) == 0 {
fmt.Fprintf(cli.errStream, "Failed to set up bump-reviewer: GitHub owner is missing\n"+
"Please set it via `-o` option\n\n")
return ExitCodeInvalidFlagError
}
if len(repo) == 0 {
fmt.Fprintf(cli.errStream, "Failed to set up bump-reviewer: GitHub repository is missing\n"+
"Please set it via `-r` option\n\n")
return ExitCodeInvalidFlagError
}
if len(token) == 0 {
fmt.Fprintf(cli.errStream, "Failed to set up bump-reviewer: GitHub Personal Access Token is missing\n"+
"Please set it via `-t` option\n\n")
return ExitCodeInvalidFlagError
}
if number == 0 {
fmt.Fprintf(cli.errStream, "Failed to set up bump-reviewer: Pull Request number is missing\n"+
"Please set it via `-n` option\n\n")
return ExitCodeInvalidFlagError
}
client := NewGitHubClient(owner, repo, token)
reviewer := Reviewer{client}
if err := reviewer.Review(number); err != nil {
if r, ok := err.(review); ok {
fmt.Fprintf(cli.errStream, "Pull Request #%d did not pass the review because of the following reason\n\n%s", number, r.review())
return ExitCodeReviewFailed
}
fmt.Fprintf(cli.errStream, `bump-reviewer failed to review because of the following error.
%s
You might encounter a bug with bump-reviewer, and if so, please report it to https://github.com/shuheiktgw/bump-reviewer/issues
`, err)
return ExitCodeError
}
fmt.Fprintf(cli.outStream, "bump-reviewer successfully approved your Pull Request.\n\n")
return ExitCodeOK
}
var usage = `Usage: bump-reviewer [options...]
bump-reviewer is a command to review and approve bump up Pull Requests
OPTIONS:
--owner value, -o value specifies GitHub Owner
--repo value, -r value specifies GitHub Repository Name
--token value, -v value specifies GitHub Personal Access Token
--number value, -n value specifies GitHub Pull Request Number to review
--version, -v prints the current version
--help, -h prints help
`