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,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "parseconfig"
4
+ require "dependabot/file_fetchers/base"
5
+ require "dependabot/shared_helpers"
6
+
7
+ module Dependabot
8
+ module FileFetchers
9
+ module Git
10
+ class Submodules < Dependabot::FileFetchers::Base
11
+ def self.required_files_in?(filenames)
12
+ filenames.include?(".gitmodules")
13
+ end
14
+
15
+ def self.required_files_message
16
+ "Repo must contain a .gitmodules file."
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_files
22
+ fetched_files = []
23
+ fetched_files << gitmodules_file
24
+ fetched_files += submodule_refs
25
+ fetched_files
26
+ end
27
+
28
+ def gitmodules_file
29
+ @gitmodules_file ||= fetch_file_from_host(".gitmodules")
30
+ end
31
+
32
+ def submodule_refs
33
+ submodule_paths.
34
+ map { |path| fetch_submodule_ref_from_host(path) }.
35
+ tap { |refs| refs.each { |f| f.support_file = true } }
36
+ end
37
+
38
+ def submodule_paths
39
+ SharedHelpers.in_a_temporary_directory do
40
+ File.write(".gitmodules", gitmodules_file.content)
41
+ ParseConfig.new(".gitmodules").params.values.map { |p| p["path"] }
42
+ end
43
+ end
44
+
45
+ def fetch_submodule_ref_from_host(submodule_path)
46
+ path = Pathname.new(File.join(directory, submodule_path)).
47
+ cleanpath.to_path.gsub(%r{^/*}, "")
48
+ sha = case source.provider
49
+ when "github"
50
+ github_client_for_source.contents(
51
+ repo,
52
+ path: path,
53
+ ref: commit
54
+ ).sha
55
+ when "gitlab"
56
+ tmp_path = path.gsub(%r{^/*}, "")
57
+ gitlab_client.get_file(repo, tmp_path, commit).blob_id
58
+ else raise "Unsupported provider '#{source.provider}'."
59
+ end
60
+
61
+ DependencyFile.new(
62
+ name: Pathname.new(submodule_path).cleanpath.to_path,
63
+ content: sha,
64
+ directory: directory,
65
+ type: "submodule"
66
+ )
67
+ rescue Octokit::NotFound, Gitlab::Error::NotFound
68
+ raise Dependabot::DependencyFileNotFound, path
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Go
8
+ class Dep < Dependabot::FileFetchers::Base
9
+ def self.required_files_in?(filenames)
10
+ (%w(Gopkg.toml Gopkg.lock) - filenames).empty?
11
+ end
12
+
13
+ def self.required_files_message
14
+ "Repo must contain a Gopkg.toml and Gopkg.lock."
15
+ end
16
+
17
+ private
18
+
19
+ def fetch_files
20
+ fetched_files = []
21
+ fetched_files << manifest if manifest
22
+ fetched_files << lockfile if lockfile
23
+
24
+ unless manifest
25
+ raise(
26
+ Dependabot::DependencyFileNotFound,
27
+ File.join(directory, "Gopkg.toml")
28
+ )
29
+ end
30
+
31
+ unless lockfile
32
+ raise(
33
+ Dependabot::DependencyFileNotFound,
34
+ File.join(directory, "Gopkg.lock")
35
+ )
36
+ end
37
+
38
+ # Fetch the main.go file if present, as this will later identify
39
+ # this repo as an app.
40
+ fetched_files << main if main
41
+ fetched_files
42
+ end
43
+
44
+ def manifest
45
+ @manifest ||= fetch_file_if_present("Gopkg.toml")
46
+ end
47
+
48
+ def lockfile
49
+ @lockfile ||= fetch_file_if_present("Gopkg.lock")
50
+ end
51
+
52
+ def main
53
+ return @main if @main
54
+
55
+ go_files = repo_contents.select { |f| f.name.end_with?(".go") }
56
+
57
+ go_files.each do |go_file|
58
+ file = fetch_file_from_host(go_file.name, type: "package_main")
59
+ next unless file.content.match?(/\s*package\s+main/)
60
+
61
+ return @main = file.tap { |f| f.support_file = true }
62
+ end
63
+
64
+ nil
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Go
8
+ class Modules < Dependabot::FileFetchers::Base
9
+ def self.required_files_in?(filenames)
10
+ filenames.include?("go.mod")
11
+ end
12
+
13
+ def self.required_files_message
14
+ "Repo must contain a go.mod."
15
+ end
16
+
17
+ private
18
+
19
+ def fetch_files
20
+ unless go_mod
21
+ raise(
22
+ Dependabot::DependencyFileNotFound,
23
+ File.join(directory, "go.mod")
24
+ )
25
+ end
26
+
27
+ fetched_files = [go_mod]
28
+
29
+ # Fetch the (optional) go.sum
30
+ fetched_files << go_sum if go_sum
31
+
32
+ # Fetch the main.go file if present, as this will later identify
33
+ # this repo as an app.
34
+ fetched_files << main if main
35
+
36
+ fetched_files
37
+ end
38
+
39
+ def go_mod
40
+ @go_mod ||= fetch_file_if_present("go.mod")
41
+ end
42
+
43
+ def go_sum
44
+ @go_sum ||= fetch_file_if_present("go.sum")
45
+ end
46
+
47
+ def main
48
+ return @main if @main
49
+
50
+ go_files = repo_contents.select { |f| f.name.end_with?(".go") }
51
+
52
+ go_files.each do |go_file|
53
+ file = fetch_file_from_host(go_file.name, type: "package_main")
54
+ next unless file.content.match?(/\s*package\s+main/)
55
+
56
+ return @main = file.tap { |f| f.support_file = true }
57
+ end
58
+
59
+ nil
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Java
8
+ class Gradle < Dependabot::FileFetchers::Base
9
+ require_relative "gradle/settings_file_parser"
10
+
11
+ def self.required_files_in?(filenames)
12
+ filenames.include?("build.gradle")
13
+ end
14
+
15
+ def self.required_files_message
16
+ "Repo must contain a build.gradle."
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_files
22
+ fetched_files = []
23
+ fetched_files << buildfile
24
+ fetched_files += subproject_buildfiles
25
+ fetched_files
26
+ end
27
+
28
+ def buildfile
29
+ @buildfile ||= fetch_file_from_host("build.gradle")
30
+ end
31
+
32
+ def subproject_buildfiles
33
+ return [] unless settings_file
34
+
35
+ subproject_paths =
36
+ SettingsFileParser.
37
+ new(settings_file: settings_file).
38
+ subproject_paths
39
+
40
+ subproject_paths.map do |path|
41
+ fetch_file_from_host(File.join(path, "build.gradle"))
42
+ rescue Dependabot::DependencyFileNotFound
43
+ # Gradle itself doesn't worry about missing subprojects, so we don't
44
+ nil
45
+ end.compact
46
+ end
47
+
48
+ def settings_file
49
+ @settings_file ||= fetch_file_from_host("settings.gradle")
50
+ rescue Dependabot::DependencyFileNotFound
51
+ nil
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/java/gradle"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Java
8
+ class Gradle
9
+ class SettingsFileParser
10
+ INCLUDE_ARGS_REGEX =
11
+ /(?:^|\s)include(?:\(|\s)(\s*[^\s,\)]+(?:,\s*[^\s,\)]+)*)/.freeze
12
+
13
+ def initialize(settings_file:)
14
+ @settings_file = settings_file
15
+ end
16
+
17
+ def subproject_paths
18
+ subprojects = []
19
+
20
+ comment_free_content.scan(function_regex("include")) do
21
+ args = Regexp.last_match.named_captures.fetch("args")
22
+ args = args.split(",")
23
+ args = args.map { |p| p.gsub(/["']/, "").strip }.compact
24
+ subprojects += args
25
+ end
26
+
27
+ subprojects = subprojects.uniq
28
+
29
+ subproject_dirs = subprojects.map do |proj|
30
+ if comment_free_content.match?(project_dir_regex(proj))
31
+ comment_free_content.match(project_dir_regex(proj)).
32
+ named_captures.fetch("path").sub(%r{^/}, "")
33
+ else
34
+ proj.tr(":", "/").sub(%r{^/}, "")
35
+ end
36
+ end
37
+
38
+ subproject_dirs.uniq
39
+ end
40
+
41
+ private
42
+
43
+ attr_reader :settings_file
44
+
45
+ def comment_free_content
46
+ settings_file.content.
47
+ gsub(%r{(?<=^|\s)//.*$}, "\n").
48
+ gsub(%r{(?<=^|\s)/\*.*?\*/}m, "")
49
+ end
50
+
51
+ def function_regex(function_name)
52
+ /
53
+ (?:^|\s)#{Regexp.quote(function_name)}(?:\(|\s)
54
+ (?<args>\s*[^\s,\)]+(?:,\s*[^\s,\)]+)*)
55
+ /mx
56
+ end
57
+
58
+ def project_dir_regex(proj)
59
+ prefixed_proj = Regexp.quote(":#{proj.gsub(/^:/, '')}")
60
+ /['"]#{prefixed_proj}['"].*dir\s*=.*['"](?<path>.*?)['"]/i
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+ require "dependabot/file_fetchers/base"
5
+
6
+ module Dependabot
7
+ module FileFetchers
8
+ module Java
9
+ class Maven < Dependabot::FileFetchers::Base
10
+ MODULE_SELECTOR = "project > modules > module"
11
+
12
+ def self.required_files_in?(filenames)
13
+ (%w(pom.xml) - filenames).empty?
14
+ end
15
+
16
+ def self.required_files_message
17
+ "Repo must contain a pom.xml."
18
+ end
19
+
20
+ private
21
+
22
+ def fetch_files
23
+ fetched_files = []
24
+ fetched_files << pom
25
+ fetched_files += child_poms
26
+ fetched_files += relative_path_parents(fetched_files)
27
+ fetched_files.uniq
28
+ end
29
+
30
+ def pom
31
+ @pom ||= fetch_file_from_host("pom.xml")
32
+ end
33
+
34
+ def child_poms
35
+ recursively_fetch_child_poms(pom, fetched_filenames: ["pom.xml"])
36
+ end
37
+
38
+ def relative_path_parents(fetched_files)
39
+ fetched_files.flat_map do |file|
40
+ recursively_fetch_relative_path_parents(
41
+ file,
42
+ fetched_filenames: fetched_files.map(&:name)
43
+ )
44
+ end
45
+ end
46
+
47
+ def recursively_fetch_child_poms(pom, fetched_filenames:)
48
+ base_path = pom.name.gsub(/pom\.xml$/, "")
49
+ doc = Nokogiri::XML(pom.content)
50
+
51
+ doc.css(MODULE_SELECTOR).flat_map do |module_node|
52
+ relative_path = module_node.content.strip
53
+ name_parts = [
54
+ base_path,
55
+ relative_path,
56
+ relative_path.end_with?("pom.xml") ? nil : "pom.xml"
57
+ ].compact.reject(&:empty?)
58
+ path = Pathname.new(File.join(*name_parts)).cleanpath.to_path
59
+
60
+ next [] if fetched_filenames.include?(path)
61
+
62
+ child_pom = fetch_file_from_host(path)
63
+ fetched_filenames += [child_pom.name]
64
+ [
65
+ child_pom,
66
+ recursively_fetch_child_poms(
67
+ child_pom,
68
+ fetched_filenames: fetched_filenames
69
+ )
70
+ ].flatten
71
+ rescue Dependabot::DependencyFileNotFound
72
+ raise unless fetch_file_from_host_or_submodule(path)
73
+
74
+ [] # Ignore any child submodules (since we can't update them)
75
+ end
76
+ end
77
+
78
+ def recursively_fetch_relative_path_parents(pom, fetched_filenames:)
79
+ path = parent_path_for_pom(pom)
80
+
81
+ if fetched_filenames.include?(path) ||
82
+ fetched_filenames.include?(path.gsub("pom.xml", "pom_parent.xml"))
83
+ return []
84
+ end
85
+
86
+ full_path_parts =
87
+ [directory.gsub(%r{^/}, ""), path].reject(&:empty?).compact
88
+
89
+ full_path = Pathname.new(File.join(*full_path_parts)).
90
+ cleanpath.to_path
91
+
92
+ return [] if full_path.start_with?("..")
93
+
94
+ parent_pom = fetch_file_from_host(path)
95
+ parent_pom.support_file = true
96
+ parent_pom.name = parent_pom.name.gsub("pom.xml", "pom_parent.xml")
97
+
98
+ [
99
+ parent_pom,
100
+ recursively_fetch_relative_path_parents(
101
+ parent_pom,
102
+ fetched_filenames: fetched_filenames + [parent_pom.name]
103
+ )
104
+ ].flatten
105
+ rescue Dependabot::DependencyFileNotFound
106
+ []
107
+ end
108
+
109
+ def parent_path_for_pom(pom)
110
+ doc = Nokogiri::XML(pom.content)
111
+ doc.remove_namespaces!
112
+
113
+ relative_parent_path =
114
+ doc.at_xpath("/project/parent/relativePath")&.content&.strip || ".."
115
+
116
+ name_parts = [
117
+ pom.name.gsub(/pom\.xml$/, "").gsub(/pom_parent\.xml$/, ""),
118
+ relative_parent_path,
119
+ relative_parent_path.end_with?("pom.xml") ? nil : "pom.xml"
120
+ ].compact.reject(&:empty?)
121
+
122
+ Pathname.new(File.join(*name_parts)).cleanpath.to_path
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end