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:
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.)
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.
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.
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.
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.)
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.
Use ninja -C build hwdb-update
to automatically download and import the PCI, USB and OUI databases into hwdb.
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/
.
There are multiple CI systems in use that run on every github PR submission.
Coverity is analyzing systemd master in regular intervals. The reports are available online.
oss-fuzz is continuously fuzzing the codebase. Reports are available online.
Our tree includes .editorconfig
, .dir-locals.el
and .vimrc
files, to ensure that editors follow the right indentiation styles automatically.
When building systemd from a git checkout the build scripts will automatically enable a git commit hook that ensures whitespace cleanliness.
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.