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,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/metadata_finders/base"
4
+
5
+ module Dependabot
6
+ module MetadataFinders
7
+ module Docker
8
+ class Docker < Dependabot::MetadataFinders::Base
9
+ private
10
+
11
+ def look_up_source
12
+ # TODO: Find a way to add links to PRs
13
+ nil
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/metadata_finders/base"
5
+
6
+ module Dependabot
7
+ module MetadataFinders
8
+ module Dotnet
9
+ class Nuget < Dependabot::MetadataFinders::Base
10
+ private
11
+
12
+ def look_up_source
13
+ return Source.from_url(dependency_source_url) if dependency_source_url
14
+
15
+ look_up_source_in_nuspec(dependency_nuspec_file)
16
+ end
17
+
18
+ def look_up_source_in_nuspec(nuspec)
19
+ potential_source_urls = [
20
+ nuspec.at_css("package > metadata > repository")&.
21
+ attribute("url")&.value,
22
+ nuspec.at_css("package > metadata > repository > url")&.content,
23
+ nuspec.at_css("package > metadata > projectUrl")&.content,
24
+ nuspec.at_css("package > metadata > licenseUrl")&.content
25
+ ].compact
26
+
27
+ source_url = potential_source_urls.find { |url| Source.from_url(url) }
28
+ source_url ||= source_from_anywhere_in_nuspec(nuspec)
29
+
30
+ Source.from_url(source_url)
31
+ end
32
+
33
+ def source_from_anywhere_in_nuspec(nuspec)
34
+ github_urls = []
35
+ nuspec.to_s.scan(Source::SOURCE_REGEX) do
36
+ github_urls << Regexp.last_match.to_s
37
+ end
38
+
39
+ github_urls.find do |url|
40
+ repo = Source.from_url(url).repo
41
+ repo.downcase.end_with?(dependency.name.downcase)
42
+ end
43
+ end
44
+
45
+ def dependency_nuspec_file
46
+ return @dependency_nuspec_file unless @dependency_nuspec_file.nil?
47
+
48
+ response = Excon.get(
49
+ dependency_nuspec_url,
50
+ headers: auth_header,
51
+ idempotent: true,
52
+ **SharedHelpers.excon_defaults
53
+ )
54
+
55
+ @dependency_nuspec_file = Nokogiri::XML(response.body)
56
+ end
57
+
58
+ # rubocop:disable Metrics/AbcSize
59
+ def dependency_nuspec_url
60
+ source = dependency.requirements.
61
+ find { |r| r&.fetch(:source) }&.fetch(:source)
62
+
63
+ if source&.key?(:nuspec_url)
64
+ source.fetch(:nuspec_url) ||
65
+ "https://api.nuget.org/v3-flatcontainer/"\
66
+ "#{dependency.name.downcase}/#{dependency.version}/"\
67
+ "#{dependency.name.downcase}.nuspec"
68
+ elsif source&.key?(:nuspec_url)
69
+ source.fetch("nuspec_url") ||
70
+ "https://api.nuget.org/v3-flatcontainer/"\
71
+ "#{dependency.name.downcase}/#{dependency.version}/"\
72
+ "#{dependency.name.downcase}.nuspec"
73
+ else
74
+ "https://api.nuget.org/v3-flatcontainer/"\
75
+ "#{dependency.name.downcase}/#{dependency.version}/"\
76
+ "#{dependency.name.downcase}.nuspec"
77
+ end
78
+ end
79
+ # rubocop:enable Metrics/AbcSize
80
+
81
+ def dependency_source_url
82
+ source = dependency.requirements.
83
+ find { |r| r&.fetch(:source) }&.fetch(:source)
84
+
85
+ return unless source
86
+ return source.fetch(:source_url) if source.key?(:source_url)
87
+
88
+ source.fetch("source_url")
89
+ end
90
+
91
+ def auth_header
92
+ source = dependency.requirements.
93
+ find { |r| r&.fetch(:source) }&.fetch(:source)
94
+ url = source&.fetch(:url, nil) || source&.fetch("url")
95
+
96
+ token = credentials.
97
+ select { |cred| cred["type"] == "nuget_feed" }.
98
+ find { |cred| cred["url"] == url }&.
99
+ fetch("token", nil)
100
+
101
+ return {} unless token
102
+
103
+ if token.include?(":")
104
+ encoded_token = Base64.encode64(token).delete("\n")
105
+ { "Authorization" => "Basic #{encoded_token}" }
106
+ elsif Base64.decode64(token).ascii_only? &&
107
+ Base64.decode64(token).include?(":")
108
+ { "Authorization" => "Basic #{token.delete("\n")}" }
109
+ else
110
+ { "Authorization" => "Bearer #{token}" }
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "excon"
4
+ require "dependabot/metadata_finders/base"
5
+ require "dependabot/shared_helpers"
6
+
7
+ module Dependabot
8
+ module MetadataFinders
9
+ module Elixir
10
+ class Hex < Dependabot::MetadataFinders::Base
11
+ SOURCE_KEYS = %w(
12
+ GitHub Github github
13
+ GitLab Gitlab gitlab
14
+ BitBucket Bitbucket bitbucket
15
+ Source source
16
+ ).freeze
17
+
18
+ private
19
+
20
+ def look_up_source
21
+ case new_source_type
22
+ when "default" then find_source_from_hex_listing
23
+ when "git" then find_source_from_git_url
24
+ else raise "Unexpected source type: #{new_source_type}"
25
+ end
26
+ end
27
+
28
+ def new_source_type
29
+ sources =
30
+ dependency.requirements.map { |r| r.fetch(:source) }.uniq.compact
31
+
32
+ return "default" if sources.empty?
33
+ raise "Multiple sources! #{sources.join(', ')}" if sources.count > 1
34
+
35
+ sources.first[:type] || sources.first.fetch("type")
36
+ end
37
+
38
+ def find_source_from_hex_listing
39
+ potential_source_urls =
40
+ SOURCE_KEYS.
41
+ map { |key| hex_listing.dig("meta", "links", key) }.
42
+ compact
43
+
44
+ source_url = potential_source_urls.find { |url| Source.from_url(url) }
45
+ Source.from_url(source_url)
46
+ end
47
+
48
+ def find_source_from_git_url
49
+ info = dependency.requirements.map { |r| r[:source] }.compact.first
50
+
51
+ url = info[:url] || info.fetch("url")
52
+ Source.from_url(url)
53
+ end
54
+
55
+ def hex_listing
56
+ return @hex_listing unless @hex_listing.nil?
57
+
58
+ response = Excon.get(
59
+ "https://hex.pm/api/packages/#{dependency.name}",
60
+ idempotent: true,
61
+ **SharedHelpers.excon_defaults
62
+ )
63
+
64
+ @hex_listing = JSON.parse(response.body)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/metadata_finders/base"
4
+ require "dependabot/shared_helpers"
5
+
6
+ module Dependabot
7
+ module MetadataFinders
8
+ module Elm
9
+ class ElmPackage < Dependabot::MetadataFinders::Base
10
+ private
11
+
12
+ def look_up_source
13
+ # For Elm 0.18 an elm-package is guaranteed to be `owner/name`
14
+ # on github. For 0.19 a lot will change, including the name of
15
+ # the dependency file, so I won't try to build something more
16
+ # sophisticated here for now.
17
+ Source.from_url("https://github.com/" + dependency.name)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/metadata_finders/base"
4
+
5
+ module Dependabot
6
+ module MetadataFinders
7
+ module Git
8
+ class Submodules < Dependabot::MetadataFinders::Base
9
+ private
10
+
11
+ def look_up_source
12
+ url = dependency.requirements.first.fetch(:source)[:url] ||
13
+ dependency.requirements.first.fetch(:source).fetch("url")
14
+
15
+ Source.from_url(url)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/metadata_finders/base"
4
+ require "dependabot/utils/go/path_converter"
5
+
6
+ module Dependabot
7
+ module MetadataFinders
8
+ module Go
9
+ class Dep < Dependabot::MetadataFinders::Base
10
+ private
11
+
12
+ def look_up_source
13
+ return look_up_git_dependency_source if git_dependency?
14
+
15
+ path_str = (specified_source_string || dependency.name)
16
+ url = Dependabot::Utils::Go::PathConverter.
17
+ git_url_for_path_without_go_helper(path_str)
18
+ Source.from_url(url) if url
19
+ end
20
+
21
+ def git_dependency?
22
+ return false unless declared_source_details
23
+
24
+ dependency_type =
25
+ declared_source_details.fetch(:type, nil) ||
26
+ declared_source_details.fetch("type")
27
+
28
+ dependency_type == "git"
29
+ end
30
+
31
+ def look_up_git_dependency_source
32
+ specified_url =
33
+ declared_source_details.fetch(:url, nil) ||
34
+ declared_source_details.fetch("url")
35
+
36
+ Source.from_url(specified_url)
37
+ end
38
+
39
+ def specified_source_string
40
+ declared_source_details&.fetch(:source, nil) ||
41
+ declared_source_details&.fetch("source", nil)
42
+ end
43
+
44
+ def declared_source_details
45
+ sources = dependency.requirements.
46
+ map { |r| r.fetch(:source) }.
47
+ uniq.compact
48
+
49
+ raise "Multiple sources! #{sources.join(', ')}" if sources.count > 1
50
+
51
+ sources.first
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/metadata_finders/base"
5
+ require "dependabot/file_fetchers/base"
6
+ require "dependabot/file_parsers/java/maven"
7
+ require "dependabot/file_parsers/java/maven/repositories_finder"
8
+
9
+ module Dependabot
10
+ module MetadataFinders
11
+ module Java
12
+ class Maven < Dependabot::MetadataFinders::Base
13
+ DOT_SEPARATOR_REGEX = %r{\.(?:(?!\d+[.\/])+)}.freeze
14
+
15
+ private
16
+
17
+ def look_up_source
18
+ tmp_source = look_up_source_in_pom(dependency_pom_file)
19
+ return tmp_source if tmp_source
20
+
21
+ return unless (parent = parent_pom_file(dependency_pom_file))
22
+
23
+ tmp_source = look_up_source_in_pom(parent)
24
+ return unless tmp_source
25
+
26
+ artifact = dependency.name.split(":").last
27
+ return tmp_source if tmp_source.repo.end_with?(artifact)
28
+ return tmp_source if repo_has_subdir_for_dep?(tmp_source)
29
+ end
30
+
31
+ def repo_has_subdir_for_dep?(tmp_source)
32
+ @repo_has_subdir_for_dep ||= {}
33
+ if @repo_has_subdir_for_dep.key?(tmp_source)
34
+ return @repo_has_subdir_for_dep[tmp_source]
35
+ end
36
+
37
+ artifact = dependency.name.split(":").last
38
+ fetcher =
39
+ FileFetchers::Base.new(source: tmp_source, credentials: credentials)
40
+
41
+ @repo_has_subdir_for_dep[tmp_source] =
42
+ fetcher.send(:repo_contents, raise_errors: false).
43
+ select { |f| f.type == "dir" }.
44
+ any? { |f| artifact.end_with?(f.name) }
45
+ rescue Dependabot::RepoNotFound
46
+ @repo_has_subdir_for_dep[tmp_source] = false
47
+ end
48
+
49
+ def look_up_source_in_pom(pom)
50
+ potential_source_urls = [
51
+ pom.at_css("project > url")&.content,
52
+ pom.at_css("project > scm > url")&.content,
53
+ pom.at_css("project > issueManagement > url")&.content
54
+ ].compact
55
+
56
+ source_url = potential_source_urls.find { |url| Source.from_url(url) }
57
+ source_url ||= source_from_anywhere_in_pom(pom)
58
+ source_url = substitute_property_in_source_url(source_url, pom)
59
+
60
+ Source.from_url(source_url)
61
+ end
62
+
63
+ def substitute_property_in_source_url(source_url, pom)
64
+ return unless source_url
65
+ return source_url unless source_url.include?("${")
66
+
67
+ regex = FileParsers::Java::Maven::PROPERTY_REGEX
68
+ property_name = source_url.match(regex).named_captures["property"]
69
+ doc = pom.dup
70
+ doc.remove_namespaces!
71
+ nm = property_name.sub(/^pom\./, "").sub(/^project\./, "")
72
+ property_value =
73
+ loop do
74
+ candidate_node =
75
+ doc.at_xpath("/project/#{nm}") ||
76
+ doc.at_xpath("/project/properties/#{nm}") ||
77
+ doc.at_xpath("/project/profiles/profile/properties/#{nm}")
78
+ break candidate_node.content if candidate_node
79
+ break unless nm.match?(DOT_SEPARATOR_REGEX)
80
+
81
+ nm = nm.sub(DOT_SEPARATOR_REGEX, "/")
82
+ end
83
+
84
+ source_url.gsub("${#{property_name}}", property_value)
85
+ end
86
+
87
+ def source_from_anywhere_in_pom(pom)
88
+ github_urls = []
89
+ pom.to_s.scan(Source::SOURCE_REGEX) do
90
+ github_urls << Regexp.last_match.to_s
91
+ end
92
+
93
+ github_urls.find do |url|
94
+ repo = Source.from_url(url).repo
95
+ repo.end_with?(dependency.name.split(":").last)
96
+ end
97
+ end
98
+
99
+ def dependency_pom_file
100
+ return @dependency_pom_file unless @dependency_pom_file.nil?
101
+
102
+ artifact_id = dependency.name.split(":").last
103
+ response = Excon.get(
104
+ "#{maven_repo_dependency_url}/"\
105
+ "#{dependency.version}/"\
106
+ "#{artifact_id}-#{dependency.version}.pom",
107
+ headers: auth_details,
108
+ idempotent: true,
109
+ **SharedHelpers.excon_defaults
110
+ )
111
+
112
+ @dependency_pom_file = Nokogiri::XML(response.body)
113
+ rescue Excon::Error::Timeout
114
+ @dependency_pom_file = Nokogiri::XML("")
115
+ end
116
+
117
+ def parent_pom_file(pom)
118
+ doc = pom.dup
119
+ doc.remove_namespaces!
120
+ group_id = doc.at_xpath("/project/parent/groupId")&.content&.strip
121
+ artifact_id =
122
+ doc.at_xpath("/project/parent/artifactId")&.content&.strip
123
+ version = doc.at_xpath("/project/parent/version")&.content&.strip
124
+
125
+ return unless artifact_id && group_id && version
126
+
127
+ response = Excon.get(
128
+ "#{maven_repo_url}/#{group_id.tr('.', '/')}/#{artifact_id}/"\
129
+ "#{version}/"\
130
+ "#{artifact_id}-#{version}.pom",
131
+ headers: auth_details,
132
+ idempotent: true,
133
+ **SharedHelpers.excon_defaults
134
+ )
135
+
136
+ Nokogiri::XML(response.body)
137
+ end
138
+
139
+ def maven_repo_url
140
+ source = dependency.requirements.
141
+ find { |r| r&.fetch(:source) }&.fetch(:source)
142
+
143
+ source&.fetch(:url, nil) ||
144
+ source&.fetch("url") ||
145
+ FileParsers::Java::Maven::RepositoriesFinder::CENTRAL_REPO_URL
146
+ end
147
+
148
+ def maven_repo_dependency_url
149
+ group_id, artifact_id = dependency.name.split(":")
150
+
151
+ "#{maven_repo_url}/#{group_id.tr('.', '/')}/#{artifact_id}"
152
+ end
153
+
154
+ def auth_details
155
+ cred =
156
+ credentials.select { |c| c["type"] == "maven_repository" }.
157
+ find do |c|
158
+ cred_url = c.fetch("url").gsub(%r{/+$}, "")
159
+ next false unless cred_url == maven_repo_url
160
+
161
+ c.fetch("username", nil)
162
+ end
163
+
164
+ return {} unless cred
165
+
166
+ token = cred.fetch("username") + ":" + cred.fetch("password")
167
+ encoded_token = Base64.encode64(token).delete("\n")
168
+ { "Authorization" => "Basic #{encoded_token}" }
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end