Personalizar idiomas e builds para varredura de código

Concluído

A varredura de código CodeQL dá suporte a muitas linguagens por padrão com um recurso de compilação automática. Se o seu código usa um processo de compilação não padrão, no entanto, pode ser necessário personalizar seu fluxo de trabalho com etapas de compilação personalizadas.

Esta unidade irá descrever como alterar as linguagens analisadas pela varredura de código e como adicionar etapas de compilação personalizadas a um fluxo de trabalho de varredura de código CodeQL.

Alterar as linguagens analisadas

A varredura de código CodeQL detecta automaticamente o código escrito nas seguintes linguagens com suporte: C/C++, C#, Go, Java, JavaScript/TypeScript, Python e Ruby.

Observação

O CodeQL está constantemente atualizando seus idiomas e estruturas compatíveis para obter uma lista completa de idiomas, variantes e compiladores disponíveis, consulte a documentação[7].

O arquivo de fluxo de trabalho de análise codeql padrão contém uma matriz de build chamada idioma que lista os idiomas em seu repositório que são analisados. O CodeQL preenche automaticamente essa matriz quando você adiciona a varredura de código a um repositório. Usar a matriz de linguagens otimiza o CodeQL para executar cada análise em paralelo. Recomendamos que todos os fluxos de trabalho adotem essa configuração devido aos benefícios de desempenho da paralelização de compilações.

Se o repositório contiver código em mais de uma das linguagens com suporte, você poderá escolher quais linguagens deseja analisar. Há vários motivos pelos quais você talvez queira impedir que uma linguagem seja analisada. Por exemplo, o projeto pode ter dependências em uma linguagem diferente do corpo principal do seu código e você pode preferir não ver alertas para essas dependências.

Se o fluxo de trabalho usar a matriz de linguagem, o CodeQL será codificado para analisar apenas as linguagens na matriz. Para alterar as linguagens que você deseja analisar, edite o valor da variável de matriz. Você pode remover uma linguagem para evitar que ela seja analisada ou pode adicionar uma linguagem que não estava presente no repositório quando a varredura de código foi configurada. Por exemplo, se o repositório inicialmente continha apenas JavaScript quando a varredura de código foi configurada e você adicionou código Python posteriormente, será necessário adicionar python à matriz.

jobs:
  analyze:
    name: Analyze
    ...
    strategy:
      fail-fast: false
      matrix:
        language: ['javascript', 'python']

Se o fluxo de trabalho não contém uma matriz chamada language, o CodeQL é configurado para executar a análise sequencialmente. Se você não especificar linguagens no fluxo de trabalho, o CodeQL detectará automaticamente e tentará analisar as linguagens com suporte no repositório. Se você quiser escolher quais linguagens analisar, sem usar uma matriz, poderá usar o parâmetro languages na ação init.

- uses: github/codeql-action/init@v1
  with:
    languages: cpp, csharp, python

Etapas de compilação personalizadas para varredura de código

Para as linguagens compiladas com suporte, você pode usar a ação de compilação automática no fluxo de trabalho de análise do CodeQL para criar seu código. Isso evita que você tenha que especificar comandos de compilação explícitos para C/C++, C# e Java. O CodeQL também executa uma compilaçã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 build personalizados para pular a extração de arquivos Go que não são tocados pelo build.

Adicionar etapas de compilação para 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.

Após remover a etapa autobuild, remova o comentário da etapa de execução e adicione comandos de compilação adequados ao seu repositório. A etapa de executar 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

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 criar corretamente C/C++ e C#, mas não criar Java, você poderá usar a configuração a seguir em seu fluxo de trabalho, após a etapa inicial. 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