Skip to content

Commit aac2b77

Browse files
authored
[CI] Add a clang-tidy build (#3001)
1 parent baecbb9 commit aac2b77

File tree

4 files changed

+102
-39
lines changed

4 files changed

+102
-39
lines changed

.clang-tidy

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
Checks: >
55
-*,
6+
performance-*,
7+
portability-*,
68
abseil-*,
79
-abseil-string-find-str-contains,
810
bugprone-*,
@@ -13,7 +15,6 @@ Checks: >
1315
-bugprone-unchecked-optional-access,
1416
-bugprone-unhandled-exception-at-new,
1517
-bugprone-unused-local-non-trivial-variable,
16-
-bugprone-unused-return-value,
1718
google-*,
1819
-google-build-using-namespace,
1920
-google-default-arguments,
@@ -29,41 +30,10 @@ Checks: >
2930
-misc-non-private-member-variables-in-classes,
3031
-misc-unused-alias-decls,
3132
-misc-use-anonymous-namespace,
32-
performance-*,
33-
-performance-move-const-arg,
34-
portability-*
35-
# readability-*,
36-
# -readability-convert-member-functions-to-static,
37-
# -readability-else-after-return,
38-
# -readability-function-cognitive-complexity,
39-
# -readability-identifier-length,
40-
# -readability-implicit-bool-conversion,
41-
# -readability-isolate-declaration,
42-
# -readability-magic-numbers,
43-
# -readability-named-parameter,
44-
# -readability-redundant-*,
45-
# -readability-string-compare,
46-
# cppcoreguidelines-*,
47-
# -cppcoreguidelines-avoid-c-arrays,
48-
# -cppcoreguidelines-avoid-magic-numbers,
49-
# -cppcoreguidelines-init-variables,
50-
# -cppcoreguidelines-macro-usage,
51-
# -cppcoreguidelines-non-private-member-variables-in-classes,
52-
# -cppcoreguidelines-pro-*,
53-
# modernize-*,
54-
# -modernize-use-default-member-init,
55-
# -modernize-use-nodiscard,
56-
# -modernize-use-trailing-return-type,
57-
# -modernize-avoid-c-arrays,
58-
# -modernize-use-using
59-
60-
# Use existing clang-format for formatting the code
61-
# FormatStyle: 'file'
62-
63-
# TODO: include checks: readability, cppcoreguidelines, modernize , google-readability-namespace-comments, google-readability-avoid-underscore-in-googletest-name, performance-move-const-arg
64-
65-
66-
67-
68-
69-
33+
cppcoreguidelines-*,
34+
-cppcoreguidelines-avoid-c-arrays,
35+
-cppcoreguidelines-avoid-magic-numbers,
36+
-cppcoreguidelines-init-variables,
37+
-cppcoreguidelines-macro-usage,
38+
-cppcoreguidelines-non-private-member-variables-in-classes,
39+
-cppcoreguidelines-pro-*

.github/workflows/clang-tidy.yaml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: clang-tidy
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
clang-tidy:
11+
runs-on: ubuntu-24.04
12+
steps:
13+
- uses: actions/checkout@v4
14+
with:
15+
submodules: recursive
16+
17+
- name: Setup Environment
18+
env:
19+
PROTOBUF_VERSION: '23.3'
20+
ABSEIL_CPP_VERSION: '20230125.3'
21+
CXX_STANDARD: '14'
22+
run: |
23+
sudo apt update -y
24+
sudo apt install -y --no-install-recommends --no-install-suggests \
25+
build-essential \
26+
iwyu \
27+
cmake \
28+
libssl-dev \
29+
libcurl4-openssl-dev \
30+
libprotobuf-dev \
31+
protobuf-compiler \
32+
libgmock-dev \
33+
libgtest-dev \
34+
libbenchmark-dev
35+
36+
if ! command -v clang-tidy &> /dev/null; then
37+
echo "clang-tidy could not be found"
38+
exit 1
39+
fi
40+
echo "Using clang-tidy version: $(clang-tidy --version)"
41+
echo "clang-tidy installed at: $(which clang-tidy)"
42+
43+
44+
- name: Prepare CMake
45+
env:
46+
CC: clang
47+
CXX: clang++
48+
run: |
49+
mkdir -p build && cd build
50+
echo "Running cmake..."
51+
cmake .. \
52+
-DCMAKE_CXX_STANDARD=14 \
53+
-DWITH_STL=CXX14 \
54+
-DWITH_OTLP_HTTP=ON \
55+
-DWITH_OTLP_FILE=ON \
56+
-DWITH_PROMETHEUS=ON \
57+
-DWITH_ZIPKIN=ON \
58+
-DWITH_ELASTICSEARCH=ON \
59+
-DWITH_OTLP_HTTP_COMPRESSION=ON \
60+
-DWITH_EXAMPLES=ON \
61+
-DWITH_EXAMPLES_HTTP=ON \
62+
-DBUILD_W3CTRACECONTEXT_TEST=ON \
63+
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
64+
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
65+
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
66+
-DCMAKE_CXX_CLANG_TIDY="clang-tidy"
67+
68+
- name: Run clang-tidy
69+
run: |
70+
cd build
71+
make -j$(nproc) 2>&1 | tee -a clang-tidy.log || exit 1
72+
73+
- uses: actions/upload-artifact@v4
74+
with:
75+
name: Logs (clang-tidy)
76+
path: ./build/clang-tidy.log
77+
78+
- name: Count warnings
79+
run: |
80+
cd build
81+
COUNT=$(grep -c "warning:" clang-tidy.log)
82+
echo "clang-tidy reported ${COUNT} warning(s)"
83+
84+
# TODO: include WITH_OTLP_GRPC and WITH_ABSEIL flags.

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ Increment the:
1515

1616
## [Unreleased]
1717

18+
* [CI] Add a clang-tidy build
19+
[#3001](https://github.com/open-telemetry/opentelemetry-cpp/pull/3001)
20+
1821
## [1.16.1 2024-07-17]
1922

2023
* [BUILD] Add bazel missing BUILD file

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,12 @@ if(WITH_PROMETHEUS)
364364
message(STATUS "Trying to use local prometheus-cpp from submodule")
365365
if(EXISTS ${PROJECT_SOURCE_DIR}/third_party/prometheus-cpp/.git)
366366
set(SAVED_ENABLE_TESTING ${ENABLE_TESTING})
367+
set(SAVED_CMAKE_CXX_CLANG_TIDY ${CMAKE_CXX_CLANG_TIDY})
367368
set(ENABLE_TESTING OFF)
369+
set(CMAKE_CXX_CLANG_TIDY "")
368370
add_subdirectory(third_party/prometheus-cpp)
369371
set(ENABLE_TESTING ${SAVED_ENABLE_TESTING})
372+
set(CMAKE_CXX_CLANG_TIDY ${SAVED_CMAKE_CXX_CLANG_TIDY})
370373
else()
371374
message(
372375
FATAL_ERROR
@@ -444,7 +447,10 @@ if(WITH_OTLP_GRPC
444447
include(CMakeDependentOption)
445448

446449
message(STATUS "PROTOBUF_PROTOC_EXECUTABLE=${PROTOBUF_PROTOC_EXECUTABLE}")
450+
set(SAVED_CMAKE_CXX_CLANG_TIDY ${CMAKE_CXX_CLANG_TIDY})
451+
set(CMAKE_CXX_CLANG_TIDY "")
447452
include(cmake/opentelemetry-proto.cmake)
453+
set(CMAKE_CXX_CLANG_TIDY ${SAVED_CMAKE_CXX_CLANG_TIDY})
448454
endif()
449455

450456
#

0 commit comments

Comments
 (0)