18
18
19
19
mkdir -p " $( go env GOPATH) /bin"
20
20
21
- function update_mco_tests() {
21
+ update_mco_tests () {
22
22
echo " Regenerating MCO evergreen tests configuration"
23
23
python scripts/evergreen/e2e/mco/create_mco_tests.py > .evergreen-mco.yml
24
24
git add .evergreen-mco.yml
25
25
}
26
26
27
27
# Generates a yaml file to install the operator from the helm sources.
28
- function generate_standalone_yaml() {
28
+ generate_standalone_yaml () {
29
29
HELM_OPTS=$@
30
30
31
31
charttmpdir=$( mktemp -d 2> /dev/null || mktemp -d -t ' charttmpdir' )
@@ -73,7 +73,7 @@ function generate_standalone_yaml() {
73
73
74
74
}
75
75
76
- function python_formatting() {
76
+ python_formatting () {
77
77
# installing Black
78
78
if ! command -v " black" > /dev/null; then
79
79
pip install -r requirements.txt
@@ -85,15 +85,15 @@ function python_formatting() {
85
85
black .
86
86
}
87
87
88
- function generate_manifests() {
88
+ generate_manifests () {
89
89
make manifests
90
90
91
91
git add config/crd/bases
92
92
git add helm_chart/crds
93
93
git add public/crds.yaml
94
94
}
95
95
96
- function update_values_yaml_files() {
96
+ update_values_yaml_files () {
97
97
# ensure that all helm values files are up to date.
98
98
# shellcheck disable=SC2154
99
99
python scripts/evergreen/release/update_helm_values_files.py
@@ -107,7 +107,7 @@ function update_values_yaml_files() {
107
107
git add go.sum
108
108
}
109
109
110
- function update_release_json() {
110
+ update_release_json () {
111
111
# ensure that release.json is up 2 date
112
112
# shellcheck disable=SC2154
113
113
python scripts/evergreen/release/update_release.py
@@ -116,7 +116,7 @@ function update_release_json() {
116
116
git add release.json
117
117
}
118
118
119
- function regenerate_public_rbac_multi_cluster() {
119
+ regenerate_public_rbac_multi_cluster () {
120
120
if echo " $git_last_changed " | grep -q -e ' cmd/kubectl-mongodb' -e ' pkg/kubectl-mongodb' ; then
121
121
echo ' regenerating multicluster RBAC public example'
122
122
pushd pkg/kubectl-mongodb/common/
@@ -126,15 +126,15 @@ function regenerate_public_rbac_multi_cluster() {
126
126
fi
127
127
}
128
128
129
- function update_licenses() {
129
+ update_licenses () {
130
130
if [[ " ${MDB_UPDATE_LICENSES:- " " } " == " true" ]]; then
131
131
echo ' regenerating licenses'
132
132
time scripts/evergreen/update_licenses.sh 2>&1 | prepend " update_licenses"
133
133
git add LICENSE-THIRD-PARTY
134
134
fi
135
135
}
136
136
137
- function check_erroneous_kubebuilder_annotations() {
137
+ check_erroneous_kubebuilder_annotations () {
138
138
# Makes sure there are not erroneous kubebuilder annotations that can
139
139
# end up in CRDs as descriptions.
140
140
if grep " // kubebuilder" ./* -r --exclude-dir=vendor --include=\* .go; then
@@ -143,13 +143,30 @@ function check_erroneous_kubebuilder_annotations() {
143
143
fi
144
144
}
145
145
146
- function check_incorrect_makefile_variable_brackets() {
146
+ check_incorrect_makefile_variable_brackets () {
147
147
if find . -name " Makefile" | grep -v vendor | xargs grep " \$ {" ; then
148
148
echo -e " ${RED} ERROR: Makefiles should NEVER contain curly brackets variables${NO_COLOR} "
149
149
exit 1
150
150
fi
151
151
}
152
152
153
+ update_jobs () {
154
+ # Update release.json first in case there is a newer version
155
+ time update_release_json
156
+ # We need to generate the values files first
157
+ time update_values_yaml_files
158
+ # The values files are used for generating the standalone yaml
159
+ time generate_standalone_yaml
160
+ }
161
+
162
+ lint_code () {
163
+ scripts/evergreen/lint_code.sh
164
+ }
165
+
166
+ # bg_job_ vars are global; capture_bg_job function is appending to them on each call
167
+ bg_job_pids=()
168
+ bg_job_pids_with_names=()
169
+
153
170
# Helper function to capture background job PID with job name
154
171
capture_bg_job () {
155
172
local job_name=" $1 "
@@ -166,66 +183,52 @@ get_job_name() {
166
183
echo " ${match#*: } " # Remove everything up to and including the colon
167
184
}
168
185
169
- function pre_commit() {
170
- # Array to store background job PIDs
171
- # IMPORTANT: ensure each task is executed in it's own subshell following the pattern:
172
- # time new_check 2>&1 | prepend "new_check" &
173
- # capture_bg_job "new_check"
174
-
175
- # those bg_job_ vars are global and capture_bg_job is appending to them on each call
176
- bg_job_pids=()
177
- bg_job_pids_with_names=()
178
-
179
- {
180
- # Update release.json first in case there is a newer version
181
- time update_release_json
182
- # We need to generate the values files first
183
- time update_values_yaml_files
184
- # The values files are used for generating the standalone yaml
185
- time generate_standalone_yaml
186
- } 2>&1 | prepend " update_jobs" &
187
- capture_bg_job " update_jobs"
188
-
189
- time update_licenses 2>&1 | prepend " update_licenses" &
190
- capture_bg_job " update_licenses"
191
-
192
- time scripts/evergreen/lint_code.sh 2>&1 | prepend " lint_code.sh" &
193
- capture_bg_job " lint_code.sh"
194
-
195
- time start_shellcheck 2>&1 | prepend " shellcheck" &
196
- capture_bg_job " shellcheck"
197
-
198
- time regenerate_public_rbac_multi_cluster 2>&1 | prepend " regenerate_public_rbac_multi_cluster" &
199
- capture_bg_job " regenerate_public_rbac_multi_cluster"
200
-
201
- # Run black and isort on python files that have changed
202
- time python_formatting 2>&1 | prepend " python_formatting" &
203
- capture_bg_job " python_formatting"
186
+ # Executes function given on the first argument as background job.
187
+ # It's ensuring logs are properly prefixed by the name and
188
+ # the job's pid is captured in bg_jobs array in order to wait for completion.
189
+ run_job_in_background () {
190
+ job_name=$1
191
+ time ${job_name} 2>&1 | prepend " ${job_name} " &
192
+ capture_bg_job " ${job_name} "
193
+ }
204
194
205
- time check_erroneous_kubebuilder_annotations 2>&1 | prepend " check_erroneous_kubebuilder_annotations" &
206
- capture_bg_job " check_erroneous_kubebuilder_annotations"
195
+ # Waits for all background jobs stored in bg_job_pids and check their exit codes.
196
+ wait_for_all_background_jobs () {
197
+ failures=()
198
+ for pid in " ${bg_job_pids[@]} " ; do
199
+ wait " ${pid} " || {
200
+ job_name=$( get_job_name " ${pid} " )
201
+ failures+=(" ${RED}${job_name} (PID ${pid} )${NO_COLOR} " )
202
+ }
203
+ done
207
204
208
- # add any other checks above
205
+ if [[ ${# failures[@]} -gt 0 ]]; then
206
+ echo -e " ${RED} Some checks have failed:${NO_COLOR} "
207
+ for failure in " ${failures[@]} " ; do
208
+ echo -e " $failure "
209
+ done
210
+ echo -e " ${RED} To see the details look for the job's logs by it's prefixed name (e.g. \" shellcheck:\" ).${NO_COLOR} "
211
+ return 1
212
+ fi
209
213
210
- # Wait for all background jobs and check their exit codes
211
- failures=()
212
- for pid in " ${bg_job_pids[@]} " ; do
213
- wait " ${pid} " || {
214
- job_name=$( get_job_name " ${pid} " )
215
- failures+=(" ${RED}${job_name} (PID ${pid} )${NO_COLOR} " )
216
- }
217
- done
214
+ return 0
215
+ }
218
216
219
- if [[ ${# failures[@]} -gt 0 ]]; then
220
- echo -e " ${RED} Some checks have failed:${NO_COLOR} "
221
- for failure in " ${failures[@]} " ; do
222
- echo -e " $failure "
223
- done
224
- echo -e " ${RED} To see the details look for the job's logs by it's prefixed name (e.g. \" shellcheck:\" ).${NO_COLOR} "
225
- exit 1
217
+ pre_commit () {
218
+ run_job_in_background " update_jobs"
219
+ run_job_in_background " update_licenses"
220
+ run_job_in_background " lint_code"
221
+ run_job_in_background " start_shellcheck"
222
+ run_job_in_background " regenerate_public_rbac_multi_cluster"
223
+ run_job_in_background " python_formatting"
224
+ run_job_in_background " check_erroneous_kubebuilder_annotations"
225
+
226
+ if wait_for_all_background_jobs; then
227
+ echo -e " ${GREEN} pre-commit: All checks passed!${NO_COLOR} "
228
+ return 0
229
+ else
230
+ return 1
226
231
fi
227
-
228
- echo -e " ${GREEN} pre-commit: All checks passed!${NO_COLOR} "
229
232
}
230
233
231
234
# Function to run shellcheck on a single file
@@ -261,5 +264,5 @@ elif [[ "${cmd}" == "pre-commit" ]]; then
261
264
elif [[ " ${cmd} " == " shellcheck" ]]; then
262
265
start_shellcheck
263
266
elif [[ " ${cmd} " == " lint" ]]; then
264
- source scripts/evergreen/ lint_code.sh
267
+ lint_code
265
268
fi
0 commit comments