Skip to main content

Cette version de GitHub Enterprise Server n'est plus disponible depuis le 2026-03-17. Aucune publication de correctifs n’est effectuée, même pour les problèmes de sécurité critiques. Pour de meilleures performances, une sécurité améliorée et de nouvelles fonctionnalités, effectuez une mise à niveau vers la dernière version de GitHub Enterprise. Pour obtenir de l’aide sur la mise à niveau, contactez le support GitHub Enterprise.

Analyse CodeQL pour les langages compilés

Découvrez comment CodeQL analyse les langages compilés, les options de build disponibles et comment vous pouvez 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 Advanced 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 ( Java)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’analyseBonneBonneLa meilleure

Choisir un mode de génération

Lorsque vous configurez code scanning pour la première fois, ou sur plusieurs dépôts, 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 base de données CodeQL et analyser votre code, afin que vous puissiez commencer à corriger les alertes le plus rapidement 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 des informations sur les langages, bibliothèques et frameworks pris en charge dans la dernière version de CodeQL, consultez Langages et frameworks pris en charge dans la documentation CodeQL. Pour des informations sur la configuration système requise pour exécuter la dernière version de CodeQL, consultez Configuration système requise dans la documentation CodeQL.

Utiliser le mode de build none pour CodeQL

Pour Java, CodeQL crée une base de données sans nécessiter de build lorsque vous activez la configuration par défaut de code scanning, sauf si le dépôt contient é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 base de données CodeQL sans build peut produire des résultats moins précis que l’utilisation du autobuild ou d’étapes de build 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 le langage ne prend pas en charge le build none (pris en charge pour Java).
  • 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.

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 langages compilés et que l’code scanning ne fonctionne toujours pas sur votre dépôt, contactez le votre administrateur de site.