Skip to main content

Chargement des résultats d'analyse de CodeQL sur GitHub

Vous pouvez utiliser CodeQL CLI pour charger les rĂ©sultats d’analyse CodeQL sur GitHub.

Qui peut utiliser cette fonctionnalité ?

Utilisateurs avec accÚs en écriture

CodeQL est disponible pour les types de rĂ©fĂ©rentiels suivants :

À propos de la sortie SARIF

GitHub crĂ©e des alertes code scanning dans un rĂ©fĂ©rentiel en utilisant des informations provenant de fichiers SARIF (Static Analysis Results Interchange Format). Le format SARIF est conçu pour reprĂ©senter la sortie d'un large Ă©ventail d'outils d'analyse statique et il existe de nombreuses fonctionnalitĂ©s dans la spĂ©cification SARIF considĂ©rĂ©es comme « facultatives Â». Les rĂ©sultats doivent utiliser SARIF version 2.1.0. Pour plus d’informations, consultez « Prise en charge de SARIF pour l’analyse du code Â».

AprĂšs avoir analysĂ© une base de donnĂ©es CodeQL Ă  l'aide de CodeQL CLI, vous disposerez d'un fichier SARIF qui contient les rĂ©sultats. Pour plus d’informations, consultez « Analyse de votre code avec des requĂȘtes CodeQL Â». Vous pouvez ensuite utiliser CodeQL CLI pour charger les rĂ©sultats sur GitHub.

Si vous avez utilisĂ© une mĂ©thode autre que CodeQL CLI pour gĂ©nĂ©rer les rĂ©sultats, vous pouvez utiliser d'autres mĂ©thodes de chargement. Pour plus d’informations, consultez « Chargement d’un fichier SARIF sur GitHub Â».

Remarque

Le chargement des donnĂ©es SARIF Ă  afficher comme rĂ©sultats code scanning dans GitHub est pris en charge pour les rĂ©fĂ©rentiels appartenant Ă  l’organisation avec GitHub Code Security activĂ©, et les rĂ©fĂ©rentiels publics sur GitHub.com. Pour plus d’informations, consultez « Gestion des paramĂštres de sĂ©curitĂ© et d’analyse pour votre dĂ©pĂŽt Â».

GĂ©nĂ©ration d’un jeton pour l’authentification avec GitHub

Avant de pouvoir télécharger vos résultats sur GitHub, vous devez d'abord générer un personal access token.

  • Personal access token (classic) nĂ©cessite l’accĂšs en lecture et en Ă©criture aux rĂ©fĂ©rentiels requis pour « Code scanning Â».
  • Fine-grained personal access token nĂ©cessite un accĂšs security_events « rĂ©fĂ©rentiel Â».

Pour plus d’informations, consultez « Gestion de vos jetons d'accĂšs personnels Â».

Si vous avez installĂ© CodeQL CLI dans un systĂšme CI de tiers pour crĂ©er des rĂ©sultats Ă  afficher dans GitHub en tant qu’alertes d’analyse de code, vous pouvez utiliser une GitHub App ou un personal access token pour charger les rĂ©sultats dans GitHub. Pour plus d’informations, consultez « Utilisation de l'analyse du code avec votre systĂšme CI existant Â».

Chargement de résultats dans GitHub

Vous pouvez vĂ©rifier que les propriĂ©tĂ©s SARIF ont la taille prise en charge pour le chargement et que le fichier est compatible avec l’analyse du code. Pour plus d’informations, consultez « Prise en charge de SARIF pour l’analyse du code Â».

Pour pouvoir tĂ©lĂ©charger les rĂ©sultats sur GitHub, vous devez dĂ©terminer la meilleure façon de passer GitHub App ou personal access token que vous avez créé dans la section prĂ©cĂ©dente Ă  CodeQL CLI. Nous vous recommandons de consulter les instructions de votre systĂšme CI sur l'utilisation sĂ©curisĂ©e d'un magasin de secrets. L'CodeQL CLI prend en charge :

  • Interfaçage avec un magasin de secrets en utilisant l'option --github-auth-stdin (recommandĂ©).
  • L'enregistrement du secret dans la variable d'environnement GITHUB_TOKEN et l'exĂ©cution de l'interface CLI sans inclure l'option --github-auth-stdin.
  • À des fins de test, vous pouvez passer l'option de ligne de commande --github-auth-stdin et fournir un jeton temporaire via une entrĂ©e standard.

Quand vous avez décidé de la méthode la plus sûre et la plus fiable pour votre configuration, exécutez codeql github upload-results sur chaque fichier de résultats SARIF et incluez --github-auth-stdin, sauf si le jeton est disponible dans la variable d'environnement GITHUB_TOKEN.

# GitHub App or personal access token available from a secret store
<call-to-retrieve-secret> | codeql github upload-results \
    --repository=<repository-name> \
    --ref=<ref> --commit=<commit> \
    --sarif=<file> --github-auth-stdin

# GitHub App or personal access token available in GITHUB_TOKEN
codeql github upload-results \
    --repository=<repository-name> \
    --ref=<ref> --commit=<commit> \
    --sarif=<file> 
OptionObligatoireUsage
--repositorySpĂ©cifiez le PROPRIÉTAIRE/NOM du dĂ©pĂŽt sur lequel charger les donnĂ©es. Le propriĂ©taire doit ĂȘtre une organisation au sein d’une entreprise, ou sur un plan GitHub Team, avec GitHub Code Security activĂ© pour le rĂ©fĂ©rentiel, sauf si le rĂ©fĂ©rentiel est public. Pour plus d’informations, consultez « Gestion des paramĂštres de sĂ©curitĂ© et d’analyse pour votre dĂ©pĂŽt Â».
--refSpĂ©cifiez le nom de la rĂ©fĂ©rence (ref) que vous avez extraite et analysĂ©e afin que les rĂ©sultats puissent ĂȘtre mis en correspondance avec le code correct. Pour une branche, utilisez : refs/heads/BRANCH-NAME. Pour le commit de tĂȘte d'une demande de tirage, utilisez : refs/pull/NUMBER/head. Pour le commit de fusion gĂ©nĂ©rĂ© par GitHub d'une demande de tirage, utilisez : refs/pull/NUMBER/merge.
--commitSpécifiez l'algorithme SHA complet du commit que vous avez analysé.
--sarifSpécifiez le fichier SARIF à charger.
--github-auth-stdinPasser à l'interface CLI la GitHub App ou le personal access token créé pour l'authentification avec l'API REST de GitHub depuis le magasin de secrets via une entrée standard. Cette option n'est pas nécessaire si la commande a accÚs à une variable d'environnement GITHUB_TOKEN définie avec ce jeton.

Pour plus d’informations, consultez « github upload-results Â».

Remarque

Si vous avez analysĂ© plusieurs bases de donnĂ©es CodeQL pour un seul commit, vous devez avoir spĂ©cifiĂ© une catĂ©gorie SARIF pour chaque ensemble de rĂ©sultats gĂ©nĂ©rĂ© par cette commande. Quand vous chargez les rĂ©sultats sur GitHub, code scanning utilise cette catĂ©gorie pour stocker les rĂ©sultats de chaque langage sĂ©parĂ©ment. Si vous oubliez de spĂ©cifier une catĂ©gorie, chaque chargement remplace les rĂ©sultats prĂ©cĂ©dents. Pour plus d’informations, consultez « Analyse de votre code avec des requĂȘtes CodeQL Â».

Exemple simple de chargement de résultats sur GitHub

L'exemple suivant charge les résultats depuis le fichier SARIF temp/example-repo-js.sarif sur le dépÎt my-org/example-repo. Il indique à l'API d'code scanning que les résultats sont destinés au commit deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 sur la branche main. L'exemple suppose que la GitHub App ou le personal access token créé pour l'authentification avec l'API REST de GitHub utilise la variable d'environnement GITHUB_TOKEN.

codeql github upload-results \
    --repository=my-org/example-repo \
    --ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
    --sarif=/temp/example-repo-js.sarif 

Cette commande ne gĂ©nĂšre aucune sortie, sauf si le chargement a Ă©chouĂ©. L'invite de commandes rĂ©apparaĂźt une fois que le chargement est terminĂ© et que le traitement des donnĂ©es a commencĂ©. Sur les codebases plus petits, vous devez ĂȘtre en mesure d’explorer les alertes code scanning dans GitHub peu de temps aprĂšs. Vous pouvez voir les alertes directement dans la demande de tirage ou dans l’onglet SĂ©curitĂ© des branches, en fonction du code que vous avez extrait. Pour plus d’informations, consultez « Triage des alertes d’analyse du code dans les demandes de tirage (pull request) Â» et « Ă‰valuation des alertes d’analyse du code pour votre rĂ©fĂ©rentiel Â».

Chargement des informations de diagnostic dans GitHub si l’analyse Ă©choue

Lorsque CodeQL CLI termine avec succĂšs l'analyse d'une base de donnĂ©es, il collecte des informations de diagnostic telles que la couverture des fichiers, les avertissements et les erreurs et les inclut dans le fichier SARIF avec les rĂ©sultats. Quand vous chargez le fichier SARIF sur GitHub, les informations de diagnostic s'affichent sur la page d’état de l’outil de code scanning pour le dĂ©pĂŽt, ce qui permet de voir facilement comment CodeQL fonctionne et dĂ©boguer les problĂšmes Ă©ventuels. Pour plus d’informations, consultez « Ă€ propos de la page d’état de l’outil pour l’analyse du code Â».

Cependant, en cas d'Ă©chec de codeql database analyze pour une raison quelconque, il n'y a pas de fichier SARIF Ă  charger sur GitHub et aucune information de diagnostic Ă  afficher sur la page d’état de l’outil de code scanning pour le dĂ©pĂŽt. Les utilisateurs rencontrent alors des difficultĂ©s pour rĂ©soudre les problĂšmes d'analyse, sauf s'ils ont accĂšs aux fichiers journaux dans votre systĂšme CI.

Nous vous recommandons de configurer votre flux de travail CI pour exporter et charger les informations de diagnostic vers GitHub en cas d’échec d’une analyse. Pour ce faire, utilisez les commandes simples suivantes pour exporter les informations de diagnostic et les charger dans GitHub.

Exportation des informations de diagnostic en cas d'échec de l'analyse

Vous pouvez crĂ©er un fichier SARIF pour l’analyse ayant Ă©chouĂ© Ă  l’aide de database export-diagnostics, par exemple :

$ codeql database export-diagnostics codeql-dbs/example-repo \
    --sarif-category=javascript-typescript --format=sarif-latest \
    --output=/temp/example-repo-js.sarif

Ce fichier SARIF contient des informations de diagnostic pour l'analyse ayant échoué, y compris les informations de couverture des fichiers, les avertissements et les erreurs générés pendant l'analyse.

Chargement des informations de diagnostic en cas d'échec de l'analyse

Vous pouvez rendre ces informations de diagnostic disponibles dans la page d’état de l’outil en chargeant le fichier SARIF sur GitHub en utilisant github upload-results, par exemple :

codeql github upload-results \
    --repository=my-org/example-repo \
    --ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
    --sarif=/temp/example-repo-js.sarif 

Il s'agit du processus de chargement des fichiers SARIF à partir d'analyses réussies.