Personnaliser les langages et les builds pour l’analyse du code

Effectué

L’analyse du code CodeQL prend en charge plusieurs langages par défaut avec une fonctionnalité de build automatique. Toutefois, si votre code utilise un processus de build non standard, vous devrez peut-être personnaliser votre flux de travail avec des étapes de build personnalisées.

Cette unité décrit comment modifier les langages analysés par l’analyse du code et comment ajouter des étapes de build personnalisée à un flux de travail d’analyse du code CodeQL.

Modifier les langages qui sont analysés

L’analyse du code CodeQL détecte automatiquement le code écrit dans les langages pris en charge suivants : C/C++, C#, Go, Java, JavaScript/TypeScript, Python et Ruby.

Remarque

CodeQL met constamment à jour ses langages et infrastructures pris en charge pour obtenir la liste complète des langages, variantes et compilateurs disponibles, consultez la documentation[7].

Le fichier de flux de travail d’analyse CodeQL par défaut contient une matrice de build appelée langage qui répertorie les langues de votre référentiel qui sont analysées. CodeQL remplit automatiquement cette matrice lorsque vous ajoutez l’analyse du code à un référentiel. L’utilisation de la matrice de langage optimise CodeQL pour exécuter chaque analyse en parallèle. Nous recommandons que tous les flux de travail adoptent cette configuration en raison des avantages en matière de performances de la parallélisation des builds.

Si votre référentiel contient du code dans plusieurs des langages pris en charge, vous pouvez choisir les langages que vous souhaitez analyser. Il existe plusieurs raisons pour lesquelles vous pouvez souhaiter empêcher l’analyse d’un langage. Par exemple, le projet peut avoir des dépendances dans un langage autre que celui du corps principal de votre code, et vous préférerez peut-être ne pas voir les alertes pour ces dépendances.

Si votre workflow utilise la matrice des langages, CodeQL est codé en dur pour analyser seulement les langages de la matrice. Pour modifier les langages que vous souhaitez analyser, modifiez la valeur de la variable de la matrice. Vous pouvez supprimer un langage pour empêcher son analyse ou vous pouvez ajouter un langage qui n’était pas présent dans le dépôt lors de la configuration de l’analyse du code. Par exemple, si le dépôt ne contenait au départ que du code JavaScript quand l’analyse du code a été configurée et que vous avez ajouté plus tard du code Python, vous devrez ajouter python à la matrice.

jobs:
  analyze:
    name: Analyze
    ...
    strategy:
      fail-fast: false
      matrix:
        language: ['javascript', 'python']

Si votre flux de travail ne contient pas de matrice appelée langage, CodeQL est configuré pour exécuter l’analyse de manière séquentielle. Si vous ne spécifiez pas de langages dans le workflow, CodeQL détecte et tente automatiquement d’analyser les langages pris en charge dans le dépôt. Si vous souhaitez choisir les langages à analyser, sans utiliser de matrice, vous pouvez utiliser le paramètre langages sous l’action init.

- uses: github/codeql-action/init@v1
  with:
    languages: cpp, csharp, python

Étapes de build personnalisées pour l’analyse du code

Pour les langages compilés pris en charge, vous pouvez utiliser l’action de build automatique dans le flux de travail d’analyse CodeQL pour générer votre code. Ceci vous évite de devoir spécifier des commandes de build explicites pour C/C++, C# et Java. CodeQL exécute également une build pour les projets Go afin de configurer le projet. Toutefois, contrairement aux autres langages compilés, tous les fichiers Go du référentiel sont extraits, pas seulement ceux qui sont générés. Vous pouvez utiliser des commandes de build personnalisées pour ne pas extraire les fichiers Go que la build n’utilise pas.

Ajouter des étapes de build pour un langage compilé

Si le code C/C++, C# ou Java de votre référentiel possède un processus de build non standard, autobuild peut échouer. Vous devrez supprimer l’étape autobuild du flux de travail et ajouter manuellement les étapes de build.

Après avoir supprimé l’étape autobuild, supprimez les marques de commentaire de l’étape d’exécution et ajoutez des commandes de build qui conviennent à votre référentiel. L’étape d’exécution du flux de travail exécute des programmes en ligne de commande à l’aide de l’interpréteur de commandes 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

Si votre référentiel contient plusieurs langages compilés, vous pouvez spécifier des commandes de build spécifiques à un langage. Par exemple, si votre dépôt contient du code C/C++, C# et Java, et que autobuild génère correctement le code C/C++ et C#, mais échoue à générer le code Java, vous pouvez utiliser la configuration suivante dans votre workflow après l’étape init. Cela spécifie les étapes de build pour Java tout en continuant à utiliser autobuild pour C/C++ et C# :

- if: matrix.language == 'cpp' || matrix.language == 'csharp'
  name: Autobuild
  uses: github/codeql-action/autobuild@v1

- if: matrix.language == 'java'
  name: Build Java
  run: |
    make bootstrap
    make release