forked from tektoncd/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpresubmit-tests.sh
executable file
·138 lines (112 loc) · 3.88 KB
/
presubmit-tests.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
130
131
132
133
134
135
136
137
138
#!/usr/bin/env bash
# Copyright 2018 The Tekton Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script runs the presubmit tests; it is started by prow for each PR.
# For convenience, it can also be executed manually.
# Running the script without parameters, or with the --all-tests
# flag, causes all tests to be executed, in the right order.
# Use the flags --build-tests, --unit-tests and --integration-tests
# to run a specific set of tests.
# Markdown linting failures don't show up properly in Gubernator resulting
# in a net-negative contributor experience.
export DISABLE_MD_LINTING=1
source $(dirname $0)/../vendor/github.com/tektoncd/plumbing/scripts/presubmit-tests.sh
function test_documentation_has_been_generated() {
header "Testing if documentation has been generated"
make docs
if [[ -n $(git status --porcelain docs/) ]];then
echo "-- FATAL: The documentation or manpages didn't seem to be generated :"
git status docs
git diff docs
results_banner "Documentation" 1
exit 1
fi
results_banner "Documentation" 0
}
function test_golden_has_been_generated() {
header "Testing if golden files has been generated"
make update-golden
if [[ -n $(git status --porcelain pkg/) ]];then
echo "-- FATAL: The golden files didn't seem to be generated, rerun 'make generated' :"
git status docs
git diff docs
results_banner "Golden" 1
exit 1
fi
results_banner "Golden" 0
}
function check_go_lint() {
header "Testing if golint has been done"
make lint-go
if [[ $? != 0 ]]; then
results_banner "Go Lint" 1
exit 1
fi
results_banner "Go Lint" 0
}
function check_yaml_lint() {
header "Testing if yamllint has been done"
make lint-yaml
if [[ $? != 0 ]]; then
results_banner "YAML Lint" 1
exit 1
fi
results_banner "YAML Lint" 0
}
function post_build_tests() {
test_golden_has_been_generated
test_documentation_has_been_generated
check_go_lint
check_yaml_lint
}
function unit_tests() {
make test
}
function build_tests() {
local failed=0
# Check go code style with gofmt; exclude vendor/ files
subheader "Checking go code style with gofmt"
gofmt_out=$(gofmt -d $(find * -name '*.go' ! -path 'vendor/*' ! -path 'third_party/*'))
if [[ -n "$gofmt_out" ]]; then
failed=1
fi
echo "$gofmt_out"
# Perform markdown build checks first
markdown_build_tests || failed=1
# Check yaml using yamllint
yaml_build_tests || failed=1
# For documentation PRs, just check the md files
(( IS_DOCUMENTATION_PR )) && return ${failed}
# Skip build test if there is no go code
local go_pkg_dirs="$(go list ./... |grep -v third_party/)"
[[ -z "${go_pkg_dirs}" ]] && return ${failed}
# Ensure all the code builds
subheader "Checking that go code builds"
# only diff in default_build_test_runner and build_test
go build -v ./cmd... || failed=1
if [[ -f ./hack/verify-codegen.sh ]]; then
subheader "Checking autogenerated code is up-to-date"
./hack/verify-codegen.sh || failed=1
fi
# Check that we don't have any forbidden licenses in our images.
subheader "Checking for forbidden licenses"
check_licenses ${go_pkg_dirs} || failed=1
return ${failed}
}
# We use the default build, unit and integration test runners.
if [[ "$1" == "--build-cross-tests" ]]; then
make cross
else
main $@
fi