@@ -31,6 +31,7 @@ OPT_SONARQUBE=""
31
31
OPT_SOURCE_DIRECTORY=" ${REPO_ROOT_DIR} "
32
32
OPT_BUILD_DIRECTORY=" build-wakaama"
33
33
OPT_TEST_COVERAGE_REPORT=" "
34
+ OPT_CODE_CHECKER=" full"
34
35
OPT_VERBOSE=0
35
36
OPT_WRAPPER_CMD=" "
36
37
RUN_BUILD=0
@@ -41,6 +42,7 @@ RUN_GITLINT=0
41
42
RUN_GIT_BLAME_IGNORE=0
42
43
RUN_TESTS=0
43
44
RUN_DOXYGEN=0
45
+ RUN_CODE_CHECKER=0
44
46
45
47
HELP_MSG=" usage: ${SCRIPT_NAME} <OPTIONS>...
46
48
Runs build and test steps in CI.
@@ -72,6 +74,9 @@ Options:
72
74
(WRAPPER: path to build-wrapper)
73
75
--test-coverage REPORT Enable code coverage measurement, output REPORT
74
76
(REPORT: xml html text none)
77
+ --code-checker ACTION Run the CodeChecker code analyzer to create a baseline,
78
+ do a full check or a PR check (show just difference to baseline)
79
+ (TYPE: full, diff, baseline)
75
80
-v, --verbose Verbose output
76
81
-a, --all Run all steps required for a MR
77
82
-h, --help Display this help and exit
@@ -85,6 +90,7 @@ Available steps (executed by --all):
85
90
--run-build Build all targets
86
91
--run-tests Execute tests (works only for top level project)
87
92
--run-doxygen Build the Doxygen documentation of the code
93
+ --run-code-checker Run the CodeChecker code analyzer
88
94
"
89
95
90
96
function usage() {
@@ -229,6 +235,46 @@ function run_doxygen() {
229
235
GIT_REVISION=$( git rev-parse @) WORKING_DIR=$( pwd) DOXYGEN_OUT_DIR=build-wakaama/doxygen \
230
236
doxygen doc/doxygen/Doxyfile
231
237
}
238
+
239
+ function run_code_checker() {
240
+ readonly config_file=" ${REPO_ROOT_DIR} /tools/code_checker/config.json"
241
+ readonly ignore_file=" ${REPO_ROOT_DIR} /tools/code_checker/ignore.txt"
242
+ readonly baseline_file=" ${REPO_ROOT_DIR} /tools/code_checker/reports.baseline"
243
+ readonly code_checker_result_dir=" build-wakaama/code_checker_result/"
244
+ readonly code_checker_report=" build-wakaama/code_checker_report/"
245
+
246
+ set +e +o pipefail
247
+ CodeChecker check --logfile build-wakaama/compile_commands.json \
248
+ --config " $config_file " \
249
+ --ignore " $ignore_file " \
250
+ --output $code_checker_result_dir \
251
+ || true # Currently failing with found issues
252
+ set -e -o pipefail
253
+
254
+ if [ " ${OPT_CODE_CHECKER} " = " diff" ]; then
255
+ CodeChecker cmd diff -b " $baseline_file " \
256
+ -n $code_checker_result_dir \
257
+ -o html \
258
+ --export " ${code_checker_report} " \
259
+ --new
260
+ else
261
+ if [ " ${OPT_CODE_CHECKER} " = " baseline" ]; then
262
+ output_format=" baseline"
263
+ output_location=" $baseline_file "
264
+ else
265
+ output_format=" html"
266
+ output_location=" $code_checker_report "
267
+ fi
268
+
269
+ CodeChecker parse -e " $output_format " \
270
+ -o " $output_location " \
271
+ --config " $config_file " \
272
+ --ignore " $ignore_file " \
273
+ --trim-path-prefix=" ${REPO_ROOT_DIR} " \
274
+ " $code_checker_result_dir "
275
+ fi
276
+ }
277
+
232
278
# Parse Options
233
279
234
280
if [[ " $OSTYPE " == " darwin" * ]]; then
@@ -260,12 +306,14 @@ if ! PARSED_OPTS=$($getopt -o vah \
260
306
-l run-git-blame-ignore \
261
307
-l run-tests \
262
308
-l run-doxygen \
309
+ -l run-code-checker \
263
310
-l sanitizer: \
264
311
-l scan-build: \
265
312
-l sonarqube: \
266
313
-l source-directory: \
267
314
-l build-directory: \
268
315
-l test-coverage: \
316
+ -l code-checker: \
269
317
-l verbose \
270
318
--name " ${SCRIPT_NAME} " -- " $@ " ) ;
271
319
then
@@ -328,6 +376,12 @@ while true; do
328
376
RUN_DOXYGEN=1
329
377
shift
330
378
;;
379
+ --run-code-checker)
380
+ RUN_CODE_CHECKER=1
381
+ # Analyzing works only when code gets actually built
382
+ RUN_CLEAN=1
383
+ shift
384
+ ;;
331
385
--sanitizer)
332
386
OPT_SANITIZER=$2
333
387
shift 2
@@ -356,6 +410,10 @@ while true; do
356
410
OPT_TEST_COVERAGE_REPORT=$2
357
411
shift 2
358
412
;;
413
+ --code-checker)
414
+ OPT_CODE_CHECKER=$2
415
+ shift 2
416
+ ;;
359
417
--)
360
418
shift
361
419
break
@@ -411,6 +469,11 @@ if [ -n "${OPT_SCAN_BUILD}" ] && [ -n "${OPT_SONARQUBE}" ]; then
411
469
exit 1
412
470
fi
413
471
472
+ if [ " ${RUN_CODE_CHECKER} " = " 1" ] && [ -n " ${OPT_SONARQUBE} " ]; then
473
+ echo " --sonarqube and --code-checker can not be enabled at the same time"
474
+ exit 1
475
+ fi
476
+
414
477
if [ -n " ${OPT_SONARQUBE} " ]; then
415
478
OPT_TEST_COVERAGE_REPORT=" ${OPT_TEST_COVERAGE_REPORT:- none} "
416
479
OPT_WRAPPER_CMD=" ${OPT_SONARQUBE} \
@@ -431,6 +494,10 @@ if [ -n "${OPT_SCAN_BUILD}" ]; then
431
494
--exclude examples/shared/tinydtls"
432
495
fi
433
496
497
+ if [ " ${RUN_CODE_CHECKER} " = " 1" ]; then
498
+ CMAKE_ARGS=" ${CMAKE_ARGS} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug"
499
+ fi
500
+
434
501
# Run Steps
435
502
436
503
if [ " ${RUN_GITLINT} " -eq 1 ]; then
464
531
if [ " ${RUN_DOXYGEN} " -eq 1 ]; then
465
532
run_doxygen
466
533
fi
534
+
535
+ if [ " ${RUN_CODE_CHECKER} " = " 1" ]; then
536
+ run_code_checker
537
+ fi
538
+
0 commit comments