]> git.ipfire.org Git - thirdparty/systemd.git/blame - docs/CODE_QUALITY.md
fs-util: no need for fchmod_and_chown() to access /proc/self/fd directly
[thirdparty/systemd.git] / docs / CODE_QUALITY.md
CommitLineData
c3e270f4
FB
1---
2title: Code Quality Tools
3---
4
7c2c028c
LP
5# Code Quality Tools
6
7The systemd project has a number of code quality tools set up in the source
8tree and on the github infrastructure. Here's an incomprehensive list of the
9available functionality:
10
111. Use `ninja -C build test` to run the unit tests. Some tests are skipped if
12 no privileges are available, hence consider also running them with `sudo
13 ninja -C build test`. A couple of unit tests are considered "unsafe" (as
14 they change system state); to run those too, build with `meson
15 -Dtests=unsafe`. Finally, some unit tests are considered to be very slow,
16 build them too with `meson -Dslow-tests=true`. (Note that there are a couple
17 of manual tests in addition to these unit tests.)
18
192. Use `./test/run-integration-tests.sh` to run the full integration test
20 suite. This will build OS images with a number of integration tests and run
21 them in nspawn and qemu. Requires root.
22
233. Use `./coccinelle/run-coccinelle.sh` to run all
24 [Coccinelle](http://coccinelle.lip6.fr/) semantic patch scripts we ship. The
25 output will show false positives, hence take it with a pinch of salt.
26
274. Use `./tools/find-double-newline.sh recdiff` to find double newlines. Use
28 `./tools/find-double-newline.sh recpatch` to fix them. Take this with a grain
29 of salt, in particular as we generally leave foreign header files we include in
30 our tree unmodified, if possible.
31
325. Similar use `./tools/find-tabs.sh recdiff` to find TABs, and
33 `./tools/find-tabs.sh recpatch` to fix them. (Again, grain of salt, foreign
34 headers should usually be left unmodified.)
35
e5988600 366. Use `ninja -C build check-api-docs` to compare the list of exported
7c2c028c
LP
37 symbols of `libsystemd.so` and `libudev.so` with the list of man pages. Symbols
38 lacking documentation are highlighted.
39
407. Use `ninja -C build hwdb-update` to automatically download and import the
41 PCI, USB and OUI databases into hwdb.
42
438. Use `ninja -C build man/update-man-rules` to update the meson rules for
44 building man pages automatically from the docbook XML files included in
45 `man/`.
46
479. There are multiple CI systems in use that run on every github PR submission.
48
4910. [Coverity](https://scan.coverity.com/) is analyzing systemd master in
50 regular intervals. The reports are available
51 [online](https://scan.coverity.com/projects/systemd).
52
5311. [oss-fuzz](https://oss-fuzz.com/) is continuously fuzzing the
54 codebase. Reports are available
55 [online](https://oss-fuzz.com/v2/testcases?project=systemd).
56
8b9e4b21 5712. Our tree includes `.editorconfig`, `.dir-locals.el` and `.vimrc` files, to
5cadf58e 58 ensure that editors follow the right indentiation styles automatically.
8b9e4b21
LP
59
6013. When building systemd from a git checkout the build scripts will
5cadf58e 61 automatically enable a git commit hook that ensures whitespace cleanliness.
8b9e4b21 62
8cc9d188 6314. [LGTM](https://lgtm.com/) analyzes every commit pushed to master. The list
00195abc
FB
64 of active alerts can be found
65 [here](https://lgtm.com/projects/g/systemd/systemd/alerts/?mode=list).
8cc9d188 66
c9a95378
FS
6715. Each PR is automatically tested with [Address Sanitizer](https://clang.llvm.org/docs/AddressSanitizer.html)
68 and [Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html).
69 See [Testing systemd using sanitizers](https://systemd.io/TESTING_WITH_SANITIZERS)
70 for more information.
71
8cc9d188
EV
72Access to Coverity and oss-fuzz reports is limited. Please reach out to the
73maintainers if you need access.