diff --git a/dist/tools/shellcheck/check.sh b/dist/tools/shellcheck/check.sh index ff19863d8c..0871274956 100755 --- a/dist/tools/shellcheck/check.sh +++ b/dist/tools/shellcheck/check.sh @@ -21,6 +21,7 @@ fi : "${RIOTTOOLS:=${PWD}/dist/tools}" . "${RIOTTOOLS}"/ci/changed_files.sh +. "${RIOTTOOLS}"/ci/github_annotate.sh FILES=$(FILEREGEX='(.*\.sh$)' changed_files) @@ -34,14 +35,34 @@ ${SHELLCHECK_CMD} --version &> /dev/null || { exit 1 } -ERRORS=$("${SHELLCHECK_CMD}" --format=gcc ${FILES}) +github_annotate_setup + +# shellcheck disable=SC2086 +# FILES is supposed to be split, so don't quote it +ERRORS="$("${SHELLCHECK_CMD}" --format=gcc ${FILES})" EXIT_CODE=0 if [ -n "${ERRORS}" ] then - printf "%s There are issues in the following shell scripts %s\n" "${CERROR}" "${CRESET}" - printf "%s\n" "${ERRORS}" + if github_annotate_is_on; then + echo "${ERRORS}" | while read -r error; do + FILENAME=$(echo "${error}" | cut -d: -f1) + LINENUM=$(echo "${error}" | cut -d: -f2) + SEVERITY=$(echo "${error}" | cut -d: -f4) + DETAILS=$(echo "${error}" | cut -d: -f5- | + sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + if echo "${SEVERITY}" | grep -q 'error'; then + github_annotate_error "${FILENAME}" "${LINENUM}" "${DETAILS}" + else + github_annotate_warning "${FILENAME}" "${LINENUM}" "${DETAILS}" + fi + done + else + printf "%s There are issues in the following shell scripts %s\n" \ + "${CERROR}" "${CRESET}" + printf "%s\n" "${ERRORS}" + fi if [ -z "${ERROR_EXIT_CODE}" ]; then EXIT_CODE=1 else @@ -49,4 +70,6 @@ then fi fi +github_annotate_teardown + exit "${EXIT_CODE}"