Skip to content

Commit 545cacc

Browse files
committed
iox-eclipse-iceoryx#2011 Fix nightly build
1 parent 5a1c298 commit 545cacc

File tree

2 files changed

+121
-63
lines changed

2 files changed

+121
-63
lines changed

.github/workflows/lint_pull_request.yml

+1-4
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ jobs:
2121
id: changed_files
2222
uses: Ana06/get-changed-files@v2.2.0
2323
- name: diff scan, clang-tidy for all files which are in `.clang-tidy-diff-scans.txt`
24-
run: |
25-
for diff_file in ${{ steps.changed_files.outputs.added_modified }}; do
26-
./tools/scripts/clang_tidy_check.sh scan_list .clang-tidy-diff-scans.txt ${diff_file}
27-
done
24+
run: ./tools/scripts/clang_tidy_check.sh scan_list .clang-tidy-diff-scans.txt "${{ steps.changed_files.outputs.added_modified }}"
2825

2926
check-for-todo:
3027
runs-on: ubuntu-latest

tools/scripts/clang_tidy_check.sh

+120-59
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/bin/bash
22

33
# Copyright (c) 2022 - 2023 by Apex.AI Inc. All rights reserved.
4+
# Copyright (c) 2023 by Mathias Kraus <elboberido@m-hias.de>. All rights reserved.
45
#
56
# Licensed under the Apache License, Version 2.0 (the "License");
67
# you may not use this file except in compliance with the License.
@@ -21,12 +22,17 @@
2122

2223
set -e
2324

25+
COLOR_OFF='\033[0m'
26+
COLOR_RED='\033[1;31m'
27+
COLOR_GREEN='\033[1;32m'
28+
COLOR_YELLOW='\033[1;33m'
29+
2430
MODE=${1:-full} # Can be either `full` for all files or `hook` for formatting with git hooks
2531

2632
FILE_FILTER="\.(h|hpp|inl|c|cpp)$"
2733

2834
fail() {
29-
printf "\033[1;31merror: %s: %s\033[0m\n" ${FUNCNAME[1]} "${1:-"Unknown error"}"
35+
printf "${COLOR_RED}error: %s: %s${COLOR_OFF}\n" ${FUNCNAME[1]} "${1:-"Unknown error"}"
3036
exit 1
3137
}
3238

@@ -60,91 +66,145 @@ echo "Using clang-tidy version: $($CLANG_TIDY_CMD --version | sed -n "s/.*versio
6066

6167
noSpaceInSuppressions=$(git ls-files | grep -E "$FILE_FILTER" | xargs -I {} grep -h '// NOLINTNEXTLINE (' {} || true)
6268
if [[ -n "$noSpaceInSuppressions" ]]; then
63-
echo -e "\e[1;31mRemove space between NOLINTNEXTLINE and '('!\e[m"
69+
echo -e "${COLOR_RED}Remove space between NOLINTNEXTLINE and '('!${COLOR_OFF}"
6470
echo "$noSpaceInSuppressions"
6571
exit 1
6672
fi
6773

6874
function scanWithFileList() {
6975
FILE_WITH_SCAN_LIST=$1
70-
FILE_TO_SCAN=$2
76+
FILES_TO_SCAN=$2
7177

7278
if ! test -f "$FILE_WITH_SCAN_LIST"
7379
then
74-
echo "Scan list file '${FILE_WITH_SCAN_LIST}' does not exist"
80+
echo -e "${COLOR_RED}Scan list file '${FILE_WITH_SCAN_LIST}' does not exist! Aborting!${COLOR_OFF}"
7581
return 1
7682
fi
7783

84+
SEPARATOR=''
7885
while IFS= read -r LINE
7986
do
8087
# add files until the comment section starts
8188
if [[ "$(echo $LINE | grep "#" | wc -l)" == "1" ]]; then
8289
break
8390
fi
84-
FILE_LIST="${FILE_LIST} $LINE"
91+
SCAN_LIST_ENTRIES+="${SEPARATOR}${LINE}"
92+
SEPARATOR=$'\n'
8593
done < "$FILE_WITH_SCAN_LIST"
8694

87-
if [[ -n $FILE_TO_SCAN ]]
95+
if [[ -z $SCAN_LIST_ENTRIES ]]
8896
then
89-
if ! test -f "$FILE_TO_SCAN"
90-
then
91-
echo "The file which should be scanned '${FILE_TO_SCAN}' does not exist"
92-
return 1
93-
fi
97+
echo -e "${COLOR_YELLOW}'${FILE_WITH_SCAN_LIST}' is empty skipping scan!${COLOR_OFF}"
98+
return 0
99+
fi
94100

95-
if [[ $(find ${FILE_LIST} -type f | grep -E ${FILE_FILTER} | grep ${FILE_TO_SCAN} | wc -l) == "0" ]]
96-
then
97-
echo "Skipping file '${FILE_TO_SCAN}' since it is not part of '${FILE_WITH_SCAN_LIST}'"
98-
return 0
101+
ALL_FILES_FROM_SCAN_LIST=$(find ${SCAN_LIST_ENTRIES} -type f | grep -E ${FILE_FILTER} | sort | uniq)
102+
103+
FILES_TO_SCAN_ARRAY=(${FILES_TO_SCAN})
104+
NUMBER_OF_FILES=${#FILES_TO_SCAN_ARRAY[@]}
105+
if [[ ${NUMBER_OF_FILES} -gt 0 ]]
106+
then
107+
FILES=""
108+
SEPARATOR=''
109+
SKIP_MESSAGE_PRINTED=0
110+
for FILE in ${FILES_TO_SCAN}; do
111+
if $(echo ${ALL_FILES_FROM_SCAN_LIST} | grep -q ${FILE})
112+
then
113+
FILES+="${SEPARATOR}${FILE}"
114+
SEPARATOR=$'\n'
115+
else
116+
if [[ ${SKIP_MESSAGE_PRINTED} -eq 0 ]]; then
117+
echo -e "${COLOR_YELLOW}Skipping files which are not part of '${FILE_WITH_SCAN_LIST}' ...${COLOR_OFF}"
118+
SKIP_MESSAGE_PRINTED=1
119+
fi
120+
echo -e "${COLOR_YELLOW}[#]${COLOR_OFF} ${FILE}"
121+
fi
122+
done
123+
124+
if [[ ${SKIP_MESSAGE_PRINTED} -eq 1 ]]; then
125+
echo -e "${COLOR_YELLOW}... end of list with skipped files!${COLOR_OFF}"
99126
fi
127+
scan "error" "$FILES"
128+
else
129+
echo "Performing full scan of all files in '${FILE_WITH_SCAN_LIST}'"
130+
scan "error" "${ALL_FILES_FROM_SCAN_LIST}"
131+
fi
132+
}
100133

101-
echo "Scanning file: ${FILE_TO_SCAN}"
102-
$CLANG_TIDY_CMD --warnings-as-errors=* -p build $FILE_TO_SCAN
134+
function scan() {
135+
WARN_MODE=$1
136+
FILES=$2
137+
FILES_ARRAY=(${FILES})
138+
NUMBER_OF_FILES=${#FILES_ARRAY[@]}
139+
140+
if [[ $WARN_MODE == "warn" ]]; then
141+
WARN_MODE_PARAM=""
142+
elif [[ $WARN_MODE == "error" ]]; then
143+
WARN_MODE_PARAM="--warnings-as-errors=*"
103144
else
104-
if [[ -z $FILE_LIST ]]
105-
then
106-
echo "'${FILE_WITH_SCAN_LIST}' is empty skipping folder scan."
107-
return 0
108-
fi
109-
echo "Performing full scan of all folders in '${FILE_WITH_SCAN_LIST}'"
110-
$CLANG_TIDY_CMD --warnings-as-errors=* -p build "$(find "${FILE_LIST}" -type f | grep -E ${FILE_FILTER})"
145+
echo "Invalid parameter! Must be either 'warn' or 'error' but got '${WARN_MODE}'"
146+
return 1
147+
fi
148+
149+
if [[ ${NUMBER_OF_FILES} -eq 0 ]]; then
150+
echo -e "${COLOR_YELLOW}-> nothing to do${COLOR_OFF}"
151+
return 0
111152
fi
153+
154+
echo -e "${COLOR_GREEN}Processing files ...${COLOR_OFF}"
155+
MAX_CONCURRENT_EXECUTIONS=$(nproc)
156+
CURRENT_CONCURRENT_EXECUTIONS=0
157+
echo "Concurrency set to '${MAX_CONCURRENT_EXECUTIONS}'"
158+
FILE_COUNTER=1
159+
for FILE in $FILES; do
160+
# run multiple clang-tidy instances concurrently
161+
if [[ ${CURRENT_CONCURRENT_EXECUTIONS} -ge ${MAX_CONCURRENT_EXECUTIONS} ]]; then
162+
wait -n # wait for one of the background processes to finish
163+
CURRENT_CONCURRENT_EXECUTIONS=$((CURRENT_CONCURRENT_EXECUTIONS - 1))
164+
fi
165+
166+
echo -e "${COLOR_GREEN}[${FILE_COUNTER}/${NUMBER_OF_FILES}]${COLOR_OFF} ${FILE}"
167+
FILE_COUNTER=$((FILE_COUNTER + 1))
168+
169+
if test -f "$FILE"; then
170+
${CLANG_TIDY_CMD} ${WARN_MODE_PARAM} --quiet -p build ${FILE} &
171+
CURRENT_CONCURRENT_EXECUTIONS=$((CURRENT_CONCURRENT_EXECUTIONS + 1))
172+
else
173+
echo -e "${COLOR_RED}File does not exist! Aborting!${COLOR_OFF}"
174+
return 1
175+
fi
176+
done
177+
# wait on each background process individually to abort script when a process exits with an error
178+
while [[ ${CURRENT_CONCURRENT_EXECUTIONS} -ne 0 ]]; do
179+
wait -n # wait for one of the background processes to finish
180+
CURRENT_CONCURRENT_EXECUTIONS=$((CURRENT_CONCURRENT_EXECUTIONS - 1))
181+
done
182+
183+
echo -e "${COLOR_GREEN}... done!${COLOR_OFF}"
112184
}
113185

114186
if [[ "$MODE" == "hook"* ]]; then
115187
if [[ $2 ]]; then
116188
FILE_WITH_SCAN_LIST=$2
117189
fi
118190

119-
FILES=$(git diff --cached --name-only --diff-filter=CMRT | grep -E "$FILE_FILTER" | cat)
120-
# List only added files
121-
ADDED_FILES=$(git diff --cached --name-only --diff-filter=A | grep -E "$FILE_FILTER" | cat)
122-
echo "Checking files with Clang-Tidy"
123-
echo " Number of modified files: $(echo "${FILES}" | grep -v "^$" | wc -l)"
124-
if [ -z "$FILES" ]; then
125-
echo " -> nothing to do"
191+
MODIFIED_FILES=$(git diff --cached --name-only --diff-filter=CMRT | grep -E "$FILE_FILTER" | cat)
192+
MODIFIED_FILES_ARRAY=($MODIFIED_FILES)
193+
NUMBER_OF_MODIFIED_FILES=${#MODIFIED_FILES_ARRAY[@]}
194+
echo ""
195+
echo "Checking modified files with Clang-Tidy"
196+
if [[ $FILE_WITH_SCAN_LIST && ${NUMBER_OF_MODIFIED_FILES} -gt 0 ]]; then
197+
scanWithFileList "${FILE_WITH_SCAN_LIST}" "${MODIFIED_FILES}"
126198
else
127-
echo " processing ..."
128-
if [[ $FILE_WITH_SCAN_LIST ]]; then
129-
for FILE_TO_SCAN in $FILES; do
130-
echo " ${FILE_TO_SCAN}"
131-
scanWithFileList $FILE_WITH_SCAN_LIST $FILE_TO_SCAN
132-
done
133-
else
134-
$CLANG_TIDY_CMD -p build $FILES
135-
fi
136-
echo " ... done"
199+
scan "warn" "${MODIFIED_FILES}"
137200
fi
138201

139-
echo " "
140-
echo " Number of added files: $(echo "${ADDED_FILES}" | grep -v "^$" | wc -l)"
141-
if [ -z "$ADDED_FILES" ]; then
142-
echo " -> nothing to do"
143-
else
144-
echo " processing ..."
145-
$CLANG_TIDY_CMD --warnings-as-errors=* -p build $ADDED_FILES
146-
echo " ... done"
147-
fi
202+
# List only added files
203+
ADDED_FILES=$(git diff --cached --name-only --diff-filter=A | grep -E "$FILE_FILTER" | cat)
204+
echo ""
205+
echo "Checking added files with Clang-Tidy"
206+
scan "error" "${ADDED_FILES}"
207+
148208
exit
149209
elif [[ "$MODE" == "full"* ]]; then
150210
DIRECTORY_TO_SCAN=$2
@@ -153,26 +213,27 @@ elif [[ "$MODE" == "full"* ]]; then
153213
then
154214
if ! test -d "$DIRECTORY_TO_SCAN"
155215
then
156-
echo "The directory which should be scanned '${DIRECTORY_TO_SCAN}' does not exist"
216+
echo "${COLOR_RED}The directory which should be scanned '${DIRECTORY_TO_SCAN}' does not exist! Aborting!${COLOR_OFF}"
157217
exit 1
158218
fi
159219

160-
echo "scanning all files in '${DIRECTORY_TO_SCAN}'"
161-
$CLANG_TIDY_CMD -p build $(find $DIRECTORY_TO_SCAN -type f | grep -E $FILE_FILTER )
220+
echo ""
221+
echo "Scanning all files in '${DIRECTORY_TO_SCAN}'"
222+
FILES=$(find $DIRECTORY_TO_SCAN -type f | grep -E $FILE_FILTER )
223+
scan "warn" "${FILES}"
162224
exit $?
163225
else
164-
FILES=$(git ls-files | grep -E "$FILE_FILTER")
226+
FILES=$(find iceoryx_* tools/introspection -type f | grep -E "$FILE_FILTER")
227+
echo ""
165228
echo "Checking all files with Clang-Tidy"
166-
echo " "
167-
echo $FILES
168-
$CLANG_TIDY_CMD -p build $FILES
229+
scan "warn" "${FILES}"
169230
exit $?
170231
fi
171232
elif [[ "$MODE" == "scan_list"* ]]; then
172233
FILE_WITH_SCAN_LIST=$2
173-
FILE_TO_SCAN=$3
234+
FILES_TO_SCAN=$3 # if there is more than one file, they must be enclosed in quotes -> "file1 file2 file3"
174235

175-
scanWithFileList $FILE_WITH_SCAN_LIST $FILE_TO_SCAN
236+
scanWithFileList "${FILE_WITH_SCAN_LIST}" "${FILES_TO_SCAN}"
176237

177238
exit $?
178239
else

0 commit comments

Comments
 (0)