Skip to content

Commit

Permalink
Run clang tidy on diff with CI
Browse files Browse the repository at this point in the history
Added a script for CI execution. This script is not intended for local
user execution due to the following reasons:

1. `clang-tidy-diff` supports exit with a failure code when there are
   errors from version 17 or 18 onward. (The exact version is uncertain.
   For more details, please refer to
   llvm/llvm-project#65000.)
2. `bear` has different command line interfaces between version <= 2.4.x
    and onward. (For more details, please refer to
    https://github.com/rizsotto/Bear?tab=readme-ov-file#how-to-use.)

The script may not function properly if any of these issues arise. In
the CI environment, we ensure that the versions of these dependencies
are up-to-date. Specifically, the version of `clang-tidy-diff` is
specified as `18`, and the version of `Bear` on Ubuntu 22.04 is 3.0.x.
  • Loading branch information
Lai-YT committed Feb 22, 2024
1 parent 1d94f7c commit 52c1c69
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
11 changes: 11 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@ jobs:
run: |
sudo apt-get install -q -y clang-format
scripts/check-format.sh
- name: static checks
run: |
sudo apt-get update
sudo apt-get install -q -y software-properties-common wget
add-apt-repository -y 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main'
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install -q -y bear clang-tidy-18
CLANG_TIDY_DIFF=clang-tidy-diff-18.py
scripts/check-tidy.sh
test:
runs-on: ubuntu-22.04
strategy:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ venv.bak/

# VS Code configs
.vscode

# Compilation database
compile_commands.json
32 changes: 32 additions & 0 deletions scripts/check-tidy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env sh

#
# Runs clang-tidy on the diff between main and HEAD.
#

set -eu

CLANG_TIDY_DIFF=${CLANG_TIDY_DIFF:-clang-tidy-diff.py}

command -v bear >/dev/null 2>&1 || (
echo "error: bear is required to generate compile_commands.json; see https://github.com/rizsotto/Bear"
exit 1
)

# number of jobs to run
NPROCS=1
# Find available processor numbers based on different OS.
OS="$(uname -s)"
case $OS in
'Linux')
NPROCS="$(grep -c ^processor /proc/cpuinfo)"
;;
'Darwin')
NPROCS="$(sysctl -n hw.ncpu)"
;;
esac

# Run a clean build to generate compile_commands.json.
make clean
bear -- make -j"${NPROCS}"
git diff -U0 main..HEAD | ${CLANG_TIDY_DIFF} -p1 -j"${NPROCS}"

0 comments on commit 52c1c69

Please sign in to comment.