-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #15917 from cevich/check_new_go_code
[CI:BUILD] Check new go code
- Loading branch information
Showing
2 changed files
with
54 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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\\(" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters