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 examinar o código escrito nas linguagens compiladas quanto a 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 está disponível para os repositórios pertencentes à organização no GitHub AE. Esse é um recurso do GitHub Advanced Security (gratuito durante a versão beta). Para obter mais informações, confira "Sobre o GitHub Advanced Security".

Sobre o CodeQL analysis workflow e as 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 a code scanning do CodeQL, 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 o CodeQL analysis workflow do GitHub para especificar a frequência das verificações, as linguagens ou os diretórios a serem verificados e o que é procurado pela code scanning do CodeQL no código. Talvez você precise editar o CodeQL analysis workflow caso use um conjunto específico de comandos para compilar o 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 Code scanning funciona executando consultas em 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 C/C++, C#, e Java, o processo de preenchimento desse banco de dados envolve a criação do código e a extração dos dados. Para essas linguagens, o CodeQL analisa os arquivos de origem no repositório em que são criados. Para qualquer uma dessas linguagens, você pode desabilitar autobuild e usar comandos de build personalizados para analisar apenas os arquivos criados por esses comandos personalizados.

Para as linguagens compiladas compatíveis, use a ação autobuild no CodeQL analysis workflow para compilar o código. Com isso, você não precisa 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 autobuild falhar ou você quiser analisar um conjunto de arquivos de origem diferentes daqueles criados pelo processo autobuild, remova a etapa autobuild do fluxo de trabalho e adicione manualmente as etapas de compilação. Para projetos C/C++, C#, Go, e Java, o CodeQL analisará qualquer código-fonte criado por suas etapas de compilação especificadas. 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.