forked from google/trillian
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpresubmit.sh
executable file
·129 lines (110 loc) · 2.91 KB
/
presubmit.sh
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
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
#
# Presubmit checks for Trillian.
# Checks for lint errors, spelling, licensing, correct builds / tests and so on.
# Flags may be specified to allow suppressing of checks or automatic fixes, try
# `scripts/presubmit.sh --help` for details.
set -eu
check_deps() {
local failed=0
check_cmd golint github.com/golang/lint/golint || failed=10
check_cmd misspell github.com/client9/misspell/cmd/misspell || failed=11
check_cmd gocyclo github.com/fzipp/gocyclo || failed=12
check_cmd stringer golang.org/x/tools/cmd/stringer || failed=13
return $failed
}
check_cmd() {
local cmd="$1"
local repo="$2"
if ! type -p "${cmd}" > /dev/null; then
echo "${cmd} not found, try to 'go get -u ${repo}'"
return 1
fi
}
usage() {
echo "$0 [--fix] [--no-build] [--no-linters] [--no-generate]"
}
main() {
check_deps
local fix=0
local run_build=1
local run_linters=1
local run_generate=1
while [[ $# -gt 0 ]]; do
case "$1" in
--fix)
fix=1
;;
--help)
usage
exit 0
;;
--no-build)
run_build=0
;;
--no-linters)
run_linters=0
;;
--no-generate)
run_generate=0
;;
*)
usage
exit 1
;;
esac
shift 1
done
local go_srcs="$(find . -name '*.go' | \
grep -v mock_ | \
grep -v .pb.go | \
grep -v .pb.gw.go | \
grep -v _string.go | \
grep -v vendor/ | \
tr '\n' ' ')"
local proto_srcs="$(find . -name '*.proto' | \
grep -v vendor/ | \
tr '\n' ' ')"
if [[ "$fix" -eq 1 ]]; then
check_cmd goimports golang.org/x/tools/cmd/goimports
echo 'running gofmt'
gofmt -s -w ${go_srcs}
echo 'running goimports'
goimports -w ${go_srcs}
fi
if [[ "${run_linters}" -eq 1 ]]; then
echo 'running golint'
printf '%s\n' ${go_srcs} | xargs -I'{}' golint --set_exit_status '{}'
echo 'running go vet'
printf '%s\n' ${go_srcs} | xargs -I'{}' go vet '{}'
echo 'running gocyclo'
printf '%s\n' ${go_srcs} | xargs -I'{}' bash -c 'gocyclo -over 25 {}'
echo 'running misspell'
printf '%s\n' ${go_srcs} | xargs -I'{}' misspell -error -i cancelled,CANCELLED -locale US '{}'
echo 'checking license header'
local nolicense="$(grep -L 'Apache License' ${go_srcs} ${proto_srcs})"
if [[ "${nolicense}" ]]; then
echo "Missing license header in: ${nolicense}"
exit 2
fi
fi
local go_dirs="$(go list ./... | \
grep -v /vendor/)"
if [[ "${run_generate}" -eq 1 ]]; then
echo 'running go generate'
go generate -run="protoc" ${go_dirs}
go generate -run="mockgen" ${go_dirs}
go generate -run="stringer" ${go_dirs}
fi
if [[ "${run_build}" -eq 1 ]]; then
local goflags=''
if [[ "${GOFLAGS:+x}" ]]; then
goflags="${GOFLAGS}"
fi
echo 'running go build'
go build ${go_dirs}
echo 'running go test'
go test -cover ${goflags} ${go_dirs}
fi
}
main "$@"