Merge pull request #15917 from cevich/check_new_go_code

[CI:BUILD] Check new go code
This commit is contained in:
OpenShift Merge Robot 2022-09-29 01:12:03 +02:00 committed by GitHub
commit b7eee0b2ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 19 deletions

View File

@ -0,0 +1,53 @@
#!/bin/bash
set -eo pipefail
# This script is intended to confirm new go code conforms to certain
# conventions and/or does not introduce use of old/deprecated packages
# or functions. It needs to run in the Cirrus CI environment, on behalf
# of PRs, via runner.sh. This ensures a consistent and predictable
# environment not easily reproduced by a `Makefile`.
# shellcheck source=contrib/cirrus/lib.sh
source $(dirname $0)/lib.sh
check_msg() {
msg "#####" # Cirrus-CI logs automatically squash empty lines
msg "##### $1" # Complains if $1 is empty
}
# First arg is check description, second is regex to search $diffs for.
check_diffs() {
local check regex
check="$1"
regex="$2"
check_msg "Confirming changes have no $check"
req_env_vars check regex diffs
if egrep -q "$regex"<<<"$diffs"; then
# Show 5 context lines before/after as compromise for script simplicity
die "Found $check:
$(egrep -B 5 -A 5 "$regex"<<<"$diffs")"
fi
}
if [[ -n "$CIRRUS_TAG" ]] || ! req_env_vars CIRRUS_CHANGE_IN_REPO CIRRUS_PR DEST_BRANCH
then
warn "Skipping: Golang code checks cannot run in this context"
exit 0
fi
base=$(git merge-base $DEST_BRANCH $CIRRUS_CHANGE_IN_REPO)
diffs=$(git diff $base $CIRRUS_CHANGE_IN_REPO -- '*.go' ':^vendor/')
if [[ -z "$diffs" ]]; then
check_msg "There are no golang diffs to check between $base...$CIRRUS_CHANGE_IN_REPO"
exit 0
fi
check_diffs \
"use of deprecated ioutil vs recommended io or os packages." \
"^(\\+[^#]+io/ioutil)|(\\+.+ioutil\\..+)"
check_diffs \
"use of os.IsNotExists(err) vs recommended errors.Is(err, os.ErrNotExist)" \
"^\\+[^#]*os\\.IsNotExists\\("

View File

@ -233,25 +233,7 @@ function _run_consistency() {
SUGGESTION="run 'make generate-bindings' and commit all changes" ./hack/tree_status.sh
make completions
SUGGESTION="run 'make completions' and commit all changes" ./hack/tree_status.sh
if [[ -z "$CIRRUS_TAG" ]] && \
req_env_vars CIRRUS_CHANGE_IN_REPO CIRRUS_PR DEST_BRANCH
then
local base diffs regex i
# Prevent this check from detecting itself
i=i
msg "#####"
msg "Verifying no change adds new calls to ${i}o/${i}outil."
base=$(git merge-base $DEST_BRANCH $CIRRUS_CHANGE_IN_REPO)
diffs=$(git diff $base $CIRRUS_CHANGE_IN_REPO -- '*.go' ':^vendor/')
regex=$(echo -e "^(\\+.+${i}o/${i}outil)|(\\+.+${i}outil\\..+)")
if egrep -q "$regex"<<<"$diffs"; then
die "Found attempted use of deprecated ${i}outils:
$(egrep -B 5 -A 5 "$regex"<<<"$diffs")"
fi
else
msg "Skipping check for ${i}o/${i}outil addition."
fi
$SCRIPT_BASE/check_go_changes.sh
}
function _run_build() {