Skip to main content

Configuração do fluxo de trabalho do CodeQL para linguagens compiladas

Você pode configurar como o GitHub usa o CodeQL analysis workflow para varrer o código escrito em linguagens compiladas para obter vulnerabilidades e erros.

Who can use this feature

If you have write permissions to a repository, you can configure code scanning for that repository.

Code scanning is available for organization-owned repositories in GitHub AE. This is a GitHub Advanced Security feature (free during the beta release). Para obter mais informações, confira "Sobre o GitHub Advanced Security".

Sobre o CodeQL analysis workflow e linguagens compiladas

Você configurou GitHub para executar code scanning para o seu repositório, adicionando um fluxo de trabalho de GitHub Actions ao repositório. Para CodeQL code scanning, você adiciona o CodeQL analysis workflow. Para obter mais informações, confira "Como configurar a code scanning para um repositório".

De modo geral, você não precisa editar o fluxo de trabalho padrão para code scanning. No entanto, se necessário, você editar o fluxo de trabalho para personalizar algumas das configurações. Por exemplo, você pode editar os CodeQL analysis workflow de GitHub para especificar a frequência das digitalizações, as linguagens ou diretórios a serem digitalizados e o que CodeQL code scanning procura no seu código. Talvez você precise editar o CodeQL analysis workflow se você usar um conjunto específico de comandos para compilar seu código. Para obter informações gerais sobre como configurar a code scanning e editar arquivos de fluxo de trabalho, confira "Como configurar a code scanning" e "Aprenda a usar o GitHub Actions".

Sobre a autobuild para CodeQL

A varredura de código funciona executando consultas contra um ou mais bancos de dados. Cada banco de dados contém uma representação de todo o código em uma linguagem única no seu repositório. Para as linguagens compiladas de C/C++, C#, e Java, o processo de preenchimento deste banco de dados envolve a construção do código e extração de dados. CodeQL também executa uma criação para projetos Go para configurar o projeto. No entanto, em contraste com as outras linguagens compiladas, todos os arquivos Go no repositório são extraídos, não apenas aqueles que são compilados. Você pode usar comandos de compilação personalizados para pular a extração de arquivos Go que não são tocados pela compilação.

Para as linguagens compiladas compatíveis, use a ação autobuild no CodeQL analysis workflow para compilar o código. Isso evita que você tenha que especificar comandos de compilação explícitos para C/C++, C# e Java.

Se o fluxo de trabalho usar uma matriz language, autobuild tentará criar cada uma das linguagens compiladas listadas na matriz. Sem uma matriz, autobuild tentará criar a linguagem compilada compatível que tem mais arquivos de origem no repositório. Com exceção de Go, a análise de outras linguagens compatíveis no repositório irá falhar, a menos que você forneça comandos de criação explícitos.

Observação: Você precisa instalar o software necessário nos executores auto-hospedados. Para obter mais informações sobre os executores auto-hospedados, confira "Como hospedar seus executores".

C/C++

Tipo de sistema compatívelNome do sistema
Sistema operacionalWindows, macOS e Linux
Sistema de criaçãoWindows: MSbuild e scripts de build
Linux e macOS: Autoconf, Make, CMake, qmake, Meson, Waf, SCons, Linux Kbuild e scripts de build

O comportamento da etapa autobuild varia de acordo com o sistema operacional em que a extração é executada. No Windows, a etapa autobuild tenta fazer a detecção automática de um método de build adequado para C/C++ usando a seguinte abordagem:

  1. Invocar MSBuild.exe no arquivo de solução (.sln) ou de projeto (.vcxproj) mais próximo da raiz. Se autobuild detectar vários arquivos de solução ou de projeto na mesma profundidade (mais curta) do diretório de nível superior, ele tentará compilar todos eles.
  2. Invocar um script parecido com um script de build: build.bat, build.cmd e build.exe (nessa ordem).

No Linux e no macOS, a etapa autobuild revisa os arquivos presentes no repositório para determinar o sistema de build usado:

  1. Procure um sistema de criação no diretório-raiz.
  2. Se nenhum for encontrado, procure um diretório único nos subdiretórios com um sistema de criação para C/C++.
  3. Execute um comando apropriado para configurar o sistema.

C#

Tipo de sistema compatívelNome do sistema
Sistema operacionalWindows e Linux
Sistema de criação.NET, MSbuild e scripts de criação

O processo autobuild tenta fazer a detecção automática de um método de build adequado para C# usando a seguinte abordagem:

  1. Invocar dotnet build no arquivo de solução (.sln) ou de projeto (.csproj) mais próximo da raiz.
  2. Invocar MSbuild (Linux) ou MSBuild.exe (Windows) no arquivo de solução ou de projeto mais próximo da raiz. Se autobuild detectar vários arquivos de solução ou de projeto na mesma profundidade (mais curta) do diretório de nível superior, ele tentará compilar todos eles.
  3. Invocar um script parecido com um script de build: build e build.sh (nessa ordem, para o Linux) ou build.bat, build.cmd e build.exe (nessa ordem, para o Windows).

Java

Tipo de sistema compatívelNome do sistema
Sistema operacionalWindows, macOS e Linux (sem restrição)
Sistema de criaçãoGradle, Maven e Ant

O processo autobuild tenta determinar o sistema de build para bases de código Java aplicando esta estratégia:

  1. Procurar um arquivo de criação no diretório-raiz. Verifique o arquivos do Gradle, do Maven e, em seguida, do Ant.
  2. Execute o primeiro arquivo de criação encontrado. Se os arquivos do Gradle e do Maven estiverem presentes, será usado o arquivo do Gradle.
  3. Caso contrário, procure arquivos de criação nos subdiretórios diretos do diretório-raiz. Se apenas um subdiretório contiver arquivos de criação, execute o primeiro arquivo identificado nesse subdiretório (usando a mesma preferência de 1). Se mais de um subdiretório conter arquivos de criação, relate um erro.

Adicionar passos de criação a uma linguagem compilada

Se o código C/C++, C# ou Java em seu repositório tiver um processo de compilação não padrão, autobuild poderá falhar. Você precisará remover a etapa autobuild do fluxo de trabalho e adicionar manualmente as etapas de compilação. Se você quiser especificar quais arquivos de Go no seu repositório devem ser extraídos, você deverá adicionar as etapas de criação. Para obter informações sobre como editar o arquivo de fluxo de trabalho, confira "Como configurar a code scanning".

Depois de remover a etapa autobuild, remova o comentário da etapa run e adicione comandos de build adequados ao seu repositório. A etapa run do fluxo de trabalho executa programas de linha de comando usando o shell do sistema operacional. Você pode modificar esses comandos e adicionar mais comandos para personalizar o processo de compilação.

- run: |
  make bootstrap
  make release

Para obter mais informações sobre a palavra-chave run, confira "Sintaxe de fluxo de trabalho do GitHub Actions".

Se o repositório contiver várias linguagens compiladas, você poderá especificar comandos de compilação específicos da linguagem. Por exemplo, se o repositório contiver C/C++, C# e Java e autobuild compilar corretamente C/C++ e C#, mas não compila Java, você poderá usar a configuração a seguir no seu fluxo de trabalho, após a etapa init. Isso especifica as etapas de compilação para Java enquanto ainda usa autobuild para C/C++ e C#:

- if: matrix.language == 'cpp' || matrix.language == 'csharp' 
  name: Autobuild
  uses: github/codeql-action/autobuild@v1

- if: matrix.language == 'java' 
  name: Build Java
  run: |
    make bootstrap
    make release

Para obter mais informações sobre o condicional if, confira "Sintaxe de fluxo de trabalho do GitHub Actions".

Para obter mais dicas e truques sobre por que o autobuild não compilará seu código, confira "Solução de problemas de fluxo de trabalho do CodeQL".

Se você adicionou etapas de criação manual para linguagens compiladas, mas o code scanning ainda não está funcionando no seu repositório, entre em contato com seu proprietário do site.