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,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Docker
8
+ class Docker < Dependabot::FileFetchers::Base
9
+ def self.required_files_in?(filenames)
10
+ filenames.any? { |f| f.match?(/dockerfile/i) }
11
+ end
12
+
13
+ def self.required_files_message
14
+ "Repo must contain a Dockerfile."
15
+ end
16
+
17
+ private
18
+
19
+ def fetch_files
20
+ fetched_files = []
21
+ fetched_files += dockerfiles
22
+
23
+ return fetched_files if fetched_files.any?
24
+
25
+ raise(
26
+ Dependabot::DependencyFileNotFound,
27
+ File.join(directory, "Dockerfile")
28
+ )
29
+ end
30
+
31
+ def dockerfiles
32
+ @dockerfiles ||=
33
+ repo_contents(raise_errors: false).
34
+ select { |f| f.type == "file" && f.name.match?(/dockerfile/i) }.
35
+ map { |f| fetch_file_from_host(f.name) }
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,215 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Dotnet
8
+ class Nuget < Dependabot::FileFetchers::Base
9
+ require "dependabot/file_fetchers/dotnet/nuget/import_paths_finder"
10
+ require "dependabot/file_fetchers/dotnet/nuget/sln_project_paths_finder"
11
+
12
+ def self.required_files_in?(filenames)
13
+ return true if filenames.any? { |f| f.match?(/^packages\.config$/i) }
14
+ return true if filenames.any? { |f| f.end_with?(".sln") }
15
+
16
+ filenames.any? { |name| name.match?(%r{^[^/]*\.[a-z]{2}proj$}) }
17
+ end
18
+
19
+ def self.required_files_message
20
+ "Repo must contain a .(cs|vb|fs)proj file or a packages.config."
21
+ end
22
+
23
+ private
24
+
25
+ def fetch_files
26
+ fetched_files = []
27
+ fetched_files += project_files
28
+ fetched_files += directory_build_props_files
29
+ fetched_files += imported_property_files
30
+
31
+ fetched_files += packages_config_files
32
+ fetched_files << nuget_config if nuget_config
33
+
34
+ fetched_files = fetched_files.uniq
35
+
36
+ if project_files.none? && packages_config_files.none?
37
+ raise(
38
+ Dependabot::DependencyFileNotFound,
39
+ File.join(directory, "<anything>.(cs|vb|fs)proj")
40
+ )
41
+ end
42
+
43
+ fetched_files
44
+ end
45
+
46
+ def project_files
47
+ @project_files ||=
48
+ begin
49
+ project_files = []
50
+ project_files << csproj_file if csproj_file
51
+ project_files << vbproj_file if vbproj_file
52
+ project_files << fsproj_file if fsproj_file
53
+
54
+ project_files += sln_project_files
55
+ project_files
56
+ end
57
+ rescue Octokit::NotFound, Gitlab::Error::NotFound
58
+ raise(
59
+ Dependabot::DependencyFileNotFound,
60
+ File.join(directory, "<anything>.(cs|vb|fs)proj")
61
+ )
62
+ end
63
+
64
+ def packages_config_files
65
+ return @packages_config_files if @packages_config_files
66
+
67
+ candidate_paths =
68
+ [*project_files.map { |f| File.dirname(f.name) }, "."].uniq
69
+
70
+ @packages_config_files ||=
71
+ candidate_paths.map do |dir|
72
+ file = repo_contents(dir: dir).
73
+ find { |f| f.name.casecmp("packages.config").zero? }
74
+ fetch_file_from_host(File.join(dir, file.name)) if file
75
+ end.compact
76
+ end
77
+
78
+ def sln_file
79
+ return unless sln_file_name
80
+
81
+ @sln_file ||= fetch_file_from_host(sln_file_name)
82
+ end
83
+
84
+ def sln_file_name
85
+ sln_files = repo_contents.select { |f| f.name.end_with?(".sln") }
86
+
87
+ # If there are no sln files, just return `nil`
88
+ return if sln_files.none?
89
+
90
+ # Use the biggest sln file
91
+ sln_files.max_by(&:size).name
92
+ end
93
+
94
+ def directory_build_props_files
95
+ return @directory_build_props_files if @directory_build_checked
96
+
97
+ @directory_build_checked = true
98
+ attempted_paths = []
99
+ @directory_build_props_files = []
100
+
101
+ # Don't need to insert "." here, because Directory.Build.props files
102
+ # can only be used by project files (not packages.config ones)
103
+ project_files.map { |f| File.dirname(f.name) }.uniq.map do |dir|
104
+ possible_paths = dir.split("/").map.with_index do |_, i|
105
+ base = dir.split("/").first(i + 1).join("/")
106
+ Pathname.new(base + "/Directory.Build.props").cleanpath.to_path
107
+ end.reverse + ["Directory.Build.props"]
108
+
109
+ possible_paths.each do |path|
110
+ break if attempted_paths.include?(path)
111
+
112
+ attempted_paths << path
113
+ @directory_build_props_files << fetch_file_from_host(path)
114
+ rescue Dependabot::DependencyFileNotFound
115
+ next
116
+ end
117
+ end
118
+
119
+ @directory_build_props_files
120
+ end
121
+
122
+ def sln_project_files
123
+ return [] unless sln_file
124
+
125
+ @sln_project_files ||=
126
+ begin
127
+ paths = SlnProjectPathsFinder.
128
+ new(sln_file: sln_file).
129
+ project_paths
130
+
131
+ paths.map do |path|
132
+ fetch_file_from_host(path)
133
+ rescue Dependabot::DependencyFileNotFound
134
+ # Don't worry about missing files too much for now (at least
135
+ # until we start resolving properties)
136
+ nil
137
+ end.compact
138
+ end
139
+ end
140
+
141
+ def csproj_file
142
+ @csproj_file ||=
143
+ begin
144
+ file = repo_contents.find { |f| f.name.end_with?(".csproj") }
145
+ fetch_file_from_host(file.name) if file
146
+ end
147
+ end
148
+
149
+ def vbproj_file
150
+ @vbproj_file ||=
151
+ begin
152
+ file = repo_contents.find { |f| f.name.end_with?(".vbproj") }
153
+ fetch_file_from_host(file.name) if file
154
+ end
155
+ end
156
+
157
+ def fsproj_file
158
+ @fsproj_file ||=
159
+ begin
160
+ file = repo_contents.find { |f| f.name.end_with?(".fsproj") }
161
+ fetch_file_from_host(file.name) if file
162
+ end
163
+ end
164
+
165
+ def nuget_config
166
+ @nuget_config ||=
167
+ begin
168
+ file = repo_contents.
169
+ find { |f| f.name.casecmp("nuget.config").zero? }
170
+ file = fetch_file_from_host(file.name) if file
171
+ file&.tap { |f| f.support_file = true }
172
+ end
173
+ end
174
+
175
+ def imported_property_files
176
+ imported_property_files = []
177
+
178
+ [*project_files, *directory_build_props_files].each do |proj_file|
179
+ previously_fetched_files = project_files + imported_property_files
180
+ imported_property_files +=
181
+ fetch_imported_property_files(
182
+ file: proj_file,
183
+ previously_fetched_files: previously_fetched_files
184
+ )
185
+ end
186
+
187
+ imported_property_files
188
+ end
189
+
190
+ def fetch_imported_property_files(file:, previously_fetched_files:)
191
+ paths =
192
+ ImportPathsFinder.new(project_file: file).import_paths +
193
+ ImportPathsFinder.new(project_file: file).project_reference_paths
194
+
195
+ paths.flat_map do |path|
196
+ next if previously_fetched_files.map(&:name).include?(path)
197
+ next if file.name == path
198
+ next if path.include?("$(")
199
+
200
+ fetched_file = fetch_file_from_host(path)
201
+ grandchild_property_files = fetch_imported_property_files(
202
+ file: fetched_file,
203
+ previously_fetched_files: previously_fetched_files + [file]
204
+ )
205
+ [fetched_file, *grandchild_property_files]
206
+ rescue Dependabot::DependencyFileNotFound
207
+ # Don't worry about missing files too much for now (at least
208
+ # until we start resolving properties)
209
+ nil
210
+ end.compact
211
+ end
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ require "pathname"
6
+ require "dependabot/file_fetchers/dotnet/nuget"
7
+
8
+ module Dependabot
9
+ module FileFetchers
10
+ module Dotnet
11
+ class Nuget
12
+ class ImportPathsFinder
13
+ def initialize(project_file:)
14
+ @project_file = project_file
15
+ end
16
+
17
+ def import_paths
18
+ doc = Nokogiri::XML(project_file.content)
19
+ doc.remove_namespaces!
20
+ doc.xpath("/Project/Import").map do |import_node|
21
+ path = import_node.attribute("Project").value.strip.tr("\\", "/")
22
+ path = File.join(current_dir, path) unless current_dir.nil?
23
+ Pathname.new(path).cleanpath.to_path
24
+ end
25
+ end
26
+
27
+ def project_reference_paths
28
+ doc = Nokogiri::XML(project_file.content)
29
+ doc.remove_namespaces!
30
+ doc.xpath("/Project/ItemGroup/ProjectReference").map do |node|
31
+ path = node.attribute("Include").value.strip.tr("\\", "/")
32
+ path = File.join(current_dir, path) unless current_dir.nil?
33
+ Pathname.new(path).cleanpath.to_path
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ attr_reader :project_file
40
+
41
+ def current_dir
42
+ parts = project_file.name.split("/")[0..-2]
43
+ return if parts.empty?
44
+
45
+ parts.join("/")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "dependabot/file_fetchers/dotnet/nuget"
5
+
6
+ module Dependabot
7
+ module FileFetchers
8
+ module Dotnet
9
+ class Nuget
10
+ class SlnProjectPathsFinder
11
+ PROJECT_PATH_REGEX =
12
+ /(?<=["'])[^"']*?\.(?:vb|cs|fs)proj(?=["'])/.freeze
13
+
14
+ def initialize(sln_file:)
15
+ @sln_file = sln_file
16
+ end
17
+
18
+ def project_paths
19
+ paths = []
20
+ sln_file_lines = sln_file.content.lines
21
+
22
+ sln_file_lines.each_with_index do |line, index|
23
+ next unless line.match?(/^\s*Project/)
24
+
25
+ # Don't know how to handle multi-line project declarations yet
26
+ next unless sln_file_lines[index + 1]&.match?(/^\s*EndProject/)
27
+
28
+ path = line.split('"')[5]
29
+ path = path.tr("\\", "/")
30
+
31
+ # If the path doesn't have an extension it's probably a directory
32
+ next unless path.match?(/\.[a-z]{2}proj$/)
33
+
34
+ path = File.join(current_dir, path) unless current_dir.nil?
35
+ paths << Pathname.new(path).cleanpath.to_path
36
+ end
37
+
38
+ paths
39
+ end
40
+
41
+ private
42
+
43
+ attr_reader :sln_file
44
+
45
+ def current_dir
46
+ parts = sln_file.name.split("/")[0..-2]
47
+ return if parts.empty?
48
+
49
+ parts.join("/")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Elixir
8
+ class Hex < Dependabot::FileFetchers::Base
9
+ APPS_PATH_REGEX = /apps_path:\s*"(?<path>.*?)"/m.freeze
10
+ STRING_ARG = %{(?:["'](.*?)["'])}
11
+ EVAL_FILE = /Code\.eval_file\(#{STRING_ARG}(?:\s*,\s*#{STRING_ARG})?\)/.
12
+ freeze
13
+
14
+ def self.required_files_in?(filenames)
15
+ filenames.include?("mix.exs")
16
+ end
17
+
18
+ def self.required_files_message
19
+ "Repo must contain a mix.exs."
20
+ end
21
+
22
+ private
23
+
24
+ def fetch_files
25
+ fetched_files = []
26
+ fetched_files << mixfile
27
+ fetched_files << lockfile if lockfile
28
+ fetched_files += subapp_mixfiles
29
+ fetched_files += evaled_files
30
+ fetched_files
31
+ end
32
+
33
+ def mixfile
34
+ @mixfile ||= fetch_file_from_host("mix.exs")
35
+ end
36
+
37
+ def lockfile
38
+ return @lockfile if @lockfile_lookup_attempted
39
+
40
+ @lockfile_lookup_attempted = true
41
+ @lockfile ||= fetch_file_from_host("mix.lock")
42
+ rescue Dependabot::DependencyFileNotFound
43
+ nil
44
+ end
45
+
46
+ def subapp_mixfiles
47
+ apps_path = mixfile.content.match(APPS_PATH_REGEX)&.
48
+ named_captures&.fetch("path")
49
+ return [] unless apps_path
50
+
51
+ app_directories = repo_contents(dir: apps_path).
52
+ select { |f| f.type == "dir" }
53
+
54
+ app_directories.map do |dir|
55
+ fetch_file_from_host("#{dir.path}/mix.exs")
56
+ rescue Dependabot::DependencyFileNotFound
57
+ # If the folder doesn't have a mix.exs it *might* be because it's
58
+ # not an app. Ignore the fact we couldn't fetch one and proceed with
59
+ # updating (it will blow up later if there are problems)
60
+ nil
61
+ end.compact
62
+ rescue Octokit::NotFound, Gitlab::Error::NotFound
63
+ # If the path specified in apps_path doesn't exist then it's not being
64
+ # used. We can just return an empty array of subapp files.
65
+ []
66
+ end
67
+
68
+ def evaled_files
69
+ mixfile.content.scan(EVAL_FILE).map do |eval_file_args|
70
+ path = Pathname.new(File.join(*eval_file_args.reverse)).
71
+ cleanpath.to_path
72
+ fetch_file_from_host(path).tap { |f| f.support_file = true }
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_fetchers/base"
4
+
5
+ module Dependabot
6
+ module FileFetchers
7
+ module Elm
8
+ class ElmPackage < Dependabot::FileFetchers::Base
9
+ def self.required_files_in?(filenames)
10
+ return true if filenames.include?("elm-package.json")
11
+
12
+ filenames.include?("elm.json")
13
+ end
14
+
15
+ def self.required_files_message
16
+ "Repo must contain an elm-package.json or an elm.json"
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_files
22
+ fetched_files = []
23
+
24
+ fetched_files << elm_package if elm_package
25
+ fetched_files << elm_json if elm_json
26
+
27
+ # Note: We *do not* fetch the exact-dependencies.json file, as it is
28
+ # recommended that this is not committed
29
+
30
+ check_required_files_present
31
+ fetched_files
32
+ end
33
+
34
+ def check_required_files_present
35
+ return if elm_package || elm_json
36
+
37
+ path = Pathname.new(File.join(directory, "elm.json")).
38
+ cleanpath.to_path
39
+ raise Dependabot::DependencyFileNotFound, path
40
+ end
41
+
42
+ def elm_package
43
+ @elm_package ||= fetch_file_if_present("elm-package.json")
44
+ end
45
+
46
+ def elm_json
47
+ @elm_json ||= fetch_file_if_present("elm.json")
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end