Разрешение зависимостей в окружении сборки¶
Пакетные менеджеры некоторых экосистем по умолчанию не включают транзитивные зависимости в манифесты. Для качественного проведения композиционного анализа при работе с ними рекомендуется применять механизм разрешения зависимостей в окружении сборки.
При разрешении зависимостей в окружении агент проверяет отсутствие lock-файла. Если lock-файл обнаружен, резолв не выполняется даже при наличии соответствующих флагов, и результаты берутся из обнаруженного lock-файла. Исключение составляют технологии, где имя и расположение lock-файла не фиксировано пакетным менеджером и может быть передано как параметр в резолв.
Настройка разрешения зависимостей¶
Параметры разрешения зависимостей в окружении, пути к пакетному менеджеру и параметры выполнения регулируются следующими параметрами в команде scan
:
--dotnet-resolve
/--dotnet-path
/--dotnet-args
--go-resolve
/--go-path
--gradle-resolve
/--gradle-path
/--gradle-args
--maven-resolve
/--maven-path
/--maven-args
--npm-resolve
/--npm-path
/--npm-args
--poetry-resolve
/--poetry-path
/--poetry-args
--sbt-resolve
/--sbt-path
/--sbt-args
--yarn-resolve
/--yarn-path
/--yarn-args
--pip-resolve
/--pip-path
/--pip-args
--composer-resolve
/--composer-path
/--composer-args
--pnpm-resolve
/--pnpm-path
/--pnpm-args
--conda-resolve
/--conda-lock-path
/--conda-args
Пример команды:
./johnny \
scan dir . \
--api_token <api_token> \
--api_url <api_url> \
--dotnet-resolve \
--dotnet-path <path/to/dotnet>
При необходимости перечисленные параметры можно добавить в конфигурационный файл агента.
Поддерживаемые экосистемы¶
.NET¶
Базовый манифест, который берется за основу при разрешении зависимостей: .csproj
.
Для проектов .NET агент выполняет команду:
После чего анализируется файл obj/project.assets.json
, содержащий полную информацию о зависимостях и их версиях. Выполняется в каталоге, в котором расположен .csproj
файл.
Go¶
Базовые манифесты, которые берутся за основу при разрешении зависимостей: go.mod
, go.sum
.
Агент использует данные из файлов go.mod
и go.sum
, добавляя записи из go.sum
, которые отсутствуют в go.mod
(только строки без постфикса /go.mod
). Затем выполняется:
Полученный список пар parent → child
используется для построения дерева зависимостей. При отсутствии указания родителя используется команда:
Если родительская связь не установлена, зависимость исключается с предупреждением.
Gradle¶
Базовые манифесты, которые берутся за основу при разрешении зависимостей: build.gradle
, build.gradle.kts
.
Для разрешения зависимостей в Gradle по умолчанию необходимо задать следующее значение:
С заданным значением сначала выполняется пользовательская задача:
Если задача отсутствует, используется стандартная команда:
Агент анализирует консольный вывод и формирует граф зависимостей.
Maven¶
Базовый манифест, который берется за основу при разрешении зависимостей: pom.xml
.
Для проектов Maven используется команда:
Агент парсит файл mdt.json
, содержащий полную структуру зависимостей. При наличии файла maven-dependency-tree.txt
он будет обработан как самостоятельный lock-файл, и резолв не будет выполняться.
npm¶
Базовый манифест, который берется за основу при разрешении зависимостей: package.json
.
Агент выполняет:
Далее анализируется сформированный файл package-lock.json
, фиксирующий дерево зависимостей и используемые версии.
pnpm¶
Базовый манифест, который берется за основу при разрешении зависимостей: package.json
.
Выполняется команда:
Анализируется lock-файл pnpm-lock.yaml
, в котором содержатся данные обо всех зависимостях.
yarn¶
Базовый манифест, который берется за основу при разрешении зависимостей: package.json
.
Выполняется команда:
Агент парсит файл yarn.lock
, содержащий информацию о зависимостях и их версиях.
pip¶
Для Python-проектов используется команда:
Результат команды фиксирует список установленных зависимостей и их версии. В результатах указывается фиктивный файл codescoring_pip_for_freeze
.
Poetry¶
Базовый манифест, который берется за основу при разрешении зависимостей: pyproject.toml
.
Выполняются две команды:
Первый вывод содержит дерево с констрейнтами, второй — конкретные версии. Агент сопоставляет данные и формирует итоговый граф.
sbt (Scala)¶
Базовый манифест, который берется за основу при разрешении зависимостей: build.sbt
.
Для Scala используется команда:
Анализируется консольный вывод, содержащий структуру зависимостей проекта.
Swift¶
Базовый манифест, который берется за основу при разрешении зависимостей: Package.swift
.
Для Swift-экосистемы агент выполняет:
Далее парсится файл Package.resolved
, содержащий зафиксированные версии пакетов.
Composer (PHP)¶
Базовый манифест, который берется за основу при разрешении зависимостей: composer.json
.
Выполняется команда:
Агент анализирует файл composer.lock
, в котором зафиксировано состояние зависимостей.
Conda¶
Базовые манифесты, которые берутся за основу при разрешении зависимостей: environment.yml
, environment.yaml
, meta.yml
, meta.yaml
.
Для проектов, использующих Conda, агент выполняет:
После этого анализируется файл conda-lock.yml
, в котором зафиксированы все зависимости проекта.