Anpassen von Sprachen und Builds für Codescans

Abgeschlossen

CodeQL-Codescans unterstützen standardmäßig viele Sprachen mit einer Funktion für automatische Builds. Wenn Ihr Code einen nicht standardmäßigen Buildprozess verwendet, müssen Sie Ihren Workflow jedoch möglicherweise mit benutzerdefinierten Buildschritten anpassen.

In dieser Lerneinheit wird beschrieben, wie Sie die Sprachen ändern, die durch die Codescans analysiert werden, und wie Sie einem CodeQL-Codescanworkflow benutzerdefinierte Buildschritte hinzufügen.

Ändern der analysierten Sprachen

CodeQL-Codescans erkennen automatisch Code, der in den folgenden unterstützten Sprachen geschrieben wurde: C/C++, C#, Go, Java, JavaScript/TypeScript, Python und Ruby.

Hinweis

CodeQL aktualisiert ständig seine unterstützten Sprachen und Frameworks. Eine vollständige Liste der verfügbaren Sprachen, Varianten und Compiler finden Sie in der Dokumentation[7].

Die Standardmäßige CodeQL-Analyseworkflowdatei enthält eine Buildmatrix namens Sprache , die die Sprachen in Ihrem Repository auflistet, die analysiert werden. CodeQL füllt diese Matrix automatisch mit Daten auf, wenn Sie einem Repository Codescans hinzufügen. Die Verwendung der Sprachmatrix optimiert CodeQL, um Analysen parallel durchzuführen. Aufgrund der Leistungsvorteile der Parallelisierung von Builds wird empfohlen, dass alle Workflows diese Konfiguration übernehmen.

Wenn Ihr Repository Code in mehreren der unterstützten Sprachen enthält, können Sie auswählen, welche Sprachen Sie analysieren möchten. Es gibt mehrere Gründe, warum Sie verhindern möchten, dass eine Sprache analysiert wird. Das Projekt kann z. B. Abhängigkeiten in einer anderen Sprache als der Haupttextkörper des Codes aufweisen, und Sie möchten möglicherweise keine Warnungen für diese Abhängigkeiten anzeigen.

Wenn Ihr Workflow die Sprachmatrix verwendet, wird CodeQL hartcodiert, um nur die Sprachen in der Matrix zu analysieren. Um die Sprachen zu ändern, die du analysieren möchtest, bearbeite den Wert der Matrixvariablen. Sie können eine Sprache entfernen, um zu verhindern, dass sie analysiert wird, oder Sie können eine Sprache hinzufügen, die beim Einrichten von Codescans nicht im Repository vorhanden war. Wenn das Repository beispielsweise anfänglich nur JavaScript enthielt, als Codescans eingerichtet wurden, und Sie später Python-Code hinzugefügt haben, müssen Sie der Matrix python hinzufügen.

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

Wenn Ihr Workflow keine Matrix namens „language“ enthält, wird CodeQL so konfiguriert, dass die Analyse sequenziell ausgeführt wird. Wenn Sie keine Sprachen im Workflow angeben, erkennt CodeQL automatisch alle unterstützten Sprachen im Repository und versucht, diese zu analysieren. Wenn Sie ohne Verwendung einer Matrix auswählen möchten, welche Sprachen analysiert werden sollen, können Sie den languages-Parameter unter der init-Aktion verwenden.

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

Benutzerdefinierte Buildschritte für Codescans

Für die unterstützten kompilierten Sprachen können Sie den Code mithilfe der Aktion für automatische Builds im CodeQL-Analyseworkflow erstellen. Dadurch wird vermieden, dass explizite Buildbefehle für C/C++, C# und Java angegeben werden müssen. CodeQL führt auch einen Buildvorgang für Go-Projekte aus, um das Projekt zu einrichten. Im Gegensatz zu den anderen kompilierten Sprachen werden jedoch alle Go-Dateien im Repository extrahiert, nicht nur diejenigen, die erstellt werden. Sie können benutzerdefinierte Buildbefehle verwenden, um das Extrahieren von Go-Dateien zu überspringen, die nicht vom Buildvorgang betroffen sind.

Hinzufügen von Buildschritten für eine kompilierte Sprache

Wenn der C/C++-, C#- oder Java-Code in Ihrem Repository einen nicht standardmäßigen Buildprozess verwendet, kann autobuild fehlschlagen. Sie müssen den autobuild-Schritt aus dem Workflow entfernen und Buildschritte manuell hinzufügen.

Nachdem Sie den autobuild-Schritt entfernt haben, kommentieren Sie den Ausführungsschritt aus und fügen Buildbefehle hinzu, die für Ihr Repository geeignet sind. Der Ausführungsschritt des Workflows führt Befehlszeilenprogramme mithilfe der Shell des Betriebssystems aus. Sie können diese Befehle ändern und weitere Befehle hinzufügen, um den Buildprozess anzupassen.

- run: |
  make bootstrap
  make release

Wenn Ihr Repository mehrere kompilierte Sprachen enthält, können Sie sprachspezifische Buildbefehle angeben. Wenn Ihr Repository z. B. C/C++, C# und Java enthält und autobuild C/C++ und C# ordnungsgemäß erstellt werden, nicht aber Java, können Sie nach dem Initialisierungsschritt die folgende Konfiguration in Ihrem Workflow verwenden. Hiermit werden Buildschritte für Java angegeben, während weiterhin autobuild für C/C++ und C# verwendet wird:

- 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