{"meta":{"title":"Workspaces do CodeQL","intro":"CodeQL Os workspaces permitem que você desenvolva e mantenha vários pacotes relacionados CodeQL juntos, resolvendo dependências entre eles diretamente da origem.","product":"Qualidade de segurança e código","breadcrumbs":[{"href":"/pt/enterprise-cloud@latest/code-security","title":"Qualidade de segurança e código"},{"href":"/pt/enterprise-cloud@latest/code-security/concepts","title":"Concepts"},{"href":"/pt/enterprise-cloud@latest/code-security/concepts/code-scanning","title":"Varredura de código"},{"href":"/pt/enterprise-cloud@latest/code-security/concepts/code-scanning/codeql","title":"CodeQL"},{"href":"/pt/enterprise-cloud@latest/code-security/concepts/code-scanning/codeql/codeql-workspaces","title":"Workspaces do CodeQL"}],"documentType":"article"},"body":"# Workspaces do CodeQL\n\nCodeQL Os workspaces permitem que você desenvolva e mantenha vários pacotes relacionados CodeQL juntos, resolvendo dependências entre eles diretamente da origem.\n\n## Sobre CodeQL espaços de trabalho\n\nUm CodeQL workspace normalmente é usado para desenvolver um conjunto de pacotes de biblioteca e consulta que dependem uns dos outros. Quando você usa um CodeQL workspace, todos os CodeQL pacotes no workspace ficam disponíveis como *dependências de origem* uns para os outros quando você executa um CodeQL comando que resolve consultas. Isso facilita o desenvolvimento, a manutenção e a publicação de vários pacotes relacionados CodeQL . Para obter mais informações sobre CodeQL pacotes, consulte [Como personalizar a análise com pacotes CodeQL](/pt/enterprise-cloud@latest/code-security/tutorials/customize-code-scanning/customize-analysis).\n\nOs workspaces geralmente são armazenados em um único repositório Git para que os pacotes relacionados possam ser desenvolvidos e publicados juntos.\n\n## Dependências de fonte\n\nEm um CodeQL workspace, todos os pacotes incluídos no workspace são **tratados como dependências de origem** uns dos outros. Isso significa que eles são resolvidos diretamente do sistema de arquivos local e não do cache de CodeQL pacotes.\n\nPorque os pacotes de espaço de trabalho são resolvidos a partir da fonte:\n\n* As alterações locais em um pacote são imediatamente visíveis para outros pacotes no workspace.\n* As dependências encontradas no workspace substituem versões no cache do pacote.\n* Restrições de versão em arquivos `qlpack.yml` são ignoradas para dependências do espaço de trabalho, pois a versão é determinada pelo conteúdo do espaço de trabalho.\n\nEsse comportamento é particularmente útil ao desenvolver vários pacotes relacionados ao mesmo tempo. Por exemplo:\n\n* Uma dependência ainda não foi publicada e existe apenas localmente.\n* Você está fazendo alterações coordenadas em vários pacotes e precisa que elas sejam resolvidas entre si durante o teste.\n\nFora de um workspace, as dependências são resolvidas do cache do pacote e devem corresponder às restrições de versão definidas em `qlpack.yml`. Dentro de um espaço de trabalho, o processo de resolução prioriza o conteúdo de origem local.\n\n## CodeQL espaços de trabalho e resolução de consultas\n\nO modelo de dependência do workspace afeta a forma como os pacotes são instalados e publicados.\n\n* Durante a instalação, as dependências encontradas no workspace não são baixadas no cache do pacote e não são gravadas no `codeql-pack.lock.yml` arquivo.\n* Durante a publicação, as dependências fornecidas pelo espaço de trabalho são agrupadas usando seu conteúdo de origem local em vez de versões do cache de pacotes.\n\nPor exemplo, executar `codeql pack install` em um diretório de pacote dentro de um espaço de trabalho utiliza as dependências encontradas no espaço de trabalho em vez de baixá-las no cache do pacote ou gravá-las no arquivo `codeql-pack.lock.yml`. Consulte [Como criar e trabalhar com pacotes do CodeQL](/pt/enterprise-cloud@latest/code-security/tutorials/customize-code-scanning/create-and-work-with-codeql-packs#adding-and-installing-dependencies-on-a-codeql-pack).\n\n### Exemplo\n\nUm CodeQL workspace é definido por um arquivo YAML chamado `codeql-workspace.yml`. Considere o seguinte arquivo `codeql-workspace.yml`:\n\n```yaml\nprovide:\n  - \"**/qlpack.yml\"\n```\n\nE o seguinte arquivo CodeQL do pacote de biblioteca `qlpack.yml` no espaço de trabalho:\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.0.0\n```\n\nE o seguinte arquivo CodeQL do pacote de consulta `qlpack.yml` no workspace:\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\nObserve que o `dependencies` bloco do CodeQL pacote de consultas especifica `my-company/my-queries``\"*\"` como a versão do pacote de biblioteca. Como o pacote de biblioteca já está definido como uma dependência de fonte no `codeql-workspace.yml`, o conteúdo do pacote de biblioteca sempre é resolvido dentro do workspace. Qualquer restrição de versão definida será ignorada nesse caso. Usar `\"*\"` para dependências de origem torna explícito que a versão é herdada do workspace.\n\nQuando você executa `codeql pack install` do diretório do pacote de consultas, uma versão apropriada do `codeql/cpp-all` é baixada para o cache de pacote local. Além disso, um arquivo `codeql-pack.lock.yml` é criado contendo a versão resolvida do `codeql/cpp-all`. O arquivo de bloqueio não conterá uma entrada para `my-company/my-library`, pois é resolvido por meio das dependências de origem. O arquivo `codeql-pack.lock.yml` terá esta aparência:\n\n```yaml\ndependencies:\n  codeql/cpp-all:\n    version: 0.2.2\n```\n\nQuando você executa `codeql pack publish` do diretório do pacote de consultas, a dependência `codeql/cpp-all` do cache de pacotes e o `my-company/my-library` do workspace são agrupados com `my-company/my-queries` e publicados no registro de contêiner do GitHub.\n\n## Exemplo de um `codeql-workspace.yml` arquivo\n\nUm CodeQL workspace é definido por um arquivo YAML chamado `codeql-workspace.yml`. Esse arquivo contém um bloco `provide` e, opcionalmente os blocos `ignore` e `registries`.\n\n* O bloco `provide` contém uma lista de padrões glob que definem os pacotes CodeQL disponíveis no workspace.\n\n* O bloco `ignore` contém uma lista de padrões glob que definem os pacotes CodeQL que não estão disponíveis no workspace.\n\n* O bloco `registries` contém uma lista de URLs do GHES e padrões de pacote que controlam qual registro de contêineres é usado para publicar pacotes CodeQL. Consulte [Publicar e usar pacotes do CodeQL](/pt/enterprise-cloud@latest/code-security/how-tos/find-and-fix-code-vulnerabilities/scan-from-the-command-line/publish-and-use-packs).\n\nCada entrada na seção `provide` ou `ignore` precisa ser mapeada para o local de um arquivo `qlpack.yml`. Todos os padrões glob são definidos em relação ao diretório que contém o arquivo de workspace. Para ver a lista de padrões aceitos nesse arquivo, confira [@actions/glob](https://github.com/actions/toolkit/tree/main/packages/glob#patterns).\n\nPor exemplo, o arquivo a seguir `codeql-workspace.yml` define um workspace que contém todos os CodeQL pacotes recursivamente encontrados no `codeql-packs` diretório, exceto os pacotes no `experimental` diretório. O bloco `registries` especifica que os pacotes `codeql/\\*` devem ser baixados de `https://ghcr.io/v2/`, que é o registro de contêiner padrão do GitHub. Todos os outros pacotes devem ser baixados e publicados no registro em `GHE_HOSTNAME`.\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\nVocê pode listar os pacotes incluídos em um workspace executando `codeql pack ls` no diretório do workspace.\n\n## Usando `${workspace}` como um intervalo de versão em arquivos `qlpack.yml`\n\nCodeQL os pacotes de um workspace podem usar os marcadores especiais de intervalo de versão `${workspace}`, `~${workspace}` e `^${workspace}`. Esses espaços reservados indicam que esse pacote depende da versão do pacote especificado que está atualmente no espaço de trabalho. Esse espaço reservado geralmente é usado para dependências dentro de pacotes de biblioteca para garantir que, quando forem publicados, as dependências em seu arquivo `qlpack.yml` reflitam o estado do espaço de trabalho quando foram publicadas.\n\n### Exemplo\n\nConsidere os dois pacotes de bibliotecas a seguir no mesmo espaço de trabalho:\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\nQuando `my-company/my-library` for publicado no registro de contêiner GitHub, a versão da dependência `my-company/my-library2` no arquivo `qlpack.yml` publicado será escrita como `4.5.6`.\n\nDa mesma forma, se a dependência for `my-company/my-library2: ^${workspace}` no pacote de origem e, em seguida, o pacote for publicado, a versão da dependência `my-company/my-library2` no arquivo `qlpack.yml` publicado será escrita como `^4.5.6`, indicando que as versões `>= 4.5.6` e `< 5.0.0` são todas compatíveis com esse pacote de biblioteca.\n\nSe a dependência for `my-company/my-library2: ~${workspace}` no pacote de origem e, em seguida, o pacote for publicado, a versão da dependência `my-company/my-library2` no arquivo `qlpack.yml` publicado será escrita como `~4.5.6`, indicando que as versões `>= 4.5.6` e `< 4.6.0` são todas compatíveis com esse pacote de biblioteca."}