Authentification auprĂšs des GitHub Container registries
Vous pouvez publier des packs et télécharger des packs privés en vous authentifiant auprÚs du GitHub Container registry approprié.
Vous pouvez vous authentifier auprĂšs de Container registry de deux maniĂšres :
- Passer lâoption
--github-auth-stdin
Ă CodeQL CLI, puis fournir un jeton GitHub Apps ou un personal access token via une entrĂ©e standard. - DĂ©finir la variable dâenvironnement
GITHUB_TOKEN
sur un jeton GitHub Apps ou un personal access token.
Configuration du fichier qlpack.yml
avant la publication
Vous pouvez vérifier et modifier les détails de configuration de votre pack CodeQL avant la publication. Ouvrez le fichier qlpack.yml
dans lâĂ©diteur de texte de votre choix.
library: # set to true if the pack is a library. Set to false or omit for a query pack
name: <scope>/<pack>
version: <x.x.x>
description: <Description to publish with the package>
defaultSuite: # optional, one or more queries in the pack to run by default
- query: <relative-path>/query-file>.ql
defaultSuiteFile: default-queries.qls # optional, a pointer to a query-suite in this pack
license: # optional, the license under which the pack is published
dependencies: # map from CodeQL pack name to version range
-
name:
doit avoir le format<scope>/<pack>
, oĂč<scope>
est lâorganisation GitHub dans laquelle vous allez publier et<pack>
est le nom du pack. -
Un maximum dâune
defaultSuite
ou dâundefaultSuiteFile
est autorisĂ©. Il existe deux façons diffĂ©rentes de dĂ©finir une suite de requĂȘtes par dĂ©faut Ă exĂ©cuter : la premiĂšre en spĂ©cifiant des requĂȘtes directement dans le fichier qlpack.yml et la seconde en spĂ©cifiant une suite de requĂȘtes dans le pack.
En cours dâexĂ©cution codeql pack publish
Quand vous ĂȘtes prĂȘt Ă publier un pack dans GitHub Container registry, vous pouvez exĂ©cuter la commande suivante Ă la racine du rĂ©pertoire du pack :
codeql pack publish
Le package publiĂ© sâaffiche dans la section des packages de lâorganisation GitHub spĂ©cifiĂ©e par lâĂ©tendue dans le fichier qlpack.yml
.
Remarque
Si vous publiez des packs de modĂšles sur les GitHub Container registry afin dâĂ©tendre la couverture Ă tous les rĂ©fĂ©rentiels dâune organisation dans le cadre dâune configuration dâinstallation par dĂ©faut, vous devez vous assurer que les rĂ©fĂ©rentiels exĂ©cutant lâanalyse du code peuvent accĂ©der Ă ces packs de modĂšles. Pour plus dâinformations, consultez « Modification de la configuration dâinstallation par dĂ©faut » et « Configuration du contrĂŽle dâaccĂšs et de la visibilitĂ© dâun package ».
En cours dâexĂ©cution codeql pack download <scope>/<pack>
Pour exĂ©cuter un pack créé par quelquâun dâautre, vous devez dâabord le tĂ©lĂ©charger en exĂ©cutant la commande suivante :
codeql pack download <scope>/<pack>@x.x.x
<scope>
: nom de lâorganisation GitHub Ă partir de laquelle vous allez tĂ©lĂ©charger.<pack>
: nom du pack que vous voulez télécharger.@x.x.x
: numĂ©ro de version facultatif. Sâil est omis, câest la derniĂšre version qui est tĂ©lĂ©chargĂ©e.
Cette commande accepte des arguments pour plusieurs packs.
Si vous Ă©crivez des scripts qui spĂ©cifient un numĂ©ro de version particulier dâun pack de requĂȘtes Ă tĂ©lĂ©charger, gardez Ă lâesprit que quand vous mettez Ă jour votre version de CodeQL vers une version plus rĂ©cente, il peut aussi ĂȘtre nĂ©cessaire de passer Ă une version plus rĂ©cente du pack de requĂȘtes. Les versions plus rĂ©centes de CodeQL peuvent prĂ©senter des performances dĂ©gradĂ©es quand elles sont utilisĂ©es avec des packs de requĂȘtes qui ont Ă©tĂ© Ă©pinglĂ©s Ă une version trĂšs ancienne. Pour plus dâinformations, consultez « Ă propos de la compatibilitĂ© des packs CodeQL ».
Utilisation dâun pack CodeQL pour analyser une base de donnĂ©es CodeQL
Pour analyser une base de données CodeQL avec un pack CodeQL, exécutez la commande suivante :
codeql database analyze <database> <scope>/<pack>@x.x.x:<path>
<database>
: base de données CodeQL à analyser.<scope>
: nom de lâorganisation GitHub sur laquelle le pack est publiĂ©.<pack>
: nom du pack que vous utilisez.@x.x.x
: numĂ©ro de version facultatif. Sâil est omis, câest la derniĂšre version qui est utilisĂ©e.:<path>
: chemin facultatif dâune requĂȘte, dâun rĂ©pertoire ou dâune suite de requĂȘtes. Sâil est omis, câest la suite de requĂȘtes par dĂ©faut du pack qui est utilisĂ©e.
La commande analyze
exécute la suite par défaut des packs CodeQL spécifiés. Vous pouvez spécifier plusieurs packs CodeQL à utiliser pour analyser une base de données CodeQL. Par exemple :
codeql <database> analyze <scope>/<pack> <scope>/<other-pack>
Remarque
La commande codeql pack download
stocke le pack quâelle tĂ©lĂ©charge Ă un emplacement interne qui nâest pas destinĂ© Ă la modification locale. Un comportement inattendu (et difficile Ă rĂ©soudre) peut se produire si le pack est modifiĂ© aprĂšs le tĂ©lĂ©chargement. Pour plus dâinformations sur les packs de personnalisation, consultez CrĂ©ation et utilisation de packs CodeQL.
à propos de la compatibilité des packs CodeQL
Quand un pack de requĂȘtes est publiĂ©, il inclut des reprĂ©sentations prĂ©compilĂ©es de toutes les requĂȘtes quâil contient. Ces requĂȘtes prĂ©compilĂ©es sâexĂ©cutent en gĂ©nĂ©ral beaucoup plus vite que le temps nĂ©cessaire pour compiler intĂ©gralement la source QL pendant lâanalyse. Cependant, les requĂȘtes prĂ©compilĂ©es dĂ©pendent aussi de certains Ă©lĂ©ments internes de lâĂ©valuateur QL : si la version de CodeQL qui effectue lâanalyse est trop diffĂ©rente de la version qui a exĂ©cutĂ© codeql pack publish
, il peut donc ĂȘtre nĂ©cessaire de compiler les requĂȘtes Ă partir de la source au lieu de le faire pendant lâanalyse. La recompilation se produit automatiquement et nâaffecte pas les rĂ©sultats de lâanalyse, mais elle peut nĂ©anmoins la ralentir considĂ©rablement.
On peut gĂ©nĂ©ralement supposer que si un pack est publiĂ© avec une version donnĂ©e de CodeQL, les requĂȘtes prĂ©compilĂ©es quâil contient peuvent ĂȘtre utilisĂ©es directement par les versions ultĂ©rieures de CodeQL dĂšs lors quâil nây a pas plus de 6 mois entre les dates de publication. Nous ferons des efforts raisonnables pour maintenir la compatibilitĂ© des nouvelles versions plus longtemps, mais nous ne pouvons pas le garantir.
On peut Ă©galement supposer quâun pack publiĂ© par la derniĂšre version publique de CodeQL sera utilisable par la version de CodeQL utilisĂ©e par le code scanning et GitHub Actions, mĂȘme sâil sâagit souvent dâune version lĂ©gĂšrement plus ancienne.
En tant quâutilisateur dâun pack de requĂȘtes publiĂ©, vous pouvez vĂ©rifier que CodeQL utilise les requĂȘtes prĂ©compilĂ©es quâil contient en inspectant la sortie du terminal provenant dâune analyse qui utilise le pack de requĂȘtes. Sâil contient des lignes ressemblant Ă ce qui suit, câest que les requĂȘtes prĂ©compilĂ©es ont Ă©tĂ© utilisĂ©es avec succĂšs :
[42/108] Loaded /long/path/to/query/Filename.qlx.
Cependant, si elles ressemblent plutĂŽt Ă ce qui suit, câest que lâutilisation des requĂȘtes prĂ©compilĂ©es a Ă©chouĂ© :
Compiling query plan for /long/path/to/query/Filename.ql.
[42/108 comp 25s] Compiled /long/path/to/query/Filename.ql.
Les rĂ©sultats de lâanalyse seront nĂ©anmoins corrects dans ce cas, mais pour obtenir des performances optimales, vous devrez peut-ĂȘtre effectuer une mise Ă niveau vers une version plus rĂ©cente de CodeQL CLI CLI et/ou du pack de requĂȘtes.
Si vous publiez des packs de requĂȘtes sur le Container registry sur GitHub.com pour que dâautres utilisateurs les utilisent, nous vous recommandons dâutiliser une version rĂ©cente de CodeQL pour exĂ©cuter codeql pack publish
, et de publier une nouvelle version de votre pack avec une version mise Ă jour de CodeQL avant que la version que vous avez utilisĂ©e ne soit plus ancienne de 6 mois. De cette façon, vous pouvez garantir que les utilisateurs de votre pack qui conservent leur CodeQL Ă jour bĂ©nĂ©ficieront des requĂȘtes prĂ©compilĂ©es dans votre pack.
Si vous publiez des packs de requĂȘtes avec lâintention de les utiliser sur une installation de GitHub Enterprise Server qui utilise ses fichiers binaires CodeQL en bundle, utilisez la mĂȘme version de CodeQL pour exĂ©cuter codeql pack publish
. Les versions plus rĂ©centes peuvent produire des requĂȘtes prĂ©compilĂ©es que la version de GitHub Enterprise Server peut ne pas reconnaĂźtre. Votre administrateur GitHub Enterprise Server peut choisir de mettre Ă niveau pĂ©riodiquement vers une version plus rĂ©cente de CodeQL. Si câest le cas, suivez leur exemple.
Ă propos des fichiers qlpack.yml
Durant lâexĂ©cution de commandes liĂ©es aux requĂȘtes, CodeQL recherche dâabord les fichiers qlpack.yml
dans les rĂ©pertoires frĂšres du rĂ©pertoire dâinstallation (et leurs sous-rĂ©pertoires).
Ensuite, il recherche dans le cache de package les packs CodeQL qui ont Ă©tĂ© tĂ©lĂ©chargĂ©s. Cela signifie que quand vous dĂ©veloppez des requĂȘtes localement, les packages locaux dans le rĂ©pertoire dâinstallation remplacent les packages du mĂȘme nom dans le cache de package pour que vous puissiez tester vos modifications locales.
Les métadonnées de chaque fichier qlpack.yml
indiquent Ă CodeQL comment compiler les requĂȘtes dans le pack, les bibliothĂšques dont dĂ©pend le pack et oĂč trouver les dĂ©finitions des suites de requĂȘtes.
Le contenu du pack CodeQL (requĂȘtes ou bibliothĂšques utilisĂ©es dans lâanalyse CodeQL) est inclus dans le mĂȘme rĂ©pertoire que qlpack.yml
ou dans ses sous-répertoires.
Le répertoire contenant le fichier qlpack.yml
sert de répertoire racine pour le contenu du pack CodeQL. Autrement dit, pour tous les fichiers .ql
et .qll
du pack, CodeQL rĂ©sout toutes les instructions dâimportation relatives au rĂ©pertoire contenant le fichier qlpack.yml
Ă la racine du pack.
Propriétés qlpack.yml
Les propriétés suivantes sont prises en charge dans les fichiers qlpack.yml
.
name
-
Nécessaire pour tous les packs.
-
DĂ©finit lâĂ©tendue du pack, oĂč le pack CodeQL est publiĂ© et le nom du pack dĂ©fini avec des caractĂšres alphanumĂ©riques et des traits dâunion. Elle doit ĂȘtre unique, car CodeQL ne peut pas faire la diffĂ©rence entre des packs CodeQL ayant des noms identiques. Utilisez le nom du pack pour spĂ©cifier les requĂȘtes Ă exĂ©cuter Ă lâaide de
database analyze
et pour définir des dépendances entre les packs CodeQL (consultez les exemples ci-dessous). Par exemple :name: octo-org/security-queries
version
-
Nécessaire pour tous les packs publiés.
-
Définit une version sémantique pour ce pack CodeQL, qui doit respecter la spécification SemVer v2.0.0. Par exemple :
version: 0.0.0
dataExtensions
- Nécessaire pour les packs de modÚles.
- Prend une liste de modĂšles Glob qui spĂ©cifie l'emplacement des fichiers d'extension de donnĂ©es par rapport Ă la racine du pack de requĂȘtes ou du pack de bibliothĂšques.
dependencies
-
NĂ©cessaire pour les packs de requĂȘtes et de bibliothĂšques qui dĂ©finissent des dĂ©pendances de package CodeQL sur dâautres packs. Les packs de modĂšles ne peuvent pas dĂ©finir de dĂ©pendances et utilisent
extensionTargets
Ă la place. -
Définit un mappage entre les références de pack et la plage de versions sémantiques compatible avec ce pack. Prise en charge pour les versions v2.6.0 et ultérieures de CodeQL CLI. Par exemple :
dependencies: codeql/cpp-all: ^0.0.2
Si vous nâĂȘtes pas sĂ»r ou que nâimporte quelle version peut ĂȘtre utilisĂ©e, vous pouvez utiliser
"*"
, ce qui indique que toute version de cette dépendance sont compatibles avec ce pack. Dans la pratique, cela se résout généralement en la version publiée la plus élevée de la dépendance.Il existe un espace réservé de version spécial,
${workspace}
, qui indique que ce pack CodeQL dĂ©pend de la version de la dĂ©pendance qui est dans le mĂȘme espace de travail. Pour plus dâinformations, consultez « Ă propos des espaces de travail CodeQL ».
defaultSuiteFile
-
NĂ©cessaire pour les packs qui exportent un ensemble de requĂȘtes par dĂ©faut Ă exĂ©cuter.
-
DĂ©finit le chemin dâaccĂšs Ă un fichier de suites de requĂȘtes par rapport Ă la racine du package, contenant toutes les requĂȘtes exĂ©cutĂ©es par dĂ©faut lorsque ce pack est passĂ© Ă la commande
codeql database analyze
. Prise en charge Ă partir de la version v2.6.0 de lâinterface CLI. Un seuldefaultSuiteFile
oudefaultSuite
peut ĂȘtre dĂ©fini. Par exemple :defaultSuiteFile: cpp-code-scanning.qls
defaultSuite
-
NĂ©cessaire pour les packs qui exportent un ensemble de requĂȘtes par dĂ©faut Ă exĂ©cuter.
-
DĂ©finit une suite de requĂȘtes inlined contenant toutes les requĂȘtes exĂ©cutĂ©es par dĂ©faut quand ce pack est transfĂ©rĂ© Ă la commande
codeql database analyze
. Prise en charge Ă partir de la version v2.6.0 de lâinterface CLI. Un seuldefaultSuiteFile
oudefaultSuite
peut ĂȘtre dĂ©fini. Par exemple :defaultSuite: queries: . exclude: precision: medium
extensionTargets
- Nécessaire pour les packs de modÚles.
- DĂ©clare Ă quels packs de requĂȘtes s'appliquent les extensions du pack de modĂšles. Le pack d'extension injectera ses extensions de donnĂ©es dans chaque pack nommĂ© dans lâensemble de clĂ©s
extensionTargets
, si le pack se situe dans la plage de versions spécifiée et s'il est utilisé dans l'évaluation.
groups
-
facultatif.
-
DĂ©finit des regroupements logiques de packs dans un espace de travail CodeQL. Lâutilisation de groupes est un moyen dâappliquer des opĂ©rations de pack Ă des sous-ensembles de packs dans un espace de travail. Par exemple, le pack suivant est dĂ©fini comme faisant partie des groupes
java
etexperimental
:groups: - java - experimental
LâexĂ©cution de
codeql pack publish --groups java,-experimental
publie tous les packs dans le groupejava
, Ă lâexception des packsexperimental
. Vous pouvez exécuter la commandecodeql pack ls --groups [-]<group>[,[-]<group>...]
pour rĂ©pertorier les packs dans un espace de travail qui correspondent Ă lâensemble spĂ©cifiĂ© de groupes.Un pack CodeQL dans lâespace de travail donnĂ© est inclus dans la liste si :
- Il se trouve dans au moins un des groupes citĂ©s sans signe moins (cette condition est automatiquement remplie en lâabsence de groupe sans signe moins).
- Il ne se trouve dans aucun groupe listé avec un signe moins.
library
-
Nécessaire pour les packs de bibliothÚques.
-
DĂ©finit une valeur boolĂ©enne qui indique si ce pack est un pack de bibliothĂšques. Les packs de bibliothĂšques ne contiennent pas de requĂȘte et ne sont pas compilĂ©s. Les packs de requĂȘtes peuvent ignorer ce champ ou le dĂ©finir explicitement sur
false
. Par exemple :library: true
suites
- Facultative pour les packs qui dĂ©finissent des suites de requĂȘtes. Cela permet aux utilisateurs dâexĂ©cuter des suites de requĂȘtes stockĂ©es dans le rĂ©pertoire spĂ©cifiĂ© en spĂ©cifiant le nom du pack, sans fournir le chemin complet.
- Actuellement pris en charge uniquement pour les packs de requĂȘtes standard inclus dans le pack CLI CodeQL.
- Cette option nâest pas prise en charge pour les packs CodeQL tĂ©lĂ©chargĂ©s Ă partir du registre de conteneurs GitHub.
tests
-
Facultative pour les packs contenant des tests CodeQL. Ignorée pour les packs sans tests.
-
DĂ©finit le chemin dâun rĂ©pertoire dans le pack, contenant les tests (chemin relatif par rapport au rĂ©pertoire du pack). Utilisez
.
pour spĂ©cifier lâensemble du pack. Toutes les requĂȘtes de ce rĂ©pertoire sont exĂ©cutĂ©es comme tests quandtest run
est exĂ©cutĂ© avec lâoption--strict-test-discovery
. Ces requĂȘtes sont ignorĂ©es par les dĂ©finitions de suite de requĂȘtes qui utilisent des instructionsqueries
ouqlpack
pour demander toutes les requĂȘtes dans un pack particulier. Si cette propriĂ©tĂ© est manquante,.
est utilisé. Par exemple :tests: .
extractor
-
Nécessaire pour tous les packs contenant des tests CodeQL.
-
DĂ©finit lâextracteur de langage CodeQL Ă utiliser pour lâexĂ©cution des tests CodeQL dans le pack. Pour plus dâinformations sur les tests de requĂȘtes, consultez Test de requĂȘtes personnalisĂ©es. Par exemple :
extractor: javascript-typescript
authors
-
Optionnel.
-
DĂ©finit les mĂ©tadonnĂ©es qui seront affichĂ©es sur la page de recherche relative Ă lâempaquetage dans la section des packages du compte dans lequel le pack CodeQL est publiĂ©. Par exemple :
authors: author1@github.com,author2@github.com
license
-
Optionnel.
-
DĂ©finit les mĂ©tadonnĂ©es qui seront affichĂ©es sur la page de recherche relative Ă lâempaquetage dans la section des packages du compte dans lequel le pack CodeQL est publiĂ©. Pour obtenir la liste des licences autorisĂ©es, consultez la liste des licences SPDX dans la spĂ©cification SPDX. Par exemple :
license: MIT
description
-
Optionnel.
-
DĂ©finit les mĂ©tadonnĂ©es qui seront affichĂ©es sur la page de recherche relative Ă lâempaquetage dans la section des packages du compte dans lequel le pack CodeQL est publiĂ©. Par exemple :
description: Human-readable description of the contents of the CodeQL pack.
libraryPathDependencies
-
Facultative, dépréciée. Utilisez plutÎt la propriété
dependencies
. -
PrĂ©cĂ©demment utilisĂ©e pour dĂ©finir les noms des packs CodeQL dont ce pack CodeQL dĂ©pend, sous forme de tableau. Elle permet au pack dâaccĂ©der Ă toutes les bibliothĂšques, Ă tout schĂ©ma de base de donnĂ©es et Ă toutes les suites de requĂȘtes dĂ©finis dans la dĂ©pendance. Par exemple :
libraryPathDependencies: codeql/javascript-all
dbscheme
-
Nécessaire pour les packs de langages de base uniquement.
-
DĂ©finit le chemin du schĂ©ma de base de donnĂ©es pour toutes les bibliothĂšques et requĂȘtes Ă©crites pour ce langage CodeQL (consultez lâexemple ci-dessous). Par exemple :
dbscheme: semmlecode.python.dbscheme
upgrades
-
Nécessaire pour les packs de langages de base uniquement.
-
DĂ©finit le chemin dâun rĂ©pertoire dans le pack, contenant les scripts de mise Ă niveau de base de donnĂ©es (chemin relatif par rapport au rĂ©pertoire du pack). Les mises Ă niveau de base de donnĂ©es sont utilisĂ©es en interne pour garantir quâune base de donnĂ©es créée avec une version diffĂ©rente de CodeQL CLI est compatible avec la version actuelle de lâinterface CLI. Par exemple :
upgrades: .
warnOnImplicitThis
-
facultatif. La valeur par défaut est
false
si la propriétéwarnOnImplicitThis
nâest pas dĂ©finie. -
DĂ©finit une valeur boolĂ©enne qui spĂ©cifie si le compilateur doit Ă©mettre des avertissements sur les appels de prĂ©dicat membres avec des rĂ©cepteurs dâappels implicites
this
, câest-Ă -dire sans rĂ©cepteur explicite. Disponible Ă partir de CodeQL CLI v2.13.2. Par exemple :warnOnImplicitThis: true
Ă propos des fichiers codeql-pack.lock.yml
Les fichiers codeql-pack.lock.yml
stockent les versions des dĂ©pendances transitives rĂ©solues dâun pack CodeQL. Ce fichier est créé par la commande codeql pack install
sâil nâexiste pas dĂ©jĂ et doit ĂȘtre ajoutĂ© Ă votre systĂšme de gestion de versions. La section dependencies
du fichier qlpack.yml
contient des plages de versions compatibles avec le pack. Le fichier codeql-pack.lock.yml
verrouille les dépendances sur des versions précises. Ceci garantit que quand codeql pack install
est exĂ©cutĂ© sur ce pack, les mĂȘmes versions des dĂ©pendances sont systĂ©matiquement rĂ©cupĂ©rĂ©es, mĂȘme si des versions compatibles plus rĂ©centes existent.
Par exemple, si un fichier qlpack.yml
contient les dépendances suivantes :
dependencies:
codeql/cpp-all: ^0.1.2
my-user/my-lib: ^0.2.3
other-dependency/from-source: "*"
Le contenu du fichier codeql-pack.lock.yml
ressemblera Ă ceci :
dependencies:
codeql/cpp-all:
version: 0.1.4
my-user/my-lib:
version: 0.2.4
my-user/transitive-dependency:
version: 1.2.4
La dépendance codeql/cpp-all
est verrouillée sur la version 0.1.4. La dépendance my-user/my-lib
est verrouillée sur la version 0.2.4. La dépendance my-user/transitive-dependency
, qui est une dĂ©pendance transitive et qui nâest pas spĂ©cifiĂ©e dans le fichier qlpack.yml
, est verrouillée sur la version 1.2.4. La dépendance other-dependency/from-source
est absente du fichier de verrouillage, car elle est rĂ©solue Ă partir de la source. Cette dĂ©pendance doit ĂȘtre disponible dans le mĂȘme espace de travail CodeQL que le pack. Pour plus dâinformations sur les espaces de travail CodeQL et la rĂ©solution des dĂ©pendances Ă partir de la source, consultez Ă propos des espaces de travail CodeQL.
Dans la plupart des cas, le fichier codeql-pack.lock.yml
est adaptĂ© aux packs de requĂȘtes uniquement, car les packs de bibliothĂšques ne sont pas exĂ©cutables et nâont gĂ©nĂ©ralement pas besoin que leurs dĂ©pendances transitives soient corrigĂ©es. Les packs de bibliothĂšques contenant des tests font cependant exception. Dans ce cas, le fichier codeql-pack.lock.yml
est utilisĂ© afin de garantir que les tests sont toujours exĂ©cutĂ©s avec les mĂȘmes versions de dĂ©pendances pour Ă©viter les faux Ă©checs en cas de disparitĂ© des dĂ©pendances.
Exemples de packs CodeQL personnalisés
Quand vous Ă©crivez des requĂȘtes ou des tests personnalisĂ©s, vous devez les enregistrer dans des packs CodeQL personnalisĂ©s. Par souci de simplicitĂ©, essayez dâorganiser chaque pack logiquement. Pour plus dâinformations, consultez « CrĂ©ation et utilisation de packs CodeQL ». Enregistrez les fichiers relatifs aux requĂȘtes et aux tests dans des packs distincts et, si possible, organisez les packs personnalisĂ©s dans des dossiers spĂ©cifiques pour chaque langage cible. Cette approche est particuliĂšrement utile si vous envisagez de publier vos packs CodeQL pour quâils puissent ĂȘtre partagĂ©s avec dâautres utilisateurs ou utilisĂ©s pour lâanalyse du code. Pour plus dâinformations, consultez « Ă propos de lâanalyse du code avec CodeQL ».
Packs CodeQL pour les bibliothÚques personnalisées
Un pack CodeQL personnalisĂ© contenant des bibliothĂšques C++ personnalisĂ©es sans requĂȘte ni test peut avoir un fichier qlpack.yml
contenant :
name: my-github-user/my-custom-libraries
version: 1.2.3
library: true
dependencies:
codeql/cpp-all: ^0.1.2
oĂč codeql/cpp-all
est le nom du pack CodeQL pour lâanalyse C/C++, inclus dans le dĂ©pĂŽt CodeQL. La plage de versions ^0.1.2
indique que ce pack est compatible avec la version 0.1.2
de codeql/cpp-all
et toutes les versions supérieures ou toutes les versions inférieures à 0.2.0
. Tout fichier de bibliothĂšque CodeQL (fichier avec extension .qll
) dĂ©fini dans ce pack sera disponible pour les requĂȘtes dĂ©finies dans nâimporte quel pack de requĂȘtes incluant ce pack dans son bloc de dĂ©pendances.
La propriété library
indique que ce pack est un pack de bibliothĂšques et quâil ne contient aucune requĂȘte.
Packs CodeQL pour les requĂȘtes personnalisĂ©es
Un pack CodeQL personnalisĂ© contenant des requĂȘtes et des bibliothĂšques C++ personnalisĂ©es peut avoir un fichier qlpack.yml
contenant :
name: my-github-user/my-custom-queries
version: 1.2.3
dependencies:
codeql/cpp-all: ^0.1.2
my-github-user/my-custom-libraries: ^1.2.3
oĂč codeql/cpp-all
est le nom du pack CodeQL pour lâanalyse C/C++, inclus dans le dĂ©pĂŽt CodeQL. La plage de versions ^0.1.2
indique que ce pack est compatible avec la version 0.1.2
de codeql/cpp-all
et toutes les versions supérieures ou toutes les versions inférieures à 0.2.0
. my-github-user/my-custom-libraries
est le nom dâun pack CodeQL contenant des bibliothĂšques CodeQL personnalisĂ©es pour C++. Tout fichier de bibliothĂšque CodeQL (fichier avec extension .qll
) dĂ©fini dans ce pack sera disponible pour les requĂȘtes dans le pack my-github-user/my-custom-queries
.
Packs CodeQL pour les tests personnalisés
Pour les packs CodeQL personnalisés contenant des fichiers de test, vous devez également inclure une propriété extractor
pour que la commande test run
sache comment créer les bases de données de test. Vous pouvez également spécifier la propriété tests
.
Le fichier qlpack.yml
suivant indique que my-github-user/my-query-tests
dépend de my-github-user/my-custom-queries
dont la version est ultĂ©rieure ou Ă©gale Ă 1.2.3 et antĂ©rieure Ă 2.0.0. Il dĂ©clare Ă©galement que lâinterface CLI doit utiliser lâextracteur (extractor
) Java lors de la création de bases de données de test. La ligne tests: .
déclare que tous les fichiers .ql
du pack doivent ĂȘtre exĂ©cutĂ©s en tant que tests quand codeql test run
est exĂ©cutĂ© avec lâoption --strict-test-discovery
. En général, les packs de test ne contiennent pas de propriété version
. Cela vous empĂȘche de les publier accidentellement.
name: my-github-user/my-query-tests
dependencies:
my-github-user/my-custom-queries: ^1.2.3
extractor: java-kotlin
tests: .
Pour plus dâinformations sur lâexĂ©cution des tests, consultez Test de requĂȘtes personnalisĂ©es.
Exemples de packs CodeQL dans le dépÎt CodeQL
Il existe quatre packs CodeQL principaux pour chacun des langages dans le dépÎt CodeQL :
-
Pack de bibliothĂšques de base pour le langage avec le schĂ©ma de base de donnĂ©es utilisĂ© par le langage, les bibliothĂšques CodeQL et les requĂȘtes sous
<language>/ql/lib
-
Pack de requĂȘtes de base pour le langage, qui inclut les requĂȘtes par dĂ©faut pour le langage avec leurs suites de requĂȘtes sous
<language>/ql/src
-
Tests pour les bibliothĂšques de langages de base et les requĂȘtes sous
<language>/ql/test
-
Exemples de requĂȘtes pour le langage sous
<language>/ql/examples
Pack de bibliothĂšques de base
Voici un exemple de fichier qlpack.yml
pour le pack de langages de base des bibliothĂšques dâanalyse C/C++ :
name: codeql/cpp-all
version: x.y.z-dev
dbscheme: semmlecode.cpp.dbscheme
library: true
upgrades: upgrades
Quelques remarques supplémentaires sur les propriétés suivantes :
-
library
: Indique quâil sâagit dâun pack de bibliothĂšques sans requĂȘtes exĂ©cutables. Il est uniquement destinĂ© Ă ĂȘtre utilisĂ© comme dĂ©pendance pour dâautres packs. -
dbscheme
etupgrades
: Ces propriĂ©tĂ©s sont internes Ă CodeQL CLI et doivent ĂȘtre dĂ©finies uniquement dans le pack de requĂȘtes CodeQL de base pour un langage.
Pack de requĂȘtes de base
Voici un exemple de fichier qlpack.yml
pour le pack de requĂȘtes de base des requĂȘtes dâanalyse C/C++ :
name: codeql/cpp-queries
version: x.y.z-dev
dependencies:
codeql/cpp-all: "*"
codeql/suite-helpers: "*"
suites: codeql-suites
defaultSuiteFile: codeql-suites/cpp-code-scanning.qls
Quelques remarques supplémentaires sur les propriétés suivantes :
-
dependencies
: Ce pack de requĂȘtes dĂ©pend decodeql/cpp-all
etcodeql/suite-helpers
. Ătant donnĂ© que ces dĂ©pendances sont rĂ©solues Ă partir de la source, la version du pack CodeQL avec laquelle elles sont compatibles nâa pas dâimportance. Pour plus dâinformations sur la rĂ©solution des dĂ©pendances Ă partir de la source, consultez DĂ©pendances sources. -
suites
: Indique le rĂ©pertoire contenant des suites de requĂȘtes connues. -
defaultSuiteFile
: Nom du fichier de suite de requĂȘtes par dĂ©faut utilisĂ© quand aucune suite de requĂȘtes nâest spĂ©cifiĂ©e.
Tests pour le pack CodeQL de base
Voici un exemple de fichier qlpack.yml
pour le pack de tests de base des tests dâanalyse C/C++ :
name: codeql/cpp-tests
dependencies:
codeql/cpp-all: "*"
codeql/cpp-queries: "*"
extractor: cpp
tests: .
Quelques remarques supplémentaires sur les propriétés suivantes :
-
dependencies
: Ce pack dĂ©pend des packs de bibliothĂšques et de requĂȘtes CodeQL de base pour C++. -
extractor
: SpĂ©cifie que tous les tests utiliseront le mĂȘme extracteur C++ pour crĂ©er la base de donnĂ©es pour les tests. -
tests
: SpĂ©cifie lâemplacement des tests. Dans ce cas, les tests se trouvent dans le dossier racine (et tous les sous-dossiers) du pack. -
version
: Il nâexiste aucune propriĂ©tĂ©version
pour le pack de tests. Ceci empĂȘche la publication accidentelle de packs de tests.