Skip to main content

Esta versão do GitHub Enterprise Server foi descontinuada em 2024-03-26. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, segurança aprimorada e novos recursos, atualize para a última versão do GitHub Enterprise Server. Para obter ajuda com a atualização, entre em contato com o suporte do GitHub Enterprise.

Como criar e trabalhar com pacotes do CodeQL

Você pode usar pacotes do CodeQL para criar, compartilhar, criar dependências e executar consultas e bibliotecas do CodeQL.

Quem pode usar esse recurso?

O CodeQL do GitHub é licenciado por usuário após a instalação. Você pode usar o CodeQL somente para determinadas tarefas sob as restrições de licença. Para obter mais informações, confira "Sobre a CLI do CodeQL".

Se você tiver uma licença do GitHub Advanced Security, poderá usar o CodeQL para análise automatizada, integração contínua e entrega contínua. Para obter mais informações, confira "Sobre a Segurança Avançada do GitHub".

Observação: a funcionalidade de gerenciamento de pacote do CodeQL, incluindo pacotes do CodeQL, está em versão beta no momento e sujeita a alterações. Durante a versão beta, os pacotes CodeQL estão disponíveis apenas usando pacotes GitHub – o Container registry. Para usar essa funcionalidade beta, instale a versão mais recente do pacote da CodeQL CLI de: https://github.com/github/codeql-action/releases.

Sobre os pacotes do CodeQL e a CodeQL CLI

Observação: este artigo descreve os recursos disponíveis com o pacote CodeQL CLI 2.12.7 incluído na versão inicial de GitHub Enterprise Server 3.8.

Se o administrador do site atualizou a versão do CodeQL CLI para uma mais recente, confira a versão GitHub Enterprise Cloud deste artigo para obter informações sobre os recursos mais recentes.

Os pacotes do CodeQL são usados para criar, compartilhar, gerar dependência e executar consultas e bibliotecas do CodeQL. Os pacotes do CodeQL contêm consultas, arquivos de biblioteca, conjuntos de consultas e metadados. Com os pacotes do CodeQL e os comandos de gerenciamento de pacotes na CodeQL CLI, você pode publicar as consultas personalizadas e integrá-las à análise de base de código.

Existem dois tipos de pacotes do CodeQL: pacotes de consultas e pacotes de bibliotecas.

  • Os pacotes de consultas foram projetados para serem executados. Quando um pacote de consultas é publicado, ele inclui todas as dependências transitivas e um cache de compilação. Isso garante a execução consistente e eficiente das consultas no pacote.

  • Os pacotes de biblioteca são projetados para serem usados por pacotes de consultas (ou outros pacotes de biblioteca) e não contêm consultas. As bibliotecas não são compiladas e não há nenhum cache de compilação incluído quando o pacote é publicado.

Você pode usar o comando pack na CodeQL CLI para criar pacotes do CodeQL, adicionar dependências a pacotes e instalar ou atualizar dependências. Você também pode publicar e baixar pacotes do CodeQL usando o comando pack. Para obter mais informações, confira "Publicar e usar pacotes do CodeQL".

Os pacotes padrão do CodeQL para todas as linguagens com suporte são publicados no Container registry. O repositório do CodeQL contém arquivos de origem dos pacotes padrão do CodeQL para todas as linguagens com suporte. Os principais pacotes de consulta, que estão incluídos no pacote da CLI do CodeQL, mas que você pode baixar de outra forma, são:

  • codeql/cpp-queries
  • codeql/csharp-queries
  • codeql/go-queries
  • codeql/java-queries
  • codeql/javascript-queries
  • codeql/python-queries
  • codeql/ruby-queries

Estrutura de pacotes do CodeQL

Um pacote do CodeQL precisa conter um arquivo chamado qlpack.yml no diretório raiz. No arquivo qlpack.yml, o campo name: precisa ter um valor que siga o formato <scope>/<pack>, em que <scope> é a organização ou a conta de usuário do GitHub em que o pacote será publicado e <pack> é o nome do pacote. Além disso, pacotes de consultas e pacotes de biblioteca com testes do CodeQL contêm um arquivo codeql-pack.lock.yml com as dependências resolvidas do pacote. Esse arquivo é gerado durante uma chamada ao comando codeql pack install, não deve ser editado manualmente e deve ser adicionado ao sistema de controle de versão.

Os outros arquivos e diretórios no pacote devem ser organizados logicamente. Por exemplo, normalmente:

  • As consultas são organizadas em diretórios para categorias específicas.

  • As consultas para produtos, bibliotecas e estruturas específicas são organizadas em seus próprios diretórios de nível superior.

Como criar um pacote do CodeQL

Você pode criar um pacote do CodeQL executando o seguinte comando na raiz de check-out do projeto:

codeql pack init <scope>/<pack>

É preciso especificar:

  • <scope>: o nome da organização do GitHub ou da conta de usuário de destino da publicação.

  • <pack>: o nome do pacote que você está criando.

O comando codeql pack init cria a estrutura de diretório e os arquivos de configuração de um pacote do CodeQL. Por padrão, o comando cria um pacote de consultas. Se você quiser criar um pacote de biblioteca, edite o arquivo qlpack.yml para declará-lo explicitamente como um pacote de biblioteca, incluindo a propriedade library:true.

Modificando um pacote QL herdado existente para criar um pacote de consultas do CodeQL

Se você já tiver um arquivo qlpack.yml, edite-o manualmente para convertê-lo em um pacote do CodeQL.

  1. Edite a propriedade name para que ela corresponda ao formato <scope>/<name>, em que <scope> é o nome da organização do GitHub ou da conta de usuário de destino da publicação.

  2. No arquivo qlpack.yml, inclua uma propriedade version com um identificador semver, bem como um bloco opcional dependencies.

  3. Migre a lista de dependências no libraryPathDependencies para o bloco dependencies. Especifique o intervalo de versão de cada dependência. Se o intervalo não for importante ou você não tiver certeza da compatibilidade, especifique "\*" para indicar que qualquer versão é aceitável e o padrão será a mais recente quando codeql pack install for executado.

Para obter mais informações sobre as propriedades, confira "Como personalizar a análise com pacotes CodeQL".

Adicionando e instalando dependências em um pacote do CodeQL

Observação: isso apenas tem suporte para pacotes de consultas e bibliotecas do CodeQL.

Você pode adicionar dependências em pacotes do CodeQL usando o comando codeql pack add. Você precisa especificar o escopo, o nome e (opcionalmente) um intervalo de versão compatível.

codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>

Se você não especificar um intervalo de versão, a versão mais recente será adicionada. Caso contrário, a versão mais recente que atenda ao intervalo solicitado será adicionada.

Esse comando atualiza o arquivo qlpack.yml com as dependências solicitadas e as baixa no cache de pacote. Observe que esse comando reformatará o arquivo e removerá todos os comentários.

Você também pode editar manualmente o arquivo qlpack.yml para incluir dependências e instalá-las com o comando:

codeql pack install

Esse comando baixa todas as dependências no cache compartilhado no disco local.

Observações:

  • A execução dos comandos codeql pack add e codeql pack install vai gerar ou atualizar o arquivo codeql-pack.lock.yml. O check-in desse arquivo deve ser feito no controle de versão. O arquivo codeql-pack.lock.yml contém os números de versão precisos usados pelo pacote. Para obter mais informações, confira "Sobre os arquivos codeql-pack.lock.yml".

  • Por padrão, codeql pack install instalará as dependências do Container registry no GitHub.com. Você pode instalar as dependências de um Container registry do GitHub Enterprise Server criando um arquivo qlconfig.yml. Para obter mais informações, consulte "Publicar e usar pacotes do CodeQL" na documentação do GitHub Enterprise Server.