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,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "aws-sdk-ecr"
|
|
4
|
+
require "base64"
|
|
5
|
+
|
|
6
|
+
require "dependabot/errors"
|
|
7
|
+
|
|
8
|
+
module Dependabot
|
|
9
|
+
module Utils
|
|
10
|
+
module Docker
|
|
11
|
+
class CredentialsFinder
|
|
12
|
+
AWS_ECR_URL = /dkr\.ecr\.(?<region>[^.]+).amazonaws\.com/.freeze
|
|
13
|
+
|
|
14
|
+
def initialize(credentials)
|
|
15
|
+
@credentials = credentials
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def credentials_for_registry(registry_hostname)
|
|
19
|
+
registry_details =
|
|
20
|
+
credentials.
|
|
21
|
+
select { |cred| cred["type"] == "docker_registry" }.
|
|
22
|
+
find { |cred| cred.fetch("registry") == registry_hostname }
|
|
23
|
+
return unless registry_details
|
|
24
|
+
return registry_details unless registry_hostname.match?(AWS_ECR_URL)
|
|
25
|
+
|
|
26
|
+
build_aws_credentials(registry_details)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
attr_reader :credentials
|
|
32
|
+
|
|
33
|
+
def build_aws_credentials(registry_details)
|
|
34
|
+
# If credentials have been generated from AWS we can just return them
|
|
35
|
+
return registry_details if registry_details.fetch("username") == "AWS"
|
|
36
|
+
|
|
37
|
+
# Otherwise, we need to use the provided Access Key ID and secret to
|
|
38
|
+
# generate a temporary username and password
|
|
39
|
+
aws_credentials = Aws::Credentials.new(
|
|
40
|
+
registry_details.fetch("username"),
|
|
41
|
+
registry_details.fetch("password")
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
registry_hostname = registry_details.fetch("registry")
|
|
45
|
+
region = registry_hostname.match(AWS_ECR_URL).
|
|
46
|
+
named_captures.fetch("region")
|
|
47
|
+
|
|
48
|
+
@authorization_tokens ||= {}
|
|
49
|
+
@authorization_tokens[registry_hostname] ||=
|
|
50
|
+
Aws::ECR::Client.new(region: region, credentials: aws_credentials).
|
|
51
|
+
get_authorization_token.authorization_data.first.
|
|
52
|
+
authorization_token
|
|
53
|
+
|
|
54
|
+
username, password =
|
|
55
|
+
Base64.decode64(@authorization_tokens[registry_hostname]).split(":")
|
|
56
|
+
|
|
57
|
+
registry_details.merge("username" => username, "password" => password)
|
|
58
|
+
rescue Aws::Errors::MissingCredentialsError,
|
|
59
|
+
Aws::ECR::Errors::UnrecognizedClientException
|
|
60
|
+
raise PrivateSourceAuthenticationFailure, registry_hostname
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/utils/dotnet/version"
|
|
4
|
+
|
|
5
|
+
# For details on .NET version constraints see:
|
|
6
|
+
# https://docs.microsoft.com/en-us/nuget/reference/package-versioning
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Utils
|
|
9
|
+
module Dotnet
|
|
10
|
+
class Requirement < Gem::Requirement
|
|
11
|
+
def self.parse(obj)
|
|
12
|
+
if obj.is_a?(Gem::Version)
|
|
13
|
+
return ["=", Utils::Dotnet::Version.new(obj.to_s)]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
unless (matches = PATTERN.match(obj.to_s))
|
|
17
|
+
msg = "Illformed requirement [#{obj.inspect}]"
|
|
18
|
+
raise BadRequirementError, msg
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
return DefaultRequirement if matches[1] == ">=" && matches[2] == "0"
|
|
22
|
+
|
|
23
|
+
[matches[1] || "=", Utils::Dotnet::Version.new(matches[2])]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# For consistency with other langauges, we define a requirements array.
|
|
27
|
+
# Dotnet doesn't have an `OR` separator for requirements, so it always
|
|
28
|
+
# contains a single element.
|
|
29
|
+
def self.requirements_array(requirement_string)
|
|
30
|
+
[new(requirement_string)]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def initialize(*requirements)
|
|
34
|
+
requirements = requirements.flatten.flat_map do |req_string|
|
|
35
|
+
convert_dotnet_constraint_to_ruby_constraint(req_string)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
super(requirements)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def satisfied_by?(version)
|
|
42
|
+
version = Utils::Dotnet::Version.new(version.to_s)
|
|
43
|
+
super
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def convert_dotnet_constraint_to_ruby_constraint(req_string)
|
|
49
|
+
return unless req_string
|
|
50
|
+
|
|
51
|
+
if req_string&.start_with?("(", "[")
|
|
52
|
+
return convert_dotnet_range_to_ruby_range(req_string)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
return req_string.split(",").map(&:strip) if req_string.include?(",")
|
|
56
|
+
return req_string unless req_string.include?("*")
|
|
57
|
+
|
|
58
|
+
convert_wildcard_req(req_string)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def convert_dotnet_range_to_ruby_range(req_string)
|
|
62
|
+
lower_b, upper_b = req_string.split(",").map(&:strip)
|
|
63
|
+
|
|
64
|
+
lower_b =
|
|
65
|
+
if ["(", "["].include?(lower_b) then nil
|
|
66
|
+
elsif lower_b.start_with?("(") then "> #{lower_b.sub(/\(\s*/, '')}"
|
|
67
|
+
else ">= #{lower_b.sub(/\[\s*/, '').strip}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
upper_b =
|
|
71
|
+
if [")", "]"].include?(upper_b) then nil
|
|
72
|
+
elsif upper_b.end_with?(")") then "< #{upper_b.sub(/\s*\)/, '')}"
|
|
73
|
+
else "<= #{upper_b.sub(/\s*\]/, '').strip}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
[lower_b, upper_b].compact
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def convert_wildcard_req(req_string)
|
|
80
|
+
return ">= 0" if req_string.start_with?("*")
|
|
81
|
+
|
|
82
|
+
defined_part = req_string.split("*").first
|
|
83
|
+
suffix = defined_part.end_with?(".") ? "0" : "a"
|
|
84
|
+
version = defined_part + suffix
|
|
85
|
+
"~> #{version}"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Dotnet pre-release versions use 1.0.1-rc1 syntax, which Gem::Version
|
|
4
|
+
# converts into 1.0.1.pre.rc1. We override the `to_s` method to stop that
|
|
5
|
+
# alteration.
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Utils
|
|
9
|
+
module Dotnet
|
|
10
|
+
class Version < Gem::Version
|
|
11
|
+
def initialize(version)
|
|
12
|
+
@version_string = version.to_s
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
@version_string
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/utils/elixir/version"
|
|
4
|
+
|
|
5
|
+
module Dependabot
|
|
6
|
+
module Utils
|
|
7
|
+
module Elixir
|
|
8
|
+
class Requirement < Gem::Requirement
|
|
9
|
+
AND_SEPARATOR = /\s+and\s+/.freeze
|
|
10
|
+
OR_SEPARATOR = /\s+or\s+/.freeze
|
|
11
|
+
|
|
12
|
+
# Add the double-equality matcher to the list of allowed operations
|
|
13
|
+
OPS["=="] = ->(v, r) { v == r }
|
|
14
|
+
|
|
15
|
+
# Override the version pattern to allow local versions
|
|
16
|
+
quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
|
|
17
|
+
PATTERN_RAW =
|
|
18
|
+
"\\s*(#{quoted})?\\s*(#{Utils::Elixir::Version::VERSION_PATTERN})\\s*"
|
|
19
|
+
PATTERN = /\A#{PATTERN_RAW}\z/.freeze
|
|
20
|
+
|
|
21
|
+
# Returns an array of requirements. At least one requirement from the
|
|
22
|
+
# returned array must be satisfied for a version to be valid.
|
|
23
|
+
def self.requirements_array(requirement_string)
|
|
24
|
+
requirement_string.strip.split(OR_SEPARATOR).map do |req_string|
|
|
25
|
+
requirements = req_string.strip.split(AND_SEPARATOR)
|
|
26
|
+
new(requirements)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Override the parser to create Utils::Elixir::Versions
|
|
31
|
+
def self.parse(obj)
|
|
32
|
+
if obj.is_a?(Gem::Version)
|
|
33
|
+
return ["=", Utils::Elixir::Version.new(obj.to_s)]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
unless (matches = PATTERN.match(obj.to_s))
|
|
37
|
+
msg = "Illformed requirement [#{obj.inspect}]"
|
|
38
|
+
raise BadRequirementError, msg
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
return DefaultRequirement if matches[1] == ">=" && matches[2] == "0"
|
|
42
|
+
|
|
43
|
+
[matches[1] || "=", Utils::Elixir::Version.new(matches[2])]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def satisfied_by?(version)
|
|
47
|
+
version = Utils::Elixir::Version.new(version.to_s)
|
|
48
|
+
super
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Elixir versions can include build information, which Ruby can't parse.
|
|
4
|
+
# This class augments Gem::Version with build information.
|
|
5
|
+
# See https://hexdocs.pm/elixir/Version.html for details.
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Utils
|
|
9
|
+
module Elixir
|
|
10
|
+
class Version < Gem::Version
|
|
11
|
+
attr_reader :build_info
|
|
12
|
+
|
|
13
|
+
VERSION_PATTERN = Gem::Version::VERSION_PATTERN +
|
|
14
|
+
'(\+[0-9a-zA-Z\-.]+)?'
|
|
15
|
+
|
|
16
|
+
def self.correct?(version)
|
|
17
|
+
super(version.to_s.split("+").first)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize(version)
|
|
21
|
+
@version_string = version.to_s
|
|
22
|
+
version, @build_info = version.split("+")
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_s
|
|
27
|
+
@version_string
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def inspect # :nodoc:
|
|
31
|
+
"#<#{self.class} #{@version_string}>"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def <=>(other)
|
|
35
|
+
version_comparison = super(other)
|
|
36
|
+
return version_comparison unless version_comparison.zero?
|
|
37
|
+
|
|
38
|
+
unless other.is_a?(Utils::Elixir::Version)
|
|
39
|
+
return build_info.nil? ? 0 : 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Build information comparison
|
|
43
|
+
lhsegments = build_info.to_s.split(".").map(&:downcase)
|
|
44
|
+
rhsegments = other.build_info.to_s.split(".").map(&:downcase)
|
|
45
|
+
limit = [lhsegments.count, rhsegments.count].min
|
|
46
|
+
|
|
47
|
+
lhs = ["1", *lhsegments.first(limit)].join(".")
|
|
48
|
+
rhs = ["1", *rhsegments.first(limit)].join(".")
|
|
49
|
+
|
|
50
|
+
local_comparison = Gem::Version.new(lhs) <=> Gem::Version.new(rhs)
|
|
51
|
+
|
|
52
|
+
return local_comparison unless local_comparison.zero?
|
|
53
|
+
|
|
54
|
+
lhsegments.count <=> rhsegments.count
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/utils/elm/version"
|
|
4
|
+
|
|
5
|
+
module Dependabot
|
|
6
|
+
module Utils
|
|
7
|
+
module Elm
|
|
8
|
+
class Requirement < Gem::Requirement
|
|
9
|
+
# Override the version pattern to allow local versions
|
|
10
|
+
PATTERN_RAW =
|
|
11
|
+
"(#{Utils::Elm::Version::VERSION_PATTERN}) (<=?) v (<=?) " \
|
|
12
|
+
"(#{Utils::Elm::Version::VERSION_PATTERN})"
|
|
13
|
+
PATTERN = /\A#{PATTERN_RAW}\z/.freeze
|
|
14
|
+
EXACT_PATTERN = /\A#{Utils::Elm::Version::VERSION_PATTERN}\z/.freeze
|
|
15
|
+
|
|
16
|
+
# Returns an array of requirements. At least one requirement from the
|
|
17
|
+
# returned array must be satisfied for a version to be valid.
|
|
18
|
+
def self.requirements_array(requirement_string)
|
|
19
|
+
[new(requirement_string)]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Override the parser to create Utils::Elm::Versions and return an
|
|
23
|
+
# array of parsed requirements
|
|
24
|
+
def self.parse(obj)
|
|
25
|
+
# If a version is given this is an equals requirement
|
|
26
|
+
if EXACT_PATTERN.match?(obj.to_s)
|
|
27
|
+
return [["=", Utils::Elm::Version.new(obj.to_s)]]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
unless (matches = PATTERN.match(obj.to_s))
|
|
31
|
+
msg = "Illformed requirement #{obj.inspect}"
|
|
32
|
+
raise BadRequirementError, msg
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# If the two versions specified are identical this is an equals
|
|
36
|
+
# requirement
|
|
37
|
+
if matches[1] == matches[4] && matches[3] == "<="
|
|
38
|
+
return [["=", Utils::Elm::Version.new(matches[4])]]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
[
|
|
42
|
+
[matches[2].tr("<", ">"), Utils::Elm::Version.new(matches[1])],
|
|
43
|
+
[matches[3], Utils::Elm::Version.new(matches[4])]
|
|
44
|
+
]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Overwrite superclass method to use `flat_map`
|
|
48
|
+
def initialize(*requirements)
|
|
49
|
+
if requirements.any?(&:nil?)
|
|
50
|
+
raise BadRequirementError, "Nil requirement not supported in Elm"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
requirements = requirements.flatten
|
|
54
|
+
requirements.compact!
|
|
55
|
+
requirements.uniq!
|
|
56
|
+
|
|
57
|
+
if requirements.empty?
|
|
58
|
+
@requirements = [DefaultRequirement]
|
|
59
|
+
else
|
|
60
|
+
@requirements = requirements.flat_map { |r| self.class.parse(r) }
|
|
61
|
+
sort_requirements!
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Overwrite superclass method to use `flat_map`
|
|
66
|
+
def concat(new)
|
|
67
|
+
new = new.flatten
|
|
68
|
+
new.compact!
|
|
69
|
+
new.uniq!
|
|
70
|
+
new = new.flat_map { |r| self.class.parse(r) }
|
|
71
|
+
|
|
72
|
+
@requirements.concat new
|
|
73
|
+
sort_requirements!
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def sort_requirements!
|
|
77
|
+
@requirements.sort! do |l, r|
|
|
78
|
+
comp = l.last <=> r.last # first, sort by the requirement's version
|
|
79
|
+
next comp unless comp.zero?
|
|
80
|
+
|
|
81
|
+
l.first <=> r.first # then, sort by the operator (for stability)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def satisfied_by?(version)
|
|
86
|
+
version = Utils::Elm::Version.new(version.to_s)
|
|
87
|
+
super
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Elm versions require major, minor and patch to be present
|
|
4
|
+
# They don't allow any letters
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module Utils
|
|
8
|
+
module Elm
|
|
9
|
+
class Version < Gem::Version
|
|
10
|
+
VERSION_PATTERN = "[0-9]+\.[0-9]+\.[0-9]+"
|
|
11
|
+
VERSION_PATTERN_REGEX = /\A#{VERSION_PATTERN}\Z/.freeze
|
|
12
|
+
|
|
13
|
+
def self.correct?(version)
|
|
14
|
+
version.to_s.match?(VERSION_PATTERN_REGEX)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "excon"
|
|
4
|
+
require "nokogiri"
|
|
5
|
+
|
|
6
|
+
require "dependabot/shared_helpers"
|
|
7
|
+
require "dependabot/source"
|
|
8
|
+
require "dependabot/utils/go/shared_helper"
|
|
9
|
+
|
|
10
|
+
module Dependabot
|
|
11
|
+
module Utils
|
|
12
|
+
module Go
|
|
13
|
+
module PathConverter
|
|
14
|
+
def self.git_url_for_path(path)
|
|
15
|
+
# Save a query by manually converting golang.org/x names
|
|
16
|
+
import_path = path.gsub(%r{^golang\.org/x}, "github.com/golang")
|
|
17
|
+
|
|
18
|
+
SharedHelpers.run_helper_subprocess(
|
|
19
|
+
command: Go::SharedHelper.path,
|
|
20
|
+
function: "getVcsRemoteForImport",
|
|
21
|
+
args: { import: import_path }
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Used in dependabot-backend, which doesn't have access to any Go
|
|
26
|
+
# helpers.
|
|
27
|
+
# TODO: remove the need for this.
|
|
28
|
+
def self.git_url_for_path_without_go_helper(path)
|
|
29
|
+
# Save a query by manually converting golang.org/x names
|
|
30
|
+
tmp_path = path.gsub(%r{^golang\.org/x}, "github.com/golang")
|
|
31
|
+
|
|
32
|
+
# Currently, Dependabot::Source.new will return `nil` if it can't
|
|
33
|
+
# find a git SCH associated with a path. If it is ever extended to
|
|
34
|
+
# handle non-git sources we'll need to add an additional check here.
|
|
35
|
+
return Source.from_url(tmp_path).url if Source.from_url(tmp_path)
|
|
36
|
+
return "https://#{tmp_path}" if tmp_path.end_with?(".git")
|
|
37
|
+
return unless (metadata_response = fetch_path_metadata(path))
|
|
38
|
+
|
|
39
|
+
# Look for a GitHub, Bitbucket or GitLab URL in the response
|
|
40
|
+
metadata_response.scan(Dependabot::Source::SOURCE_REGEX) do
|
|
41
|
+
source_url = Regexp.last_match.to_s
|
|
42
|
+
return Source.from_url(source_url).url
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# If none are found, parse the response and return the go-import path
|
|
46
|
+
doc = Nokogiri::XML(metadata_response)
|
|
47
|
+
doc.remove_namespaces!
|
|
48
|
+
import_details =
|
|
49
|
+
doc.xpath("//meta").
|
|
50
|
+
find { |n| n.attributes["name"]&.value == "go-import" }&.
|
|
51
|
+
attributes&.fetch("content")&.value&.split(/\s+/)
|
|
52
|
+
return unless import_details && import_details[1] == "git"
|
|
53
|
+
|
|
54
|
+
import_details[2]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.fetch_path_metadata(path)
|
|
58
|
+
# TODO: This is not robust! Instead, we should shell out to Go and
|
|
59
|
+
# use https://github.com/Masterminds/vcs.
|
|
60
|
+
response = Excon.get(
|
|
61
|
+
"https://#{path}?go-get=1",
|
|
62
|
+
idempotent: true,
|
|
63
|
+
**SharedHelpers.excon_defaults
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
return unless response.status == 200
|
|
67
|
+
|
|
68
|
+
response.body
|
|
69
|
+
end
|
|
70
|
+
private_class_method :fetch_path_metadata
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|