Observação: o administrador do site precisa habilitar o code scanning para o sua instância do GitHub Enterprise Server a fim de que seja possível usar esse recurso. Se você desejar usar o GitHub Actions para fazer a varredura do seu código, o administrador do site também deverá habilitar o GitHub Actions e configurar a infraestrutura necessária. Para obter mais informações, confira "Como configurar a verificação de código do seu dispositivo".
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#, Go, 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#, Go, 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#, Go, 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.
Nota: Se você usar executores auto-hospedados para o GitHub Actions, talvez seja necessário instalar software adicional para usar o processo autobuild
. Além disso, se seu repositório precisar de uma versão específica de uma ferramenta de criação, talvez seja necessário instalá-lo manualmente.
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 executáveis clang
ou msvc
. 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 Go
Tipo de sistema compatível | Nome do sistema |
---|---|
Sistema operacional | Windows, macOS e Linux |
Sistema de criação | Módulos Go, dep e Glide, bem como scripts de build, incluindo Makefiles e scripts Ninja |
O processo autobuild
tenta fazer a detecção automática de uma forma adequada para instalar as dependências necessárias em um repositório Go antes de extrair todos os arquivos .go
:
-
Invoque
make
,ninja
,./build
ou./build.sh
(nessa ordem) até que um desses comandos seja bem-sucedido e um próximogo list ./...
também seja bem-sucedido, indicando que as dependências necessárias foram instaladas. -
Se nenhum desses comandos for bem-sucedido, procure
go.mod
,Gopkg.toml
ouglide.yaml
e executego get
(a menos que a cópia para a pasta Vendor esteja em uso),dep ensure -v
ouglide install
, respectivamente, para tentar instalar as dependências. -
Por fim, se os arquivos de configurações desses gerenciadores de dependência não forem encontrados, reorganize a estrutura de diretório do repositório adequada para adição a
GOPATH
e usego get
para instalar as dependências. A estrutura de diretório é revertida para normal após a conclusão da extração. -
Extraia todo o código Go no repositório, semelhante à execução de
go build ./...
.
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 administrador do site.