@@ -2,24 +2,63 @@ version: 2
22jobs :
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} 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_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
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