{"meta":{"title":"Espaces de travail CodeQL","intro":"CodeQL les espaces de travail vous permettent de développer et de gérer plusieurs packs associés CodeQL ensemble, en résolvant les dépendances entre eux directement à partir de la source.","product":"Sécurité et qualité du code","breadcrumbs":[{"href":"/fr/code-security","title":"Sécurité et qualité du code"},{"href":"/fr/code-security/concepts","title":"Concepts"},{"href":"/fr/code-security/concepts/code-scanning","title":"Analyse du code"},{"href":"/fr/code-security/concepts/code-scanning/codeql","title":"CodeQL"},{"href":"/fr/code-security/concepts/code-scanning/codeql/codeql-workspaces","title":"Espaces de travail CodeQL"}],"documentType":"article"},"body":"# Espaces de travail CodeQL\n\nCodeQL les espaces de travail vous permettent de développer et de gérer plusieurs packs associés CodeQL ensemble, en résolvant les dépendances entre eux directement à partir de la source.\n\n## À propos des CodeQL espaces de travail\n\nUn CodeQL espace de travail est généralement utilisé pour développer un ensemble de packs de bibliothèque et de requêtes qui dépendent les uns des autres. Lorsque vous utilisez un CodeQL espace de travail, tous les CodeQL packs de l’espace de travail sont disponibles en tant que *dépendances sources* entre eux lorsque vous exécutez une CodeQL commande qui résout les requêtes. Cela facilite le développement, la maintenance et la publication de plusieurs packs associés CodeQL . Pour plus d’informations sur les CodeQL packs, consultez [Personnalisation de l’analyse avec des packs CodeQL](/fr/code-security/tutorials/customize-code-scanning/customize-analysis).\n\nLes espaces de travail sont généralement stockés dans un référentiel Git unique afin que les packs associés puissent être développés et publiés ensemble.\n\n## Dépendances sources\n\nDans un CodeQL espace de travail, tous les packs inclus dans l’espace de travail sont traités comme **des dépendances sources** entre eux. Cela signifie qu’ils sont résolus directement à partir du système de fichiers local plutôt qu’à partir du cache du CodeQL package.\n\nComme les packs de l’espace de travail sont résolus à partir du code source :\n\n* Les modifications locales dans un pack sont immédiatement visibles par d’autres packs dans l’espace de travail.\n* Les dépendances trouvées dans l’espace de travail remplacent les versions dans le cache du package.\n* Les contraintes de version dans les `qlpack.yml` fichiers sont ignorées pour les dépendances d’espace de travail, car la version est déterminée par le contenu de l’espace de travail.\n\nCe comportement est particulièrement utile lors du développement de plusieurs packs associés en même temps. Par exemple:\n\n* Une dépendance n’a pas encore été publiée et existe uniquement localement.\n* Vous apportez des modifications coordonnées entre plusieurs packs et avez besoin de les résoudre les unes contre les autres lors du test.\n\nEn dehors d’un espace de travail, les dépendances sont résolues à partir du cache du package et doivent correspondre aux contraintes de version définies dans `qlpack.yml`. Dans un espace de travail, la résolution priorise le contenu source local.\n\n## CodeQL espaces de travail et résolution de requêtes\n\nLe modèle de dépendance d’espace de travail affecte la façon dont les packs sont installés et publiés.\n\n* Pendant l’installation, les dépendances trouvées dans l’espace de travail ne sont pas téléchargées dans le cache du package et ne sont pas écrites dans le `codeql-pack.lock.yml` fichier.\n* Lors de la publication, les dépendances fournies par l’espace de travail sont regroupées à l’aide de leur contenu source local plutôt que des versions du cache du package.\n\nPar exemple, l’exécution `codeql pack install` dans un répertoire pack au sein d’un espace de travail utilise toutes les dépendances trouvées dans l’espace de travail au lieu de les télécharger dans le cache du package ou de les enregistrer dans le `codeql-pack.lock.yml` fichier. Consultez « [Création et utilisation de packs CodeQL](/fr/code-security/tutorials/customize-code-scanning/create-and-work-with-codeql-packs#adding-and-installing-dependencies-on-a-codeql-pack) ».\n\n### Exemple\n\nUn CodeQL espace de travail est défini par un fichier YAML nommé `codeql-workspace.yml`. Examinons le fichier `codeql-workspace.yml` suivant :\n\n```yaml\nprovide:\n  - \"**/qlpack.yml\"\n```\n\nEt dans le pack de bibliothèques CodeQL, le fichier `qlpack.yml` suivant dans l'espace de travail :\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.0.0\n```\n\nEt dans le pack de requêtes CodeQL, le fichier `qlpack.yml` suivant dans l'espace de travail :\n\n```yaml\nname: my-company/my-queries\nversion: 1.0.0\ndependencies:\n  my-company/my-library: \"*\"\n  codeql/cpp-all: ~0.2.0\n```\n\nNotez que le `dependencies` bloc pour le CodeQL pack de requêtes, `my-company/my-queries`spécifie `\"*\"` comme version du pack de bibliothèque. Étant donné que le pack de bibliothèques est déjà défini en tant que dépendance source dans `codeql-workspace.yml`, le contenu du pack de bibliothèques est toujours résolu à partir de l’espace de travail. Toute contrainte de version que vous définissez est ignorée dans ce cas. Utiliser `\"*\"` pour les dépendances de source rend explicite que la version est héritée de l’espace de travail.\n\nQuand vous exécutez `codeql pack install` à partir du répertoire du pack de requêtes, une version appropriée de `codeql/cpp-all` est téléchargée dans le cache du package local. De plus, un fichier `codeql-pack.lock.yml` contenant la version résolue de `codeql/cpp-all` est créé. Le fichier de verrouillage ne contient pas d’entrée pour `my-company/my-library`, car il est résolu à partir de dépendances sources. Le fichier `codeql-pack.lock.yml` va ressembler à ceci :\n\n```yaml\ndependencies:\n  codeql/cpp-all:\n    version: 0.2.2\n```\n\nLorsque vous exécutez `codeql pack publish` à partir du répertoire du pack de requêtes, la `codeql/cpp-all` dépendance du cache du package et celle `my-company/my-library` de l’espace de travail sont regroupées `my-company/my-queries` et publiées dans le GitHub registre de conteneurs.\n\n## Exemple de `codeql-workspace.yml` fichier\n\nUn CodeQL espace de travail est défini par un fichier YAML nommé `codeql-workspace.yml`. Ce fichier contient un bloc `provide` et éventuellement des blocs `ignore` et `registries`.\n\n* Le bloc `provide` contient une liste de motifs glob qui définissent les packs CodeQL disponibles dans l’espace de travail.\n\n* Le bloc `ignore` contient une liste de motifs glob qui définissent les packages CodeQL qui ne sont pas disponibles dans l’espace de travail.\n\n* Le `registries` bloc contient une liste d’URL GHES et de modèles de package qui contrôlent le registre de conteneurs utilisé pour la publication CodeQL de packs. Consultez « [Publication et utilisation de packs CodeQL](/fr/code-security/how-tos/find-and-fix-code-vulnerabilities/scan-from-the-command-line/publish-and-use-packs) ».\n\nChaque entrée de la section `provide` ou `ignore` doit correspondre à l’emplacement d’un fichier `qlpack.yml`. Tous les modèles Glob sont définis par rapport au répertoire qui contient le fichier d’espace de travail. Pour obtenir la liste des modèles acceptés dans ce fichier, consultez [@actions/glob](https://github.com/actions/toolkit/tree/main/packages/glob#patterns).\n\nPar exemple, le fichier suivant `codeql-workspace.yml` définit un espace de travail qui contient tous les CodeQL packs récursifs trouvés dans le `codeql-packs` répertoire, à l’exception des packs du `experimental` répertoire. Le bloc `registries` spécifie que les packs `codeql/\\*` doivent être téléchargés à partir de `https://ghcr.io/v2/`, qui est le registre de conteneurs par défaut de GitHub. Tous les autres packs doivent être téléchargés depuis le registre situé à l’adresse `GHE_HOSTNAME` et publiés sur celui-ci.\n\n```yaml\nprovide:\n  - \"*/codeql-packs/**/qlpack.yml\"\nignore:\n  - \"*/codeql-packs/**/experimental/**/qlpack.yml\"\n\nregistries:\n - packages: 'codeql/*'\n   url: https://ghcr.io/v2/\n\n - packages: '*'\n   url: https://containers.GHE_HOSTNAME/v2/\n```\n\nVous pouvez répertorier les packs inclus dans un espace de travail en s’exécutant `codeql pack ls` dans le répertoire de l’espace de travail.\n\n## Utilisation de `${workspace}` en tant que plage de versions dans les fichiers `qlpack.yml`\n\nLes packs CodeQL d'un espace de travail peuvent utiliser les espaces réservés spéciaux de plage de versions `${workspace}`, `~${workspace}` et `^${workspace}`. Ces espaces réservés indiquent que ce pack dépend de la version du pack spécifié qui se trouve actuellement dans l’espace de travail. Cet espace réservé est généralement utilisé pour les dépendances à l’intérieur des packs de bibliothèque afin de garantir que, lorsqu’ils sont publiés, les dépendances dans leur fichier `qlpack.yml` reflètent l’état de l’espace de travail au moment de leur publication.\n\n### Exemple\n\nTenez compte des deux packs de bibliothèque suivants dans le même espace de travail :\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.2.3\ndependencies:\n  my-company/my-library2: ${workspace}\n```\n\n```yaml\nname: my-company/my-library2\nlibrary: true\nversion: 4.5.6\n```\n\nLorsque `my-company/my-library` est publié dans le registre de conteneurs GitHub, la version de la dépendance `my-company/my-library2` dans le fichier `qlpack.yml` publié sera indiquée comme `4.5.6`.\n\nDe même, si la dépendance est `my-company/my-library2: ^${workspace}` dans le pack source, puis que le pack est publié, la version de la `my-company/my-library2` dépendance dans le fichier `qlpack.yml` publié est écrite en tant que `^4.5.6`, indiquant que les versions `>= 4.5.6` et `< 5.0.0` sont toutes compatibles avec ce pack de bibliothèque.\n\nSi la dépendance est `my-company/my-library2: ~${workspace}` dans le pack source, puis que le pack est ensuite publié, la version de la dépendance `my-company/my-library2` dans le fichier `qlpack.yml` publié est écrite en tant que `~4.5.6`, indiquant que les versions `>= 4.5.6` et `< 4.6.0` sont toutes compatibles avec ce pack de bibliothèque."}