File: selfcheck.yml

package info (click to toggle)
cppcheck 2.20.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,924 kB
  • sloc: cpp: 274,396; python: 22,429; ansic: 8,103; sh: 1,094; makefile: 1,041; xml: 987; cs: 291
file content (204 lines) | stat: -rw-r--r-- 10,351 bytes parent folder | download
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# Syntax reference https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions
# Environment reference https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners
name: selfcheck

on:
  push:
    branches:
      - 'main'
      - 'releases/**'
      - '2.*'
    tags:
      - '2.*'
  pull_request:

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-22.04

    env:
      QT_VERSION: 6.10.0

    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ github.workflow }}-${{ runner.os }}

      - name: Install missing software
        run: |
          sudo apt-get update
          sudo apt-get install clang-14
          sudo apt-get install libboost-container-dev
          sudo apt-get install valgrind
          sudo apt-get install -y libgl-dev  # fixes missing dependency for Qt in CMake

      - name: Install Qt ${{ env.QT_VERSION }}
        uses: jurplel/install-qt-action@v4
        with:
          version: ${{ env.QT_VERSION }}
          modules: 'qtcharts'
          setup-python: 'false'
          install-deps: false
          cache: true

      # TODO: cache this - perform same build as for the other self check
      - name: Self check (build)
        run: |
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
          # valgrind cannot handle DWARF 5 yet so force version 4
          # work around performance regression with -inline-deferral
          make -j$(nproc) CXXOPTS="-Werror -O2 -gdwarf-4" CPPOPTS="-DHAVE_BOOST -mllvm -inline-deferral" MATCHCOMPILER=yes CPPCHK_GLIBCXX_DEBUG=
        env:
          CC: clang-14
          CXX: clang++-14

      # unusedFunction - start
      - name: CMake
        run: |
          cmake -S . -B cmake.output -Werror=dev -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=On -DBUILD_GUI=ON -DWITH_QCHART=ON -DBUILD_TRIAGE=On -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DCPPCHK_GLIBCXX_DEBUG=Off

      - name: Generate dependencies
        run: |
          # make sure auto-generated GUI files exist
          make -C cmake.output autogen
          # make sure the precompiled headers exist
          make -C cmake.output lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx
          make -C cmake.output test/CMakeFiles/testrunner.dir/cmake_pch.hxx.cxx
          # make sure the auto-generated GUI dependencies exist
          make -C cmake.output gui-build-deps

      - name: Self check (unusedFunction)
        if: false # TODO: fails with preprocessorErrorDirective - see #10667
        run: |
          ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=69 -DQT_CHARTS_LIB -DQT_MOC_HAS_STRINGDATA --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr
        env:
          DISABLE_VALUEFLOW: 1
          UNUSEDFUNCTION_ONLY: 1
      # unusedFunction - end

      # the following steps are duplicated from above since setting up the build node in a parallel step takes longer than the actual steps

      # unusedFunction notest - start
      - name: CMake (no test)
        run: |
          cmake -S . -B cmake.output.notest -Werror=dev -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=Off -DBUILD_GUI=ON -DBUILD_TRIAGE=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DCPPCHK_GLIBCXX_DEBUG=Off

      - name: Generate dependencies (no test)
        run: |
          # make sure auto-generated GUI files exist
          make -C cmake.output.notest autogen
          # make sure the precompiled headers exist
          make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx
          # make sure the auto-generated GUI dependencies exist
          make -C cmake.output.notest gui-build-deps

      - name: Self check (unusedFunction / no test)
        run: |
          ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=69 -DQT_CHARTS_LIB -DQT_MOC_HAS_STRINGDATA --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output.notest/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr
        env:
          DISABLE_VALUEFLOW: 1
          UNUSEDFUNCTION_ONLY: 1
      # unusedFunction notest - end

      # unusedFunction notest nogui - start
      - name: CMake (no test / no gui)
        run: |
          cmake -S . -B cmake.output.notest_nogui -Werror=dev -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=Off -DENABLE_CHECK_INTERNAL=On -DCPPCHK_GLIBCXX_DEBUG=Off

      - name: Generate dependencies (no test / no gui)
        run: |
          # make sure the precompiled headers exist
          make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx

      - name: Self check (unusedFunction / no test / no gui)
        run: |
          supprs="--suppress=unusedFunction:lib/errorlogger.h:197 --suppress=unusedFunction:lib/importproject.cpp:1531 --suppress=unusedFunction:lib/importproject.cpp:1555"
          ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib -D__CPPCHECK__ -D__GNUC__ --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output.notest_nogui/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr $supprs
        env:
          DISABLE_VALUEFLOW: 1
          UNUSEDFUNCTION_ONLY: 1
      # unusedFunction notest nogui - end

      # unusedFunction notest nocli - start
      - name: CMake (no test / no cli)
        run: |
          cmake -S . -B cmake.output.notest_nocli -Werror=dev -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=Off -DBUILD_CLI=Off -DBUILD_GUI=ON -DWITH_QCHART=ON -DBUILD_TRIAGE=On -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DCPPCHK_GLIBCXX_DEBUG=Off

      - name: Generate dependencies (no test / no cli)
        run: |
          # make sure auto-generated GUI files exist
          make -C cmake.output.notest_nocli autogen
          # make sure the precompiled headers exist
          make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx
          # make sure the auto-generated GUI dependencies exist
          make -C cmake.output.notest_nocli gui-build-deps

      - name: Self check (unusedFunction / no test / no cli)
        if: false  # TODO: the findings are currently too intrusive
        run: |
          ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=69 -DQT_CHARTS_LIB -DQT_MOC_HAS_STRINGDATA --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output.notest_nocli/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr
        env:
          DISABLE_VALUEFLOW: 1
          UNUSEDFUNCTION_ONLY: 1
      # unusedFunction notest nocli - end

      # unusedFunction notest nocli nogui - start
      - name: CMake (no test / no cli / no gui)
        run: |
          cmake -S . -B cmake.output.notest_nocli_nogui -Werror=dev -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=Off -DBUILD_CLI=Off -DBUILD_GUI=Off -DENABLE_CHECK_INTERNAL=On -DCPPCHK_GLIBCXX_DEBUG=Off

      - name: Generate dependencies (no test / no cli / no gui)
        run: |
          # make sure the precompiled headers exist
          make -C cmake.output.notest_nocli_nogui lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx

      - name: Self check (unusedFunction / no test / no cli / no gui)
        if: false  # TODO: the findings are currently too intrusive
        run: |
          ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output.notest_nocli_nogui/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr
        env:
          DISABLE_VALUEFLOW: 1
          UNUSEDFUNCTION_ONLY: 1
      # unusedFunction notest nocli nogui - end

      - name: Fetch corpus
        run: |
          wget https://github.com/danmar/cppcheck/archive/refs/tags/2.8.tar.gz
          tar xvf 2.8.tar.gz

      - name: CMake (corpus / no test)
        run: |
          cmake -S cppcheck-2.8 -B cmake.output.corpus -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTING=Off -DBUILD_GUI=ON -DUSE_QT6=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_POLICY_VERSION_MINIMUM=3.5

      - name: Generate dependencies (corpus)
        run: |
          # make sure auto-generated GUI files exist
          make -C cmake.output.corpus autogen
          # make sure the precompiled headers exist
          make -C cmake.output.corpus lib/CMakeFiles/lib_objs.dir/cmake_pch.hxx.cxx
          # make sure the auto-generated GUI dependencies exist
          make -C cmake.output.corpus gui-build-deps

      - name: Self check (unusedFunction / corpus / no test / callgrind)
        run: |
          # TODO: fix -rp so the suppressions actually work
          valgrind --tool=callgrind ./cppcheck --template=selfcheck --error-exitcode=0 --library=cppcheck-lib --library=qt -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=69 -DQT_CHARTS_LIB -DQT_MOC_HAS_STRINGDATA --enable=unusedFunction,information --exception-handling -rp=. --project=cmake.output.corpus/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr 2>callgrind.log || (cat callgrind.log && false)
          cat callgrind.log
          callgrind_annotate --auto=no > callgrind.annotated.log
          head -50 callgrind.annotated.log
        env:
          DISABLE_VALUEFLOW: 1

      - uses: actions/upload-artifact@v4
        with:
          name: Callgrind Output
          path: ./callgrind.*