Skip to main content

Analyse CodeQL pour les langages compilés

Découvrez comment CodeQL analyser les langages compilés, les options de génération disponibles et découvrir comment personnaliser le processus de génération de base de données si nécessaire.

Qui peut utiliser cette fonctionnalité ?

Utilisateurs avec accès en écriture if advanced setup is already enabled

Code scanning est disponible pour les types de référentiels suivants :

  • Des référentiels publics sur GitHub.com
  • Référentiels appartenant à l’organisation sur GitHub Team, GitHub Enterprise Cloud, ou GitHub Enterprise Server, avec GitHub Code Security activé.

Comparer les modes de compilation

Caractéristique du mode de buildAucunAutobuildManuel
Utilisé par la configuration par défaut et pour l’activation au niveau de l’organisationOui (C/C++, C#, Java et Rust)Oui, lorsque none n’est pas pris en chargeNon
L’analyse aboutit sans configuration utilisateurOuiVariableNon
Exhaustivité de l’analyseLe code généré n’est pas analyséVariableContrôlé par l’utilisateur
Précision de l’analyseBienBienLa meilleure

Choisir un mode de génération

Lorsque vous configurez code scanning pour la première fois ou sur plusieurs référentiels, il est préférable d’utiliser la configuration par défaut. La configuration par défaut utilise la méthode la plus simple disponible pour générer une CodeQL base de données et analyser votre code, afin que vous puissiez commencer à corriger les alertes dès que possible. Une fois les alertes initiales résolues, vous pourrez envisager de passer à la configuration avancée avec un processus de build manuel pour les dépôts à haut risque.

Pour connaître le comportement spécifique autobuild au langage, les exigences de l’exécuteur et les détails du mode build pour les langues compilées, consultez Options et étapes de génération CodeQL pour les langages compilés.

Utiliser plusieurs modes de génération dans un référentiel multi-langage

Pour les dépôts comportant plusieurs langages compilés, vous pouvez utiliser des modes de build différents selon le langage. Par exemple, si votre référentiel contient C/C++, C# et Java, vous pouvez fournir des étapes de génération manuelles pour un langage (ici C/C++). Ce workflow spécifie un mode de build différent pour chaque langage.

strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1

Pour plus d’informations sur les langages, les bibliothèques et les frameworks pris en charge dans la dernière version de CodeQL, consultez les langages et frameworks pris en charge dans la CodeQL documentation. Pour plus d’informations sur la configuration système requise pour l’exécution de la dernière version de CodeQL, consultez Configuration requise dans la CodeQL documentation.

Activer la mise en cache des dépendances pour CodeQL

Pour les flux de travail d’installation par défaut, la mise en cache des dépendances est activée uniquement pour GitHubles exécuteurs hébergés dans des référentiels publics et privés.

Pour les workflows de configuration avancée, la mise en cache des dépendances est désactivée par défaut. Pour activer la mise en cache des dépendances pour CodeQL, utilisez le paramètre dependency-caching pour l’action CodeQL dans votre flux de travail d’installation avancé. Ce paramètre accepte les valeurs suivantes :

  •         `false`
            /
            `none`
            /
            `off` : la mise en cache des dépendances est désactivée (par défaut)
    
  •         `restore` : restaurer uniquement les caches existants, ne pas stocker de nouveaux caches
    
  •         `store` : stocker uniquement de nouveaux caches, ne pas restaurer de caches
    
  •         `true`
            /
            `full`
            /
            `on` : restaurer les caches existants et stocker de nouveaux caches
    

Par exemple, les paramètres suivants activent la mise en cache des dépendances pour l’action CodeQL :

    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true

Utiliser le none mode de génération pour CodeQL

Pour C/C++, C#, Java et Rust, CodeQL crée une base de données sans nécessiter de build lorsque vous activez le programme d’installation par défaut, code scanning sauf si le référentiel inclut également du code Kotlin. Si un référentiel contient du code Kotlin en plus de Java code, la configuration par défaut est activée avec le processus de génération automatique, car l’analyse Kotlin nécessite une build.

La création d’une CodeQL base de données sans build peut produire des résultats moins précis que l’utilisation autobuild ou les étapes de génération manuelles si :

  • Les scripts de build ne peuvent pas être interrogés pour obtenir des informations sur les dépendances et les déductions de dépendances sont inexactes.
  • Le dépôt génère normalement du code pendant le processus de build.

Pour utiliser le autobuild ou des étapes de build manuelles, vous pouvez utiliser la configuration avancée.

Remarque

Pour Java analyse, si build-mode a la valeur none et que le code Kotlin se trouve dans le référentiel, le code Kotlin ne sera pas analysé et un avertissement sera généré. Consultez « Options et étapes de génération CodeQL pour les langages compilés ».

Utiliser autobuild pour CodeQL

L’action CodeQL utilise autobuild pour analyser les langages compilés dans les cas suivants.

  • La configuration par défaut est activée et la langue ne permet pas la génération none (elle est supportée pour C/C++, C#, Java et Rust).
  • La configuration avancée est activée et le workflow spécifie build-mode: autobuild.
  • La configuration avancée est activée et le workflow comporte une étape Autobuild pour le langage utilisant l’action autobuild (github/codeql-action/autobuild@v4).

Utiliser l’option build-mode

# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}

Utiliser l’étape de génération automatique

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4

Spécifier manuellement les étapes de génération

Vous ne pouvez spécifier des étapes de build manuelles que si vous avez activé la configuration avancée ; consultez Configuration avancée de l’analyse du code.

En cas d’échec de autobuild ou si vous souhaitez analyser un ensemble différent de fichiers source générés par le processus autobuild, vous devez effectuer les opérations suivantes :

  • Si votre flux de travail spécifie un mode de génération pour la langue, remplacez le mode de génération par manual.
  • Si votre flux de travail contient une étape autobuild, supprimez ou commentez l’étape autobuild dans le flux de travail.

Supprimez ensuite les marques de commentaire de l’étape run et spécifiez manuellement le processus de génération à utiliser. Pour C/C++, C#, Go, Java, Kotlin et Swift, CodeQL analysera le code source construit par les étapes de construction spécifiées.

Mettez à jour votre workflow afin de définir le build-mode sur manual.

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"

Vous pouvez également mettre à jour votre workflow pour commenter l’étape « Autobuild ».

    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4

Ajouter des commandes de build

Lorsque la compilation manuelle est activée, décommentez l’étape run dans le workflow et ajoutez des commandes de build adaptées à votre dépôt. L’étape run exécute des programmes en ligne de commande à l’aide du shell du système d’exploitation. Vous pouvez modifier ces commandes et ajouter d’autres commandes pour personnaliser le processus de build.

- run: |
    make bootstrap
    make release

Pour plus d’informations sur le mot clé run, consultez « Syntaxe de flux de travail pour GitHub Actions ».

Si vous avez ajouté des étapes de génération manuelles pour les langues compilées et que code scanning ne fonctionne toujours pas sur votre référentiel, contactez .