Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Chargement d’un fichier SARIF sur GitHub

Vous pouvez charger des fichiers SARIF générés en dehors de GitHub et voir les alertes code scanning à partir d’outils tiers dans votre dépôt.

Who can use this feature

People with write permissions to a repository can upload code scanning data generated outside GitHub.

Code scanning est disponible pour les dépôts appartenant à l’organisation dans GitHub Enterprise Server. Cette fonctionnalité nécessite une licence pour GitHub Advanced Security. Pour plus d’informations, consultez « À propos de GitHub Advanced Security ».

Remarque : Votre administrateur de site doit activer l’code scanning pour your GitHub Enterprise Server instance afin que vous puissiez utiliser cette fonctionnalité. Pour plus d’informations, consultez « Configuration de code scanning pour votre appliance ».

À propos des chargements de fichiers SARIF pour l’code scanning

GitHub crée des alertes d’code scanning dans un dépôt en utilisant des informations provenant de fichiers SARIF (Static Analysis Results Interchange Format). Les fichiers SARIF peuvent être chargés sur un dépôt avec l’API ou GitHub Actions. Pour plus d’informations, consultez « Gestion des alertes d’code scanning pour votre dépôt ».

Vous pouvez générer des fichiers SARIF avec de nombreux outils de test de sécurité d’analyse statique, y compris CodeQL. Les résultats doivent utiliser SARIF version 2.1.0. Pour plus d’informations, consultez « Prise en charge de SARIF pour l’code scanning ».

Vous pouvez charger les résultats avec GitHub Actions, l’API d’code scanning, ou l’CodeQL CLI. La meilleure méthode de chargement dépend de la façon dont vous générez le fichier SARIF. Par exemple, si vous utilisez :

  • GitHub Actions pour exécuter l’action CodeQL, aucune action supplémentaire n’est requise. L’action CodeQL charge automatiquement le fichier SARIF quand il termine l’analyse.
  • GitHub Actions pour exécuter un outil d’analyse compatible SARIF, vous pouvez mettre à jour le workflow pour inclure une étape finale qui charge les résultats (voir ci-dessous).
  • L’CodeQL CLI pour exécuter l’code scanning dans votre système CI, vous pouvez utiliser l’interface CLI pour charger les résultats sur GitHub (pour plus d’informations, consultez « Installation de l’CodeQL CLI dans votre système CI »).
  • Un outil qui génère les résultats en tant qu’artefact en dehors de votre dépôt, vous pouvez utiliser l’API d’code scanning pour charger le fichier (pour plus d’informations, consultez « Charger une analyse en tant que données SARIF »).

Chargement d’une code scanning avec GitHub Actions

Pour utiliser GitHub Actions afin de charger un fichier SARIF tiers sur un dépôt, vous avez besoin d’un workflow. Pour plus d’informations, consultez « Découvrir GitHub Actions ».

Votre workflow doit utiliser l’action upload-sarif, qui fait partie du dépôt github/codeql-action. Il a des paramètres d’entrée que vous pouvez utiliser pour configurer le chargement. Les principaux paramètres d’entrée sont les suivants :

  • sarif-file, qui configure le fichier ou le répertoire des fichiers SARIF à charger. Le chemin du répertoire ou du chemin est relatif à la racine du référentiel.
  • category (facultatif), qui affecte une catégorie pour les résultats dans le fichier SARIF. Cela vous permet d’analyser le même commit de plusieurs façons et de passer en revue les résultats avec les affichages d’code scanning dans GitHub. Par exemple, vous pouvez effectuer une analyse avec plusieurs outils et, dans un monodépôt, vous pouvez analyser différentes tranches du dépôt en fonction du sous-ensemble de fichiers modifiés.

Pour plus d’informations, consultez l’action upload-sarif.

L’action upload-sarif peut être configurée pour s’exécuter quand les événements push et scheduled se produisent. Pour plus d’informations sur les événements GitHub Actions, consultez « Événements qui déclenchent des workflows ».

Si votre fichier SARIF n’inclut pas partialFingerprints, l’action upload-sarif calcule le champ partialFingerprints pour vous et tente d’empêcher les alertes en double. GitHub ne peut créer partialFingerprints que quand le dépôt contient à la fois le fichier SARIF et le code source utilisé dans l’analyse statique. Pour plus d’informations sur la prévention des alertes en double, consultez « À propos de la prise en charge de SARIF pour l’analyse du code ».

Remarques :

  • Un chargement SARIF prend en charge un maximum de 5 000 résultats par chargement. Tous les résultats au-delà de cette limite sont ignorés. Si un outil génère trop de résultats, vous devez mettre à jour la configuration pour vous concentrer sur les résultats des règles ou requêtes les plus importantes.

  • À chaque chargement, le chargement SARIF prend en charge une taille maximale de 10 Mo pour le fichier SARIF compressé au format gzip. Tous les chargements au-delà de cette limite sont rejetés. Si votre fichier SARIF est trop volumineux parce qu’il contient trop de résultats, vous devez mettre à jour la configuration pour vous concentrer sur les résultats des règles ou requêtes les plus importantes.

Exemple de workflow pour les fichiers SARIF générés en dehors d’un dépôt

Vous pouvez créer un workflow qui charge les fichiers SARIF après leur commit dans votre dépôt. Cela est utile lorsque le fichier SARIF est généré en tant qu’artefact en dehors de votre référentiel.

Cet exemple de workflow s’exécute chaque fois que des commits sont poussés (push) vers le dépôt. L’action utilise la propriété partialFingerprints pour déterminer si des modifications ont eu lieu. En plus de s’exécuter lorsque des validations sont envoyées, le flux de travail est planifié pour s’exécuter une fois par semaine. Pour plus d’informations, consultez « Événements qui déclenchent des workflows ».

Ce flux de travail charge le fichier results.sarif situé à la racine du référentiel. Pour plus d’informations sur la création d’un fichier de workflow, consultez « Découvrir GitHub Actions ».

Vous pouvez également modifier ce workflow pour charger un répertoire de fichiers SARIF. Par exemple, vous pouvez placer tous les fichiers SARIF dans un répertoire à la racine de votre référentiel appelé sarif-output et définir le paramètre d’entrée de l’action sarif_file sur sarif-output. Notez que si vous chargez un répertoire, chaque fichier SARIF doit inclure un runAutomationDetails.id unique pour définir la catégorie des résultats. Pour plus d’informations, consultez « Objet runAutomationDetails ».

name: "Upload SARIF"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every Thursday at 15:45 UTC.
on:
  push:
  schedule:
    - cron: '45 15 * * 4'

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      # required for all workflows
      security-events: write
      # only required for workflows in private repositories
      actions: read
      contents: read
    steps:
      # This step checks out a copy of your repository.
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@v2
        with:
          # Path to SARIF file relative to the root of the repository
          sarif_file: results.sarif
          # Optional category for the results
          # Used to differentiate multiple results for one commit
          category: my-analysis-tool

Exemple de workflow qui exécute l’outil d’analyse ESLint

Si vous générez votre fichier SARIF tiers dans le cadre d’un flux de travail d’intégration continue (CI), vous pouvez ajouter l’action upload-sarif en tant qu’étape après avoir exécuté vos tests CI. Si vous n’avez pas encore de workflow CI, vous pouvez en créer un avec un modèle GitHub Actions. Pour plus d’informations, consultez le guide de démarrage rapide GitHub Actions.

Cet exemple de workflow s’exécute chaque fois que des commits sont poussés (push) vers le dépôt. L’action utilise la propriété partialFingerprints pour déterminer si des modifications ont eu lieu. En plus de s’exécuter lorsque des validations sont envoyées, le flux de travail est planifié pour s’exécuter une fois par semaine. Pour plus d’informations, consultez « Événements qui déclenchent des workflows ».

Le workflow montre un exemple d’exécution de l’outil d’analyse statique ESLint en tant qu’étape de workflow. L’étape Run ESLint exécute l’outil ESLint et génère le fichier results.sarif. Le workflow charge ensuite le fichier results.sarif sur GitHub en utilisant l’action upload-sarif. Pour plus d’informations sur la création d’un fichier de workflow, consultez « Présentation de GitHub Actions ».

name: "ESLint analysis"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every Wednesday at 15:45 UTC.
on:
  push:
  schedule:
    - cron: '45 15 * * 3'

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      # required for all workflows
      security-events: write
      # only required for workflows in private repositories
      actions: read
      contents: read
    steps:
      - uses: actions/checkout@v3
      - name: Run npm install
        run: npm install
      # Runs the ESlint code analysis
      - name: Run ESLint
        # eslint exits 1 if it finds anything to report
        run: node_modules/.bin/eslint build docs lib script spec-main -f node_modules/@microsoft/eslint-formatter-sarif/sarif.js -o results.sarif || true
      # Uploads results.sarif to GitHub repository using the upload-sarif action
      - uses: github/codeql-action/upload-sarif@v2
        with:
          # Path to SARIF file relative to the root of the repository
          sarif_file: results.sarif

Pour aller plus loin