From 28018e92d3e2fa47d58a216bab489cbd81d8e974 Mon Sep 17 00:00:00 2001 From: NRK Date: Thu, 15 Jun 2023 15:25:54 +0000 Subject: [PATCH] CI: misc cleanups + faster analysis (#449) * switch to git ls-files to avoid picking up any other local .c files * enable assertions during static analysis since we used some assertions to disable/silence certain warnings. * update TCC commit hash to a more recent one * parallelize static analysis cppcheck already has -j argument to parallelize it's analysis and provide results faster, clang-tidy unfortunately doesn't. so use xargs -P to archive parallel execution. on my system this brings down the analysis time from ~27s to ~5s. --- .github/workflows/build.yml | 2 +- etc/woodpecker/analysis.sh | 17 ++++++++++------- etc/woodpecker/analysis.yml | 2 +- etc/woodpecker/build.yml | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4619bb7..3c3b3c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,7 @@ jobs: sudo apt-get install libimlib2 libimlib2-dev xserver-xorg-core xserver-xorg-dev \ libxft2 libxft-dev libexif12 libexif-dev \ gcc clang git bc - TCC_SHA="027b8fb9b88fe137447fb8bb1b61079be9702472" + TCC_SHA="29ae3ed4d5b83eec43598d6cd7949bccb41c8083" wget "https://github.com/TinyCC/tinycc/archive/${TCC_SHA}.tar.gz" && tar xzf "${TCC_SHA}.tar.gz" ( cd "tinycc-$TCC_SHA" && ./configure && make -j"$(nproc)" && sudo make install; ) - name: build diff --git a/etc/woodpecker/analysis.sh b/etc/woodpecker/analysis.sh index 330d140..5a227ce 100755 --- a/etc/woodpecker/analysis.sh +++ b/etc/woodpecker/analysis.sh @@ -1,21 +1,24 @@ #!/bin/sh -e std="c99" +NProc=$(( $(nproc) / 4 )) +if [ -z "$NProc" ] || [ "$NProc" -lt 1 ]; then NProc="1"; fi run_cppcheck() { cppcheck --std="$std" --enable=performance,portability \ --force --quiet --inline-suppr --error-exitcode=1 \ - --max-ctu-depth=8 -j"$(nproc)" \ - $(make OPT_DEP_DEFAULT="$1" dump_cppflags) \ + --max-ctu-depth=8 -j"$NProc" \ + $(make OPT_DEP_DEFAULT="$1" dump_cppflags) -DDEBUG \ --suppress=varFuncNullUB --suppress=uninitvar \ - *.c + $(git ls-files *.c) } run_tidy() { checks="$(sed '/^#/d' etc/woodpecker/clang-tidy-checks | paste -d ',' -s)" - clang-tidy --warnings-as-errors="*" --checks="$checks" --quiet *.c \ - -- -std="$std" $(make OPT_DEP_DEFAULT="$1" dump_cppflags) + git ls-files *.c | xargs -P"$NProc" -I{} clang-tidy --quiet \ + --warnings-as-errors="*" --checks="$checks" {} \ + -- -std="$std" $(make OPT_DEP_DEFAULT="$1" dump_cppflags) -DDEBUG } -run_cppcheck "0"; run_cppcheck "1"; -run_tidy "0"; run_tidy "1"; +run_cppcheck "0" & run_cppcheck "1" & run_tidy "0" & run_tidy "1"; +wait diff --git a/etc/woodpecker/analysis.yml b/etc/woodpecker/analysis.yml index 65da7aa..9ebcc4f 100644 --- a/etc/woodpecker/analysis.yml +++ b/etc/woodpecker/analysis.yml @@ -4,7 +4,7 @@ pipeline: analysis: image: alpine commands: | - apk add --no-cache build-base cppcheck clang-extra-tools \ + apk add --no-cache build-base cppcheck clang-extra-tools git \ imlib2-dev xorgproto \ libxft-dev libexif-dev giflib-dev libwebp-dev >/dev/null make config.h version.h diff --git a/etc/woodpecker/build.yml b/etc/woodpecker/build.yml index eced0d1..7c79a90 100644 --- a/etc/woodpecker/build.yml +++ b/etc/woodpecker/build.yml @@ -5,7 +5,7 @@ pipeline: build: image: alpine environment: - - TCC_SHA=027b8fb9b88fe137447fb8bb1b61079be9702472 + - TCC_SHA=29ae3ed4d5b83eec43598d6cd7949bccb41c8083 commands: | apk add --no-cache \ imlib2 imlib2-dev xorgproto \