Перейти к содержанию

Поддерживаемые пакетные менеджеры

Манифесты

Для поиска зависимостей CodeScoring в первую очередь опирается на разбор файлов манифестов пакетных менеджеров. Система поддерживает разбор следующих технологий:

Язык
Пакетный менеджер или инструмент сборки
Формат файла
Java и Kotlin Gradle, Maven pom.xml
ivy.xml
maven-dependency-tree.txt
gradle-dependency-tree.txt
*.gradle
*.gradle.kts
gradle.lockfile
JavaScript и TypeScript npm, yarn package.json
package-lock.json
npm-shrinkwrap.json
yarn.lock
pnpm-lock.yaml
Python pip, Poetry, Pipenv setup.py
Pipfile
Pipfile.lock
pyproject.toml
poetry.lock
requirements.txt
requirements.pip
requires.txt
С и C++ Conan conanfile.txt
conan.lock
conanfile.py
Go Go Modules go.mod
go.sum
PHP Composer composer.json
composer.lock
Ruby RubyGems Gemfile
Gemfile.lock
*.gemspec
gems.locked
C# Nuget *.nuspec
packages.lock.json
Project.json
Project.lock.json
packages.config
paket.dependencies
paket.lock
*.csproj
project.assets.json
Objective-C и Swift CocoaPods Podfile
Podfile.lock
*.podspec
Rust Cargo Cargo.lock
Cargo.toml
Scala sbt scala-dependency-tree.txt
sbt-dependency-tree.txt

Лучший результат будет при наличии основного файла манифеста и соответствующего lock-файла, если он предусмотрен механизмом пакетного менеджера.

Механизм резолва при отсутствии lock-файла

При отсутствии lock-файла для некоторых пакетных индексов система будет пытаться выполнить резолв транзитивных OSS зависимостей сама следующим образом:

  • Maven
    • для формата pom.xml и build.gradle генерация maven-dependency-tree через соответствующий плагин maven
    • используются Maven версии 3.8.3 и OpenJDK версии 11
  • PyPi
    • генерация poetry.lock с помощью пакетного менеджера Poetry
    • используется Python версии 3.8
  • NPM
    • генерация yarn.lock с помощью пакетного менеджера Yarn
    • используется Node.js версии 16
  • Nuget
    • для формата csproj генерация project.assets.json с помощью встроенных инструментов nuget
    • используется .NET SDK версии 8
  • Packagist
    • генерация composer.lock с помощью пакетного менеджера Composer
    • используется PHP версии 8
  • Rubygems
    • генерация Gemfile.lock с помощью пакетного менеджера Bundler
    • используется Ruby версии 3

Самостоятельная генерация lock-файлов системой не может давать результат в 100% случаев, так как результат часто зависит от окружения.

Механизм поиска зависимостей по хэшам

Второй механизм поиска зависимостей, реализованный в CodeScoring — это поиск по хэшам, то есть поиск непосредственного включения библиотек в код проектов путём копирования. В рамках этого механизма происходит хэширование всех файлов проекта и сверка этих сигнатур с известными нам open source библиотеками.

В данный момент поиск по хэшам происходит для следующих индексов пакетных менеджеров по следующим типам файлов:

  • Maven
    • .jar
    • .war
    • .ear
  • npm
    • .min.js
  • PyPI
    • .whl
    • .egg
  • Nuget
    • .nupkg

От инсталляции в облако не уходят хэши файлов, размер которых не превышает 512 байт.