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,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/dependency"
4
+ require "dependabot/errors"
5
+ require "dependabot/file_parsers/base"
6
+ require "dependabot/utils/elm/requirement"
7
+
8
+ module Dependabot
9
+ module FileParsers
10
+ module Elm
11
+ class ElmPackage < Dependabot::FileParsers::Base
12
+ require "dependabot/file_parsers/base/dependency_set"
13
+
14
+ DEPENDENCY_TYPES = %w(dependencies test-dependencies).freeze
15
+
16
+ def parse
17
+ dependency_set = DependencySet.new
18
+
19
+ dependency_set += elm_package_dependencies if elm_package
20
+ dependency_set += elm_json_dependencies if elm_json
21
+
22
+ dependency_set.dependencies.sort_by(&:name)
23
+ end
24
+
25
+ private
26
+
27
+ def elm_package_dependencies
28
+ dependency_set = DependencySet.new
29
+
30
+ parsed_package_file.fetch("dependencies").each do |name, req|
31
+ dependency_set <<
32
+ Dependency.new(
33
+ name: name,
34
+ version: version_for(req)&.to_s,
35
+ requirements: [{
36
+ requirement: req, # 4.0 <= v <= 4.0
37
+ groups: [], # we don't have this (its dev vs non-dev)
38
+ source: nil, # elm-package only has elm-package sources
39
+ file: "elm-package.json"
40
+ }],
41
+ package_manager: "elm-package"
42
+ )
43
+ end
44
+
45
+ dependency_set
46
+ end
47
+
48
+ # For docs on elm.json, see:
49
+ # https://github.com/elm/compiler/blob/master/docs/elm.json/application.md
50
+ # https://github.com/elm/compiler/blob/master/docs/elm.json/package.md
51
+ def elm_json_dependencies
52
+ dependency_set = DependencySet.new
53
+
54
+ DEPENDENCY_TYPES.each do |dep_type|
55
+ if repo_type == "application"
56
+ dependencies_hash = parsed_elm_json.fetch(dep_type, {})
57
+ dependencies_hash.fetch("direct", {}).each do |name, req|
58
+ dependency_set << build_elm_json_dependency(
59
+ name: name, group: dep_type, requirement: req, direct: true
60
+ )
61
+ end
62
+ dependencies_hash.fetch("indirect", {}).each do |name, req|
63
+ dependency_set << build_elm_json_dependency(
64
+ name: name, group: dep_type, requirement: req, direct: false
65
+ )
66
+ end
67
+ elsif repo_type == "package"
68
+ parsed_elm_json.fetch(dep_type, {}).each do |name, req|
69
+ dependency_set << build_elm_json_dependency(
70
+ name: name, group: dep_type, requirement: req, direct: true
71
+ )
72
+ end
73
+ else raise "Unexpected repo type for Elm repo: #{repo_type}"
74
+ end
75
+ end
76
+
77
+ dependency_set
78
+ end
79
+
80
+ def build_elm_json_dependency(name:, group:, requirement:, direct:)
81
+ requirements = [{
82
+ requirement: requirement,
83
+ groups: [group],
84
+ source: nil,
85
+ file: "elm.json"
86
+ }]
87
+
88
+ Dependency.new(
89
+ name: name,
90
+ version: version_for(requirement)&.to_s,
91
+ requirements: direct ? requirements : [],
92
+ package_manager: "elm-package"
93
+ )
94
+ end
95
+
96
+ def repo_type
97
+ parsed_elm_json.fetch("type")
98
+ end
99
+
100
+ def check_required_files
101
+ return if elm_json || elm_package
102
+
103
+ raise "No elm.json or elm-package.json!"
104
+ end
105
+
106
+ def version_for(version_requirement)
107
+ req = Dependabot::Utils::Elm::Requirement.new(version_requirement)
108
+
109
+ return unless req.exact?
110
+
111
+ req.requirements.first.last
112
+ end
113
+
114
+ def parsed_package_file
115
+ @parsed_package_file ||= JSON.parse(elm_package.content)
116
+ rescue JSON::ParserError
117
+ raise Dependabot::DependencyFileNotParseable, elm_package.path
118
+ end
119
+
120
+ def parsed_elm_json
121
+ @parsed_elm_json ||= JSON.parse(elm_json.content)
122
+ rescue JSON::ParserError
123
+ raise Dependabot::DependencyFileNotParseable, elm_json.path
124
+ end
125
+
126
+ def elm_package
127
+ @elm_package ||= get_original_file("elm-package.json")
128
+ end
129
+
130
+ def elm_json
131
+ @elm_json ||= get_original_file("elm.json")
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "parseconfig"
4
+ require "dependabot/dependency"
5
+ require "dependabot/file_parsers/base"
6
+ require "dependabot/shared_helpers"
7
+
8
+ module Dependabot
9
+ module FileParsers
10
+ module Git
11
+ class Submodules < Dependabot::FileParsers::Base
12
+ def parse
13
+ SharedHelpers.in_a_temporary_directory do
14
+ File.write(".gitmodules", gitmodules_file.content)
15
+
16
+ ParseConfig.new(".gitmodules").params.map do |_, params|
17
+ branch = params["branch"]
18
+
19
+ Dependency.new(
20
+ name: params["path"],
21
+ version: submodule_sha(params["path"]),
22
+ package_manager: "submodules",
23
+ requirements: [{
24
+ requirement: nil,
25
+ file: ".gitmodules",
26
+ source: {
27
+ type: "git",
28
+ url: absolute_url(params["url"]),
29
+ branch: branch,
30
+ ref: branch
31
+ },
32
+ groups: []
33
+ }]
34
+ )
35
+ end
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def absolute_url(url)
42
+ # Submodules can be specified with a relative URL (e.g., ../repo.git)
43
+ # which we want to expand out into a full URL if present.
44
+ return url unless url.start_with?("../", "./")
45
+
46
+ path = Pathname.new(File.join(source.repo, url))
47
+ "https://#{source.hostname}/#{path.cleanpath}"
48
+ end
49
+
50
+ def submodule_sha(path)
51
+ submodule = dependency_files.find { |f| f.name == path }
52
+ raise "Submodule not found #{path}" unless submodule
53
+
54
+ submodule.content
55
+ end
56
+
57
+ def gitmodules_file
58
+ @gitmodules_file ||= get_original_file(".gitmodules")
59
+ end
60
+
61
+ def check_required_files
62
+ %w(.gitmodules).each do |filename|
63
+ raise "No #{filename}!" unless get_original_file(filename)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "toml-rb"
4
+
5
+ require "dependabot/errors"
6
+ require "dependabot/dependency"
7
+ require "dependabot/shared_helpers"
8
+ require "dependabot/source"
9
+
10
+ require "dependabot/file_parsers/base"
11
+ require "dependabot/utils/go/requirement"
12
+ require "dependabot/utils/go/path_converter"
13
+
14
+ # Relevant dep docs can be found at:
15
+ # - https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
16
+ # - https://github.com/golang/dep/blob/master/docs/Gopkg.lock.md
17
+ module Dependabot
18
+ module FileParsers
19
+ module Go
20
+ class Dep < Dependabot::FileParsers::Base
21
+ require "dependabot/file_parsers/base/dependency_set"
22
+
23
+ REQUIREMENT_TYPES = %w(constraint override).freeze
24
+
25
+ def parse
26
+ dependency_set = DependencySet.new
27
+ dependency_set += manifest_dependencies
28
+ dependency_set += lockfile_dependencies
29
+ dependency_set.dependencies
30
+ end
31
+
32
+ private
33
+
34
+ def manifest_dependencies
35
+ dependency_set = DependencySet.new
36
+
37
+ REQUIREMENT_TYPES.each do |type|
38
+ parsed_file(manifest).fetch(type, []).each do |details|
39
+ next if lockfile && !appears_in_lockfile?(details.fetch("name"))
40
+ next if missing_version_in_manifest_and_lockfile(details)
41
+
42
+ dependency_set << Dependency.new(
43
+ name: details.fetch("name"),
44
+ version: nil,
45
+ package_manager: "dep",
46
+ requirements: [{
47
+ requirement: requirement_from_declaration(details),
48
+ file: manifest.name,
49
+ groups: [],
50
+ source: source_from_declaration(details)
51
+ }]
52
+ )
53
+ end
54
+ end
55
+
56
+ dependency_set
57
+ end
58
+
59
+ def lockfile_dependencies
60
+ dependency_set = DependencySet.new
61
+
62
+ parsed_file(lockfile).fetch("projects", []).each do |details|
63
+ dependency_set << Dependency.new(
64
+ name: details.fetch("name"),
65
+ version: version_from_lockfile(details),
66
+ package_manager: "dep",
67
+ requirements: []
68
+ )
69
+ end
70
+
71
+ dependency_set
72
+ end
73
+
74
+ def version_from_lockfile(details)
75
+ details["version"]&.sub(/^v?/, "") || details.fetch("revision")
76
+ end
77
+
78
+ def requirement_from_declaration(declaration)
79
+ unless declaration.is_a?(Hash)
80
+ raise "Unexpected dependency declaration: #{declaration}"
81
+ end
82
+
83
+ return if git_declaration?(declaration)
84
+
85
+ declaration["version"]
86
+ end
87
+
88
+ def source_from_declaration(declaration)
89
+ source = declaration["source"] || declaration["name"]
90
+
91
+ git_source_url = git_source(source)
92
+
93
+ if git_source_url && git_declaration?(declaration)
94
+ {
95
+ type: "git",
96
+ url: git_source_url,
97
+ branch: declaration["branch"],
98
+ ref: declaration["revision"] || declaration["version"]
99
+ }
100
+ elsif git_declaration?(declaration)
101
+ raise "No git source for a git declaration!"
102
+ else
103
+ {
104
+ type: "default",
105
+ source: source
106
+ }
107
+ end
108
+ end
109
+
110
+ def appears_in_lockfile?(dependency_name)
111
+ parsed_file(lockfile).fetch("projects", []).
112
+ any? { |details| details["name"] == dependency_name }
113
+ end
114
+
115
+ def git_declaration?(declaration)
116
+ return true if declaration["branch"] || declaration["revision"]
117
+ return false unless declaration["version"]
118
+ return false unless declaration["version"].match?(/^[A-Za-z0-9]/)
119
+
120
+ Utils::Go::Requirement.new(declaration["version"])
121
+ false
122
+ rescue Gem::Requirement::BadRequirementError
123
+ true
124
+ end
125
+
126
+ def git_source(path)
127
+ Dependabot::Utils::Go::PathConverter.git_url_for_path(path)
128
+ end
129
+
130
+ def parsed_file(file)
131
+ @parsed_file ||= {}
132
+ @parsed_file[file.name] ||= TomlRB.parse(file.content)
133
+ rescue TomlRB::ParseError
134
+ raise Dependabot::DependencyFileNotParseable, file.path
135
+ end
136
+
137
+ def manifest
138
+ @manifest ||= get_original_file("Gopkg.toml")
139
+ end
140
+
141
+ def lockfile
142
+ @lockfile ||= get_original_file("Gopkg.lock")
143
+ end
144
+
145
+ def check_required_files
146
+ %w(Gopkg.toml Gopkg.lock).each do |filename|
147
+ raise "No #{filename}!" unless get_original_file(filename)
148
+ end
149
+ end
150
+
151
+ def missing_version_in_manifest_and_lockfile(declaration)
152
+ return false if git_declaration?(declaration)
153
+
154
+ lockfile_decl =
155
+ parsed_file(lockfile).
156
+ fetch("projects", []).
157
+ find { |details| details["name"] == declaration["name"] }
158
+ lockfile_decl&.fetch("version", nil).nil?
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dependabot/file_parsers/base"
4
+
5
+ module Dependabot
6
+ module FileParsers
7
+ module Go
8
+ class Modules < Dependabot::FileParsers::Base
9
+ require_relative "modules/go_mod_parser"
10
+
11
+ def parse
12
+ go_mod_dependencies.dependencies
13
+ end
14
+
15
+ private
16
+
17
+ def go_mod_dependencies
18
+ @go_mod_dependencies ||=
19
+ Modules::GoModParser.
20
+ new(dependency_files: dependency_files, credentials: credentials).
21
+ dependency_set
22
+ end
23
+
24
+ def go_mod
25
+ @go_mod ||= get_original_file("go.mod")
26
+ end
27
+
28
+ def check_required_files
29
+ raise "No go.mod!" unless go_mod
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+ require "dependabot/dependency"
5
+ require "dependabot/file_parsers/base/dependency_set"
6
+ require "dependabot/file_parsers/go/modules"
7
+ require "dependabot/utils/go/path_converter"
8
+ require "dependabot/errors"
9
+
10
+ module Dependabot
11
+ module FileParsers
12
+ module Go
13
+ class Modules
14
+ class GoModParser
15
+ GIT_VERSION_REGEX = /^v\d+\.\d+\.\d+-.*-(?<sha>[0-9a-f]{12})$/.freeze
16
+
17
+ def initialize(dependency_files:, credentials:)
18
+ @dependency_files = dependency_files
19
+ @credentials = credentials
20
+ end
21
+
22
+ def dependency_set
23
+ dependencies = Dependabot::FileParsers::Base::DependencySet.new
24
+
25
+ i = 0
26
+ chunks = module_info(go_mod).lines.
27
+ group_by { |line| line == "{\n" ? i += 1 : i }
28
+ deps = chunks.values.map { |chunk| JSON.parse(chunk.join) }
29
+
30
+ deps.each do |dep|
31
+ # The project itself appears in this list as "Main"
32
+ next if dep["Main"]
33
+
34
+ dependency = dependency_from_details(dep)
35
+ dependencies << dependency if dependency
36
+ end
37
+
38
+ dependencies
39
+ end
40
+
41
+ private
42
+
43
+ attr_reader :dependency_files, :credentials
44
+
45
+ def dependency_from_details(details)
46
+ source =
47
+ if rev_identifier?(details) then git_source(details)
48
+ else { type: "default", source: details["Path"] }
49
+ end
50
+
51
+ version = details["Version"]&.sub(/^v?/, "")
52
+
53
+ reqs = [{
54
+ requirement: rev_identifier?(details) ? nil : details["Version"],
55
+ file: go_mod.name,
56
+ source: source,
57
+ groups: []
58
+ }]
59
+
60
+ Dependency.new(
61
+ name: details["Path"],
62
+ version: version,
63
+ requirements: details["Indirect"] ? [] : reqs,
64
+ package_manager: "dep"
65
+ )
66
+ end
67
+
68
+ def module_info(go_mod)
69
+ @module_info ||=
70
+ SharedHelpers.in_a_temporary_directory do |path|
71
+ SharedHelpers.with_git_configured(credentials: credentials) do
72
+ File.write("go.mod", go_mod.content)
73
+
74
+ command = "GO111MODULE=on go mod edit -print > /dev/null"
75
+ command += " && GO111MODULE=on go list -m -json all"
76
+ stdout, stderr, status = Open3.capture3(command)
77
+ handle_parser_error(path, stderr) unless status.success?
78
+ stdout
79
+ end
80
+ end
81
+ end
82
+
83
+ def handle_parser_error(path, stderr)
84
+ case stderr
85
+ when /go: .*: unknown revision/
86
+ line = stderr.lines.grep(/unknown revision/).first
87
+ raise Dependabot::DependencyFileNotResolvable, line.strip
88
+ when /go: .*: unrecognized import path/
89
+ line = stderr.lines.grep(/unrecognized import/).first
90
+ raise Dependabot::DependencyFileNotResolvable, line.strip
91
+ when /go: errors parsing go.mod/
92
+ msg = stderr.gsub(path.to_s, "").strip
93
+ raise Dependabot::DependencyFileNotParseable.new(go_mod.path, msg)
94
+ else
95
+ msg = stderr.gsub(path.to_s, "").strip
96
+ raise Dependabot::DependencyFileNotParseable.new(go_mod.path, msg)
97
+ end
98
+ end
99
+
100
+ def rev_identifier?(dep)
101
+ dep["Version"]&.match?(GIT_VERSION_REGEX)
102
+ end
103
+
104
+ def git_source(dep)
105
+ url = Utils::Go::PathConverter.git_url_for_path(dep["Path"])
106
+
107
+ # Currently, we have no way of knowing whether the commit tagged
108
+ # is being used because a branch is being followed or because a
109
+ # particular ref is in use. We *assume* that a particular ref is in
110
+ # use (which means we'll only propose updates when its included in
111
+ # a release)
112
+ {
113
+ type: "git",
114
+ url: url || dep["Path"],
115
+ ref: git_revision(dep),
116
+ branch: nil
117
+ }
118
+ end
119
+
120
+ def git_revision(dep)
121
+ raw_version = dep.fetch("Version")
122
+ return raw_version unless raw_version.match?(GIT_VERSION_REGEX)
123
+
124
+ raw_version.match(GIT_VERSION_REGEX).named_captures.fetch("sha")
125
+ end
126
+
127
+ def go_mod
128
+ @go_mod ||= dependency_files.find { |f| f.name == "go.mod" }
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end