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,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "toml-rb"
4
+ require "dependabot/update_checkers/base"
5
+ require "dependabot/shared_helpers"
6
+ require "dependabot/errors"
7
+ require "dependabot/utils/go/version"
8
+ require "dependabot/utils/go/shared_helper"
9
+
10
+ module Dependabot
11
+ module UpdateCheckers
12
+ module Go
13
+ class Modules < Dependabot::UpdateCheckers::Base
14
+ def latest_resolvable_version
15
+ @latest_resolvable_version ||=
16
+ version_class.new(find_latest_resolvable_version.gsub(/^v/, ""))
17
+ end
18
+
19
+ # This is currently used to short-circuit latest_resolvable_version,
20
+ # with the assumption that it'll be quicker than checking
21
+ # resolvability. As this is quite quick in Go anyway, we just alias.
22
+ def latest_version
23
+ latest_resolvable_version
24
+ end
25
+
26
+ def latest_resolvable_version_with_no_unlock
27
+ # Irrelevant, since Go modules uses a single dependency file
28
+ nil
29
+ end
30
+
31
+ def updated_requirements
32
+ dependency.requirements.map do |req|
33
+ req.merge(requirement: latest_version)
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def find_latest_resolvable_version
40
+ SharedHelpers.in_a_temporary_directory do
41
+ SharedHelpers.with_git_configured(credentials: credentials) do
42
+ File.write("go.mod", go_mod.content)
43
+
44
+ SharedHelpers.run_helper_subprocess(
45
+ command: "GO111MODULE=on #{Utils::Go::SharedHelper.path}",
46
+ function: "getUpdatedVersion",
47
+ args: {
48
+ dependency: {
49
+ name: dependency.name,
50
+ version: "v" + dependency.version,
51
+ indirect: dependency.requirements.empty?
52
+ }
53
+ }
54
+ )
55
+ end
56
+ end
57
+ end
58
+
59
+ def latest_version_resolvable_with_full_unlock?
60
+ # Full unlock checks aren't implemented for Go (yet)
61
+ false
62
+ end
63
+
64
+ def updated_dependencies_after_full_unlock
65
+ raise NotImplementedError
66
+ end
67
+
68
+ # Override the base class's check for whether this is a git dependency,
69
+ # since not all dep git dependencies have a SHA version (sometimes their
70
+ # version is the tag)
71
+ def existing_version_is_sha?
72
+ git_dependency?
73
+ end
74
+
75
+ def library?
76
+ dependency_files.none? { |f| f.type == "package_main" }
77
+ end
78
+
79
+ def version_from_tag(tag)
80
+ # To compare with the current version we either use the commit SHA
81
+ # (if that's what the parser picked up) of the tag name.
82
+ if dependency.version&.match?(/^[0-9a-f]{40}$/)
83
+ return tag&.fetch(:commit_sha)
84
+ end
85
+
86
+ tag&.fetch(:tag)
87
+ end
88
+
89
+ def git_dependency?
90
+ git_commit_checker.git_dependency?
91
+ end
92
+
93
+ def default_source
94
+ { type: "default", source: dependency.name }
95
+ end
96
+
97
+ def go_mod
98
+ @go_mod ||= dependency_files.find { |f| f.name == "go.mod" }
99
+ end
100
+
101
+ def git_commit_checker
102
+ @git_commit_checker ||=
103
+ GitCommitChecker.new(
104
+ dependency: dependency,
105
+ credentials: credentials,
106
+ ignored_versions: ignored_versions
107
+ )
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,148 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/update_checkers/base"
4
+ require "dependabot/file_parsers/java/gradle"
5
+
6
+ module Dependabot
7
+ module UpdateCheckers
8
+ module Java
9
+ class Gradle < Dependabot::UpdateCheckers::Base
10
+ require_relative "maven/requirements_updater"
11
+ require_relative "gradle/version_finder"
12
+ require_relative "gradle/multi_dependency_updater"
13
+
14
+ def latest_version
15
+ latest_version_details&.fetch(:version)
16
+ end
17
+
18
+ def latest_resolvable_version
19
+ # TODO: Resolve the build.gradle to find the latest version we could
20
+ # update to without updating any other dependencies at the same time.
21
+ #
22
+ # The above is hard. Currently we just return the latest version and
23
+ # hope (hence this package manager is in beta!)
24
+ return nil if version_comes_from_multi_dependency_property?
25
+ return nil if version_comes_from_dependency_set?
26
+
27
+ latest_version
28
+ end
29
+
30
+ def latest_resolvable_version_with_no_unlock
31
+ # Irrelevant, since Gradle has a single dependency file.
32
+ #
33
+ # For completeness we ought to resolve the build.gradle and return the
34
+ # latest version that satisfies the current constraint AND any
35
+ # constraints placed on it by other dependencies. Seeing as we're
36
+ # never going to take any action as a result, though, we just return
37
+ # nil.
38
+ nil
39
+ end
40
+
41
+ def updated_requirements
42
+ property_names =
43
+ declarations_using_a_property.
44
+ map { |req| req.dig(:metadata, :property_name) }
45
+
46
+ Maven::RequirementsUpdater.new(
47
+ requirements: dependency.requirements,
48
+ latest_version: latest_version&.to_s,
49
+ source_url: latest_version_details&.fetch(:source_url),
50
+ properties_to_update: property_names
51
+ ).updated_requirements
52
+ end
53
+
54
+ def requirements_unlocked_or_can_be?
55
+ # If the dependency version come from a property we couldn't
56
+ # interpolate then there's nothing we can do.
57
+ !dependency.version.include?("$")
58
+ end
59
+
60
+ private
61
+
62
+ def latest_version_resolvable_with_full_unlock?
63
+ unless version_comes_from_multi_dependency_property? ||
64
+ version_comes_from_dependency_set?
65
+ return false
66
+ end
67
+
68
+ multi_dependency_updater.update_possible?
69
+ end
70
+
71
+ def updated_dependencies_after_full_unlock
72
+ multi_dependency_updater.updated_dependencies
73
+ end
74
+
75
+ def numeric_version_up_to_date?
76
+ return false unless version_class.correct?(dependency.version)
77
+
78
+ super
79
+ end
80
+
81
+ def numeric_version_can_update?(requirements_to_unlock:)
82
+ return false unless version_class.correct?(dependency.version)
83
+
84
+ super
85
+ end
86
+
87
+ def latest_version_details
88
+ @latest_version_details ||= version_finder.latest_version_details
89
+ end
90
+
91
+ def version_finder
92
+ @version_finder ||=
93
+ VersionFinder.new(
94
+ dependency: dependency,
95
+ dependency_files: dependency_files,
96
+ ignored_versions: ignored_versions
97
+ )
98
+ end
99
+
100
+ def multi_dependency_updater
101
+ @multi_dependency_updater ||=
102
+ MultiDependencyUpdater.new(
103
+ dependency: dependency,
104
+ dependency_files: dependency_files,
105
+ target_version_details: latest_version_details,
106
+ ignored_versions: ignored_versions
107
+ )
108
+ end
109
+
110
+ def version_comes_from_multi_dependency_property?
111
+ declarations_using_a_property.any? do |requirement|
112
+ property_name = requirement.fetch(:metadata).fetch(:property_name)
113
+
114
+ all_property_based_dependencies.any? do |dep|
115
+ next false if dep.name == dependency.name
116
+
117
+ dep.requirements.any? do |req|
118
+ req.dig(:metadata, :property_name) == property_name
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ def version_comes_from_dependency_set?
125
+ dependency.requirements.any? do |req|
126
+ req.dig(:metadata, :dependency_set)
127
+ end
128
+ end
129
+
130
+ def declarations_using_a_property
131
+ @declarations_using_a_property ||=
132
+ dependency.requirements.
133
+ select { |req| req.dig(:metadata, :property_name) }
134
+ end
135
+
136
+ def all_property_based_dependencies
137
+ @all_property_based_dependencies ||=
138
+ FileParsers::Java::Gradle.new(
139
+ dependency_files: dependency_files,
140
+ source: nil
141
+ ).parse.select do |dep|
142
+ dep.requirements.any? { |req| req.dig(:metadata, :property_name) }
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_parsers/java/gradle"
4
+ require "dependabot/update_checkers/java/gradle"
5
+ require "dependabot/update_checkers/java/maven/requirements_updater"
6
+
7
+ module Dependabot
8
+ module UpdateCheckers
9
+ module Java
10
+ class Gradle
11
+ class MultiDependencyUpdater
12
+ require_relative "version_finder"
13
+
14
+ def initialize(dependency:, dependency_files:,
15
+ target_version_details:, ignored_versions:)
16
+ @dependency = dependency
17
+ @dependency_files = dependency_files
18
+ @target_version = target_version_details&.fetch(:version)
19
+ @source_url = target_version_details&.fetch(:source_url)
20
+ @ignored_versions = ignored_versions
21
+ end
22
+
23
+ def update_possible?
24
+ return false unless target_version
25
+
26
+ @update_possible ||=
27
+ dependencies_to_update.all? do |dep|
28
+ VersionFinder.new(
29
+ dependency: dep,
30
+ dependency_files: dependency_files,
31
+ ignored_versions: ignored_versions
32
+ ).versions.
33
+ map { |v| v.fetch(:version) }.
34
+ include?(target_version)
35
+ end
36
+ end
37
+
38
+ def updated_dependencies
39
+ raise "Update not possible!" unless update_possible?
40
+
41
+ @updated_dependencies ||=
42
+ dependencies_to_update.map do |dep|
43
+ Dependency.new(
44
+ name: dep.name,
45
+ version: target_version.to_s,
46
+ requirements: updated_requirements(dep),
47
+ previous_version: dep.version,
48
+ previous_requirements: dep.requirements,
49
+ package_manager: dep.package_manager
50
+ )
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ attr_reader :dependency, :dependency_files, :target_version,
57
+ :source_url, :ignored_versions
58
+
59
+ def dependencies_to_update
60
+ @dependencies_to_update ||=
61
+ FileParsers::Java::Gradle.new(
62
+ dependency_files: dependency_files,
63
+ source: nil
64
+ ).parse.select do |dep|
65
+ dep.requirements.any? do |r|
66
+ tmp_p_name = r.dig(:metadata, :property_name)
67
+ tmp_dep_set = r.dig(:metadata, :dependency_set)
68
+ next true if property_name && tmp_p_name == property_name
69
+
70
+ dependency_set && tmp_dep_set == dependency_set
71
+ end
72
+ end
73
+ end
74
+
75
+ def property_name
76
+ @property_name ||= dependency.requirements.
77
+ find { |r| r.dig(:metadata, :property_name) }&.
78
+ dig(:metadata, :property_name)
79
+ end
80
+
81
+ def dependency_set
82
+ @dependency_set ||= dependency.requirements.
83
+ find { |r| r.dig(:metadata, :dependency_set) }&.
84
+ dig(:metadata, :dependency_set)
85
+ end
86
+
87
+ def pom
88
+ dependency_files.find { |f| f.name == "pom.xml" }
89
+ end
90
+
91
+ def updated_requirements(dep)
92
+ @updated_requirements ||= {}
93
+ @updated_requirements[dep.name] ||=
94
+ Maven::RequirementsUpdater.new(
95
+ requirements: dep.requirements,
96
+ latest_version: target_version.to_s,
97
+ source_url: source_url,
98
+ properties_to_update: [property_name].compact
99
+ ).updated_requirements
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,183 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/shared_helpers"
5
+ require "dependabot/file_parsers/java/gradle/repositories_finder"
6
+ require "dependabot/update_checkers/java/gradle"
7
+ require "dependabot/utils/java/version"
8
+ require "dependabot/utils/java/requirement"
9
+
10
+ module Dependabot
11
+ module UpdateCheckers
12
+ module Java
13
+ class Gradle
14
+ class VersionFinder
15
+ GOOGLE_MAVEN_REPO = "https://maven.google.com"
16
+ TYPE_SUFFICES = %w(jre android java).freeze
17
+
18
+ def initialize(dependency:, dependency_files:, ignored_versions:)
19
+ @dependency = dependency
20
+ @dependency_files = dependency_files
21
+ @ignored_versions = ignored_versions
22
+ end
23
+
24
+ def latest_version_details
25
+ possible_versions = versions
26
+
27
+ unless wants_prerelease?
28
+ possible_versions =
29
+ possible_versions.
30
+ reject { |v| v.fetch(:version).prerelease? }
31
+ end
32
+
33
+ unless wants_date_based_version?
34
+ possible_versions =
35
+ possible_versions.
36
+ reject { |v| v.fetch(:version) > version_class.new(1900) }
37
+ end
38
+
39
+ possible_versions =
40
+ possible_versions.
41
+ select { |v| matches_dependency_version_type?(v.fetch(:version)) }
42
+
43
+ ignored_versions.each do |req|
44
+ ignore_req = Utils::Java::Requirement.new(req.split(","))
45
+ possible_versions =
46
+ possible_versions.
47
+ reject { |v| ignore_req.satisfied_by?(v.fetch(:version)) }
48
+ end
49
+
50
+ possible_versions.last
51
+ end
52
+
53
+ def versions
54
+ version_details =
55
+ repository_urls.map do |url|
56
+ next google_version_details if url == GOOGLE_MAVEN_REPO
57
+
58
+ dependency_metadata(url).css("versions > version").
59
+ select { |node| version_class.correct?(node.content) }.
60
+ map { |node| version_class.new(node.content) }.
61
+ map { |version| { version: version, source_url: url } }
62
+ end.flatten.compact
63
+
64
+ version_details.sort_by { |details| details.fetch(:version) }
65
+ end
66
+
67
+ private
68
+
69
+ attr_reader :dependency, :dependency_files, :ignored_versions
70
+
71
+ def wants_prerelease?
72
+ return false unless dependency.version
73
+ return false unless version_class.correct?(dependency.version)
74
+
75
+ version_class.new(dependency.version).prerelease?
76
+ end
77
+
78
+ def wants_date_based_version?
79
+ return false unless dependency.version
80
+ return false unless version_class.correct?(dependency.version)
81
+
82
+ version_class.new(dependency.version) >= version_class.new(100)
83
+ end
84
+
85
+ def google_version_details
86
+ url = GOOGLE_MAVEN_REPO
87
+ group_id, artifact_id = dependency.name.split(":")
88
+
89
+ dependency_metadata_url = "#{GOOGLE_MAVEN_REPO}/"\
90
+ "#{group_id.tr('.', '/')}/"\
91
+ "group-index.xml"
92
+
93
+ @google_version_details ||=
94
+ begin
95
+ response = Excon.get(
96
+ dependency_metadata_url,
97
+ idempotent: true,
98
+ **SharedHelpers.excon_defaults
99
+ )
100
+ Nokogiri::XML(response.body)
101
+ end
102
+
103
+ xpath = "/#{group_id}/#{artifact_id}"
104
+ return unless @google_version_details.at_xpath(xpath)
105
+
106
+ @google_version_details.at_xpath(xpath).
107
+ attributes.fetch("versions").
108
+ value.split(",").
109
+ select { |v| version_class.correct?(v) }.
110
+ map { |v| version_class.new(v) }.
111
+ map { |version| { version: version, source_url: url } }
112
+ end
113
+
114
+ def dependency_metadata(repository_url)
115
+ @dependency_metadata ||= {}
116
+ @dependency_metadata[repository_url] ||=
117
+ begin
118
+ response = Excon.get(
119
+ dependency_metadata_url(repository_url),
120
+ idempotent: true,
121
+ **SharedHelpers.excon_defaults
122
+ )
123
+ Nokogiri::XML(response.body)
124
+ rescue Excon::Error::Socket, Excon::Error::Timeout
125
+ namespace = FileParsers::Java::Gradle::RepositoriesFinder
126
+ central = namespace::CENTRAL_REPO_URL
127
+ raise if repository_url == central
128
+
129
+ Nokogiri::XML("")
130
+ end
131
+ end
132
+
133
+ def repository_urls
134
+ requirement_files =
135
+ dependency.requirements.
136
+ map { |r| r.fetch(:file) }.
137
+ map { |nm| dependency_files.find { |f| f.name == nm } }
138
+
139
+ @repository_urls ||=
140
+ requirement_files.flat_map do |target_file|
141
+ FileParsers::Java::Gradle::RepositoriesFinder.new(
142
+ dependency_files: dependency_files,
143
+ target_dependency_file: target_file
144
+ ).repository_urls
145
+ end.uniq
146
+ end
147
+
148
+ def matches_dependency_version_type?(comparison_version)
149
+ return true unless dependency.version
150
+
151
+ current_type =
152
+ TYPE_SUFFICES.
153
+ find { |t| dependency.version.split(/[.\-]/).include?(t) }
154
+
155
+ version_type =
156
+ TYPE_SUFFICES.
157
+ find { |t| comparison_version.to_s.split(/[.\-]/).include?(t) }
158
+
159
+ current_type == version_type
160
+ end
161
+
162
+ def pom
163
+ filename = dependency.requirements.first.fetch(:file)
164
+ dependency_files.find { |f| f.name == filename }
165
+ end
166
+
167
+ def dependency_metadata_url(repository_url)
168
+ group_id, artifact_id = dependency.name.split(":")
169
+
170
+ "#{repository_url}/"\
171
+ "#{group_id.tr('.', '/')}/"\
172
+ "#{artifact_id}/"\
173
+ "maven-metadata.xml"
174
+ end
175
+
176
+ def version_class
177
+ Utils::Java::Version
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end