{"meta":{"title":"Création et utilisation de packs CodeQL","intro":"Vous pouvez utiliser des packs CodeQL pour créer, partager, s'appuyer sur et exécuter des requêtes et des bibliothèques CodeQL.","product":"Sécurité et qualité du code","breadcrumbs":[{"href":"/fr/code-security","title":"Sécurité et qualité du code"},{"href":"/fr/code-security/tutorials","title":"Tutorials"},{"href":"/fr/code-security/tutorials/customize-code-scanning","title":"Personnaliser l’analyse du code"},{"href":"/fr/code-security/tutorials/customize-code-scanning/creating-and-working-with-codeql-packs","title":"Création et utilisation de packs CodeQL"}],"documentType":"article"},"body":"# Création et utilisation de packs CodeQL\n\nVous pouvez utiliser des packs CodeQL pour créer, partager, s'appuyer sur et exécuter des requêtes et des bibliothèques CodeQL.\n\n## À propos des CodeQL packs et des CodeQL CLI\n\n```\n          CodeQL les packs sont utilisés pour créer, partager, dépendre et exécuter CodeQL des requêtes et des bibliothèques.\n```\n\nVous pouvez utiliser la commande `pack` dans CodeQL CLI pour créer des paquets CodeQL, ajouter des dépendances aux paquets, et installer ou mettre à jour les dépendances. Vous pouvez également publier et télécharger les packs à l’aide de la commande `pack`.\n\n## Création d’un CodeQL pack\n\nVous pouvez créer un CodeQL pack en exécutant la commande suivante à partir de la racine de dépôt de votre projet :\n\n```shell\ncodeql pack init <scope>/<pack>\n```\n\nVous devez spécifier :\n\n* `<scope>`: nom de l’organisation GitHub ou du compte d’utilisateur sur lequel vous allez publier.\n\n* `<pack>` : nom du pack que vous créez.\n\nLa `codeql pack init` commande crée la structure de répertoires et les fichiers de configuration d’un CodeQL pack. Par défaut, la commande crée un pack de requêtes. Si vous souhaitez créer un pack de bibliothèques, vous devez modifier le fichier `qlpack.yml` pour déclarer explicitement le fichier en tant que pack de bibliothèques en incluant la propriété `library:true`.\n\n## Création d’un CodeQL pack de modèles\n\n> \\[!NOTE]\n> Les packs de modèles CodeQL sont actuellement en préversion publique et peuvent faire l’objet de modifications. Les packs de modèles sont pris en charge pour l’analyse C/C++, C#, Java/Kotlin, Python, Ruby et Rust.\n>\n> L’éditeur de modèle CodeQL de l’extension CodeQL pour Visual Studio Code prend en charge les dépendances de modélisation pour  C#, Java/Kotlin, Python et Ruby.\n\nLes packs de modèles peuvent être utilisés pour développer code scanning l’analyse pour reconnaître les bibliothèques et les frameworks qui ne sont pas pris en charge par défaut. Les packs de modèles utilisent des extensions de données, qui sont implémentées en tant que YAML et décrivent comment ajouter des données pour les nouvelles dépendances. Lorsqu’un pack de modèles est spécifié, les extensions de données de ce pack seront ajoutées automatiquement à l’analyse code scanning . Pour plus d’informations sur les CodeQL packs de modèles et les extensions de données, consultez [Utiliser l'éditeur de modèles CodeQL](/fr/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/using-the-codeql-model-editor).\n\nUn pack de modèles est un ensemble CodeQL avec les caractéristiques suivantes dans le fichier `qlpack.yml` :\n\n* Il définit `library: true`.\n* Il n’a aucune dépendance.\n* Il a un ou plusieurs `extensionTargets`.\n* Il a une propriété `dataExtensions` qui pointe vers un ou plusieurs fichiers d’extension de données.\n\nUn pack de modèles injectera ses extensions de données spécifiées dans chaque pack de requêtes nommé dans `extensionTargets`, s’il se trouve dans la plage de versions spécifiée. Par exemple:\n\n```yaml\nname: my-repo/my-java-model-pack\nversion: 1.2.3\nextensionTargets:\n  codeql/java-all: ~1.2.3\n  codeql/util: ~4.5.6\ndataExtensions:\n  - models/**/*.yml\n```\n\nDans cet exemple, le pack de modèles injectera toutes les extensions de données dans `models/**/` dans un pack de requêtes `codeql/java-all` qui se trouve dans une version allant de `1.2.3` jusqu’à et y compris `1.3.0`, et un pack de requêtes `codeql/util` qui se trouve dans une version allant de `4.5.6` jusqu’à et y compris `4.6.0`. Pour plus d’informations, consultez [Utilisation du contrôle de version sémantique](https://docs.npmjs.com/about-semantic-versioning#using-semantic-versioning-to-specify-update-types-your-package-can-accept) dans la documentation npm ainsi que la [Spécification du contrôle de version sémantique](https://semver.org/).\n\nUne fois que vous avez créé un pack de modèles, vous pouvez le publier de la même façon que d’autres CodeQL packs. Pour plus d’informations, consultez « [Publication et utilisation de packs CodeQL](/fr/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs) ». Vous pouvez ensuite utiliser des packs de modèles publiés dans une code scanning analyse avec l’option `--model-packs` . Pour plus d’informations, consultez « [Personnalisation de l’analyse avec des packs CodeQL](/fr/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs#using-model-packs-to-analyze-calls-to-custom-dependencies) ».\n\n## Ajout et installation de dépendances sur un CodeQL pack\n\n> \\[!NOTE]\n> Cela n’est pris en charge que pour les packs de requête et de bibliothèque CodeQL.\n\nVous pouvez ajouter des dépendances pour les packs à l’aide de la commande `codeql pack add`. Vous devez spécifier l’étendue, le nom et (éventuellement) une plage de versions compatibles.\n\n```shell\ncodeql pack add <scope>/<name>@x.x.x <scope>/<other-name>\n```\n\nSi vous ne spécifiez pas de plage de versions, la dernière version est ajoutée. Dans le cas contraire, la version la plus récente répondant à la plage demandée sera ajoutée.\n\nCette commande met à jour le fichier `qlpack.yml` avec les dépendances demandées et les télécharge dans le cache du package. Notez que cette commande va changer la mise en forme du fichier et supprimer tous les commentaires.\n\nVous pouvez également modifier manuellement le fichier `qlpack.yml` pour inclure des dépendances et installer les dépendances avec la commande :\n\n```shell\ncodeql pack install\n```\n\nCette commande télécharge toutes les dépendances dans le cache partagé sur le disque local.\n\n> \\[!NOTE]\n>\n> * L’exécution des commandes `codeql pack add` et `codeql pack install` génère ou met à jour le fichier `codeql-pack.lock.yml`. Ce fichier doit être archivé dans la gestion de versions. Le fichier `codeql-pack.lock.yml` contient les numéros de version exacts utilisés par le pack. Pour plus d’informations, consultez [À propos des fichiers codeql-pack.lock.yml](/fr/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs##about-codeql-packlockyml-files).\n> * Par défaut, `codeql pack install` installera les dépendances à partir du Container registry sur GitHub.com. Vous pouvez installer des dépendances à partir d’un GitHub Enterprise ServerContainer registry fichier en créant un `qlconfig.yml` fichier. Pour plus d’informations, consultez [Publication et utilisation de packs CodeQL](/fr/enterprise-server@3.20/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs) dans la GitHub Enterprise Server documentation.\n\n## Organisation de la structure de répertoire d’un CodeQL pack\n\nUn CodeQL pack doit contenir un fichier appelé `qlpack.yml` dans son répertoire racine. Dans le `qlpack.yml` fichier, le `name:` champ doit avoir une valeur qui suit le format de `<scope>/<pack>`, où `<scope>` se trouve l’organisation ou le GitHub compte d’utilisateur sur lequel le pack sera publié et `<pack>` est le nom du pack.\n\nEn outre, les packs de requête et les packs de bibliothèque avec tests CodeQL contiennent un fichier `codeql-pack.lock.yml` contenant les dépendances résolues du pack. Ce fichier est généré durant un appel à la commande `codeql pack install`, n’est pas destiné à être modifié manuellement et doit être ajouté à votre système de gestion de versions.\n\nLes autres fichiers et répertoires au sein du pack doivent être organisés logiquement. Par exemple, en général :\n\n* Les requêtes sont organisées en répertoires pour des catégories spécifiques.\n* Les requêtes pour des produits, des bibliothèques et des infrastructures spécifiques sont organisées dans leurs propres répertoires de niveau supérieur.\n\n## Personnalisation d’un pack téléchargé CodeQL\n\nLa méthode recommandée pour tester les modifications apportées à un pack consiste à cloner le dépôt contenant son code source.\n\nSi aucun référentiel source n’est disponible et que vous devez baser des modifications sur un pack téléchargé à partir du Container registry, sachez que ces packs ne sont pas destinés à être modifiés ou personnalisés après le téléchargement, et leur format peut changer à l’avenir sans aucun préavis. Nous vous recommandons d’effectuer les étapes suivantes après le téléchargement d’un pack si vous devez modifier le contenu :\n\n* Changez le *nom* du pack dans `qlpack.yml` afin d’éviter toute confusion avec les résultats du pack non modifié.\n\n* Supprimez tous les fichiers nommés `*.qlx` dans la structure de répertoires décompressée. Ces fichiers contiennent des versions précompilées des requêtes et, dans certaines situations CodeQL , les utiliseront en préférence pour la source QL que vous avez modifiée."}