diff --git a/dist/tools/buildsystem_sanity_check/check.sh b/dist/tools/buildsystem_sanity_check/check.sh index 6cf009a7be..4c872f886e 100755 --- a/dist/tools/buildsystem_sanity_check/check.sh +++ b/dist/tools/buildsystem_sanity_check/check.sh @@ -15,6 +15,9 @@ : "${RIOTBASE:="$(cd "$(dirname "$0")/../../../" || exit; pwd)"}" +: "${RIOTTOOLS:=${RIOTBASE}/dist/tools}" +. "${RIOTTOOLS}"/ci/github_annotate.sh + SCRIPT_PATH=dist/tools/buildsystem_sanity_check/check.sh @@ -31,7 +34,22 @@ prepend() { } error_with_message() { - tab_indent | prepend "${1}" + while read INPUT; do + if github_annotate_is_on; then + MESSAGE="${1}" + FILE=$(echo "${INPUT}" | cut -d: -f1) + LINE=$(echo "${INPUT}" | cut -d: -f2) + MATCH=$(echo "${INPUT}" | cut -d: -f3) + if [[ $var =~ ^[0-9]+$ ]] || [ -z "$MATCH" ]; then + # line is not provided in grep pattern + LINE=0 + fi + github_annotate_error "$FILE" "$LINE" "$MESSAGE" + fi + # We need to generate non GitHub annotations for this script to fail. + # Also, the pure annotate output is not very helpful on its own ;-) + echo "${INPUT}" | tab_indent | prepend "${1}:" + done } @@ -56,8 +74,8 @@ check_not_parsing_features() { # These two files contain sanity checks using FEATURES_ so are allowed pathspec+=(':!Makefile.include' ':!makefiles/info-global.inc.mk') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ - | error_with_message 'Modules should not check the content of FEATURES_PROVIDED/_REQUIRED/OPTIONAL' + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ + | error_with_message 'Modules should not check the content of FEATURES_PROVIDED/REQUIRED/OPTIONAL' } # Providing features for boards and CPUs should only be done in @@ -72,7 +90,7 @@ check_providing_features_only_makefile_features() { pathspec+=(":!*Makefile.features") - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'Features should only be provided in Makefile.features files' } @@ -136,8 +154,8 @@ check_not_exporting_variables() { patterns+=(-e "export[[:blank:]]\+${variable}") done - git -C "${RIOTBASE}" grep "${patterns[@]}" \ - | error_with_message 'Variables must not be exported:' + git -C "${RIOTBASE}" grep -n "${patterns[@]}" \ + | error_with_message 'Variables must not be exported' # Some variables may still be exported in 'makefiles/vars.inc.mk' as the # only place that should export common variables @@ -152,8 +170,8 @@ check_not_exporting_variables() { # Only run if there are patterns, otherwise it matches everything if [ ${#patterns[@]} -ne 0 ]; then - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ - | error_with_message 'Variables must only be exported in `makefiles/vars.inc.mk`:' + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ + | error_with_message 'Variables must only be exported in `makefiles/vars.inc.mk`' fi } @@ -172,8 +190,8 @@ check_deprecated_vars_patterns() { # Ignore this file when matching as it self matches pathspec+=(":!${SCRIPT_PATH}") - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ - | error_with_message 'Deprecated variables or patterns:' + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ + | error_with_message 'Deprecated variables or patterns' } # Makefile files cpu must not be included by the board anymore @@ -188,7 +206,7 @@ check_board_do_not_include_cpu_features_dep() { pathspec+=('boards/') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'Makefiles files from cpu must not be included by the board anymore' } @@ -204,7 +222,7 @@ check_cpu_cpu_model_defined_in_makefile_features() { pathspec+=(':!boards/**/Makefile.features') pathspec+=(':!cpu/**/Makefile.features') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'CPU and CPU_MODEL definition must be done by board/BOARD/Makefile.features, board/common/**/Makefile.features or cpu/CPU/Makefile.features' } @@ -217,7 +235,7 @@ check_not_setting_board_equal() { pathspec+=('**/Makefile') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'Applications Makefile should use "BOARD ?="' } @@ -231,7 +249,7 @@ check_board_insufficient_memory_not_in_makefile() { pathspec+=('**/Makefile') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'Move BOARD_INSUFFICIENT_MEMORY to Makefile.ci' } @@ -245,7 +263,7 @@ checks_tests_application_not_defined_in_makefile() { pathspec+=('tests/**/Makefile') pathspec+=(':!tests/external_board_native/Makefile') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message "Don't define APPLICATION in test Makefile" } @@ -258,7 +276,7 @@ checks_develhelp_not_defined_via_cflags() { pathspec+=('**/Makefile') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message "Use DEVELHELP ?= 1 instead of using CFLAGS directly" } @@ -274,7 +292,7 @@ check_files_in_boards_not_reference_board_var() { # boards/common/nrf52 uses a hack to resolve dependencies early pathspec+=(':!boards/common/nrf52/Makefile.include') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message 'Code in boards/ should not use $(BOARDS) to reference files since this breaks external BOARDS changing BOARDSDIR"' } @@ -286,7 +304,7 @@ check_no_pseudomodules_in_makefile_dep() { pathspec+=('**/Makefile.dep') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message "Don't define PSEUDOMODULES in Makefile.dep" } @@ -301,7 +319,7 @@ check_no_usemodules_in_makefile_include() { pathspec+=(':!tests/**/Makefile.include') pathspec+=(':!examples/**/Makefile.include') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message "Don't include USEMODULE in Makefile.include" } @@ -312,7 +330,7 @@ check_no_pkg_source_local() { patterns+=(-e 'PKG_SOURCE_LOCAL') pathspec+=('pkg/*/Makefile') - git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" \ + git -C "${RIOTBASE}" grep -n "${patterns[@]}" -- "${pathspec[@]}" \ | error_with_message "Don't push PKG_SOURCE_LOCAL definitions upstream" } @@ -344,5 +362,8 @@ main() { if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + github_annotate_setup main + github_annotate_teardown + github_annotate_report_last_run fi