Tilpas sprog og builds til kodescanning

Fuldført

CodeQL-kodescanning understøtter som standard mange sprog med en autobuildfunktion. Hvis din kode bruger en byggeproces, der ikke er standard, skal du muligvis tilpasse arbejdsprocessen med brugerdefinerede buildtrin.

I dette undermodul beskrives det, hvordan du ændrer de sprog, der analyseres ved kodescanning, og hvordan du føjer brugerdefinerede buildtrin til en CodeQL-kodescanningsarbejdsproces.

Skift de sprog, der analyseres

CodeQL-kodescanning registrerer automatisk kode, der er skrevet på følgende understøttede sprog: C/C++, C#, Go, Java, JavaScript/TypeScript, Python og Ruby.

Seddel

CodeQL opdaterer konstant de understøttede sprog og strukturer for at få en komplet liste over tilgængelige sprog, varianter og compilere i dokumentationen[7].

Standardfilen til CodeQL-analysearbejdsprocessen indeholder en buildmatrix, der kaldes sprog, som viser de sprog i lageret, der analyseres. CodeQL udfylder automatisk denne matrix, når du føjer kodescanning til et lager. Brug af sprogmatrixen optimerer CodeQL til at køre hver analyse parallelt. Vi anbefaler, at alle arbejdsprocesser anvender denne konfiguration på grund af ydelsesfordelene ved at parallelisere builds.

Hvis dit lager indeholder kode på mere end et af de understøttede sprog, kan du vælge, hvilke sprog du vil analysere. Der er flere årsager til, at du måske vil forhindre, at et sprog analyseres. Projektet kan f.eks. have afhængigheder på et andet sprog end hovedteksten i din kode, og du foretrækker måske ikke at se beskeder for disse afhængigheder.

Hvis din arbejdsproces bruger sprogmatrixen, er CodeQL hardcoded til kun at analysere sprogene i matrixen. Hvis du vil ændre de sprog, du vil analysere, skal du redigere værdien af matrixvariablen. Du kan fjerne et sprog for at forhindre, at det analyseres, eller du kan tilføje et sprog, der ikke var til stede i lageret, da kodescanning blev konfigureret. Hvis lageret f.eks. først kun indeholdt JavaScript, da kodescanning blev konfigureret, og du senere tilføjede Python-kode, skal du føje python til matrixen.

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

Hvis arbejdsprocessen ikke indeholder en matrix kaldet sprog, er CodeQL konfigureret til at køre analysen sekventielt. Hvis du ikke angiver sprog i arbejdsprocessen, registrerer CodeQL automatisk og forsøger at analysere understøttede sprog i lageret. Hvis du vil vælge, hvilke sprog der skal analyseres, uden at bruge en matrix, kan du bruge parameteren language under handlingen init.

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

Brugerdefinerede buildtrin til kodescanning

For de understøttede kompilerede sprog kan du bruge handlingen Autobuild i CodeQL-analysearbejdsprocessen til at oprette din kode. Derved undgår du at skulle angive eksplicitte buildkommandoer for C/C++, C#og Java. CodeQL kører også et build til Go-projekter for at konfigurere projektet. I modsætning til de andre kompilerede sprog udtrækkes alle Go-filer i lageret, ikke kun dem, der er bygget. Du kan bruge brugerdefinerede buildkommandoer til at springe Udpakning af Go-filer, som buildet ikke berører, over.

Tilføj buildtrin for et kompileret sprog

Hvis C/C++-, C#- eller Java-koden i dit lager har en buildproces, der ikke er standard, kan autobuild mislykkes. Du skal fjerne autobuild trin fra arbejdsprocessen og manuelt tilføje buildtrin.

Når du har fjernet autobuild trin, skal du fjerne trinnet til kørsel og tilføje buildkommandoer, der passer til dit lager. Trinnet til kørsel af arbejdsprocessen kører kommandolinjeprogrammer ved hjælp af operativsystemets shell. Du kan ændre disse kommandoer og tilføje flere kommandoer for at tilpasse buildprocessen.

- run: |
  make bootstrap
  make release

Hvis dit lager indeholder flere kompilerede sprog, kan du angive sprogspecifikke buildkommandoer. Hvis dit lager f.eks. indeholder C/C++, C# og Java, og autobuild bygger C/C++ og C# korrekt, men ikke kan bygge Java, kan du bruge følgende konfiguration i arbejdsprocessen efter det init-trin. Dette angiver buildtrin til Java, mens du stadig bruger autobuild til C/C++ og 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