dependabot-core 0.76.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +6408 -0
- data/LICENSE +37 -0
- data/README.md +115 -0
- data/helpers/elixir/bin/check_update.exs +92 -0
- data/helpers/elixir/bin/do_update.exs +39 -0
- data/helpers/elixir/bin/parse_deps.exs +103 -0
- data/helpers/elixir/bin/run.exs +76 -0
- data/helpers/elixir/mix.exs +21 -0
- data/helpers/elixir/mix.lock +3 -0
- data/helpers/go/Makefile +9 -0
- data/helpers/go/go.mod +9 -0
- data/helpers/go/go.sum +5 -0
- data/helpers/go/importresolver/main.go +34 -0
- data/helpers/go/main.go +77 -0
- data/helpers/go/updatechecker/main.go +107 -0
- data/helpers/go/updater/go.mod +3 -0
- data/helpers/go/updater/go.sum +2 -0
- data/helpers/go/updater/helpers.go +57 -0
- data/helpers/go/updater/main.go +48 -0
- data/helpers/npm/.agignore +1 -0
- data/helpers/npm/.envrc +2 -0
- data/helpers/npm/.eslintrc +14 -0
- data/helpers/npm/.nvimrc +7 -0
- data/helpers/npm/bin/run.js +34 -0
- data/helpers/npm/lib/helpers.js +25 -0
- data/helpers/npm/lib/peer-dependency-checker.js +102 -0
- data/helpers/npm/lib/subdependency-updater.js +48 -0
- data/helpers/npm/lib/updater.js +95 -0
- data/helpers/npm/package.json +17 -0
- data/helpers/npm/test/fixtures/npm-left-pad.json +1 -0
- data/helpers/npm/test/fixtures/updater/original/package-lock.json +16 -0
- data/helpers/npm/test/fixtures/updater/original/package.json +9 -0
- data/helpers/npm/test/fixtures/updater/updated/package-lock.json +16 -0
- data/helpers/npm/test/helpers.js +7 -0
- data/helpers/npm/test/updater.test.js +50 -0
- data/helpers/npm/yarn.lock +6120 -0
- data/helpers/php/.php_cs +34 -0
- data/helpers/php/bin/run.php +57 -0
- data/helpers/php/composer.json +14 -0
- data/helpers/php/composer.lock +1521 -0
- data/helpers/php/composer.phar +0 -0
- data/helpers/php/setup.sh +4 -0
- data/helpers/php/src/DependabotInstallationManager.php +61 -0
- data/helpers/php/src/DependabotPluginManager.php +23 -0
- data/helpers/php/src/ExceptionIO.php +25 -0
- data/helpers/php/src/Hasher.php +21 -0
- data/helpers/php/src/UpdateChecker.php +123 -0
- data/helpers/php/src/Updater.php +97 -0
- data/helpers/python/lib/__init__.py +0 -0
- data/helpers/python/lib/hasher.py +23 -0
- data/helpers/python/lib/parser.py +130 -0
- data/helpers/python/requirements.txt +9 -0
- data/helpers/python/run.py +18 -0
- data/helpers/test/run.rb +15 -0
- data/helpers/utils/git-credential-store-immutable +10 -0
- data/helpers/yarn/.agignore +1 -0
- data/helpers/yarn/.envrc +2 -0
- data/helpers/yarn/.eslintrc +14 -0
- data/helpers/yarn/.nvimrc +7 -0
- data/helpers/yarn/bin/run.js +36 -0
- data/helpers/yarn/lib/fix-duplicates.js +53 -0
- data/helpers/yarn/lib/helpers.js +5 -0
- data/helpers/yarn/lib/lockfile-parser.js +21 -0
- data/helpers/yarn/lib/peer-dependency-checker.js +130 -0
- data/helpers/yarn/lib/replace-lockfile-declaration.js +45 -0
- data/helpers/yarn/lib/subdependency-updater.js +69 -0
- data/helpers/yarn/lib/updater.js +254 -0
- data/helpers/yarn/package.json +17 -0
- data/helpers/yarn/test/fixtures/updater/original/package.json +6 -0
- data/helpers/yarn/test/fixtures/updater/original/yarn.lock +11 -0
- data/helpers/yarn/test/fixtures/updater/updated/yarn.lock +12 -0
- data/helpers/yarn/test/fixtures/updater/with-version-comments/package.json +5 -0
- data/helpers/yarn/test/fixtures/updater/with-version-comments/yarn.lock +13 -0
- data/helpers/yarn/test/fixtures/yarnpkg-is-positive.json +1 -0
- data/helpers/yarn/test/fixtures/yarnpkg-left-pad.json +1 -0
- data/helpers/yarn/test/helpers.js +7 -0
- data/helpers/yarn/test/updater.test.js +93 -0
- data/helpers/yarn/yarn.lock +4912 -0
- data/lib/bundler_definition_bundler_version_patch.rb +15 -0
- data/lib/bundler_definition_ruby_version_patch.rb +14 -0
- data/lib/bundler_git_source_patch.rb +27 -0
- data/lib/dependabot.rb +4 -0
- data/lib/dependabot/clients/bitbucket.rb +101 -0
- data/lib/dependabot/clients/github_with_retries.rb +117 -0
- data/lib/dependabot/clients/gitlab.rb +72 -0
- data/lib/dependabot/dependency.rb +118 -0
- data/lib/dependabot/dependency_file.rb +54 -0
- data/lib/dependabot/errors.rb +179 -0
- data/lib/dependabot/file_fetchers.rb +48 -0
- data/lib/dependabot/file_fetchers/README.md +65 -0
- data/lib/dependabot/file_fetchers/base.rb +302 -0
- data/lib/dependabot/file_fetchers/docker/docker.rb +40 -0
- data/lib/dependabot/file_fetchers/dotnet/nuget.rb +215 -0
- data/lib/dependabot/file_fetchers/dotnet/nuget/import_paths_finder.rb +51 -0
- data/lib/dependabot/file_fetchers/dotnet/nuget/sln_project_paths_finder.rb +55 -0
- data/lib/dependabot/file_fetchers/elixir/hex.rb +78 -0
- data/lib/dependabot/file_fetchers/elm/elm_package.rb +52 -0
- data/lib/dependabot/file_fetchers/git/submodules.rb +73 -0
- data/lib/dependabot/file_fetchers/go/dep.rb +69 -0
- data/lib/dependabot/file_fetchers/go/modules.rb +64 -0
- data/lib/dependabot/file_fetchers/java/gradle.rb +56 -0
- data/lib/dependabot/file_fetchers/java/gradle/settings_file_parser.rb +66 -0
- data/lib/dependabot/file_fetchers/java/maven.rb +127 -0
- data/lib/dependabot/file_fetchers/java_script/npm_and_yarn.rb +330 -0
- data/lib/dependabot/file_fetchers/java_script/npm_and_yarn/path_dependency_builder.rb +107 -0
- data/lib/dependabot/file_fetchers/php/composer.rb +131 -0
- data/lib/dependabot/file_fetchers/python/pip.rb +305 -0
- data/lib/dependabot/file_fetchers/ruby/bundler.rb +185 -0
- data/lib/dependabot/file_fetchers/ruby/bundler/child_gemfile_finder.rb +70 -0
- data/lib/dependabot/file_fetchers/ruby/bundler/path_gemspec_finder.rb +114 -0
- data/lib/dependabot/file_fetchers/ruby/bundler/require_relative_finder.rb +67 -0
- data/lib/dependabot/file_fetchers/rust/cargo.rb +240 -0
- data/lib/dependabot/file_parsers.rb +48 -0
- data/lib/dependabot/file_parsers/README.md +45 -0
- data/lib/dependabot/file_parsers/base.rb +31 -0
- data/lib/dependabot/file_parsers/base/dependency_set.rb +77 -0
- data/lib/dependabot/file_parsers/docker/docker.rb +164 -0
- data/lib/dependabot/file_parsers/dotnet/nuget.rb +85 -0
- data/lib/dependabot/file_parsers/dotnet/nuget/packages_config_parser.rb +65 -0
- data/lib/dependabot/file_parsers/dotnet/nuget/project_file_parser.rb +156 -0
- data/lib/dependabot/file_parsers/dotnet/nuget/property_value_finder.rb +131 -0
- data/lib/dependabot/file_parsers/elixir/hex.rb +134 -0
- data/lib/dependabot/file_parsers/elm/elm_package.rb +136 -0
- data/lib/dependabot/file_parsers/git/submodules.rb +69 -0
- data/lib/dependabot/file_parsers/go/dep.rb +163 -0
- data/lib/dependabot/file_parsers/go/modules.rb +34 -0
- data/lib/dependabot/file_parsers/go/modules/go_mod_parser.rb +134 -0
- data/lib/dependabot/file_parsers/java/gradle.rb +236 -0
- data/lib/dependabot/file_parsers/java/gradle/property_value_finder.rb +90 -0
- data/lib/dependabot/file_parsers/java/gradle/repositories_finder.rb +145 -0
- data/lib/dependabot/file_parsers/java/maven.rb +252 -0
- data/lib/dependabot/file_parsers/java/maven/property_value_finder.rb +166 -0
- data/lib/dependabot/file_parsers/java/maven/repositories_finder.rb +188 -0
- data/lib/dependabot/file_parsers/java_script/npm_and_yarn.rb +394 -0
- data/lib/dependabot/file_parsers/php/composer.rb +177 -0
- data/lib/dependabot/file_parsers/python/pip.rb +223 -0
- data/lib/dependabot/file_parsers/python/pip/pipfile_files_parser.rb +154 -0
- data/lib/dependabot/file_parsers/python/pip/poetry_files_parser.rb +141 -0
- data/lib/dependabot/file_parsers/python/pip/setup_file_parser.rb +160 -0
- data/lib/dependabot/file_parsers/ruby/bundler.rb +295 -0
- data/lib/dependabot/file_parsers/ruby/bundler/file_preparer.rb +85 -0
- data/lib/dependabot/file_parsers/ruby/bundler/gemfile_checker.rb +48 -0
- data/lib/dependabot/file_parsers/rust/cargo.rb +213 -0
- data/lib/dependabot/file_updaters.rb +48 -0
- data/lib/dependabot/file_updaters/README.md +58 -0
- data/lib/dependabot/file_updaters/base.rb +52 -0
- data/lib/dependabot/file_updaters/docker/docker.rb +133 -0
- data/lib/dependabot/file_updaters/dotnet/nuget.rb +151 -0
- data/lib/dependabot/file_updaters/dotnet/nuget/packages_config_declaration_finder.rb +69 -0
- data/lib/dependabot/file_updaters/dotnet/nuget/project_file_declaration_finder.rb +78 -0
- data/lib/dependabot/file_updaters/dotnet/nuget/property_value_updater.rb +64 -0
- data/lib/dependabot/file_updaters/elixir/hex.rb +71 -0
- data/lib/dependabot/file_updaters/elixir/hex/lockfile_updater.rb +147 -0
- data/lib/dependabot/file_updaters/elixir/hex/mixfile_git_pin_updater.rb +53 -0
- data/lib/dependabot/file_updaters/elixir/hex/mixfile_requirement_updater.rb +74 -0
- data/lib/dependabot/file_updaters/elixir/hex/mixfile_sanitizer.rb +28 -0
- data/lib/dependabot/file_updaters/elixir/hex/mixfile_updater.rb +98 -0
- data/lib/dependabot/file_updaters/elm/elm_package.rb +79 -0
- data/lib/dependabot/file_updaters/elm/elm_package/elm_json_updater.rb +69 -0
- data/lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb +69 -0
- data/lib/dependabot/file_updaters/git/submodules.rb +38 -0
- data/lib/dependabot/file_updaters/go/dep.rb +77 -0
- data/lib/dependabot/file_updaters/go/dep/lockfile_updater.rb +219 -0
- data/lib/dependabot/file_updaters/go/dep/manifest_updater.rb +155 -0
- data/lib/dependabot/file_updaters/go/modules.rb +71 -0
- data/lib/dependabot/file_updaters/go/modules/go_mod_updater.rb +81 -0
- data/lib/dependabot/file_updaters/java/gradle.rb +176 -0
- data/lib/dependabot/file_updaters/java/gradle/dependency_set_updater.rb +66 -0
- data/lib/dependabot/file_updaters/java/gradle/property_value_updater.rb +58 -0
- data/lib/dependabot/file_updaters/java/maven.rb +155 -0
- data/lib/dependabot/file_updaters/java/maven/declaration_finder.rb +132 -0
- data/lib/dependabot/file_updaters/java/maven/property_value_updater.rb +61 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn.rb +159 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn/npm_lockfile_updater.rb +532 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn/npmrc_builder.rb +191 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn/package_json_preparer.rb +91 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn/package_json_updater.rb +220 -0
- data/lib/dependabot/file_updaters/java_script/npm_and_yarn/yarn_lockfile_updater.rb +475 -0
- data/lib/dependabot/file_updaters/php/composer.rb +78 -0
- data/lib/dependabot/file_updaters/php/composer/lockfile_updater.rb +264 -0
- data/lib/dependabot/file_updaters/php/composer/manifest_updater.rb +70 -0
- data/lib/dependabot/file_updaters/python/pip.rb +147 -0
- data/lib/dependabot/file_updaters/python/pip/pip_compile_file_updater.rb +363 -0
- data/lib/dependabot/file_updaters/python/pip/pipfile_file_updater.rb +397 -0
- data/lib/dependabot/file_updaters/python/pip/pipfile_preparer.rb +125 -0
- data/lib/dependabot/file_updaters/python/pip/poetry_file_updater.rb +289 -0
- data/lib/dependabot/file_updaters/python/pip/pyproject_preparer.rb +105 -0
- data/lib/dependabot/file_updaters/python/pip/requirement_file_updater.rb +166 -0
- data/lib/dependabot/file_updaters/python/pip/requirement_replacer.rb +95 -0
- data/lib/dependabot/file_updaters/python/pip/setup_file_sanitizer.rb +91 -0
- data/lib/dependabot/file_updaters/ruby/bundler.rb +121 -0
- data/lib/dependabot/file_updaters/ruby/bundler/gemfile_updater.rb +116 -0
- data/lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb +52 -0
- data/lib/dependabot/file_updaters/ruby/bundler/gemspec_sanitizer.rb +298 -0
- data/lib/dependabot/file_updaters/ruby/bundler/gemspec_updater.rb +64 -0
- data/lib/dependabot/file_updaters/ruby/bundler/git_pin_replacer.rb +80 -0
- data/lib/dependabot/file_updaters/ruby/bundler/git_source_remover.rb +102 -0
- data/lib/dependabot/file_updaters/ruby/bundler/lockfile_updater.rb +384 -0
- data/lib/dependabot/file_updaters/ruby/bundler/requirement_replacer.rb +188 -0
- data/lib/dependabot/file_updaters/rust/cargo.rb +83 -0
- data/lib/dependabot/file_updaters/rust/cargo/lockfile_updater.rb +251 -0
- data/lib/dependabot/file_updaters/rust/cargo/manifest_updater.rb +162 -0
- data/lib/dependabot/git_commit_checker.rb +412 -0
- data/lib/dependabot/metadata_finders.rb +46 -0
- data/lib/dependabot/metadata_finders/README.md +53 -0
- data/lib/dependabot/metadata_finders/base.rb +117 -0
- data/lib/dependabot/metadata_finders/base/changelog_finder.rb +317 -0
- data/lib/dependabot/metadata_finders/base/changelog_pruner.rb +177 -0
- data/lib/dependabot/metadata_finders/base/commits_finder.rb +217 -0
- data/lib/dependabot/metadata_finders/base/release_finder.rb +251 -0
- data/lib/dependabot/metadata_finders/docker/docker.rb +18 -0
- data/lib/dependabot/metadata_finders/dotnet/nuget.rb +116 -0
- data/lib/dependabot/metadata_finders/elixir/hex.rb +69 -0
- data/lib/dependabot/metadata_finders/elm/elm_package.rb +22 -0
- data/lib/dependabot/metadata_finders/git/submodules.rb +20 -0
- data/lib/dependabot/metadata_finders/go/dep.rb +56 -0
- data/lib/dependabot/metadata_finders/java/maven.rb +173 -0
- data/lib/dependabot/metadata_finders/java_script/npm_and_yarn.rb +215 -0
- data/lib/dependabot/metadata_finders/php/composer.rb +66 -0
- data/lib/dependabot/metadata_finders/python/pip.rb +120 -0
- data/lib/dependabot/metadata_finders/ruby/bundler.rb +150 -0
- data/lib/dependabot/metadata_finders/rust/cargo.rb +64 -0
- data/lib/dependabot/pull_request_creator.rb +151 -0
- data/lib/dependabot/pull_request_creator/branch_namer.rb +170 -0
- data/lib/dependabot/pull_request_creator/commit_signer.rb +63 -0
- data/lib/dependabot/pull_request_creator/github.rb +233 -0
- data/lib/dependabot/pull_request_creator/gitlab.rb +122 -0
- data/lib/dependabot/pull_request_creator/labeler.rb +361 -0
- data/lib/dependabot/pull_request_creator/message_builder.rb +888 -0
- data/lib/dependabot/pull_request_updater.rb +43 -0
- data/lib/dependabot/pull_request_updater/github.rb +151 -0
- data/lib/dependabot/shared_helpers.rb +201 -0
- data/lib/dependabot/source.rb +120 -0
- data/lib/dependabot/update_checkers.rb +48 -0
- data/lib/dependabot/update_checkers/README.md +67 -0
- data/lib/dependabot/update_checkers/base.rb +220 -0
- data/lib/dependabot/update_checkers/docker/docker.rb +290 -0
- data/lib/dependabot/update_checkers/dotnet/nuget.rb +127 -0
- data/lib/dependabot/update_checkers/dotnet/nuget/property_updater.rb +97 -0
- data/lib/dependabot/update_checkers/dotnet/nuget/repository_finder.rb +232 -0
- data/lib/dependabot/update_checkers/dotnet/nuget/requirements_updater.rb +81 -0
- data/lib/dependabot/update_checkers/dotnet/nuget/version_finder.rb +231 -0
- data/lib/dependabot/update_checkers/elixir/hex.rb +274 -0
- data/lib/dependabot/update_checkers/elixir/hex/file_preparer.rb +193 -0
- data/lib/dependabot/update_checkers/elixir/hex/requirements_updater.rb +177 -0
- data/lib/dependabot/update_checkers/elixir/hex/version_resolver.rb +175 -0
- data/lib/dependabot/update_checkers/elm/elm_package.rb +126 -0
- data/lib/dependabot/update_checkers/elm/elm_package/cli_parser.rb +33 -0
- data/lib/dependabot/update_checkers/elm/elm_package/elm_18_version_resolver.rb +234 -0
- data/lib/dependabot/update_checkers/elm/elm_package/elm_19_version_resolver.rb +198 -0
- data/lib/dependabot/update_checkers/elm/elm_package/requirements_updater.rb +75 -0
- data/lib/dependabot/update_checkers/git/submodules.rb +52 -0
- data/lib/dependabot/update_checkers/go/dep.rb +311 -0
- data/lib/dependabot/update_checkers/go/dep/file_preparer.rb +221 -0
- data/lib/dependabot/update_checkers/go/dep/latest_version_finder.rb +169 -0
- data/lib/dependabot/update_checkers/go/dep/requirements_updater.rb +223 -0
- data/lib/dependabot/update_checkers/go/dep/version_resolver.rb +164 -0
- data/lib/dependabot/update_checkers/go/modules.rb +112 -0
- data/lib/dependabot/update_checkers/java/gradle.rb +148 -0
- data/lib/dependabot/update_checkers/java/gradle/multi_dependency_updater.rb +105 -0
- data/lib/dependabot/update_checkers/java/gradle/version_finder.rb +183 -0
- data/lib/dependabot/update_checkers/java/maven.rb +159 -0
- data/lib/dependabot/update_checkers/java/maven/property_updater.rb +127 -0
- data/lib/dependabot/update_checkers/java/maven/requirements_updater.rb +92 -0
- data/lib/dependabot/update_checkers/java/maven/version_finder.rb +225 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn.rb +280 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/latest_version_finder.rb +342 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/library_detector.rb +69 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/registry_finder.rb +226 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/requirements_updater.rb +197 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/subdependency_version_resolver.rb +228 -0
- data/lib/dependabot/update_checkers/java_script/npm_and_yarn/version_resolver.rb +452 -0
- data/lib/dependabot/update_checkers/php/composer.rb +165 -0
- data/lib/dependabot/update_checkers/php/composer/requirements_updater.rb +243 -0
- data/lib/dependabot/update_checkers/php/composer/version_resolver.rb +203 -0
- data/lib/dependabot/update_checkers/python/pip.rb +227 -0
- data/lib/dependabot/update_checkers/python/pip/latest_version_finder.rb +252 -0
- data/lib/dependabot/update_checkers/python/pip/pip_compile_version_resolver.rb +380 -0
- data/lib/dependabot/update_checkers/python/pip/pipfile_version_resolver.rb +559 -0
- data/lib/dependabot/update_checkers/python/pip/poetry_version_resolver.rb +300 -0
- data/lib/dependabot/update_checkers/python/pip/requirements_updater.rb +367 -0
- data/lib/dependabot/update_checkers/ruby/bundler.rb +324 -0
- data/lib/dependabot/update_checkers/ruby/bundler/file_preparer.rb +278 -0
- data/lib/dependabot/update_checkers/ruby/bundler/force_updater.rb +261 -0
- data/lib/dependabot/update_checkers/ruby/bundler/latest_version_finder.rb +169 -0
- data/lib/dependabot/update_checkers/ruby/bundler/requirements_updater.rb +264 -0
- data/lib/dependabot/update_checkers/ruby/bundler/ruby_requirement_setter.rb +115 -0
- data/lib/dependabot/update_checkers/ruby/bundler/shared_bundler_helpers.rb +243 -0
- data/lib/dependabot/update_checkers/ruby/bundler/version_resolver.rb +255 -0
- data/lib/dependabot/update_checkers/rust/cargo.rb +282 -0
- data/lib/dependabot/update_checkers/rust/cargo/file_preparer.rb +202 -0
- data/lib/dependabot/update_checkers/rust/cargo/requirements_updater.rb +175 -0
- data/lib/dependabot/update_checkers/rust/cargo/version_resolver.rb +242 -0
- data/lib/dependabot/utils.rb +84 -0
- data/lib/dependabot/utils/docker/credentials_finder.rb +65 -0
- data/lib/dependabot/utils/dotnet/requirement.rb +90 -0
- data/lib/dependabot/utils/dotnet/version.rb +22 -0
- data/lib/dependabot/utils/elixir/requirement.rb +53 -0
- data/lib/dependabot/utils/elixir/version.rb +59 -0
- data/lib/dependabot/utils/elm/requirement.rb +92 -0
- data/lib/dependabot/utils/elm/version.rb +19 -0
- data/lib/dependabot/utils/go/path_converter.rb +74 -0
- data/lib/dependabot/utils/go/requirement.rb +152 -0
- data/lib/dependabot/utils/go/shared_helper.rb +20 -0
- data/lib/dependabot/utils/go/version.rb +40 -0
- data/lib/dependabot/utils/java/requirement.rb +110 -0
- data/lib/dependabot/utils/java/version.rb +179 -0
- data/lib/dependabot/utils/java_script/requirement.rb +117 -0
- data/lib/dependabot/utils/java_script/version.rb +30 -0
- data/lib/dependabot/utils/php/requirement.rb +97 -0
- data/lib/dependabot/utils/php/version.rb +22 -0
- data/lib/dependabot/utils/python/requirement.rb +130 -0
- data/lib/dependabot/utils/python/version.rb +88 -0
- data/lib/dependabot/utils/ruby/requirement.rb +26 -0
- data/lib/dependabot/utils/rust/requirement.rb +108 -0
- data/lib/dependabot/utils/rust/version.rb +32 -0
- data/lib/dependabot/version.rb +5 -0
- data/lib/python_requirement_parser.rb +33 -0
- data/lib/python_versions.rb +21 -0
- metadata +641 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
from lib import parser, hasher
|
|
5
|
+
|
|
6
|
+
if __name__ == "__main__":
|
|
7
|
+
args = json.loads(sys.stdin.read())
|
|
8
|
+
|
|
9
|
+
if args["function"] == "parse_requirements":
|
|
10
|
+
print(parser.parse_requirements(args["args"][0]))
|
|
11
|
+
if args["function"] == "parse_setup":
|
|
12
|
+
print(parser.parse_setup(args["args"][0]))
|
|
13
|
+
elif args["function"] == "get_dependency_hash":
|
|
14
|
+
print(hasher.get_dependency_hash(*args["args"]))
|
|
15
|
+
elif args["function"] == "get_pipfile_hash":
|
|
16
|
+
print(hasher.get_pipfile_hash(*args["args"]))
|
|
17
|
+
elif args["function"] == "get_pyproject_hash":
|
|
18
|
+
print(hasher.get_pyproject_hash(*args["args"]))
|
data/helpers/test/run.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
request = JSON.parse($stdin.read)
|
|
6
|
+
case request["function"]
|
|
7
|
+
when "error"
|
|
8
|
+
$stdout.write(JSON.dump(error: "Something went wrong"))
|
|
9
|
+
exit 1
|
|
10
|
+
when "hard_error"
|
|
11
|
+
puts "Oh no!"
|
|
12
|
+
exit 0
|
|
13
|
+
else
|
|
14
|
+
$stdout.write(JSON.dump(result: request))
|
|
15
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "shellwords"
|
|
4
|
+
|
|
5
|
+
# Valid commands are: `get`, `store`, `erase`. We only want to let `get`
|
|
6
|
+
# through, as the others mutate the credential store.
|
|
7
|
+
if ARGV.include?("get")
|
|
8
|
+
args = ARGV.map { |arg| Shellwords.escape(arg) }.join(" ")
|
|
9
|
+
exec "git credential-store #{args}"
|
|
10
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
node_modules/
|
data/helpers/yarn/.envrc
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const lockfileParser = require("../lib/lockfile-parser");
|
|
2
|
+
const updater = require("../lib/updater");
|
|
3
|
+
const subdependencyUpdater = require("../lib/subdependency-updater");
|
|
4
|
+
const peerDependencyChecker = require("../lib/peer-dependency-checker");
|
|
5
|
+
|
|
6
|
+
const functionMap = {
|
|
7
|
+
parseLockfile: lockfileParser.parse,
|
|
8
|
+
update: updater.updateDependencyFiles,
|
|
9
|
+
updateSubdependency: subdependencyUpdater.updateDependencyFile,
|
|
10
|
+
checkPeerDependencies: peerDependencyChecker.checkPeerDependencies
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
function output(obj) {
|
|
14
|
+
process.stdout.write(JSON.stringify(obj));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const input = [];
|
|
18
|
+
process.stdin.on("data", data => input.push(data));
|
|
19
|
+
process.stdin.on("end", () => {
|
|
20
|
+
const request = JSON.parse(input.join(""));
|
|
21
|
+
const func = functionMap[request.function];
|
|
22
|
+
if (!func) {
|
|
23
|
+
output({ error: `Invalid function ${request.function}` });
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func
|
|
28
|
+
.apply(null, request.args)
|
|
29
|
+
.then(result => {
|
|
30
|
+
output({ result: result });
|
|
31
|
+
})
|
|
32
|
+
.catch(error => {
|
|
33
|
+
output({ error: error.message });
|
|
34
|
+
process.exit(1);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
|
|
2
|
+
const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
|
|
3
|
+
.default;
|
|
4
|
+
const semver = require("semver");
|
|
5
|
+
|
|
6
|
+
// Inspired by yarn-tools. Altered to ensure the latest version is always used
|
|
7
|
+
// for version ranges which allow it.
|
|
8
|
+
module.exports = (data, includePackages = []) => {
|
|
9
|
+
const json = parse(data).object;
|
|
10
|
+
const enableLockfileVersions = Boolean(data.match(/^# yarn v/m));
|
|
11
|
+
const noHeader = !Boolean(data.match(/^# THIS IS AN AU/m));
|
|
12
|
+
|
|
13
|
+
const packages = {};
|
|
14
|
+
const re = /^(.*)@([^@]*?)$/;
|
|
15
|
+
|
|
16
|
+
Object.entries(json).forEach(([name, pkg]) => {
|
|
17
|
+
if (name.match(re)) {
|
|
18
|
+
const [_, packageName, requestedVersion] = name.match(re);
|
|
19
|
+
packages[packageName] = packages[packageName] || [];
|
|
20
|
+
packages[packageName].push(
|
|
21
|
+
Object.assign({}, { name, pkg, packageName, requestedVersion })
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
Object.entries(packages)
|
|
27
|
+
.filter(([name]) => {
|
|
28
|
+
if (includePackages.length === 0) return true;
|
|
29
|
+
return includePackages.includes(name);
|
|
30
|
+
})
|
|
31
|
+
.forEach(([name, packages]) => {
|
|
32
|
+
// Reverse sort, so we'll find the maximum satisfying version first
|
|
33
|
+
const versions = packages.map(p => p.pkg.version).sort(semver.rcompare);
|
|
34
|
+
const ranges = packages.map(p => p.requestedVersion);
|
|
35
|
+
|
|
36
|
+
// Dedup each package to its maxSatisfying version
|
|
37
|
+
packages.forEach(p => {
|
|
38
|
+
const targetVersion = semver.maxSatisfying(
|
|
39
|
+
versions,
|
|
40
|
+
p.requestedVersion
|
|
41
|
+
);
|
|
42
|
+
if (targetVersion === null) return;
|
|
43
|
+
if (targetVersion !== p.pkg.version) {
|
|
44
|
+
const dedupedPackage = packages.find(
|
|
45
|
+
p => p.pkg.version === targetVersion
|
|
46
|
+
);
|
|
47
|
+
json[`${name}@${p.requestedVersion}`] = dedupedPackage.pkg;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return stringify(json, noHeader, enableLockfileVersions);
|
|
53
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* YARN.LOCK PARSER
|
|
2
|
+
*
|
|
3
|
+
* Inputs:
|
|
4
|
+
* - directory containing a yarn.lock
|
|
5
|
+
*
|
|
6
|
+
* Outputs:
|
|
7
|
+
* - JSON formatted yarn.lock
|
|
8
|
+
*/
|
|
9
|
+
const fs = require("fs");
|
|
10
|
+
const path = require("path");
|
|
11
|
+
const parseLockfile = require("@dependabot/yarn-lib/lib/lockfile/parse")
|
|
12
|
+
.default;
|
|
13
|
+
|
|
14
|
+
async function parse(directory) {
|
|
15
|
+
const readFile = fileName =>
|
|
16
|
+
fs.readFileSync(path.join(directory, fileName)).toString();
|
|
17
|
+
const data = readFile("yarn.lock");
|
|
18
|
+
return parseLockfile(data).object;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = { parse };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/* PEER DEPENDENCY CHECKER
|
|
2
|
+
*
|
|
3
|
+
* Inputs:
|
|
4
|
+
* - directory containing a package.json and a yarn.lock
|
|
5
|
+
* - dependency name
|
|
6
|
+
* - new dependency version
|
|
7
|
+
* - requirements for this dependency
|
|
8
|
+
*
|
|
9
|
+
* Outputs:
|
|
10
|
+
* - successful completion, or an error if there are peer dependency warnings
|
|
11
|
+
*/
|
|
12
|
+
const path = require("path");
|
|
13
|
+
const { Add } = require("@dependabot/yarn-lib/lib/cli/commands/add");
|
|
14
|
+
const Config = require("@dependabot/yarn-lib/lib/config").default;
|
|
15
|
+
const { BufferReporter } = require("@dependabot/yarn-lib/lib/reporters");
|
|
16
|
+
const Lockfile = require("@dependabot/yarn-lib/lib/lockfile").default;
|
|
17
|
+
const { isString } = require("./helpers");
|
|
18
|
+
const fetcher = require("@dependabot/yarn-lib/lib/package-fetcher.js");
|
|
19
|
+
|
|
20
|
+
// Check peer dependencies without downloading node_modules or updating
|
|
21
|
+
// package/lockfiles
|
|
22
|
+
//
|
|
23
|
+
// Logic copied from the import command
|
|
24
|
+
class LightweightAdd extends Add {
|
|
25
|
+
async bailout() {
|
|
26
|
+
const manifests = await fetcher.fetch(
|
|
27
|
+
this.resolver.getManifests(),
|
|
28
|
+
this.config
|
|
29
|
+
);
|
|
30
|
+
this.resolver.updateManifests(manifests);
|
|
31
|
+
await this.linker.resolvePeerModules();
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function devRequirement(requirements) {
|
|
37
|
+
const groups = requirements.groups;
|
|
38
|
+
return (
|
|
39
|
+
groups.indexOf("devDependencies") > -1 &&
|
|
40
|
+
groups.indexOf("dependencies") == -1
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function optionalRequirement(requirements) {
|
|
45
|
+
const groups = requirements.groups;
|
|
46
|
+
return (
|
|
47
|
+
groups.indexOf("optionalDependencies") > -1 &&
|
|
48
|
+
groups.indexOf("dependencies") == -1
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function installArgsWithVersion(depName, desiredVersion, requirements) {
|
|
53
|
+
const source =
|
|
54
|
+
"source" in requirements
|
|
55
|
+
? requirements.source
|
|
56
|
+
: (requirements.find(req => req.source) || {}).source;
|
|
57
|
+
const req =
|
|
58
|
+
"requirement" in requirements
|
|
59
|
+
? requirements.requirement
|
|
60
|
+
: (requirements.find(req => req.requirement) || {}).requirement;
|
|
61
|
+
|
|
62
|
+
if (source && source.type === "git") {
|
|
63
|
+
if (desiredVersion) {
|
|
64
|
+
return [`${depName}@${source.url}#${desiredVersion}`];
|
|
65
|
+
} else {
|
|
66
|
+
return [`${depName}@${source.url}`];
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
return [`${depName}@${desiredVersion || req}`];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function checkPeerDependencies(
|
|
74
|
+
directory,
|
|
75
|
+
depName,
|
|
76
|
+
desiredVersion,
|
|
77
|
+
requirements
|
|
78
|
+
) {
|
|
79
|
+
for (let req of requirements) {
|
|
80
|
+
await checkPeerDepsForReq(directory, depName, desiredVersion, req);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async function checkPeerDepsForReq(
|
|
85
|
+
directory,
|
|
86
|
+
depName,
|
|
87
|
+
desiredVersion,
|
|
88
|
+
requirement
|
|
89
|
+
) {
|
|
90
|
+
const flags = {
|
|
91
|
+
ignoreScripts: true,
|
|
92
|
+
ignoreWorkspaceRootCheck: true,
|
|
93
|
+
ignoreEngines: true,
|
|
94
|
+
dev: devRequirement(requirement),
|
|
95
|
+
optional: optionalRequirement(requirement)
|
|
96
|
+
};
|
|
97
|
+
const reporter = new BufferReporter();
|
|
98
|
+
const config = new Config(reporter);
|
|
99
|
+
|
|
100
|
+
await config.init({
|
|
101
|
+
cwd: path.join(directory, path.dirname(requirement.file)),
|
|
102
|
+
nonInteractive: true,
|
|
103
|
+
enableDefaultRc: true
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const lockfile = await Lockfile.fromDirectory(directory, reporter);
|
|
107
|
+
|
|
108
|
+
// Returns dep name and version for yarn add, example: ["react@16.6.0"]
|
|
109
|
+
let args = installArgsWithVersion(depName, desiredVersion, requirement);
|
|
110
|
+
|
|
111
|
+
// Just as if we'd run `yarn add package@version`, but using our lightweight
|
|
112
|
+
// implementation of Add that doesn't actually download and install packages
|
|
113
|
+
const add = new LightweightAdd(args, flags, config, reporter, lockfile);
|
|
114
|
+
|
|
115
|
+
await add.init();
|
|
116
|
+
|
|
117
|
+
const eventBuffer = reporter.getBuffer();
|
|
118
|
+
const peerDependencyWarnings = eventBuffer
|
|
119
|
+
.map(({ data }) => data)
|
|
120
|
+
.filter(data => {
|
|
121
|
+
// Guard against event.data sometimes being an object
|
|
122
|
+
return isString(data) && data.match(/(unmet|incorrect) peer dependency/);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
if (peerDependencyWarnings.length) {
|
|
126
|
+
throw new Error(peerDependencyWarnings.join("\n"));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
module.exports = { checkPeerDependencies };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
|
|
2
|
+
const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
|
|
3
|
+
.default;
|
|
4
|
+
|
|
5
|
+
// Get an array of a dependency's requested version ranges from a lockfile
|
|
6
|
+
function getRequestedVersions(depName, lockfileJson) {
|
|
7
|
+
const requestedVersions = [];
|
|
8
|
+
const re = /^(.*)@([^@]*?)$/;
|
|
9
|
+
|
|
10
|
+
Object.entries(lockfileJson).forEach(([name, _]) => {
|
|
11
|
+
if (name.match(re)) {
|
|
12
|
+
const [_, packageName, requestedVersion] = name.match(re);
|
|
13
|
+
if (packageName === depName) {
|
|
14
|
+
requestedVersions.push(requestedVersion);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
return requestedVersions;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
module.exports = (oldLockfileContent, newLockfileContent, depName, newReq) => {
|
|
23
|
+
const oldJson = parse(oldLockfileContent).object;
|
|
24
|
+
const newJson = parse(newLockfileContent).object;
|
|
25
|
+
|
|
26
|
+
const enableLockfileVersions = Boolean(
|
|
27
|
+
oldLockfileContent.match(/^# yarn v/m)
|
|
28
|
+
);
|
|
29
|
+
const noHeader = !Boolean(oldLockfileContent.match(/^# THIS IS AN AU/m));
|
|
30
|
+
|
|
31
|
+
const oldPackageReqs = getRequestedVersions(depName, oldJson);
|
|
32
|
+
const newPackageReqs = getRequestedVersions(depName, newJson);
|
|
33
|
+
|
|
34
|
+
const reqToReplace = newPackageReqs.find(pattern => {
|
|
35
|
+
return !oldPackageReqs.includes(pattern);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (reqToReplace) {
|
|
39
|
+
newJson[`${depName}@${newReq || oldPackageReqs[0]}`] =
|
|
40
|
+
newJson[`${depName}@${reqToReplace}`];
|
|
41
|
+
delete newJson[`${depName}@${reqToReplace}`];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return stringify(newJson, noHeader, enableLockfileVersions);
|
|
45
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* DEPENDENCY FILE UPDATER
|
|
2
|
+
*
|
|
3
|
+
* Inputs:
|
|
4
|
+
* - directory containing a package.json and a yarn.lock
|
|
5
|
+
* - dependency name
|
|
6
|
+
*
|
|
7
|
+
* Outputs:
|
|
8
|
+
* - yarn.lock file
|
|
9
|
+
*
|
|
10
|
+
* Update the sub-dependency versions for this dependency to that latest
|
|
11
|
+
* possible versions, without unlocking any other dependencies
|
|
12
|
+
*/
|
|
13
|
+
const fs = require("fs");
|
|
14
|
+
const path = require("path");
|
|
15
|
+
const { Install } = require("@dependabot/yarn-lib/lib/cli/commands/install");
|
|
16
|
+
const Config = require("@dependabot/yarn-lib/lib/config").default;
|
|
17
|
+
const { EventReporter } = require("@dependabot/yarn-lib/lib/reporters");
|
|
18
|
+
const Lockfile = require("@dependabot/yarn-lib/lib/lockfile").default;
|
|
19
|
+
|
|
20
|
+
class LightweightInstall extends Install {
|
|
21
|
+
async bailout(patterns, workspaceLayout) {
|
|
22
|
+
await this.saveLockfileAndIntegrity(patterns, workspaceLayout);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Replace the version comments in the new lockfile with the ones from the old
|
|
28
|
+
// lockfile. If they weren't present in the old lockfile, delete them.
|
|
29
|
+
function recoverVersionComments(oldLockfile, newLockfile) {
|
|
30
|
+
const yarnRegex = /^# yarn v(\S+)\n/gm;
|
|
31
|
+
const nodeRegex = /^# node v(\S+)\n/gm;
|
|
32
|
+
const oldMatch = regex => [].concat(oldLockfile.match(regex))[0];
|
|
33
|
+
return newLockfile
|
|
34
|
+
.replace(yarnRegex, () => oldMatch(yarnRegex) || "")
|
|
35
|
+
.replace(nodeRegex, () => oldMatch(nodeRegex) || "");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function updateDependencyFile(directory, lockfileName) {
|
|
39
|
+
const readFile = fileName =>
|
|
40
|
+
fs.readFileSync(path.join(directory, fileName)).toString();
|
|
41
|
+
const originalYarnLock = readFile(lockfileName);
|
|
42
|
+
|
|
43
|
+
const flags = {
|
|
44
|
+
ignoreScripts: true,
|
|
45
|
+
ignoreWorkspaceRootCheck: true,
|
|
46
|
+
ignoreEngines: true
|
|
47
|
+
};
|
|
48
|
+
const reporter = new EventReporter();
|
|
49
|
+
const config = new Config(reporter);
|
|
50
|
+
await config.init({
|
|
51
|
+
cwd: directory,
|
|
52
|
+
nonInteractive: true,
|
|
53
|
+
enableDefaultRc: true
|
|
54
|
+
});
|
|
55
|
+
config.enableLockfileVersions = Boolean(originalYarnLock.match(/^# yarn v/m));
|
|
56
|
+
|
|
57
|
+
const lockfile = await Lockfile.fromDirectory(directory, reporter);
|
|
58
|
+
const install = new LightweightInstall(flags, config, reporter, lockfile);
|
|
59
|
+
await install.init();
|
|
60
|
+
var updatedYarnLock = readFile(lockfileName);
|
|
61
|
+
|
|
62
|
+
updatedYarnLock = recoverVersionComments(originalYarnLock, updatedYarnLock);
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
[lockfileName]: updatedYarnLock
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = { updateDependencyFile };
|