Skip to content

Commit 1f482ad

Browse files
committed
Adds clang-tidy checks to circleCI
1 parent a877067 commit 1f482ad

File tree

1 file changed

+47
-8
lines changed

1 file changed

+47
-8
lines changed

.circleci/config.yml

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,63 @@ version: 2
22
jobs:
33
build:
44
docker:
5-
- image: circleci/buildpack-deps:bionic
5+
- image: circleci/buildpack-deps:focal
66
auth:
77
username: $DOCKERHUB_USERNAME
88
password: $DOCKERHUB_PASSWORD
99
steps:
1010
- checkout
1111
- run:
12-
name: Clang-format test
12+
name: Ensure all submodules are updated recursively
13+
command: git submodule update --init --recursive
14+
- run:
15+
name: Clang-format and Clang-tidy test
1316
command: |
1417
set -o xtrace
18+
UBUNTU_CODE_NAME="focal"
19+
BASE_BRANCH="8.4"
20+
COMPILER_VERSION="17"
21+
BOOST_VERSION="1_77_0"
22+
BOOST_DIR="/home/circleci/my_boost"
23+
1524
curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -
16-
echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-15 main" | sudo tee -a /etc/apt/sources.list > /dev/null
25+
echo "deb http://apt.llvm.org/$UBUNTU_CODE_NAME/ llvm-toolchain-$UBUNTU_CODE_NAME-$COMPILER_VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null
1726
sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1
18-
sudo -E apt-get -yq --no-install-suggests --no-install-recommends install clang-format-15
19-
git diff -U0 --no-color HEAD^1 *.c *.cc *.cpp *.h *.hpp *.i *.ic *.ih | clang-format-diff-15 -style=file -p1 >_GIT_DIFF
27+
sudo apt-get install -yq --no-install-suggests --allow-unauthenticated --no-install-recommends clang-${COMPILER_VERSION} clang-tidy-${COMPILER_VERSION} clang-format-${COMPILER_VERSION} clang-tools-${COMPILER_VERSION} libc++-${COMPILER_VERSION}-dev libc++abi-${COMPILER_VERSION}-dev libldap2-dev curl libcurl4-openssl-dev bison libudev-dev libkrb5-dev libreadline-dev zlib1g-dev liblz4-dev libedit-dev libevent-dev protobuf-compiler libprotobuf-dev libprotoc-dev libldap2-dev libsasl2-dev libsasl2-modules-gssapi-mit cmake
28+
29+
# Download boost only if BASE_BRANCH is "8.0"
30+
if [ "$BASE_BRANCH" = "8.0" ]; then
31+
echo "BASE_BRANCH is 8.0, downloading and extracting Boost."
32+
wget --progress=dot:giga -P ${BOOST_DIR} "https://archives.boost.io/release/${BOOST_VERSION//_/.}/source/boost_${BOOST_VERSION}.tar.gz"
33+
tar -xzf "${BOOST_DIR}/boost_${BOOST_VERSION}.tar.gz" -C "${BOOST_DIR}"
34+
else
35+
echo "BASE_BRANCH is not 8.0, skipping Boost download."
36+
fi
37+
38+
# Prepare compile_commands.json
39+
cd ~/project
40+
cmake -B /home/circleci/debug-build -DCMAKE_BUILD_TYPE=Debug -DWITH_BOOST=${BOOST_DIR} -DWITH_SSL=system -DWITH_AUTHENTICATION_LDAP=ON -DWITH_ROCKSDB=ON -DCMAKE_C_COMPILER=clang-${COMPILER_VERSION} -DCMAKE_CXX_COMPILER=clang++-${COMPILER_VERSION} -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_SYSTEM_LIBS=ON -DWITH_FIDO=bundled -DWITH_ZSTD=bundled -DWITH_LZ4=bundled -DWITH_PROTOBUF=bundled ~/project
41+
42+
git remote add target "https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}"
43+
git fetch --no-tags --no-recurse-submodules target $BASE_BRANCH
44+
45+
echo "Checking clang-format results"
46+
git diff -U0 "$(git merge-base HEAD target/$BASE_BRANCH)" *.c *.cc *.cpp *.h *.hpp *.i *.ic *.ih | clang-format-diff-$COMPILER_VERSION -style=file -p1 >_GIT_DIFF
2047
if [ ! -s _GIT_DIFF ]; then
21-
echo The last git commit is clang-formatted;
48+
echo The last git commit is clang-formatted;
49+
else
50+
cat _GIT_DIFF;
51+
#false;
52+
fi
53+
54+
echo "Checking clang-tidy static code analysis results"
55+
cat /home/circleci/debug-build/compile_commands.json
56+
git diff -U0 "$(git merge-base HEAD target/$BASE_BRANCH)" *.c *.cc *.cpp *.h *.hpp *.i *.ic *.ih | clang-tidy-diff-${COMPILER_VERSION}.py -clang-tidy-binary clang-tidy-${COMPILER_VERSION} -p1 -path /home/circleci/debug-build -export-fixes=fixes.yaml -extra-arg=-v -extra-arg=-stdlib=libc++
57+
clang-apply-replacements-${COMPILER_VERSION} .
58+
git diff > _GIT_DIFF_TIDY
59+
if [ ! -s _GIT_DIFF_TIDY ]; then
60+
echo The last git commit is clang-tidy clean;
2261
else
23-
cat _GIT_DIFF;
24-
false;
62+
echo The last git commit has clang-tidy warnings;
63+
cat _GIT_DIFF_TIDY;
2564
fi

0 commit comments

Comments
 (0)