Skip to content

Commit

Permalink
Merge pull request #15917 from cevich/check_new_go_code
Browse files Browse the repository at this point in the history
[CI:BUILD] Check new go code
  • Loading branch information
openshift-merge-robot authored Sep 28, 2022
2 parents 40b28dc + 527fc40 commit b7eee0b
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 19 deletions.
53 changes: 53 additions & 0 deletions contrib/cirrus/check_go_changes.sh
Original file line number Diff line number Diff line change
@@ -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\\("
20 changes: 1 addition & 19 deletions contrib/cirrus/runner.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down

0 comments on commit b7eee0b

Please sign in to comment.