[libvirt PATCH 00/10] [RFC] clang-tidy CI integration

Ján Tomko jtomko at redhat.com
Fri Feb 12 13:48:21 UTC 2021


On a Friday in 2021, Tim Wiederhake wrote:
>"clang-tidy" is a static code analysis tool for c and c++ code. See
>https://listman.redhat.com/archives/libvir-list/2021-January/msg01152.html
>for some issues found by clang-tidy and more background information.
>
>Meson has support for clang-tidy and generates target named "clang-tidy" if
>it finds a ".clang-tidy" configuration file in the project's root directory.
>
>There are some problems with this approach though, with regards to inclusion
>in GitLab's CI:
>
>* Single-threaded runtime of a complete scan takes between 95 and 110 minutes,
>depending on the enabled checks, which is significantly longer than GitLab's
>maximum run time of 60 minutes, after which jobs are aborted.
>

That does seem like a deal-breaker. Did you manage to do a successful
run by iteratively building up the cache over multiple jobs? Or by doing
a multi-threaded run?

>* Even without this limit on runtime, this new check would double to triple
>the run time of the libVirt pipeline in GitLab.
>

Running it for every job sounds wasteful - it can be run on schedule
like the coverity job - daily or even weekly.

Also, please never write libvirt like that again.

Jano

>* clang-tidy finds a lot of false positives (see link above for explanation)
>and has checks that contradict the libVirt code style (e.g. braces around
>blocks). This makes a quite complex configuration in ".clang-tidy" neccessary.
>
>* I was unable to make clang-tidy recognize the settings from the
>configuration file for generated files, leading clang-tidy to always add some
>checks. These checks were among those that produced false positives.
>
>* The list of enabled / disabled checks in the yaml configuration file is a
>quite long string, making it hard to weave in some comments / documentation
>on which checks are enabled / disabled for what reason.
>
>This series introduces a new script, "run-clang-tidy.py". This is a
>replacement for the script of the same name from clang-tools-extra. It offers
>parallel execution, caching of results and a configurable soft-timeout.
>
>Please see the individual commits for more details. Comments welcome.
>
>https://gitlab.com/twiederh/libvirt/-/pipelines/255321968 → "clang-tidy".
>
>Tim
>
>Tim Wiederhake (10):
>  clang-tidy: Add a simple runner
>  clang-tidy: Run in parallel
>  clang-tidy: Filter output
>  clang-tidy: Add cache
>  clang-tidy: Add timeout
>  clang-tidy: Allow timeouts
>  clang-tidy: Add shuffle
>  clang-tidy: Make list of checks explicit
>  clang-tidy: Disable irrelevant and failing checks
>  clang-tidy: Add CI integration
>
> .gitlab-ci.yml            |  88 ++++++
> scripts/run-clang-tidy.py | 557 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 645 insertions(+)
> create mode 100755 scripts/run-clang-tidy.py
>
>-- 
>2.26.2
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210212/c8d5959c/attachment-0001.sig>


More information about the libvir-list mailing list