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,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/file_updaters/ruby/bundler"
|
|
4
|
+
|
|
5
|
+
module Dependabot
|
|
6
|
+
module FileUpdaters
|
|
7
|
+
module Ruby
|
|
8
|
+
class Bundler
|
|
9
|
+
class GemfileUpdater
|
|
10
|
+
require_relative "git_pin_replacer"
|
|
11
|
+
require_relative "git_source_remover"
|
|
12
|
+
require_relative "requirement_replacer"
|
|
13
|
+
|
|
14
|
+
def initialize(dependencies:, gemfile:)
|
|
15
|
+
@dependencies = dependencies
|
|
16
|
+
@gemfile = gemfile
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def updated_gemfile_content
|
|
20
|
+
content = gemfile.content
|
|
21
|
+
|
|
22
|
+
dependencies.each do |dependency|
|
|
23
|
+
content = replace_gemfile_version_requirement(
|
|
24
|
+
dependency,
|
|
25
|
+
gemfile,
|
|
26
|
+
content
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
if remove_git_source?(dependency)
|
|
30
|
+
content = remove_gemfile_git_source(dependency, content)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if update_git_pin?(dependency)
|
|
34
|
+
content = update_gemfile_git_pin(dependency, gemfile, content)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
content
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
attr_reader :dependencies, :gemfile
|
|
44
|
+
|
|
45
|
+
def replace_gemfile_version_requirement(dependency, file, content)
|
|
46
|
+
return content unless requirement_changed?(file, dependency)
|
|
47
|
+
|
|
48
|
+
updated_requirement =
|
|
49
|
+
dependency.requirements.
|
|
50
|
+
find { |r| r[:file] == file.name }.
|
|
51
|
+
fetch(:requirement)
|
|
52
|
+
|
|
53
|
+
previous_requirement =
|
|
54
|
+
dependency.previous_requirements.
|
|
55
|
+
find { |r| r[:file] == file.name }.
|
|
56
|
+
fetch(:requirement)
|
|
57
|
+
|
|
58
|
+
RequirementReplacer.new(
|
|
59
|
+
dependency: dependency,
|
|
60
|
+
file_type: :gemfile,
|
|
61
|
+
updated_requirement: updated_requirement,
|
|
62
|
+
previous_requirement: previous_requirement
|
|
63
|
+
).rewrite(content)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def requirement_changed?(file, dependency)
|
|
67
|
+
changed_requirements =
|
|
68
|
+
dependency.requirements - dependency.previous_requirements
|
|
69
|
+
|
|
70
|
+
changed_requirements.any? { |f| f[:file] == file.name }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def remove_git_source?(dependency)
|
|
74
|
+
old_gemfile_req =
|
|
75
|
+
dependency.previous_requirements.
|
|
76
|
+
find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
|
|
77
|
+
|
|
78
|
+
return false unless old_gemfile_req&.dig(:source, :type) == "git"
|
|
79
|
+
|
|
80
|
+
new_gemfile_req =
|
|
81
|
+
dependency.requirements.
|
|
82
|
+
find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
|
|
83
|
+
|
|
84
|
+
new_gemfile_req[:source].nil?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def update_git_pin?(dependency)
|
|
88
|
+
new_gemfile_req =
|
|
89
|
+
dependency.requirements.
|
|
90
|
+
find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
|
|
91
|
+
return false unless new_gemfile_req&.dig(:source, :type) == "git"
|
|
92
|
+
|
|
93
|
+
# If the new requirement is a git dependency with a ref then there's
|
|
94
|
+
# no harm in doing an update
|
|
95
|
+
new_gemfile_req.dig(:source, :ref)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def remove_gemfile_git_source(dependency, content)
|
|
99
|
+
GitSourceRemover.new(dependency: dependency).rewrite(content)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def update_gemfile_git_pin(dependency, file, content)
|
|
103
|
+
new_pin =
|
|
104
|
+
dependency.requirements.
|
|
105
|
+
find { |f| f[:file] == file.name }.
|
|
106
|
+
fetch(:source).fetch(:ref)
|
|
107
|
+
|
|
108
|
+
GitPinReplacer.
|
|
109
|
+
new(dependency: dependency, new_pin: new_pin).
|
|
110
|
+
rewrite(content)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parser/current"
|
|
4
|
+
require "dependabot/file_updaters/ruby/bundler"
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module FileUpdaters
|
|
8
|
+
module Ruby
|
|
9
|
+
class Bundler
|
|
10
|
+
class GemspecDependencyNameFinder
|
|
11
|
+
attr_reader :gemspec_content
|
|
12
|
+
|
|
13
|
+
def initialize(gemspec_content:)
|
|
14
|
+
@gemspec_content = gemspec_content
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# rubocop:disable Security/Eval
|
|
18
|
+
def dependency_name
|
|
19
|
+
ast = Parser::CurrentRuby.parse(gemspec_content)
|
|
20
|
+
dependency_name_node = find_dependency_name_node(ast)
|
|
21
|
+
return unless dependency_name_node
|
|
22
|
+
|
|
23
|
+
begin
|
|
24
|
+
eval(dependency_name_node.children[2].loc.expression.source)
|
|
25
|
+
rescue StandardError
|
|
26
|
+
nil # If we can't evaluate the expression just return nil
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
# rubocop:enable Security/Eval
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def find_dependency_name_node(node)
|
|
34
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
35
|
+
return node if declares_dependency_name?(node)
|
|
36
|
+
|
|
37
|
+
node.children.find do |cn|
|
|
38
|
+
dependency_name_node = find_dependency_name_node(cn)
|
|
39
|
+
break dependency_name_node if dependency_name_node
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def declares_dependency_name?(node)
|
|
44
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
45
|
+
|
|
46
|
+
node.children[1] == :name=
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parser/current"
|
|
4
|
+
require "dependabot/file_updaters/ruby/bundler"
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module FileUpdaters
|
|
8
|
+
module Ruby
|
|
9
|
+
class Bundler
|
|
10
|
+
class GemspecSanitizer
|
|
11
|
+
UNNECESSARY_ASSIGNMENTS = %i(
|
|
12
|
+
bindir=
|
|
13
|
+
cert_chain=
|
|
14
|
+
email=
|
|
15
|
+
executables=
|
|
16
|
+
extra_rdoc_files=
|
|
17
|
+
homepage=
|
|
18
|
+
license=
|
|
19
|
+
licenses=
|
|
20
|
+
metadata=
|
|
21
|
+
post_install_message=
|
|
22
|
+
rdoc_options=
|
|
23
|
+
).freeze
|
|
24
|
+
|
|
25
|
+
attr_reader :replacement_version
|
|
26
|
+
|
|
27
|
+
def initialize(replacement_version:)
|
|
28
|
+
@replacement_version = replacement_version
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def rewrite(content)
|
|
32
|
+
buffer = Parser::Source::Buffer.new("(gemspec_content)")
|
|
33
|
+
buffer.source = content
|
|
34
|
+
ast = Parser::CurrentRuby.new.parse(buffer)
|
|
35
|
+
|
|
36
|
+
Rewriter.
|
|
37
|
+
new(replacement_version: replacement_version).
|
|
38
|
+
rewrite(buffer, ast)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class Rewriter < Parser::TreeRewriter
|
|
42
|
+
def initialize(replacement_version:)
|
|
43
|
+
@replacement_version = replacement_version
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def on_send(node)
|
|
47
|
+
# Wrap any `require` or `require_relative` calls in a rescue
|
|
48
|
+
# block, as we might not have the required files
|
|
49
|
+
wrap_require(node) if requires_file?(node)
|
|
50
|
+
|
|
51
|
+
# Remove any assignments to a VERSION constant (or similar), as
|
|
52
|
+
# that constant probably comes from a required file
|
|
53
|
+
replace_version_assignments(node)
|
|
54
|
+
|
|
55
|
+
# Replace the `s.files= ...` assignment with a blank array, as
|
|
56
|
+
# occassionally a File.open(..).readlines pattern is used
|
|
57
|
+
replace_file_assignments(node)
|
|
58
|
+
|
|
59
|
+
# Replace the `s.require_path= ...` assignment, as
|
|
60
|
+
# occassionally a Dir['lib'] pattern is used
|
|
61
|
+
replace_require_paths_assignments(node)
|
|
62
|
+
|
|
63
|
+
# Replace any `File.read(...)` calls with a dummy string
|
|
64
|
+
replace_file_reads(node)
|
|
65
|
+
|
|
66
|
+
# Remove the arguments from any `Find.find(...)` calls
|
|
67
|
+
remove_find_dot_find_args(node)
|
|
68
|
+
|
|
69
|
+
remove_unnecessary_assignments(node)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
attr_reader :replacement_version
|
|
75
|
+
|
|
76
|
+
def requires_file?(node)
|
|
77
|
+
%i(require require_relative).include?(node.children[1])
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def wrap_require(node)
|
|
81
|
+
replace(
|
|
82
|
+
node.loc.expression,
|
|
83
|
+
"begin\n"\
|
|
84
|
+
"#{node.loc.expression.source_line}\n"\
|
|
85
|
+
"rescue LoadError\n"\
|
|
86
|
+
"end"
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def replace_version_assignments(node)
|
|
91
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
92
|
+
|
|
93
|
+
if node_assigns_to_version_constant?(node)
|
|
94
|
+
return replace_constant(node)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
node.children.each { |child| replace_version_assignments(child) }
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def replace_file_assignments(node)
|
|
101
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
102
|
+
|
|
103
|
+
if node_assigns_files_to_var?(node)
|
|
104
|
+
return replace_file_assignment(node)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
node.children.each { |child| replace_file_assignments(child) }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def replace_require_paths_assignments(node)
|
|
111
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
112
|
+
|
|
113
|
+
if node_assigns_require_paths?(node)
|
|
114
|
+
return replace_require_paths_assignment(node)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
node.children.each do |child|
|
|
118
|
+
replace_require_paths_assignments(child)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def node_assigns_to_version_constant?(node)
|
|
123
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
124
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
125
|
+
return false unless node.children.first&.type == :lvar
|
|
126
|
+
|
|
127
|
+
return true if node.children[1] == :version=
|
|
128
|
+
return true if node_is_version_constant?(node.children.last)
|
|
129
|
+
return true if node_calls_version_constant?(node.children.last)
|
|
130
|
+
|
|
131
|
+
node_interpolates_version_constant?(node.children.last)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def node_assigns_files_to_var?(node)
|
|
135
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
136
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
137
|
+
return false unless node.children.first&.type == :lvar
|
|
138
|
+
return false unless node.children[1] == :files=
|
|
139
|
+
|
|
140
|
+
node.children[2]&.type == :send
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def node_assigns_require_paths?(node)
|
|
144
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
145
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
146
|
+
return false unless node.children.first&.type == :lvar
|
|
147
|
+
|
|
148
|
+
node.children[1] == :require_paths=
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def replace_file_reads(node)
|
|
152
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
153
|
+
return if node.children[1] == :version=
|
|
154
|
+
return replace_file_read(node) if node_reads_a_file?(node)
|
|
155
|
+
return replace_file_readlines(node) if node_uses_readlines?(node)
|
|
156
|
+
|
|
157
|
+
node.children.each { |child| replace_file_reads(child) }
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def node_reads_a_file?(node)
|
|
161
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
162
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
163
|
+
return false unless node.children.first&.type == :const
|
|
164
|
+
return false unless node.children.first.children.last == :File
|
|
165
|
+
|
|
166
|
+
node.children[1] == :read
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def node_uses_readlines?(node)
|
|
170
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
171
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
172
|
+
return false unless node.children.first&.type == :const
|
|
173
|
+
return false unless node.children.first.children.last == :File
|
|
174
|
+
|
|
175
|
+
node.children[1] == :readlines
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def remove_find_dot_find_args(node)
|
|
179
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
180
|
+
return if node.children[1] == :version=
|
|
181
|
+
return remove_find_args(node) if node_calls_find_dot_find?(node)
|
|
182
|
+
|
|
183
|
+
node.children.each { |child| remove_find_dot_find_args(child) }
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def node_calls_find_dot_find?(node)
|
|
187
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
188
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
189
|
+
return false unless node.children.first&.type == :const
|
|
190
|
+
return false unless node.children.first.children.last == :Find
|
|
191
|
+
|
|
192
|
+
node.children[1] == :find
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def remove_unnecessary_assignments(node)
|
|
196
|
+
return unless node.is_a?(Parser::AST::Node)
|
|
197
|
+
|
|
198
|
+
if unnecessary_assignment?(node) &&
|
|
199
|
+
node.children.last&.location&.respond_to?(:heredoc_end)
|
|
200
|
+
range_to_remove = node.loc.expression.join(
|
|
201
|
+
node.children.last.location.heredoc_end
|
|
202
|
+
)
|
|
203
|
+
return replace(range_to_remove, '"sanitized"')
|
|
204
|
+
elsif unnecessary_assignment?(node)
|
|
205
|
+
return replace(node.loc.expression, '"sanitized"')
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
node.children.each do |child|
|
|
209
|
+
remove_unnecessary_assignments(child)
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def unnecessary_assignment?(node)
|
|
214
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
215
|
+
return false unless node.children.first.is_a?(Parser::AST::Node)
|
|
216
|
+
return false unless node.children.first&.type == :lvar
|
|
217
|
+
|
|
218
|
+
UNNECESSARY_ASSIGNMENTS.include?(node.children[1])
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def node_is_version_constant?(node)
|
|
222
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
223
|
+
return false unless node.type == :const
|
|
224
|
+
|
|
225
|
+
node.children.last.to_s.match?(/version/i)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def node_calls_version_constant?(node)
|
|
229
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
230
|
+
return false unless node.type == :send
|
|
231
|
+
|
|
232
|
+
node.children.any? { |n| node_is_version_constant?(n) }
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def node_interpolates_version_constant?(node)
|
|
236
|
+
return false unless node.is_a?(Parser::AST::Node)
|
|
237
|
+
return false unless node.type == :dstr
|
|
238
|
+
|
|
239
|
+
node.children.
|
|
240
|
+
select { |n| n.type == :begin }.
|
|
241
|
+
flat_map(&:children).
|
|
242
|
+
any? { |n| node_is_version_constant?(n) }
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def replace_constant(node)
|
|
246
|
+
case node.children.last&.type
|
|
247
|
+
when :str, :int then nil # no-op
|
|
248
|
+
when :const, :send, :lvar
|
|
249
|
+
replace(
|
|
250
|
+
node.children.last.loc.expression,
|
|
251
|
+
%("#{replacement_version}")
|
|
252
|
+
)
|
|
253
|
+
when :dstr
|
|
254
|
+
node.children.last.children.
|
|
255
|
+
select { |n| n.type == :begin }.
|
|
256
|
+
flat_map(&:children).
|
|
257
|
+
select { |n| node_is_version_constant?(n) }.
|
|
258
|
+
each do |n|
|
|
259
|
+
replace(
|
|
260
|
+
n.loc.expression,
|
|
261
|
+
%("#{replacement_version}")
|
|
262
|
+
)
|
|
263
|
+
end
|
|
264
|
+
else
|
|
265
|
+
raise "Unexpected node type #{node.children.last&.type}"
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def replace_file_assignment(node)
|
|
270
|
+
replace(node.children.last.loc.expression, "[]")
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def replace_require_paths_assignment(node)
|
|
274
|
+
replace(node.children.last.loc.expression, "['lib']")
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def replace_file_read(node)
|
|
278
|
+
replace(node.loc.expression, '"text"')
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def replace_file_readlines(node)
|
|
282
|
+
replace(node.loc.expression, '["text"]')
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def remove_find_args(node)
|
|
286
|
+
last_arg = node.children.last
|
|
287
|
+
|
|
288
|
+
range_to_remove =
|
|
289
|
+
last_arg.loc.expression.join(node.children[2].loc.begin.begin)
|
|
290
|
+
|
|
291
|
+
remove(range_to_remove)
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|