Разрешение зависимостей в окружении сборки¶
Пакетные менеджеры некоторых экосистем по умолчанию не включают транзитивные зависимости в манифесты. Для качественного проведения композиционного анализа при работе с ними рекомендуется применять механизм разрешения зависимостей в окружении сборки.
При разрешении зависимостей в окружении агент проверяет отсутствие 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 файл.
В случае обнаружения .sln манифеста, разрешение зависимостей будет выполнено в его контексте. Условием для запуска команды разрешения является отсутствие obj/project.assets.json файла для одного и более компонентов решения.
Go¶
Базовые манифесты, которые берутся за основу при разрешении зависимостей: go.mod, go.sum.
Агент использует данные из файлов go.mod и go.sum, добавляя записи из go.sum, которые отсутствуют в go.mod (только строки без постфикса /go.mod). Затем выполняется:
Полученный список пар parent → child используется для построения дерева зависимостей. При отсутствии указания родителя используется команда:
Если родительская связь не установлена, зависимость исключается с предупреждением.
Gradle¶
Базовые манифесты, которые берутся за основу при разрешении зависимостей: build.gradle, build.gradle.kts.
Для разрешения зависимостей в Gradle по умолчанию необходимо задать следующее значение:
С заданным значением сначала выполняется пользовательская задача:
Если задача отсутствует, используется стандартная команда:
Агент анализирует консольный вывод и формирует граф зависимостей.
Дополнительная информация¶
При наличии в директории файла gradle-dependency-tree.txt будет использоваться существующий файл, новый создан не будет.
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, в котором зафиксированы все зависимости проекта.