Настройка языков и сборок для проверки кода

Завершено

Средство проверки кода CodeQL по умолчанию поддерживает многие языки с функцией автоматической сборки. Однако если в коде используется нестандартный процесс сборки, возможно, потребуется настроить рабочий процесс, используя настраиваемые шаги сборки.

В этом уроке описывается, как изменить языки, анализируемые при проверке кода, и добавить настраиваемые шаги сборки в рабочий процесс проверки кода CodeQL.

Изменение анализируемых языков

Средство сканирования кода CodeQL автоматически обнаруживает код, написанный на следующих поддерживаемых языках: C/C++, C#, Go, Java, JavaScript/TypeScript, Python и Ruby.

Примечание.

CodeQL постоянно обновляет поддерживаемые языки и платформы. Полный список доступных языков, вариантов и компиляторов см. в документации[7].

Файл рабочего процесса анализа CodeQL по умолчанию содержит матрицу сборки с именем language, в которой перечисляются языки в анализируемом репозитории. CodeQL автоматически заполняет эту матрицу при добавлении сканирования кода в репозиторий. Использование языковой матрицы оптимизирует CodeQL для параллельного выполнения каждого анализа. Учитывая преимущества параллелизации сборок с точки зрения производительности, рекомендуется, чтобы все рабочие процессы применяли эту конфигурацию.

Если репозиторий содержит код на нескольких поддерживаемых языках, можно выбрать языки, для которых нужно выполнить анализ. Существует несколько причин, по которым может возникнуть желание запретить анализ языка. Например, проект может иметь зависимости на другом языке, чем основной код, и вы, возможно, предпочтете не видеть оповещения для этих зависимостей.

Если рабочий процесс использует языковую матрицу, КодQL жестко закодирован для анализа только языков в матрице. Чтобы изменить языки, для которых нужно выполнять анализ, измените значение переменной матрицы. Вы можете удалить язык, чтобы предотвратить его анализ, или добавить язык, который не присутствовал в репозитории при настройке сканирования кода. Например, если репозиторий изначально содержал только JavaScript при настройке сканирования кода, а затем добавлен код Python, необходимо добавить python в матрицу.

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

Если рабочий процесс не содержит матрицу с именем language, обработчик CodeQL настроен для последовательного выполнения анализа. Если язык в рабочем процессе не указан, CodeQL автоматически обнаруживает и пытается проанализировать все поддерживаемые языки в репозитории. Если вы хотите выбрать языки для анализа без использования матрицы, можно воспользоваться параметром languages в действии init.

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

Настраиваемые шаги сборки для проверки кода

Чтобы создать код для поддерживаемых компилируемых языков, можно использовать действие автосборки в рабочем процессе анализа CodeQL. Это позволяет избежать необходимости указывать явные команды сборки для C/C++, C#и Java. CodeQL также запускает сборку для проектов Go, чтобы настроить проект. Тем не менее, в отличие от других компилируемых языков, в репозитории извлекаются все файлы Go, а не только собранные. Вы можете использовать пользовательские команды сборки, чтобы пропустить извлечение файлов Go, которые сборка не касается.

Добавление шагов сборки для компилируемого языка

Если код C/C++, C# или Java в репозитории имеет нестандартный процесс сборки, операция autobuild может завершиться сбоем. В этом случае необходимо удалить шаг autobuild из рабочего процесса и вручную добавить шаги сборки.

После удаления шага autobuild раскомментируйте шаг запуска и добавьте команды сборки, которые подходят для вашего репозитория. Шаг выполнения рабочего процесса используется для запуска программы командной строки с помощью оболочки операционной системы. Вы можете изменить эти команды и добавить дополнительные команды для настройки процесса сборки.

- run: |
  make bootstrap
  make release

Если репозиторий содержит несколько компилируемых языков, можно указать команды сборки для конкретного языка. Например, если репозиторий содержит C/C++, C# и Java, а autobuild правильно создает C/C++ и C#, но не выполняет сборку Java, можно использовать следующую конфигурацию в рабочем процессе после шага инициализации. В ней указываются шаги сборки для Java, а для C/C++ и C# по-прежнему используется autobuild:

- 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