-
Notifications
You must be signed in to change notification settings - Fork 33
76 lines (63 loc) · 3.36 KB
/
clang-tidy-lint.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
name: 🔍 Static Analysis
on:
pull_request:
branches: [ main ]
env:
BUILD_TYPE: Release
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 2
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install xorg-dev libglu1-mesa-dev clang clang-tidy
- name: Make all changed headers reachable
run: |
echo '// NOLINTBEGIN(misc-include-cleaner)' > core/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'core/include/\K.*.hpp' | awk '{ $0= "#include <" $0 ">"; print }' >> core/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'core/src/\K.*.hpp' | awk '{ $0= "#include \"" $0 "\""; print }' >> core/src/extra.cpp
echo '// NOLINTEND(misc-include-cleaner)' >> core/src/extra.cpp
sed -i '/set(CUBOS_CORE_SOURCE/a "src/extra.cpp"' core/CMakeLists.txt
git add core/src/extra.cpp
echo '// NOLINTBEGIN(misc-include-cleaner)' > engine/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'engine/include/\K.*.hpp' | awk '{ $0= "#include <" $0 ">"; print }' >> engine/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'engine/src/\K.*.hpp' | awk '{ $0= "#include \"" $0 "\""; print }' >> engine/src/extra.cpp
echo '// NOLINTEND(misc-include-cleaner)' >> engine/src/extra.cpp
sed -i '/set(CUBOS_ENGINE_SOURCE/a "src/extra.cpp"' engine/CMakeLists.txt
git add engine/src/extra.cpp
echo '// NOLINTBEGIN(misc-include-cleaner)' > tools/tesseratos/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'tools/tesseratos/include/\K.*.hpp' | awk '{ $0= "#include <" $0 ">"; print }' >> tools/tesseratos/src/extra.cpp
git diff -U0 --name-only HEAD^ | grep -oP 'tools/tesseratos/src/\K.*.hpp' | awk '{ $0= "#include \"" $0 "\""; print }' >> tools/tesseratos/src/extra.cpp
echo '// NOLINTEND(misc-include-cleaner)' >> tools/tesseratos/src/extra.cpp
sed -i '/set(TESSERATOS_SOURCE/a "src/extra.cpp"' tools/tesseratos/CMakeLists.txt
git add tools/tesseratos/src/extra.cpp
- name: Prepare compile_commands.json
run: cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_CORE_SAMPLES=ON -DBUILD_CORE_TESTS=ON -DBUILD_ENGINE_SAMPLES=ON -DBUILD_TESSERATOS_SAMPLES=ON -DUSE_CLANG_TIDY=ON
shell: bash
env:
CC: clang-14
CXX: clang++-14
- name: Build glad
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target glad
- name: Analyze
run: |
run-clang-tidy -j$(nproc) -p=build \
-header-filter="(core|engine|tools/tesseratos)/(src|include)/.*" \
files "($(git diff -U0 --name-only HEAD^ | grep -vP '.*/lib/.*' | paste -s -d\|))" \
-export-fixes clang-tidy-fixes.yaml || true
- name: Remove duplicate clang-tidy diagnostics
uses: mikefarah/yq@master
with:
cmd: yq -i 'select(has("Diagnostics")).Diagnostics |= unique_by(.DiagnosticMessage)' clang-tidy-fixes.yaml
- name: Run clang-tidy-pr-comments action
uses: platisd/clang-tidy-pr-comments@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
clang_tidy_fixes: clang-tidy-fixes.yaml
request_changes: false
suggestions_per_comment: 10