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.
Files changed (321) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6408 -0
  3. data/LICENSE +37 -0
  4. data/README.md +115 -0
  5. data/helpers/elixir/bin/check_update.exs +92 -0
  6. data/helpers/elixir/bin/do_update.exs +39 -0
  7. data/helpers/elixir/bin/parse_deps.exs +103 -0
  8. data/helpers/elixir/bin/run.exs +76 -0
  9. data/helpers/elixir/mix.exs +21 -0
  10. data/helpers/elixir/mix.lock +3 -0
  11. data/helpers/go/Makefile +9 -0
  12. data/helpers/go/go.mod +9 -0
  13. data/helpers/go/go.sum +5 -0
  14. data/helpers/go/importresolver/main.go +34 -0
  15. data/helpers/go/main.go +77 -0
  16. data/helpers/go/updatechecker/main.go +107 -0
  17. data/helpers/go/updater/go.mod +3 -0
  18. data/helpers/go/updater/go.sum +2 -0
  19. data/helpers/go/updater/helpers.go +57 -0
  20. data/helpers/go/updater/main.go +48 -0
  21. data/helpers/npm/.agignore +1 -0
  22. data/helpers/npm/.envrc +2 -0
  23. data/helpers/npm/.eslintrc +14 -0
  24. data/helpers/npm/.nvimrc +7 -0
  25. data/helpers/npm/bin/run.js +34 -0
  26. data/helpers/npm/lib/helpers.js +25 -0
  27. data/helpers/npm/lib/peer-dependency-checker.js +102 -0
  28. data/helpers/npm/lib/subdependency-updater.js +48 -0
  29. data/helpers/npm/lib/updater.js +95 -0
  30. data/helpers/npm/package.json +17 -0
  31. data/helpers/npm/test/fixtures/npm-left-pad.json +1 -0
  32. data/helpers/npm/test/fixtures/updater/original/package-lock.json +16 -0
  33. data/helpers/npm/test/fixtures/updater/original/package.json +9 -0
  34. data/helpers/npm/test/fixtures/updater/updated/package-lock.json +16 -0
  35. data/helpers/npm/test/helpers.js +7 -0
  36. data/helpers/npm/test/updater.test.js +50 -0
  37. data/helpers/npm/yarn.lock +6120 -0
  38. data/helpers/php/.php_cs +34 -0
  39. data/helpers/php/bin/run.php +57 -0
  40. data/helpers/php/composer.json +14 -0
  41. data/helpers/php/composer.lock +1521 -0
  42. data/helpers/php/composer.phar +0 -0
  43. data/helpers/php/setup.sh +4 -0
  44. data/helpers/php/src/DependabotInstallationManager.php +61 -0
  45. data/helpers/php/src/DependabotPluginManager.php +23 -0
  46. data/helpers/php/src/ExceptionIO.php +25 -0
  47. data/helpers/php/src/Hasher.php +21 -0
  48. data/helpers/php/src/UpdateChecker.php +123 -0
  49. data/helpers/php/src/Updater.php +97 -0
  50. data/helpers/python/lib/__init__.py +0 -0
  51. data/helpers/python/lib/hasher.py +23 -0
  52. data/helpers/python/lib/parser.py +130 -0
  53. data/helpers/python/requirements.txt +9 -0
  54. data/helpers/python/run.py +18 -0
  55. data/helpers/test/run.rb +15 -0
  56. data/helpers/utils/git-credential-store-immutable +10 -0
  57. data/helpers/yarn/.agignore +1 -0
  58. data/helpers/yarn/.envrc +2 -0
  59. data/helpers/yarn/.eslintrc +14 -0
  60. data/helpers/yarn/.nvimrc +7 -0
  61. data/helpers/yarn/bin/run.js +36 -0
  62. data/helpers/yarn/lib/fix-duplicates.js +53 -0
  63. data/helpers/yarn/lib/helpers.js +5 -0
  64. data/helpers/yarn/lib/lockfile-parser.js +21 -0
  65. data/helpers/yarn/lib/peer-dependency-checker.js +130 -0
  66. data/helpers/yarn/lib/replace-lockfile-declaration.js +45 -0
  67. data/helpers/yarn/lib/subdependency-updater.js +69 -0
  68. data/helpers/yarn/lib/updater.js +254 -0
  69. data/helpers/yarn/package.json +17 -0
  70. data/helpers/yarn/test/fixtures/updater/original/package.json +6 -0
  71. data/helpers/yarn/test/fixtures/updater/original/yarn.lock +11 -0
  72. data/helpers/yarn/test/fixtures/updater/updated/yarn.lock +12 -0
  73. data/helpers/yarn/test/fixtures/updater/with-version-comments/package.json +5 -0
  74. data/helpers/yarn/test/fixtures/updater/with-version-comments/yarn.lock +13 -0
  75. data/helpers/yarn/test/fixtures/yarnpkg-is-positive.json +1 -0
  76. data/helpers/yarn/test/fixtures/yarnpkg-left-pad.json +1 -0
  77. data/helpers/yarn/test/helpers.js +7 -0
  78. data/helpers/yarn/test/updater.test.js +93 -0
  79. data/helpers/yarn/yarn.lock +4912 -0
  80. data/lib/bundler_definition_bundler_version_patch.rb +15 -0
  81. data/lib/bundler_definition_ruby_version_patch.rb +14 -0
  82. data/lib/bundler_git_source_patch.rb +27 -0
  83. data/lib/dependabot.rb +4 -0
  84. data/lib/dependabot/clients/bitbucket.rb +101 -0
  85. data/lib/dependabot/clients/github_with_retries.rb +117 -0
  86. data/lib/dependabot/clients/gitlab.rb +72 -0
  87. data/lib/dependabot/dependency.rb +118 -0
  88. data/lib/dependabot/dependency_file.rb +54 -0
  89. data/lib/dependabot/errors.rb +179 -0
  90. data/lib/dependabot/file_fetchers.rb +48 -0
  91. data/lib/dependabot/file_fetchers/README.md +65 -0
  92. data/lib/dependabot/file_fetchers/base.rb +302 -0
  93. data/lib/dependabot/file_fetchers/docker/docker.rb +40 -0
  94. data/lib/dependabot/file_fetchers/dotnet/nuget.rb +215 -0
  95. data/lib/dependabot/file_fetchers/dotnet/nuget/import_paths_finder.rb +51 -0
  96. data/lib/dependabot/file_fetchers/dotnet/nuget/sln_project_paths_finder.rb +55 -0
  97. data/lib/dependabot/file_fetchers/elixir/hex.rb +78 -0
  98. data/lib/dependabot/file_fetchers/elm/elm_package.rb +52 -0
  99. data/lib/dependabot/file_fetchers/git/submodules.rb +73 -0
  100. data/lib/dependabot/file_fetchers/go/dep.rb +69 -0
  101. data/lib/dependabot/file_fetchers/go/modules.rb +64 -0
  102. data/lib/dependabot/file_fetchers/java/gradle.rb +56 -0
  103. data/lib/dependabot/file_fetchers/java/gradle/settings_file_parser.rb +66 -0
  104. data/lib/dependabot/file_fetchers/java/maven.rb +127 -0
  105. data/lib/dependabot/file_fetchers/java_script/npm_and_yarn.rb +330 -0
  106. data/lib/dependabot/file_fetchers/java_script/npm_and_yarn/path_dependency_builder.rb +107 -0
  107. data/lib/dependabot/file_fetchers/php/composer.rb +131 -0
  108. data/lib/dependabot/file_fetchers/python/pip.rb +305 -0
  109. data/lib/dependabot/file_fetchers/ruby/bundler.rb +185 -0
  110. data/lib/dependabot/file_fetchers/ruby/bundler/child_gemfile_finder.rb +70 -0
  111. data/lib/dependabot/file_fetchers/ruby/bundler/path_gemspec_finder.rb +114 -0
  112. data/lib/dependabot/file_fetchers/ruby/bundler/require_relative_finder.rb +67 -0
  113. data/lib/dependabot/file_fetchers/rust/cargo.rb +240 -0
  114. data/lib/dependabot/file_parsers.rb +48 -0
  115. data/lib/dependabot/file_parsers/README.md +45 -0
  116. data/lib/dependabot/file_parsers/base.rb +31 -0
  117. data/lib/dependabot/file_parsers/base/dependency_set.rb +77 -0
  118. data/lib/dependabot/file_parsers/docker/docker.rb +164 -0
  119. data/lib/dependabot/file_parsers/dotnet/nuget.rb +85 -0
  120. data/lib/dependabot/file_parsers/dotnet/nuget/packages_config_parser.rb +65 -0
  121. data/lib/dependabot/file_parsers/dotnet/nuget/project_file_parser.rb +156 -0
  122. data/lib/dependabot/file_parsers/dotnet/nuget/property_value_finder.rb +131 -0
  123. data/lib/dependabot/file_parsers/elixir/hex.rb +134 -0
  124. data/lib/dependabot/file_parsers/elm/elm_package.rb +136 -0
  125. data/lib/dependabot/file_parsers/git/submodules.rb +69 -0
  126. data/lib/dependabot/file_parsers/go/dep.rb +163 -0
  127. data/lib/dependabot/file_parsers/go/modules.rb +34 -0
  128. data/lib/dependabot/file_parsers/go/modules/go_mod_parser.rb +134 -0
  129. data/lib/dependabot/file_parsers/java/gradle.rb +236 -0
  130. data/lib/dependabot/file_parsers/java/gradle/property_value_finder.rb +90 -0
  131. data/lib/dependabot/file_parsers/java/gradle/repositories_finder.rb +145 -0
  132. data/lib/dependabot/file_parsers/java/maven.rb +252 -0
  133. data/lib/dependabot/file_parsers/java/maven/property_value_finder.rb +166 -0
  134. data/lib/dependabot/file_parsers/java/maven/repositories_finder.rb +188 -0
  135. data/lib/dependabot/file_parsers/java_script/npm_and_yarn.rb +394 -0
  136. data/lib/dependabot/file_parsers/php/composer.rb +177 -0
  137. data/lib/dependabot/file_parsers/python/pip.rb +223 -0
  138. data/lib/dependabot/file_parsers/python/pip/pipfile_files_parser.rb +154 -0
  139. data/lib/dependabot/file_parsers/python/pip/poetry_files_parser.rb +141 -0
  140. data/lib/dependabot/file_parsers/python/pip/setup_file_parser.rb +160 -0
  141. data/lib/dependabot/file_parsers/ruby/bundler.rb +295 -0
  142. data/lib/dependabot/file_parsers/ruby/bundler/file_preparer.rb +85 -0
  143. data/lib/dependabot/file_parsers/ruby/bundler/gemfile_checker.rb +48 -0
  144. data/lib/dependabot/file_parsers/rust/cargo.rb +213 -0
  145. data/lib/dependabot/file_updaters.rb +48 -0
  146. data/lib/dependabot/file_updaters/README.md +58 -0
  147. data/lib/dependabot/file_updaters/base.rb +52 -0
  148. data/lib/dependabot/file_updaters/docker/docker.rb +133 -0
  149. data/lib/dependabot/file_updaters/dotnet/nuget.rb +151 -0
  150. data/lib/dependabot/file_updaters/dotnet/nuget/packages_config_declaration_finder.rb +69 -0
  151. data/lib/dependabot/file_updaters/dotnet/nuget/project_file_declaration_finder.rb +78 -0
  152. data/lib/dependabot/file_updaters/dotnet/nuget/property_value_updater.rb +64 -0
  153. data/lib/dependabot/file_updaters/elixir/hex.rb +71 -0
  154. data/lib/dependabot/file_updaters/elixir/hex/lockfile_updater.rb +147 -0
  155. data/lib/dependabot/file_updaters/elixir/hex/mixfile_git_pin_updater.rb +53 -0
  156. data/lib/dependabot/file_updaters/elixir/hex/mixfile_requirement_updater.rb +74 -0
  157. data/lib/dependabot/file_updaters/elixir/hex/mixfile_sanitizer.rb +28 -0
  158. data/lib/dependabot/file_updaters/elixir/hex/mixfile_updater.rb +98 -0
  159. data/lib/dependabot/file_updaters/elm/elm_package.rb +79 -0
  160. data/lib/dependabot/file_updaters/elm/elm_package/elm_json_updater.rb +69 -0
  161. data/lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb +69 -0
  162. data/lib/dependabot/file_updaters/git/submodules.rb +38 -0
  163. data/lib/dependabot/file_updaters/go/dep.rb +77 -0
  164. data/lib/dependabot/file_updaters/go/dep/lockfile_updater.rb +219 -0
  165. data/lib/dependabot/file_updaters/go/dep/manifest_updater.rb +155 -0
  166. data/lib/dependabot/file_updaters/go/modules.rb +71 -0
  167. data/lib/dependabot/file_updaters/go/modules/go_mod_updater.rb +81 -0
  168. data/lib/dependabot/file_updaters/java/gradle.rb +176 -0
  169. data/lib/dependabot/file_updaters/java/gradle/dependency_set_updater.rb +66 -0
  170. data/lib/dependabot/file_updaters/java/gradle/property_value_updater.rb +58 -0
  171. data/lib/dependabot/file_updaters/java/maven.rb +155 -0
  172. data/lib/dependabot/file_updaters/java/maven/declaration_finder.rb +132 -0
  173. data/lib/dependabot/file_updaters/java/maven/property_value_updater.rb +61 -0
  174. data/lib/dependabot/file_updaters/java_script/npm_and_yarn.rb +159 -0
  175. data/lib/dependabot/file_updaters/java_script/npm_and_yarn/npm_lockfile_updater.rb +532 -0
  176. data/lib/dependabot/file_updaters/java_script/npm_and_yarn/npmrc_builder.rb +191 -0
  177. data/lib/dependabot/file_updaters/java_script/npm_and_yarn/package_json_preparer.rb +91 -0
  178. data/lib/dependabot/file_updaters/java_script/npm_and_yarn/package_json_updater.rb +220 -0
  179. data/lib/dependabot/file_updaters/java_script/npm_and_yarn/yarn_lockfile_updater.rb +475 -0
  180. data/lib/dependabot/file_updaters/php/composer.rb +78 -0
  181. data/lib/dependabot/file_updaters/php/composer/lockfile_updater.rb +264 -0
  182. data/lib/dependabot/file_updaters/php/composer/manifest_updater.rb +70 -0
  183. data/lib/dependabot/file_updaters/python/pip.rb +147 -0
  184. data/lib/dependabot/file_updaters/python/pip/pip_compile_file_updater.rb +363 -0
  185. data/lib/dependabot/file_updaters/python/pip/pipfile_file_updater.rb +397 -0
  186. data/lib/dependabot/file_updaters/python/pip/pipfile_preparer.rb +125 -0
  187. data/lib/dependabot/file_updaters/python/pip/poetry_file_updater.rb +289 -0
  188. data/lib/dependabot/file_updaters/python/pip/pyproject_preparer.rb +105 -0
  189. data/lib/dependabot/file_updaters/python/pip/requirement_file_updater.rb +166 -0
  190. data/lib/dependabot/file_updaters/python/pip/requirement_replacer.rb +95 -0
  191. data/lib/dependabot/file_updaters/python/pip/setup_file_sanitizer.rb +91 -0
  192. data/lib/dependabot/file_updaters/ruby/bundler.rb +121 -0
  193. data/lib/dependabot/file_updaters/ruby/bundler/gemfile_updater.rb +116 -0
  194. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb +52 -0
  195. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_sanitizer.rb +298 -0
  196. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_updater.rb +64 -0
  197. data/lib/dependabot/file_updaters/ruby/bundler/git_pin_replacer.rb +80 -0
  198. data/lib/dependabot/file_updaters/ruby/bundler/git_source_remover.rb +102 -0
  199. data/lib/dependabot/file_updaters/ruby/bundler/lockfile_updater.rb +384 -0
  200. data/lib/dependabot/file_updaters/ruby/bundler/requirement_replacer.rb +188 -0
  201. data/lib/dependabot/file_updaters/rust/cargo.rb +83 -0
  202. data/lib/dependabot/file_updaters/rust/cargo/lockfile_updater.rb +251 -0
  203. data/lib/dependabot/file_updaters/rust/cargo/manifest_updater.rb +162 -0
  204. data/lib/dependabot/git_commit_checker.rb +412 -0
  205. data/lib/dependabot/metadata_finders.rb +46 -0
  206. data/lib/dependabot/metadata_finders/README.md +53 -0
  207. data/lib/dependabot/metadata_finders/base.rb +117 -0
  208. data/lib/dependabot/metadata_finders/base/changelog_finder.rb +317 -0
  209. data/lib/dependabot/metadata_finders/base/changelog_pruner.rb +177 -0
  210. data/lib/dependabot/metadata_finders/base/commits_finder.rb +217 -0
  211. data/lib/dependabot/metadata_finders/base/release_finder.rb +251 -0
  212. data/lib/dependabot/metadata_finders/docker/docker.rb +18 -0
  213. data/lib/dependabot/metadata_finders/dotnet/nuget.rb +116 -0
  214. data/lib/dependabot/metadata_finders/elixir/hex.rb +69 -0
  215. data/lib/dependabot/metadata_finders/elm/elm_package.rb +22 -0
  216. data/lib/dependabot/metadata_finders/git/submodules.rb +20 -0
  217. data/lib/dependabot/metadata_finders/go/dep.rb +56 -0
  218. data/lib/dependabot/metadata_finders/java/maven.rb +173 -0
  219. data/lib/dependabot/metadata_finders/java_script/npm_and_yarn.rb +215 -0
  220. data/lib/dependabot/metadata_finders/php/composer.rb +66 -0
  221. data/lib/dependabot/metadata_finders/python/pip.rb +120 -0
  222. data/lib/dependabot/metadata_finders/ruby/bundler.rb +150 -0
  223. data/lib/dependabot/metadata_finders/rust/cargo.rb +64 -0
  224. data/lib/dependabot/pull_request_creator.rb +151 -0
  225. data/lib/dependabot/pull_request_creator/branch_namer.rb +170 -0
  226. data/lib/dependabot/pull_request_creator/commit_signer.rb +63 -0
  227. data/lib/dependabot/pull_request_creator/github.rb +233 -0
  228. data/lib/dependabot/pull_request_creator/gitlab.rb +122 -0
  229. data/lib/dependabot/pull_request_creator/labeler.rb +361 -0
  230. data/lib/dependabot/pull_request_creator/message_builder.rb +888 -0
  231. data/lib/dependabot/pull_request_updater.rb +43 -0
  232. data/lib/dependabot/pull_request_updater/github.rb +151 -0
  233. data/lib/dependabot/shared_helpers.rb +201 -0
  234. data/lib/dependabot/source.rb +120 -0
  235. data/lib/dependabot/update_checkers.rb +48 -0
  236. data/lib/dependabot/update_checkers/README.md +67 -0
  237. data/lib/dependabot/update_checkers/base.rb +220 -0
  238. data/lib/dependabot/update_checkers/docker/docker.rb +290 -0
  239. data/lib/dependabot/update_checkers/dotnet/nuget.rb +127 -0
  240. data/lib/dependabot/update_checkers/dotnet/nuget/property_updater.rb +97 -0
  241. data/lib/dependabot/update_checkers/dotnet/nuget/repository_finder.rb +232 -0
  242. data/lib/dependabot/update_checkers/dotnet/nuget/requirements_updater.rb +81 -0
  243. data/lib/dependabot/update_checkers/dotnet/nuget/version_finder.rb +231 -0
  244. data/lib/dependabot/update_checkers/elixir/hex.rb +274 -0
  245. data/lib/dependabot/update_checkers/elixir/hex/file_preparer.rb +193 -0
  246. data/lib/dependabot/update_checkers/elixir/hex/requirements_updater.rb +177 -0
  247. data/lib/dependabot/update_checkers/elixir/hex/version_resolver.rb +175 -0
  248. data/lib/dependabot/update_checkers/elm/elm_package.rb +126 -0
  249. data/lib/dependabot/update_checkers/elm/elm_package/cli_parser.rb +33 -0
  250. data/lib/dependabot/update_checkers/elm/elm_package/elm_18_version_resolver.rb +234 -0
  251. data/lib/dependabot/update_checkers/elm/elm_package/elm_19_version_resolver.rb +198 -0
  252. data/lib/dependabot/update_checkers/elm/elm_package/requirements_updater.rb +75 -0
  253. data/lib/dependabot/update_checkers/git/submodules.rb +52 -0
  254. data/lib/dependabot/update_checkers/go/dep.rb +311 -0
  255. data/lib/dependabot/update_checkers/go/dep/file_preparer.rb +221 -0
  256. data/lib/dependabot/update_checkers/go/dep/latest_version_finder.rb +169 -0
  257. data/lib/dependabot/update_checkers/go/dep/requirements_updater.rb +223 -0
  258. data/lib/dependabot/update_checkers/go/dep/version_resolver.rb +164 -0
  259. data/lib/dependabot/update_checkers/go/modules.rb +112 -0
  260. data/lib/dependabot/update_checkers/java/gradle.rb +148 -0
  261. data/lib/dependabot/update_checkers/java/gradle/multi_dependency_updater.rb +105 -0
  262. data/lib/dependabot/update_checkers/java/gradle/version_finder.rb +183 -0
  263. data/lib/dependabot/update_checkers/java/maven.rb +159 -0
  264. data/lib/dependabot/update_checkers/java/maven/property_updater.rb +127 -0
  265. data/lib/dependabot/update_checkers/java/maven/requirements_updater.rb +92 -0
  266. data/lib/dependabot/update_checkers/java/maven/version_finder.rb +225 -0
  267. data/lib/dependabot/update_checkers/java_script/npm_and_yarn.rb +280 -0
  268. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/latest_version_finder.rb +342 -0
  269. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/library_detector.rb +69 -0
  270. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/registry_finder.rb +226 -0
  271. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/requirements_updater.rb +197 -0
  272. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/subdependency_version_resolver.rb +228 -0
  273. data/lib/dependabot/update_checkers/java_script/npm_and_yarn/version_resolver.rb +452 -0
  274. data/lib/dependabot/update_checkers/php/composer.rb +165 -0
  275. data/lib/dependabot/update_checkers/php/composer/requirements_updater.rb +243 -0
  276. data/lib/dependabot/update_checkers/php/composer/version_resolver.rb +203 -0
  277. data/lib/dependabot/update_checkers/python/pip.rb +227 -0
  278. data/lib/dependabot/update_checkers/python/pip/latest_version_finder.rb +252 -0
  279. data/lib/dependabot/update_checkers/python/pip/pip_compile_version_resolver.rb +380 -0
  280. data/lib/dependabot/update_checkers/python/pip/pipfile_version_resolver.rb +559 -0
  281. data/lib/dependabot/update_checkers/python/pip/poetry_version_resolver.rb +300 -0
  282. data/lib/dependabot/update_checkers/python/pip/requirements_updater.rb +367 -0
  283. data/lib/dependabot/update_checkers/ruby/bundler.rb +324 -0
  284. data/lib/dependabot/update_checkers/ruby/bundler/file_preparer.rb +278 -0
  285. data/lib/dependabot/update_checkers/ruby/bundler/force_updater.rb +261 -0
  286. data/lib/dependabot/update_checkers/ruby/bundler/latest_version_finder.rb +169 -0
  287. data/lib/dependabot/update_checkers/ruby/bundler/requirements_updater.rb +264 -0
  288. data/lib/dependabot/update_checkers/ruby/bundler/ruby_requirement_setter.rb +115 -0
  289. data/lib/dependabot/update_checkers/ruby/bundler/shared_bundler_helpers.rb +243 -0
  290. data/lib/dependabot/update_checkers/ruby/bundler/version_resolver.rb +255 -0
  291. data/lib/dependabot/update_checkers/rust/cargo.rb +282 -0
  292. data/lib/dependabot/update_checkers/rust/cargo/file_preparer.rb +202 -0
  293. data/lib/dependabot/update_checkers/rust/cargo/requirements_updater.rb +175 -0
  294. data/lib/dependabot/update_checkers/rust/cargo/version_resolver.rb +242 -0
  295. data/lib/dependabot/utils.rb +84 -0
  296. data/lib/dependabot/utils/docker/credentials_finder.rb +65 -0
  297. data/lib/dependabot/utils/dotnet/requirement.rb +90 -0
  298. data/lib/dependabot/utils/dotnet/version.rb +22 -0
  299. data/lib/dependabot/utils/elixir/requirement.rb +53 -0
  300. data/lib/dependabot/utils/elixir/version.rb +59 -0
  301. data/lib/dependabot/utils/elm/requirement.rb +92 -0
  302. data/lib/dependabot/utils/elm/version.rb +19 -0
  303. data/lib/dependabot/utils/go/path_converter.rb +74 -0
  304. data/lib/dependabot/utils/go/requirement.rb +152 -0
  305. data/lib/dependabot/utils/go/shared_helper.rb +20 -0
  306. data/lib/dependabot/utils/go/version.rb +40 -0
  307. data/lib/dependabot/utils/java/requirement.rb +110 -0
  308. data/lib/dependabot/utils/java/version.rb +179 -0
  309. data/lib/dependabot/utils/java_script/requirement.rb +117 -0
  310. data/lib/dependabot/utils/java_script/version.rb +30 -0
  311. data/lib/dependabot/utils/php/requirement.rb +97 -0
  312. data/lib/dependabot/utils/php/version.rb +22 -0
  313. data/lib/dependabot/utils/python/requirement.rb +130 -0
  314. data/lib/dependabot/utils/python/version.rb +88 -0
  315. data/lib/dependabot/utils/ruby/requirement.rb +26 -0
  316. data/lib/dependabot/utils/rust/requirement.rb +108 -0
  317. data/lib/dependabot/utils/rust/version.rb +32 -0
  318. data/lib/dependabot/version.rb +5 -0
  319. data/lib/python_requirement_parser.rb +33 -0
  320. data/lib/python_versions.rb +21 -0
  321. metadata +641 -0
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_parsers/java/gradle"
4
+ require "dependabot/file_updaters/java/gradle"
5
+
6
+ module Dependabot
7
+ module FileUpdaters
8
+ module Java
9
+ class Gradle
10
+ class DependencySetUpdater
11
+ def initialize(dependency_files:)
12
+ @dependency_files = dependency_files
13
+ end
14
+
15
+ def update_files_for_dep_set_change(dependency_set:,
16
+ buildfile:,
17
+ previous_requirement:,
18
+ updated_requirement:)
19
+ declaration_string =
20
+ original_declaration_string(dependency_set, buildfile)
21
+
22
+ return dependency_files unless declaration_string
23
+
24
+ updated_content = buildfile.content.sub(
25
+ declaration_string,
26
+ declaration_string.sub(
27
+ previous_requirement,
28
+ updated_requirement
29
+ )
30
+ )
31
+
32
+ updated_files = dependency_files.dup
33
+ updated_files[updated_files.index(buildfile)] =
34
+ update_file(file: buildfile, content: updated_content)
35
+
36
+ updated_files
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :dependency_files
42
+
43
+ def original_declaration_string(dependency_set, buildfile)
44
+ regex = FileParsers::Java::Gradle::DEPENDENCY_SET_DECLARATION_REGEX
45
+ dependency_sets = []
46
+ buildfile.content.scan(regex) do
47
+ dependency_sets << Regexp.last_match.to_s
48
+ end
49
+
50
+ dependency_sets.find do |mtch|
51
+ next unless mtch.include?(dependency_set[:group])
52
+
53
+ mtch.include?(dependency_set[:version])
54
+ end
55
+ end
56
+
57
+ def update_file(file:, content:)
58
+ updated_file = file.dup
59
+ updated_file.content = content
60
+ updated_file
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_updaters/java/gradle"
4
+ require "dependabot/file_parsers/java/gradle/property_value_finder"
5
+
6
+ module Dependabot
7
+ module FileUpdaters
8
+ module Java
9
+ class Gradle
10
+ class PropertyValueUpdater
11
+ def initialize(dependency_files:)
12
+ @dependency_files = dependency_files
13
+ end
14
+
15
+ def update_files_for_property_change(property_name:,
16
+ callsite_buildfile:,
17
+ previous_value:,
18
+ updated_value:)
19
+ declaration_details = property_value_finder.property_details(
20
+ property_name: property_name,
21
+ callsite_buildfile: callsite_buildfile
22
+ )
23
+ declaration_string = declaration_details.fetch(:declaration_string)
24
+ filename = declaration_details.fetch(:file)
25
+
26
+ file_to_update = dependency_files.find { |f| f.name == filename }
27
+ updated_content = file_to_update.content.sub(
28
+ declaration_string,
29
+ declaration_string.sub(previous_value, updated_value)
30
+ )
31
+
32
+ updated_files = dependency_files.dup
33
+ updated_files[updated_files.index(file_to_update)] =
34
+ update_file(file: file_to_update, content: updated_content)
35
+
36
+ updated_files
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :dependency_files
42
+
43
+ def property_value_finder
44
+ @property_value_finder ||=
45
+ FileParsers::Java::Gradle::PropertyValueFinder.
46
+ new(dependency_files: dependency_files)
47
+ end
48
+
49
+ def update_file(file:, content:)
50
+ updated_file = file.dup
51
+ updated_file.content = content
52
+ updated_file
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/file_updaters/base"
5
+
6
+ module Dependabot
7
+ module FileUpdaters
8
+ module Java
9
+ class Maven < Dependabot::FileUpdaters::Base
10
+ require_relative "maven/declaration_finder"
11
+ require_relative "maven/property_value_updater"
12
+
13
+ def self.updated_files_regex
14
+ [/^pom\.xml$/, %r{/pom\.xml$}]
15
+ end
16
+
17
+ def updated_dependency_files
18
+ updated_files = dependency_files.dup
19
+
20
+ # Loop through each of the changed requirements, applying changes to
21
+ # all pomfiles for that change. Note that the logic is different here
22
+ # to other languages because Java has property inheritance across
23
+ # files
24
+ dependencies.each do |dependency|
25
+ updated_files = update_pomfiles_for_dependency(
26
+ pomfiles: updated_files,
27
+ dependency: dependency
28
+ )
29
+ end
30
+
31
+ updated_files.select! { |f| f.name.end_with?("pom.xml") }
32
+ updated_files.reject! { |f| original_pomfiles.include?(f) }
33
+
34
+ raise "No files changed!" if updated_files.none?
35
+ if updated_files.any? { |f| f.name.end_with?("pom_parent.xml") }
36
+ raise "Updated a supporting POM!"
37
+ end
38
+
39
+ updated_files
40
+ end
41
+
42
+ private
43
+
44
+ def check_required_files
45
+ raise "No pom.xml!" unless get_original_file("pom.xml")
46
+ end
47
+
48
+ def update_pomfiles_for_dependency(pomfiles:, dependency:)
49
+ files = pomfiles.dup
50
+
51
+ # The UpdateChecker ensures the order of requirements is preserved
52
+ # when updating, so we can zip them together in new/old pairs.
53
+ reqs = dependency.requirements.zip(dependency.previous_requirements).
54
+ reject { |new_req, old_req| new_req == old_req }
55
+
56
+ # Loop through each changed requirement and update the pomfiles
57
+ reqs.each do |new_req, old_req|
58
+ raise "Bad req match" unless new_req[:file] == old_req[:file]
59
+ next if new_req[:requirement] == old_req[:requirement]
60
+
61
+ if new_req.dig(:metadata, :property_name)
62
+ files = update_pomfiles_for_property_change(files, new_req)
63
+ pom = files.find { |f| f.name == new_req.fetch(:file) }
64
+ files[files.index(pom)] =
65
+ remove_property_suffix_in_pom(dependency, pom, old_req)
66
+ else
67
+ pom = files.find { |f| f.name == new_req.fetch(:file) }
68
+ files[files.index(pom)] =
69
+ update_version_in_pom(dependency, pom, old_req, new_req)
70
+ end
71
+ end
72
+
73
+ files
74
+ end
75
+
76
+ def update_pomfiles_for_property_change(pomfiles, req)
77
+ property_name = req.fetch(:metadata).fetch(:property_name)
78
+
79
+ PropertyValueUpdater.new(dependency_files: pomfiles).
80
+ update_pomfiles_for_property_change(
81
+ property_name: property_name,
82
+ callsite_pom: pomfiles.find { |f| f.name == req.fetch(:file) },
83
+ updated_value: req.fetch(:requirement)
84
+ )
85
+ end
86
+
87
+ def update_version_in_pom(dependency, pom, previous_req, requirement)
88
+ updated_content = pom.content
89
+
90
+ original_pom_declarations(dependency, previous_req).each do |old_dec|
91
+ updated_content = updated_content.gsub(
92
+ old_dec,
93
+ updated_pom_declaration(old_dec, previous_req, requirement)
94
+ )
95
+ end
96
+
97
+ raise "Expected content to change!" if updated_content == pom.content
98
+
99
+ updated_file(file: pom, content: updated_content)
100
+ end
101
+
102
+ def remove_property_suffix_in_pom(dep, pom, req)
103
+ updated_content = pom.content
104
+
105
+ original_pom_declarations(dep, req).each do |old_declaration|
106
+ updated_content = updated_content.gsub(old_declaration) do |old_dec|
107
+ version_string =
108
+ old_dec.match(%r{(?<=\<version\>).*(?=\</version\>)})
109
+ cleaned_version_string = version_string.to_s.gsub(/(?<=\}).*/, "")
110
+
111
+ old_dec.gsub(
112
+ "<version>#{version_string}</version>",
113
+ "<version>#{cleaned_version_string}</version>"
114
+ )
115
+ end
116
+ end
117
+
118
+ updated_file(file: pom, content: updated_content)
119
+ end
120
+
121
+ def original_pom_declarations(dependency, requirement)
122
+ declaration_finder(dependency, requirement).declaration_strings
123
+ end
124
+
125
+ # The declaration finder may need to make remote calls (to get parent
126
+ # POMs if it's searching for the value of a property), so we cache it.
127
+ def declaration_finder(dependency, requirement)
128
+ @declaration_finders ||= {}
129
+ @declaration_finders[dependency.hash + requirement.hash] ||=
130
+ begin
131
+ DeclarationFinder.new(
132
+ dependency: dependency,
133
+ declaring_requirement: requirement,
134
+ dependency_files: dependency_files
135
+ )
136
+ end
137
+ end
138
+
139
+ def updated_pom_declaration(old_declaration, previous_req, requirement)
140
+ original_req_string = previous_req.fetch(:requirement)
141
+
142
+ old_declaration.gsub(
143
+ %r{<version>\s*#{Regexp.quote(original_req_string)}\s*</version>},
144
+ "<version>#{requirement.fetch(:requirement)}</version>"
145
+ )
146
+ end
147
+
148
+ def original_pomfiles
149
+ @original_pomfiles ||=
150
+ dependency_files.select { |f| f.name.end_with?("pom.xml") }
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/file_updaters/java/maven"
5
+ require "dependabot/file_parsers/java/maven"
6
+ require "dependabot/file_parsers/java/maven/property_value_finder"
7
+
8
+ module Dependabot
9
+ module FileUpdaters
10
+ module Java
11
+ class Maven
12
+ class DeclarationFinder
13
+ DECLARATION_REGEX =
14
+ %r{<parent>.*?</parent>|<dependency>.*?</dependency>|
15
+ <plugin>.*?</plugin>|<extension>.*?</extension>}mx.freeze
16
+
17
+ attr_reader :dependency, :declaring_requirement, :dependency_files
18
+
19
+ def initialize(dependency:, dependency_files:, declaring_requirement:)
20
+ @dependency = dependency
21
+ @dependency_files = dependency_files
22
+ @declaring_requirement = declaring_requirement
23
+ end
24
+
25
+ def declaration_strings
26
+ @declaration_strings ||= fetch_pom_declaration_strings
27
+ end
28
+
29
+ def declaration_nodes
30
+ declaration_strings.map do |declaration_string|
31
+ Nokogiri::XML(declaration_string)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def declaring_pom
38
+ filename = declaring_requirement.fetch(:file)
39
+ declaring_pom = dependency_files.find { |f| f.name == filename }
40
+ return declaring_pom if declaring_pom
41
+
42
+ raise "No pom found with name #{filename}!"
43
+ end
44
+
45
+ def dependency_name
46
+ dependency.name
47
+ end
48
+
49
+ def fetch_pom_declaration_strings
50
+ deep_find_declarations(declaring_pom.content).select do |nd|
51
+ node = Nokogiri::XML(nd)
52
+ node.remove_namespaces!
53
+ next false unless node_group_id(node)
54
+ next false unless node.at_xpath("./*/artifactId")
55
+
56
+ node_name = [
57
+ node_group_id(node),
58
+ evaluated_value(node.at_xpath("./*/artifactId").content.strip)
59
+ ].compact.join(":")
60
+
61
+ next false unless node_name == dependency_name
62
+
63
+ declaring_requirement_matches?(node)
64
+ end
65
+ end
66
+
67
+ def node_group_id(node)
68
+ unless node.at_xpath("./*/groupId") || node.at_xpath("./plugin")
69
+ return
70
+ end
71
+ unless node.at_xpath("./*/groupId")
72
+ return "org.apache.maven.plugins"
73
+ end
74
+
75
+ evaluated_value(node.at_xpath("./*/groupId").content.strip)
76
+ end
77
+
78
+ def deep_find_declarations(string)
79
+ string.scan(DECLARATION_REGEX).flat_map do |matching_node|
80
+ [matching_node, *deep_find_declarations(matching_node[1..-1])]
81
+ end
82
+ end
83
+
84
+ def declaring_requirement_matches?(node)
85
+ node_requirement = node.at_css("version")&.content&.strip
86
+
87
+ if declaring_requirement.dig(:metadata, :property_name)
88
+ return false unless node_requirement
89
+
90
+ property_name =
91
+ node_requirement.
92
+ match(FileParsers::Java::Maven::PROPERTY_REGEX)&.
93
+ named_captures&.
94
+ fetch("property")
95
+
96
+ property_name == declaring_requirement[:metadata][:property_name]
97
+ else
98
+ node_requirement == declaring_requirement.fetch(:requirement)
99
+ end
100
+ end
101
+
102
+ def evaluated_value(value)
103
+ unless value.match?(FileParsers::Java::Maven::PROPERTY_REGEX)
104
+ return value
105
+ end
106
+
107
+ property_name =
108
+ value.match(FileParsers::Java::Maven::PROPERTY_REGEX).
109
+ named_captures.fetch("property")
110
+
111
+ property_value =
112
+ property_value_finder.
113
+ property_details(
114
+ property_name: property_name,
115
+ callsite_pom: declaring_pom
116
+ )&.fetch(:value)
117
+
118
+ return value unless property_value
119
+
120
+ value.gsub(FileParsers::Java::Maven::PROPERTY_REGEX, property_value)
121
+ end
122
+
123
+ def property_value_finder
124
+ @property_value_finder ||=
125
+ FileParsers::Java::Maven::PropertyValueFinder.
126
+ new(dependency_files: dependency_files)
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ require "dependabot/dependency_file"
6
+ require "dependabot/file_updaters/java/maven"
7
+ require "dependabot/file_parsers/java/maven/property_value_finder"
8
+
9
+ module Dependabot
10
+ module FileUpdaters
11
+ module Java
12
+ class Maven
13
+ class PropertyValueUpdater
14
+ def initialize(dependency_files:)
15
+ @dependency_files = dependency_files
16
+ end
17
+
18
+ def update_pomfiles_for_property_change(property_name:, callsite_pom:,
19
+ updated_value:)
20
+ declaration_details = property_value_finder.property_details(
21
+ property_name: property_name,
22
+ callsite_pom: callsite_pom
23
+ )
24
+ node = declaration_details.fetch(:node)
25
+ filename = declaration_details.fetch(:file)
26
+
27
+ pom_to_update = dependency_files.find { |f| f.name == filename }
28
+ updated_content = pom_to_update.content.sub(
29
+ %r{<#{Regexp.quote(node.name)}>
30
+ \s*#{Regexp.quote(node.content)}\s*
31
+ </#{Regexp.quote(node.name)}>}xm,
32
+ "<#{node.name}>#{updated_value}</#{node.name}>"
33
+ )
34
+
35
+ updated_pomfiles = dependency_files.dup
36
+ updated_pomfiles[updated_pomfiles.index(pom_to_update)] =
37
+ update_file(file: pom_to_update, content: updated_content)
38
+
39
+ updated_pomfiles
40
+ end
41
+
42
+ private
43
+
44
+ attr_reader :dependency_files
45
+
46
+ def property_value_finder
47
+ @property_value_finder ||=
48
+ FileParsers::Java::Maven::PropertyValueFinder.
49
+ new(dependency_files: dependency_files)
50
+ end
51
+
52
+ def update_file(file:, content:)
53
+ updated_file = file.dup
54
+ updated_file.content = content
55
+ updated_file
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end