


Diese GitHub -Aktion ist für C ++/Python -Projekte ausgelegt und führt eine statische Analyse mit:
Es kann durch Druck- und Zuganfragen ausgelöst werden.
Weitere Informationen und Anleitungen zu Setup und verschiedenen Eingaben finden Sie in Abschnitten, die jeder Sprache gewidmet sind ( C ++ und Python ).
Der erstellte Kommentar enthält Code -Snippets mit der Ausgabebeschreibung. Wenn diese Aktion zum ersten Mal ausgeführt wird, wird der Kommentar mit dem ersten Ergebnis für die aktuelle Pull -Anfrage erstellt. Aufeinanderfolgende Läufe bearbeiten diesen Kommentar mit aktualisiertem Status.
Beachten Sie, dass es möglich ist, dass die Anzahl der erkannten Probleme den Körper des Kommentars zu höherer als die Charaktergrenze des Github pro PR -Kommentar (65536) macht. In diesem Fall enthält der erstellte Kommentar nur die bis zu diesem Zeitpunkt gefundenen Probleme und die Informationen, dass die Grenze der Charaktere erreicht wurde.

Bei Nicht -Pull -Anfragen wird die Ausgabe in die Ausgangskonsole von Github gedruckt. Dieses Verhalten kann auch über die Eingabe force_console_print erzwungen werden.

Es wird empfohlen, dass Ihr Projekt auf CMake basiert, aber es ist nicht erforderlich (siehe Abschnitt " Inputs unten). Wir empfehlen auch, eine .clang-tidy Datei in Ihrem Stammverzeichnis zu verwenden. Wenn für Ihr Projekt zusätzliche Pakete installiert werden müssen, können Sie die Eingabevariablen apt_pckgs und/oder init_script verwenden (siehe Abschnitte für Workflow -Beispiele oder Eingänge unten). Wenn Ihr Repository Beiträge aus Gabeln zulässt, müssen Sie diese Aktion mit dem Ereignis pull_request_target Trigger verwenden, da die Github -API ansonsten keine PR -Kommentare zulässt.
Standardmäßig läuft CPPCheck mit den folgenden Flags: --enable=all --suppress=missingIncludeSystem --inline-suppr --inconclusive Sie können die Eingabe cppcheck_args verwenden, um Ihre eigenen Flags festzulegen.
Klang-Tidy sucht nach der .clang-tidy Datei in Ihrem Repository, Sie können jedoch auch Überprüfungen mit der Eingabe clang_tidy_args festlegen.
name : Static analysis
on :
# Will run on push when merging to 'branches'. The output will be shown in the console
push :
branches :
- develop
- master
- main
# 'pull_request_target' allows this Action to also run on forked repositories
# The output will be shown in PR comments (unless the 'force_console_print' flag is used)
pull_request_target :
branches :
- " * "
jobs :
static_analysis :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v2
- name : setup init_script
shell : bash
run : |
echo "#!/bin/bash
# Input args provided by StaticAnalysis action
root_dir=${1}
build_dir=${2}
echo "Hello from the init script! First arg=${root_dir} second arg=${build_dir}"
add-apt-repository ppa:oibaf/graphics-drivers
apt update && apt upgrade
apt install -y libvulkan1 mesa-vulkan-drivers vulkan-utils" > init_script.sh
- name : Run static analysis
uses : JacobDomagala/StaticAnalysis@master
with :
language : c++
# Exclude any issues found in ${Project_root_dir}/lib
exclude_dir : lib
use_cmake : true
# Additional apt packages that need to be installed before running Cmake
apt_pckgs : software-properties-common libglu1-mesa-dev freeglut3-dev mesa-common-dev
# Additional script that will be run (sourced) AFTER 'apt_pckgs' and before running Cmake
init_script : init_script.sh
# (Optional) clang-tidy args
clang_tidy_args : -checks='*,fuchsia-*,google-*,zircon-*,abseil-*,modernize-use-trailing-return-type'
# (Optional) cppcheck args
cppcheck_args : --enable=all --suppress=missingIncludeSystem | Name | Beschreibung | Standardwert |
|---|---|---|
github_token | Github -Token, das für Github -API -Anfragen verwendet wird | ${{github.token}} |
pr_num | Pull -Anforderungsnummer, für die der Kommentar erstellt wird | ${{github.event.pull_request.number}} |
comment_title | Titel für einen Kommentar bei der Raport. Dies sollte ein eindeutiger Name sein | Static analysis result |
exclude_dir | Verzeichnis, das aus dem Raport ausgeschlossen werden sollte | <empty> |
apt_pckgs | Zusätzliche (speicher getrennte) Pakete, die installiert werden müssen, damit das Projekt zusammengestellt werden muss | <empty> |
init_script | Optionales Shell -Skript, das vor dem Konfigurieren des Projekts ausgeführt wird (dh CMake -Befehl auszuführen). Dies sollte verwendet werden, wenn das Projekt vorher einige Umgebungsanlagen erfordert. Das Skript wird mit 2 Argumenten ausgeführt: root_dir (Root -Verzeichnis des Benutzers Code) und build_dir (Build -Verzeichnis für das Ausführen von SA). Notiz. apt_pckgs wird vor diesem Skript ausgeführt, nur für den Fall, dass einige Pakete installiert werden müssen. Auch dieses Skript wird im Stammwurzel des Projekts ausgeführt ( root_dir ) | <empty> |
cppcheck_args | CPPcheck (Space Separated) Argumente, die verwendet werden | --enable=all --suppress=missingIncludeSystem --inline-suppr --inconclusive |
clang_tidy_args | Klang-Tidy-Argumente, die verwendet werden (Beispiel: -checks='*,fuchsia-*,google-*,zircon-*' | <empty> |
report_pr_changes_only | Nur die Probleme in den in dieser Pull -Anfrage eingeführten Änderungen veröffentlichen. Dies bedeutet, dass nur die in den veränderten Zeilen gefundenen Themen PO veröffentlicht werden. Alle anderen Probleme, die durch diese Änderungen im Repository verursacht werden, werden nicht gemeldet. Im Allgemeinen sollten Sie im Allgemeinen eine statische Analyse auf der gesamten Codebasis durchführen | false |
use_cmake | Bestimmt, ob CMake verwendet werden sollte, um die Datei compile_commands.json zu generieren | true |
cmake_args | Zusätzliche CMake -Argumente | <empty> |
force_console_print | Geben Sie das Aktionsergebnis in die Konsole aus, anstatt den Kommentar zu erstellen | false |
Hinweis: apt_pckgs wird vor init_script ausgeführt, nur für den Fall, dass einige Pakete installiert werden, bevor das Skript ausgeführt wird
name : Static analysis
on :
push :
branches :
- master
pull_request :
jobs :
check :
name : Run Linter
runs-on : ubuntu-20.04
steps :
- uses : actions/checkout@v3
- name : CodeQuality
uses : JacobDomagala/StaticAnalysis@master
with :
language : " Python "
pylint_args : " --rcfile=.pylintrc --recursive=true "
python_dirs : " src test " | Name | Beschreibung | Standardwert |
|---|---|---|
github_token | Github -Token, das für Github -API -Anfragen verwendet wird | ${{github.token}} |
pr_num | Pull -Anforderungsnummer, für die der Kommentar erstellt wird | ${{github.event.pull_request.number}} |
comment_title | Titel für einen Kommentar bei der Raport. Dies sollte ein eindeutiger Name sein | Static analysis result |
exclude_dir | Verzeichnis, das aus dem Raport ausgeschlossen werden sollte | <empty> |
apt_pckgs | Zusätzliche (speicher getrennte) Pakete, die installiert werden müssen, damit das Projekt zusammengestellt werden muss | <empty> |
init_script | Optionales Shell -Skript, das vor dem Konfigurieren des Projekts ausgeführt wird (dh CMake -Befehl auszuführen). Dies sollte verwendet werden, wenn das Projekt vorher einige Umgebungsanlagen erfordert. Das Skript wird mit 2 Argumenten ausgeführt: root_dir (Root -Verzeichnis des Benutzers Code) und build_dir (Build -Verzeichnis für das Ausführen von SA). Notiz. apt_pckgs wird vor diesem Skript ausgeführt, nur für den Fall, dass einige Pakete installiert werden müssen. Auch dieses Skript wird im Stammwurzel des Projekts ausgeführt ( root_dir ) | <empty> |
pylint_args | Pylinint (Raum getrennt) Argumente, die verwendet werden | <empty> |
python_dirs | Verzeichnisse, die Python -Dateien enthalten, die überprüft werden sollen | <empty> |
report_pr_changes_only | Nur die Probleme in den in dieser Pull -Anfrage eingeführten Änderungen veröffentlichen. Dies bedeutet, dass nur die in den veränderten Zeilen gefundenen Themen PO veröffentlicht werden. Alle anderen Probleme, die durch diese Änderungen im Repository verursacht werden, werden nicht gemeldet. Im Allgemeinen sollten Sie im Allgemeinen eine statische Analyse auf der gesamten Codebasis durchführen | false |
force_console_print | Geben Sie das Aktionsergebnis in die Konsole aus, anstatt den Kommentar zu erstellen | false |
Hinweis: apt_pckgs wird vor init_script ausgeführt, nur für den Fall, dass einige Pakete installiert werden, bevor das Skript ausgeführt wird