Qodana est un outil de surveillance de la qualité de code qui identifie et suggère des correctifs pour les bogues, les vulnérabilités de sécurité, les doublances et les imperfections.
Table des matières
L'action GitHub Qodana Scan vous permet d'exécuter Qodana sur un référentiel GitHub.
Pour configurer Qodana Scan, enregistrez le fichier .github/workflows/code_quality.yml contenant la configuration du workflow:
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- main
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
fetch-depth : 0 # a full history is required for pull request analysis
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
env :
QODANA_TOKEN : ${{ secrets.QODANA_TOKEN }} # read the steps about it below Pour définir la variable d'environnement QODANA_TOKEN dans la configuration de construction:
QODANA_TOKEN et enregistrez le jeton du projet comme valeur.QODANA_TOKEN à la section env de l'étape Qodana Scan :En utilisant ce workflow, Qodana s'exécutera sur la branche principale, libèrera les branches et sur les demandes de traction à venir dans votre référentiel.
Remarque: fetch-depth: 0 est requis pour la caisse au cas où Qodana fonctionne en mode de demande de traction (rapporte les problèmes qui apparaissent uniquement dans cette demande de traction).
Nous vous recommandons d'avoir un fichier de workflow distinct pour Qodana car différents travaux fonctionnent en parallèle

Pour faire en sorte que Qodana corrige automatiquement les problèmes et repousser les modifications vers votre référentiel, vous devez
fixesStrategy dans le fichier qodana.yaml dans votre racine de référentielargs avec la stratégie rapide à utiliser: --apply-fixes ou --cleanuppush-fixes àpull-request : Créez une nouvelle branche avec des correctifs et créez une demande de traction vers la branche d'originebranch : poussez les correctifs à la branche d'origine. En outre, définissez pr-mode sur false : Actuellement, ce mode n'est pas pris en charge pour appliquer des correctifs.contents: write , pull-requests: write , checks: write )pull-request pour la propriété push-fixes : Autorisez les actions GitHub pour créer et approuver les demandes de tractionExemple de configuration:
- name : Qodana Scan
uses : JetBrains/[email protected]
with :
pr-mode : false
args : --apply-fixes
push-fixes : pull-request
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}Remarque Qodana pourrait modifier automatiquement non seulement le code, mais aussi la configuration dans
.idea: si vous ne souhaitez pas pousser ces modifications, ajoutez.ideaà votre fichier.gitignore.
Si vous souhaitez effectuer différentes opérations git dans le même travail, vous pouvez désactiver push-fixes et effectuer les opérations recherchées manuellement
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- master
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }}
fetch-depth : 0
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
with :
args : --cleanup
- run : |
git config user.name github-actions
git config user.email [email protected]
git checkout -b quick-fixes-$GITHUB_RUN_ID
git add -- . ':!.idea'
git commit -m "I fixed some issues"
git push origin quick-fixes-$GITHUB_RUN_ID
gh pr create --repo $GITHUB_REPOSITORY --base $GITHUB_REF_NAME --head quick-fixes-$GITHUB_RUN_ID --title "Pull requests" --body "I fixed some issues"
env:
GH_TOKEN: ${{ github.token }} Vous pouvez configurer un code de code GitHub pour votre projet à l'aide de Qodana. Pour le faire, ajoutez ces lignes au fichier de workflow code_quality.yml juste en dessous de la configuration de base de la numérisation Qodana:
- uses : github/codeql-action/upload-sarif@v2
with :
sarif_file : ${{ runner.temp }}/qodana/results/qodana.sarif.json Cet exemple invoque codeql-action pour télécharger un rapport Qodana formaté Sarif à GitHub et spécifie le fichier de rapport à l'aide de la touche sarif_file .
La numérisation du code GitHub n'exporte pas les résultats d'inspection vers des outils tiers, ce qui signifie que vous ne pouvez pas utiliser ces données pour un traitement ultérieur par Qodana. Dans ce cas, vous devez configurer le traitement de base et de porte de qualité du côté Qodana avant de soumettre les résultats d'inspection à la numérisation du code GitHub, consultez la porte de qualité et la section de base pour plus de détails.
Vous pouvez appliquer GitHub pour bloquer la fusion des demandes de traction si la porte de qualité Qodana a échoué. Pour le faire, créez une règle de protection des branches comme décrit ci-dessous:
pull_request qui ciblent la branche main . on :
pull_request :
branches :
- main Au lieu de main , vous pouvez spécifier votre branche ici.
fail-threshold Qodana Action.main .Qodana , puis vérifiez-la.Vous pouvez combiner la porte de qualité et les fonctionnalités de base pour gérer votre dette technique, signaler uniquement de nouveaux problèmes et bloquer les demandes de traction qui contiennent trop de problèmes.
Suivez ces étapes pour établir une base de référence pour votre projet:
cd project
qodana scan --show-report Ouvrez votre rapport sur http://localhost:8080/ , ajoutez des problèmes détectés à la ligne de base et téléchargez le fichier qodana.sarif.json .
Téléchargez le fichier qodana.sarif.json dans le dossier racine de votre projet sur GitHub.
APPEND --baseline,qodana.sarif.json Argument dans le paramètre de configuration d'action de args Qodana dans le fichier code_quality.yml :
- name : Qodana Scan
uses : JetBrains/qodana-action@main
with :
args : --baseline,qodana.sarif.jsonSi vous souhaitez mettre à jour la ligne de base, vous devez à nouveau répéter ces étapes.
À partir de cela, GitHub générera des alternes uniquement pour les problèmes qui n'ont pas été ajoutés à la ligne de base comme neufs.
Pour établir une porte de qualité en plus de la ligne de base, ajoutez cette ligne à code_quality.yml juste après la ligne baseline-path :
fail-threshold : <number-of-accepted-problems> Sur la base de cela, vous pourrez détecter uniquement de nouveaux problèmes dans les demandes de traction qui dépassent la ligne de base. Dans le même temps, les demandes de traction avec de nouveaux problèmes dépassant la limite de fail-threshold seront bloquées et le workflow échouera.
Vous pouvez configurer un badge de flux de travail Qodana dans votre référentiel, pour le faire, suivre ces étapes:

Très probablement, vous n'aurez pas besoin d'autres options que args : toutes les autres options peuvent être utiles si vous configurez plusieurs travaux de numérisation Qodana dans un seul flux de travail.
Utiliser with pour définir tous les paramètres d'action:
with :
args : --baseline,qodana.sarif.json
cache-default-branch-only : true| Nom | Description | Valeur par défaut |
|---|---|---|
args | Arguments supplémentaires de commande scan Qodana CLI, divisent les arguments avec des virgules ( , ), par exemple -i,frontend,--print-problems . Facultatif. | - |
results-dir | Répertoire pour stocker les résultats de l'analyse. Facultatif. | ${{ runner.temp }}/qodana/results |
upload-result | Téléchargez les résultats de Qodana (Sarif, autres artefacts, journaux) en tant qu'artefact pour le travail. Facultatif. | false |
artifact-name | Spécifiez le nom de l'artefact des résultats Qodana, utilisé pour le téléchargement des résultats. Facultatif. | qodana-report |
cache-dir | Répertoire pour stocker le cache Qodana. Facultatif. | ${{ runner.temp }}/qodana/caches |
use-caches | Utilisez des caches GitHub pour les courses Qodana. Facultatif. | true |
primary-cache-key | Définissez la clé de cache primaire. Facultatif. | qodana-2024.3-${{ github.ref }}-${{ github.sha }} |
additional-cache-key | Définissez la clé de cache supplémentaire. Facultatif. | qodana-2024.3-${{ github.ref }} |
cache-default-branch-only | Télécharger le cache pour la branche par défaut uniquement. Facultatif. | false |
use-annotations | Utilisez l'annotation pour marquer les résultats dans l'interface utilisateur GitHub. Facultatif. | true |
pr-mode | Analyser uniquement les fichiers modifiés dans une demande de traction. Facultatif. | true |
post-pr-comment | Publiez un commentaire avec le résumé des résultats de Qodana à la demande de traction. Facultatif. | true |
github-token | Jeton GitHub pour accéder au référentiel: publier des annotations, commentaires. Facultatif. | ${{ github.token }} |
push-fixes | Push Qodana Fixes au référentiel, peut être none , branch vers la branche actuelle ou pull-request . Facultatif. | none |
Tous les problèmes, les demandes de fonctionnalités et la prise en charge liés à Qodana sont traités sur YouTrack.
Si vous souhaitez déposer un nouveau problème, veuillez utiliser le lien Youtrack | Nouveau problème.