From 2cb7e0aaedad73b076ea18c6900b0e86c5760d79 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 15:00:47 +0200 Subject: Adding upstream version 247.3. Signed-off-by: Daniel Baumann --- docs/CODE_QUALITY.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/CODE_QUALITY.md (limited to 'docs/CODE_QUALITY.md') diff --git a/docs/CODE_QUALITY.md b/docs/CODE_QUALITY.md new file mode 100644 index 0000000..a724d66 --- /dev/null +++ b/docs/CODE_QUALITY.md @@ -0,0 +1,78 @@ +--- +title: Code Quality Tools +category: Contributing +layout: default +--- + +# 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](http://coccinelle.lip6.fr/) 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](https://scan.coverity.com/) is analyzing systemd master in + regular intervals. The reports are available + [online](https://scan.coverity.com/projects/systemd). + +11. [oss-fuzz](https://oss-fuzz.com/) is continuously fuzzing the + codebase. Reports are available + [online](https://oss-fuzz.com/v2/testcases?project=systemd). + +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](https://lgtm.com/) analyzes every commit pushed to master. The list + of active alerts can be found + [here](https://lgtm.com/projects/g/systemd/systemd/alerts/?mode=list). + +15. Each PR is automatically tested with [Address Sanitizer](https://clang.llvm.org/docs/AddressSanitizer.html) + and [Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html). + See [Testing systemd using sanitizers](https://systemd.io/TESTING_WITH_SANITIZERS) + for more information. + +16. Fossies provides [source code misspelling reports](https://fossies.org/features.html#codespell). + The systemd report can be found [here](https://fossies.org/linux/test/systemd-master.tar.gz/codespell.html). + +Access to Coverity and oss-fuzz reports is limited. Please reach out to the +maintainers if you need access. -- cgit v1.2.3