Skip to main content

Создание и работа с пакетами CodeQL

Вы можете использовать CodeQL паки для создания, обмена, зависимости и запуска CodeQL запросов и библиотек.

Кто может использовать эту функцию?

CodeQL доступен для следующих типов репозитория:

О CodeQL рюкзаках и CodeQL CLI

          CodeQL Пакеты используются для создания, обмена, зависимости и запуска CodeQL запросов и библиотек.

Вы можете использовать pack команду в разделе CodeQL CLI для создания CodeQL паков, добавления зависимостей в паки и установки или обновления зависимостей. Вы также можете публиковать и скачивать CodeQL пакеты с помощью команды pack .

Создание стаи CodeQL

Вы можете создать CodeQL пакет, выполнив следующую команду из корня оформления заказа вашего проекта:

codeql pack init <scope>/<pack>

Необходимо указать следующее:

  • <scope>: название организации или аккаунта пользователя, на который вы собираетесь публиковать информацию GitHub .

  • <pack>: имя создаваемого пакета.

Команда codeql pack init создаёт структуру каталогов и конфигурационные файлы для пака CodeQL . По умолчанию команда создает пакет запросов. Если вы хотите создать пакет библиотеки, необходимо изменить qlpack.yml файл, чтобы явно объявить файл как пакет библиотеки, включив library:true свойство.

Создание CodeQL мамодельного пака

Примечание.

В настоящее время пакеты моделей CodeQL находятся в public preview и подвергаются изменению. Пакеты моделей поддерживаются для анализа C/C++, C#, Java/Kotlin, Python, Ruby, и Rust .

Редактор модели CodeQL в расширении CodeQL для Visual Studio Code поддерживает моделирование зависимостей для C#, Java/Kotlin, Python и Ruby.

Пакеты моделей могут использоваться для расширения code scanning анализа с целью распознавания библиотек и фреймворков, которые по умолчанию не поддерживаются. Пакеты моделей используют расширения данных, которые реализуются как YAML и описывают добавление данных для новых зависимостей. Когда указывается набор модели, расширения данных в этом пакете автоматически добавляются в code scanning анализ. Для получения дополнительной информации о CodeQL пакетах моделей и расширениях данных см. AUTOTITLE.

Модельный пакет — это CodeQL пакет с следующими характеристиками в qlpack.yml файле:

  • Он определяет library: true.
  • Она не имеет зависимостей.
  • Он имеет один или несколько extensionTargets.
  • Он имеет dataExtensions свойство, указывающее на один или несколько файлов расширения данных.

Пакет модели внедряет указанные расширения данных в каждый пакет запросов, который называется в extensionTargets, если он входит в указанный диапазон версий. Рассмотрим пример.

name: my-repo/my-java-model-pack
version: 1.2.3
extensionTargets:
  codeql/java-all: ~1.2.3
  codeql/util: ~4.5.6
dataExtensions:
  - models/**/*.yml

В этом примере пакет модели внедряет все расширения данных в models/**/``codeql/java-all пакет запросов, который находится в версии от 1.2.3 до и в том числе 1.3.0, и codeql/util пакет запросов, который находится в версии от 4.5.6 до и включая 4.6.0. Дополнительные сведения см. в разделе "Использование семантического управления версиями" в документации npm и спецификации семантического управления версиями.

После того как вы создали набор моделей, вы можете публиковать его так же, как и другие CodeQL паки. Дополнительные сведения см. в разделе Публикация и использование пакетов CodeQL. Затем вы можете использовать опубликованные наборы моделей в code scanning анализе с этой --model-packs опцией. Дополнительные сведения см. в разделе Настройка анализа с помощью пакетов CodeQL.

Добавление и установка зависимостей на пакет CodeQL

Примечание.

Это поддерживается только для CodeQL пакетов запросов и библиотек.

Вы можете добавлять зависимости к CodeQL пакам с помощью команды codeql pack add. Необходимо указать область, имя и (необязательно) совместимый диапазон версий.

codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>

Если диапазон версий не указан, будет добавлена последняя версия. В противном случае будет добавлена последняя версия, которая удовлетворяет запрошенному диапазону.

Эта команда обновляет qlpack.yml файл с запрошенными зависимостями и загружает их в кэш пакетов. Обратите внимание, что эта команда будет переформатировать файл и удалить все примечания.

Вы также можете вручную изменить qlpack.yml файл, чтобы включить зависимости и установить зависимости с помощью команды:

codeql pack install

Эта команда скачивает все зависимости в общий кэш на локальном диске.

Примечание.

* codeql pack add Выполнение команд codeql pack install приведет к созданию или обновлению codeql-pack.lock.yml файла. Этот файл должен быть установлен на элемент управления версиями. Файл codeql-pack.lock.yml содержит точные номера версий, используемые пакетом. Дополнительные сведения см. в разделе "Сведения о файлах codeql-pack.lock.yml".

  • По умолчанию codeql pack install будут устанавливать зависимости из Container registry on GitHub.com. Вы можете установить зависимости из a GitHub Enterprise ServerContainer registry , создав qlconfig.yml файл. Для получения дополнительной информации см. раздел AUTOTITLE в GitHub Enterprise Server документации.

Организация CodeQL структуры каталога пака

Пакет должен содержать файл, вызванный CodeQLqlpack.yml в его корневой директории. В qlpack.yml файле name: поле должно иметь значение, соответствующее формату <scope>/<pack>, где <scope> — GitHub это организация или учетная запись пользователя, в которую будет опубликован пакет, а <pack> — название пака.

Кроме того, пакеты запросов и библиотечные пакеты с CodeQL тестами содержат codeql-pack.lock.yml файл, содержащий разрешённые зависимости этого пака. Этот файл создается во время вызова codeql pack install команды, не предназначен для редактирования вручную и должен быть добавлен в систему управления версиями.

Другие файлы и каталоги в пакете должны быть логически упорядочены. Например, обычно:

  • Запросы упорядочены в каталоги для конкретных категорий.
  • Запросы для конкретных продуктов, библиотек и платформ упорядочены в собственные каталоги верхнего уровня.

Настройка скачанного CodeQL пака

Рекомендуемый способ экспериментировать с изменениями в пакете — клонировать репозиторий, содержащий исходный код.

Если репозиторий исходников недоступен и вам нужно основывать модификации на скачанном Container registryпакете, имейте в виду, что эти паки не предназначены для модификации или настройки после загрузки, и их формат может измениться в будущем без особого предупреждения. Рекомендуется выполнить следующие действия после скачивания пакета, если необходимо изменить содержимое:

  • Измените имя_ пакета_, qlpack.yml чтобы избежать путаницы с результатами из немодифицированного пакета.

  • Удалите все файлы с именем *.qlx в любом месте в распаковке структуры каталогов. Эти файлы содержат заранее скомпилированные версии запросов и в некоторых случаях CodeQL используют их вместо модифицированного вами QL-источника.