Sobre o Fluxo de trabalho de análise do CodeQL e as linguagens compiladas
O Code scanning trabalha 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 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.
O CodeQL analisa os arquivos de origem do C/C++, C#, e Java criados no repositório.
O Fluxo de trabalho de análise do CodeQL básico usa a ação autobuild
para compilar seu código. Como alternativa, é possível desabilitar autobuild
e especificar comandos de compilação explícitos para analisar apenas os arquivos criados por esses comandos personalizados.
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 Fluxo de trabalho de análise do CodeQL. Para obter mais informações, confira "Como definir a verificação de código".
Para obter informações sobre as linguagens, bibliotecas e estruturas compatíveis na versão mais recente do CodeQL, consulte "Linguagens e estruturas compatíveis" na documentação do CodeQL. Para obter mais informações sobre os requisitos do sistema para executar a última versão do CodeQL, consulte "Requisitos do sistema" na documentação do CodeQL.
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.
Sobre autobuild
para o CodeQL
O CodeQL analisa os arquivos de origem do C/C++, C#, e Java criados no repositório.
O Fluxo de trabalho de análise do CodeQL básico usa a ação autobuild
para compilar seu código. Como alternativa, é possível desabilitar autobuild
e especificar comandos de compilação explícitos para analisar apenas os arquivos criados por esses comandos personalizados.
Observação: Você precisa instalar o software necessário nos executores auto-hospedados. Para saber mais sobre executores auto-hospedados, confira "Hospedar seus próprios executores".
autobuild
para C/C++
Tipo de sistema compatível | Nome do sistema |
---|---|
Sistema operacional | Windows, macOS e Linux |
Sistema de criação | Windows: 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:
- Invocar
MSBuild.exe
no arquivo de solução (.sln
) ou de projeto (.vcxproj
) mais próximo da raiz. Seautobuild
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. - 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:
- Procure um sistema de criação no diretório-raiz.
- Se nenhum for encontrado, procure um diretório único nos subdiretórios com um sistema de criação para C/C++.
- Execute um comando apropriado para configurar o sistema.
Para executores auto-hospedados, você provavelmente precisará instalar o compilador gcc
, e projetos específicos também podem exigir acesso a clang
ou mscv
executáveis. Você também precisará instalar o sistema de compilação (por exemplo msbuild
, make
, cmake
, bazel
) e utilitários (como python
, perl
, lex
e yacc
) dos quais seus projetos dependem.
autobuild
para C#
Tipo de sistema compatível | Nome do sistema |
---|---|
Sistema operacional | Windows, macOS 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:
- Invocar
dotnet build
no arquivo de solução (.sln
) ou de projeto (.csproj
) mais próximo da raiz. - Invocar
MSbuild
(Linux) ouMSBuild.exe
(Windows) no arquivo de solução ou de projeto mais próximo da raiz. Seautobuild
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. - 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).
Para o desenvolvimento de aplicativos NET Core em executores auto-hospedados, o SDK .NET é necessário (para dotnet
).
Para o desenvolvimento de aplicativos NET Framework, no Windows, você precisará das Ferramentas do Microsoft Build (para msbuild
) e da CLI Nuget (para nuget
). No Linux e macOS, você precisará do Mono Runtime (para executar mono
, msbuild
ou nuget
).
autobuild
para Java
Tipo de sistema compatível | Nome do sistema |
---|---|
Sistema operacional | Windows, macOS e Linux (sem restrição) |
Sistema de criação | Gradle, Maven e Ant |
O processo autobuild
tenta determinar o sistema de build para bases de código Java aplicando esta estratégia:
- Procurar um arquivo de criação no diretório-raiz. Verifique o arquivos do Gradle, do Maven e, em seguida, do Ant.
- Execute o primeiro arquivo de criação encontrado. Se os arquivos do Gradle e do Maven estiverem presentes, será usado o arquivo do Gradle.
- 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.
Se você estiver usando executores auto-hospedados, a(s) versão(ões) necessária(s) do Java deverá(ão) estar presente(s):
-
Se o executor for usado para analisar repositórios que precisam de uma única versão do Java, a versão apropriada do JDK precisará ser instalada e precisará estar presente na variável PATH (para que
java
ejavac
possam ser encontrados). -
Se o executor for usado para analisar repositórios que precisam de várias versões do Java, as versões apropriadas do JDK precisarão ser instaladas e poderão ser especificadas por meio do arquivo
toolchains.xml
. Este é um arquivo de configuração, normalmente usado pelo Apache Maven, que permite especificar o local e a versão das ferramentas, além de qualquer configuração adicional necessária para utilizá-las. Para obter mais informações, consulte "Guia para usar toolchains" na documentação do Apache Maven.
Os seguintes executáveis provavelmente serão necessários para uma variedade de projetos Java e devem estar presentes na variável PATH, mas não serão essenciais em todos os casos:
mvn
(Apache Maven)gradle
(Gradle)ant
(Apache Ant)
Você também precisará instalar o sistema de compilação (por exemplo make
, cmake
, bazel
) e utilitários (como python
, perl
, lex
e yacc
) dos quais seus projetos dependem.
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 personalizar verificação de código".
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 para o 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@v2
- if: matrix.language == 'java'
name: Build Java
run: |
make bootstrap
make release
Para obter mais informações sobre o if
condicional, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".
Para obter mais dicas e truques sobre por que autobuild
não criar seu código, confira "O build automático falhou em uma linguagem compilada".
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 da empresa.