Přizpůsobení jazyků a sestavení pro kontrolu kódu

Dokončeno

Kontrola kódu CodeQL ve výchozím nastavení podporuje mnoho jazyků pomocí funkce automatického sestavení. Pokud ale váš kód používá nestandardní proces sestavení, možná budete muset pracovní postup přizpůsobit vlastními kroky sestavení.

Tato lekce popisuje, jak změnit jazyky analyzované skenováním kódu a jak přidat vlastní kroky sestavení do pracovního postupu kontroly kódu CodeQL.

Změna analyzovaných jazyků

Prohledávání kódu CodeQL automaticky rozpozná kód napsaný v následujících podporovaných jazycích: C/C++, C#, Go, Java, JavaScript/TypeScript, Python a Ruby.

Poznámka:

CodeQL neustále aktualizuje podporované jazyky a architektury pro úplný seznam dostupných jazyků, variant a kompilátorů, viz dokumentace[7].

Výchozí soubor pracovního postupu analýzy CodeQL obsahuje matici sestavení s názvem jazyk , který uvádí jazyky v úložišti, které jsou analyzovány. CodeQL tuto matici automaticky naplní při přidávání skenování kódu do úložiště. Použití jazykové matice optimalizuje CodeQL tak, aby spouštěla každou analýzu paralelně. Doporučujeme, aby všechny pracovní postupy tuto konfiguraci přijaly kvůli výhodám výkonu při paralelizaci sestavení.

Pokud vaše úložiště obsahuje kód ve více než jednom z podporovaných jazyků, můžete zvolit, které jazyky chcete analyzovat. Existuje několik důvodů, proč můžete chtít zabránit analýze jazyka. Projekt může mít například závislosti v jiném jazyce, než je hlavní tělo kódu, a možná nechcete zobrazovat výstrahy pro tyto závislosti.

Pokud váš pracovní postup používá matici jazyka, kód CodeQL je pevně zakódovaný tak, aby analyzoval pouze jazyky v matici. Pokud chcete změnit jazyky, které chcete analyzovat, upravte hodnotu maticové proměnné. Můžete odebrat jazyk, abyste zabránili jeho analýze, nebo můžete přidat jazyk, který v úložišti nebyl při nastavování kontroly kódu. Pokud například úložiště zpočátku obsahovalo pouze JavaScript při nastavení skenování kódu a později jste přidali kód Pythonu, budete muset do matice přidat python .

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

Pokud váš pracovní postup neobsahuje matici označovanou jako jazyk, pak je CodeQL nakonfigurovaný tak, aby spouštěl analýzu postupně. Pokud v pracovním postupu nezadáte jazyky, CodeQL automaticky zjistí a pokusí se analyzovat všechny podporované jazyky v úložišti. Pokud chcete zvolit, které jazyky se mají analyzovat, aniž byste použili matici, můžete v akci použít parametr init jazyků.

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

Vlastní kroky sestavení pro kontrolu kódu

Pro podporované kompilované jazyky můžete k sestavení kódu použít akci automatického sestavení v pracovním postupu analýzy CodeQL. Nemusíte tak zadávat explicitní příkazy sestavení pro C/C++, C# a Javu. CodeQL také spustí sestavení pro projekty Go, aby se projekt nastavil. Na rozdíl od ostatních kompilovaných jazyků se však všechny soubory Go v úložišti extrahují, nejen ty, které jsou sestavené. Pomocí vlastních příkazů sestavení můžete přeskočit extrahování souborů Go, které se sestavení nedotkne.

Přidání kroků sestavení pro zkompilovaný jazyk

Pokud kód C/C++, C# nebo Java ve vašem úložišti obsahuje nestandardní proces sestavení, autobuild může selhat. Krok budete muset odebrat autobuild z pracovního postupu a ručně přidat kroky sestavení.

Po odebrání autobuild kroku odkomentujte krok spuštění a přidejte příkazy sestavení, které jsou vhodné pro vaše úložiště. Krok spuštění pracovního postupu spouští programy příkazového řádku pomocí prostředí operačního systému. Tyto příkazy můžete upravit a přidat další příkazy pro přizpůsobení procesu sestavení.

- run: |
  make bootstrap
  make release

Pokud vaše úložiště obsahuje více kompilovaných jazyků, můžete zadat příkazy sestavení specifické pro jazyk. Pokud například vaše úložiště obsahuje C/C++, C# a Javu a autobuild správně sestaví C/C++ a C#, ale nepodaří se sestavit Javu, můžete po kroku inicializaci použít následující konfiguraci v pracovním postupu. Určuje kroky sestavení pro Javu, zatímco stále používáte autobuild pro C/C++ a 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