


Cette action GitHub est conçue pour les projets C ++ / Python et effectue une analyse statique en utilisant:
Il peut être déclenché par des demandes de poussée et de traction.
Pour plus d'informations et des conseils sur la configuration et diverses entrées, veuillez consulter les sections dédiées à chaque langue ( C ++ et Python )
Le commentaire créé contiendra des extraits de code avec la description du problème. Lorsque cette action est exécutée pour la première fois, le commentaire avec le résultat initial sera créé pour la demande de traction actuelle. Les exécutions consécutives modifieront ce commentaire avec le statut mis à jour.
Notez qu'il est possible que la quantité de problèmes détectés puisse rendre le corps du commentaire supérieur à la limite de caractère de Github par commentaire PR (qui est 65536). Dans ce cas, le commentaire créé ne contiendra que les problèmes trouvés jusqu'à ce point et les informations selon lesquelles la limite des caractères a été atteinte.

Pour les demandes de non-pull, la sortie sera imprimée à la console de sortie de GitHub. Ce comportement peut également être forcé via une entrée force_console_print .

Bien qu'il soit recommandé que votre projet soit basé sur CMake, il n'est pas nécessaire (voir la section des entrées ci-dessous). Nous vous recommandons également d'utiliser un fichier .clang-tidy dans votre répertoire racine. Si votre projet nécessite l'installation de packages supplémentaires, vous pouvez utiliser les variables d'entrée apt_pckgs et / ou init_script pour les installer (voir l' exemple de workflow ou les sections d'entrée ci-dessous). Si votre référentiel autorise les contributions à partir de fourches, vous devez utiliser cette action avec l'événement de déclenchement pull_request_target , car l'API GitHub n'autorisera pas les commentaires PR autrement.
Par défaut, CPPCHECK s'exécute avec les indicateurs suivants: --enable=all --suppress=missingIncludeSystem --inline-suppr --inconclusive Vous pouvez utiliser l'entrée cppcheck_args pour définir vos propres drapeaux.
Clang-tidy recherche le fichier .clang-tidy dans votre référentiel, mais vous pouvez également définir des vérifications à l'aide de l'entrée clang_tidy_args .
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 | Nom | Description | Valeur par défaut |
|---|---|---|
github_token | Jeton GitHub utilisé pour les demandes d'API GitHub | ${{github.token}} |
pr_num | Tirez le numéro de demande pour lequel le commentaire sera créé | ${{github.event.pull_request.number}} |
comment_title | Titre pour commenter avec le Raport. Cela devrait être un nom unique | Static analysis result |
exclude_dir | Répertoire qui doit être exclu du raport | <empty> |
apt_pckgs | Des packages supplémentaires (séparés d'espace) qui doivent être installés pour que le projet se compile | <empty> |
init_script | Script shell facultatif qui sera exécuté avant de configurer le projet (IE exécutant la commande cmake). Cela doit être utilisé lorsque le projet nécessite une configuration environnementale à l'avance. Le script sera exécuté avec 2 arguments: root_dir (répertoire racine du code de l'utilisateur) et build_dir (répertoire de construction créé pour l'exécution de SA). Note. apt_pckgs s'exécutera avant ce script, juste au cas où vous auriez besoin de certains packages installés. Ce script sera également exécuté dans la racine du projet ( root_dir ) | <empty> |
cppcheck_args | Arguments CPPCheck (espace séparé) qui seront utilisés | --enable=all --suppress=missingIncludeSystem --inline-suppr --inconclusive |
clang_tidy_args | arguments de clang-tidy qui seront utilisés (exemple: -checks='*,fuchsia-*,google-*,zircon-*' | <empty> |
report_pr_changes_only | Postez uniquement les problèmes trouvés dans les modifications introduites dans cette demande de traction. Cela signifie que seuls les problèmes trouvés dans les lignes modifiées seront publiés. Tout autre problème causé par ces changements dans le référentiel ne sera pas signalé, donc en général, vous devez exécuter une analyse statique sur la base de code entière | false |
use_cmake | Détermine que Cmake devrait être utilisé pour générer un fichier compile_commands.json | true |
cmake_args | Arguments CMake supplémentaires | <empty> |
force_console_print | Sortie le résultat de l'action pour consoler, au lieu de créer le commentaire | false |
Remarque: apt_pckgs s'exécutera avant init_script , juste au cas où vous auriez besoin de packages installés avant d'exécuter le script
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 " | Nom | Description | Valeur par défaut |
|---|---|---|
github_token | Jeton GitHub utilisé pour les demandes d'API GitHub | ${{github.token}} |
pr_num | Tirez le numéro de demande pour lequel le commentaire sera créé | ${{github.event.pull_request.number}} |
comment_title | Titre pour commenter avec le Raport. Cela devrait être un nom unique | Static analysis result |
exclude_dir | Répertoire qui doit être exclu du raport | <empty> |
apt_pckgs | Des packages supplémentaires (séparés d'espace) qui doivent être installés pour que le projet se compile | <empty> |
init_script | Script shell facultatif qui sera exécuté avant de configurer le projet (IE exécutant la commande cmake). Cela doit être utilisé lorsque le projet nécessite une configuration environnementale à l'avance. Le script sera exécuté avec 2 arguments: root_dir (répertoire racine du code de l'utilisateur) et build_dir (répertoire de construction créé pour l'exécution de SA). Note. apt_pckgs s'exécutera avant ce script, juste au cas où vous auriez besoin de certains packages installés. Ce script sera également exécuté dans la racine du projet ( root_dir ) | <empty> |
pylint_args | Arguments pylint (espace séparé) qui seront utilisés | <empty> |
python_dirs | Répertoires qui contiennent des fichiers Python à vérifier | <empty> |
report_pr_changes_only | Postez uniquement les problèmes trouvés dans les modifications introduites dans cette demande de traction. Cela signifie que seuls les problèmes trouvés dans les lignes modifiées seront publiés. Tout autre problème causé par ces changements dans le référentiel ne sera pas signalé, donc en général, vous devez exécuter une analyse statique sur la base de code entière | false |
force_console_print | Sortie le résultat de l'action pour consoler, au lieu de créer le commentaire | false |
Remarque: apt_pckgs s'exécutera avant init_script , juste au cas où vous auriez besoin de packages installés avant d'exécuter le script