Personalizzare linguaggi e compilazioni per l'analisi del codice

Completato

L'analisi del codice di CodeQL supporta molti linguaggi per impostazione predefinita con una funzionalità di compilazione automatica. Se il codice usa un processo di compilazione non standard, tuttavia, potrebbe essere necessario personalizzare il flusso di lavoro con passaggi di compilazione personalizzati.

Questa unità illustrerà come modificare i linguaggi analizzati dall'analisi del codice e come aggiungere passaggi di compilazione personalizzati a un flusso di lavoro di analisi del codice di CodeQL.

Cambiare i linguaggi analizzati

L'analisi del codice di CodeQL rileva automaticamente il codice scritto nei linguaggi supportati seguenti: C/C++, C#, Go, Java, JavaScript/TypeScript, Python e Ruby.

Nota

CodeQL aggiorna costantemente i linguaggi e i framework supportati; per un elenco completo di linguaggi, varianti e compilatori disponibili, vedere la documentazione[7].

Il file del flusso di lavoro di analisi di CodeQL predefinito contiene una matrice di compilazione denominata language che elenca i linguaggi nel repository analizzati. CodeQL popola automaticamente questa matrice quando si aggiunge l'analisi del codice a un repository. L'uso della matrice language ottimizza CodeQL per eseguire ogni analisi in parallelo. È consigliabile che tutti i flussi di lavoro adottino questa configurazione a causa dei vantaggi per le prestazioni offerti dalla parallelizzazione delle compilazioni.

Se il repository contiene codice in più linguaggi supportati, è possibile scegliere quali linguaggi analizzare. Esistono diversi motivi per cui è possibile impedire l'analisi di un linguaggio. È ad esempio possibile che il progetto includa dipendenze in un linguaggio diverso rispetto al corpo principale del codice e potrebbe essere preferibile non visualizzare gli avvisi per tali dipendenze.

Se il flusso di lavoro usa la matrice language, l'impostazione hardcoded per CodeQL prevede che vengano analizzati solo i linguaggi inclusi nella matrice. Per cambiare i linguaggi da analizzare, modificare il valore della variabile della matrice. È possibile rimuovere un linguaggio per impedirne l'analisi oppure aggiungere un linguaggio non presente nel repository durante la configurazione dell'analisi del codice. Se ad esempio il repository conteneva inizialmente solo JavaScript quando è stata configurata l'analisi del codice e successivamente è stato aggiunto codice Python, sarà necessario aggiungere python alla matrice.

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

Se il flusso di lavoro non contiene una matrice denominata language, CodeQL è configurato per eseguire l'analisi in sequenza. Se non si specificano linguaggi nel flusso di lavoro, CodeQL rileva automaticamente e prova ad analizzare tutti i linguaggi supportati nel repository. Se si vogliono scegliere i linguaggi da analizzare senza usare una matrice, è possibile usare il parametro languages disponibile sotto l'azione init.

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

Passaggi di compilazione personalizzati per l'analisi del codice

Per i linguaggi compilati supportati, è possibile usare l'azione di compilazione automatica nel flusso di lavoro di analisi di CodeQL per compilare il codice. Ciò evita di dover specificare comandi di compilazione espliciti per C/C++, C# e Java. CodeQL esegue anche una compilazione per i progetti Go per configurare il progetto. A differenza degli altri linguaggi compilati, tuttavia, vengono estratti tutti i file Go nel repository, non solo quelli compilati. È possibile usare comandi di compilazione personalizzati per saltare l'estrazione dei file Go che la compilazione non tocca.

Aggiungere i passaggi di compilazione per un linguaggio compilato

Se il codice C/C++, C# o Java nel repository ha un processo di compilazione non standard, è possibile che autobuild abbia esito negativo. Sarà necessario rimuovere il passaggio autobuild dal flusso di lavoro e aggiungere manualmente i passaggi di compilazione.

Dopo aver rimosso il passaggioautobuild, rimuovere il commento dal passaggio di esecuzione e aggiungere comandi di compilazione adatti per il repository. Il passaggio di esecuzione del flusso di lavoro esegue programmi da riga di comando usando la shell del sistema operativo. È possibile modificare questi comandi e aggiungere altri comandi per personalizzare il processo di compilazione.

- run: |
  make bootstrap
  make release

Se il repository contiene più linguaggi compilati, è possibile specificare comandi di compilazione specifici del linguaggio. Se ad esempio il repository contiene C/C++, C# e Java e autobuild compila correttamente C/C++ e C# ma non riesce a compilare Java, è possibile usare la configurazione seguente nel flusso di lavoro dopo il passaggio init. In questo modo vengono specificati i passaggi di compilazione per Java mentre si continua a usare autobuild per 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