Code Quality Tools

The systemd project has a number of code quality tools set up in the source tree and on the github infrastructure. Here's an incomprehensive list of the available functionality:

  1. Use ninja -C build test to run the unit tests. Some tests are skipped if no privileges are available, hence consider also running them with sudo ninja -C build test. A couple of unit tests are considered “unsafe” (as they change system state); to run those too, build with meson -Dtests=unsafe. Finally, some unit tests are considered to be very slow, build them too with meson -Dslow-tests=true. (Note that there are a couple of manual tests in addition to these unit tests.)

  2. Use ./test/run-integration-tests.sh to run the full integration test suite. This will build OS images with a number of integration tests and run them in nspawn and qemu. Requires root.

  3. Use ./coccinelle/run-coccinelle.sh to run all Coccinelle semantic patch scripts we ship. The output will show false positives, hence take it with a pinch of salt.

  4. Use ./tools/find-double-newline.sh recdiff to find double newlines. Use ./tools/find-double-newline.sh recpatch to fix them. Take this with a grain of salt, in particular as we generally leave foreign header files we include in our tree unmodified, if possible.

  5. Similar use ./tools/find-tabs.sh recdiff to find TABs, and ./tools/find-tabs.sh recpatch to fix them. (Again, grain of salt, foreign headers should usually be left unmodified.)

  6. Use ninja -C build check-api-docs to compare the list of exported symbols of libsystemd.so and libudev.so with the list of man pages. Symbols lacking documentation are highlighted.

  7. Use ninja -C build hwdb-update to automatically download and import the PCI, USB and OUI databases into hwdb.

  8. Use ninja -C build man/update-man-rules to update the meson rules for building man pages automatically from the docbook XML files included in man/.

  9. There are multiple CI systems in use that run on every github PR submission.

  10. Coverity is analyzing systemd master in regular intervals. The reports are available online.

  11. oss-fuzz is continuously fuzzing the codebase. Reports are available online.

  12. Our tree includes .editorconfig, .dir-locals.el and .vimrc files, to ensure that editors follow the right indentiation styles automatically.

  13. When building systemd from a git checkout the build scripts will automatically enable a git commit hook that ensures whitespace cleanliness.

  14. LGTM analyzes every commit pushed to master. The list of active alerts can be found here.

Access to Coverity and oss-fuzz reports is limited. Please reach out to the maintainers if you need access.