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,9 @@
1
+ pip==18.1
2
+ pip-tools==3.1.0
3
+ hashin==0.14.0
4
+ pipenv==2018.11.26
5
+ pipfile==0.0.2
6
+ poetry==0.12.10
7
+
8
+ # Some dependencies will only install if Cython is present
9
+ Cython==0.29.1
@@ -0,0 +1,18 @@
1
+ import sys
2
+ import json
3
+
4
+ from lib import parser, hasher
5
+
6
+ if __name__ == "__main__":
7
+ args = json.loads(sys.stdin.read())
8
+
9
+ if args["function"] == "parse_requirements":
10
+ print(parser.parse_requirements(args["args"][0]))
11
+ if args["function"] == "parse_setup":
12
+ print(parser.parse_setup(args["args"][0]))
13
+ elif args["function"] == "get_dependency_hash":
14
+ print(hasher.get_dependency_hash(*args["args"]))
15
+ elif args["function"] == "get_pipfile_hash":
16
+ print(hasher.get_pipfile_hash(*args["args"]))
17
+ elif args["function"] == "get_pyproject_hash":
18
+ print(hasher.get_pyproject_hash(*args["args"]))
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ request = JSON.parse($stdin.read)
6
+ case request["function"]
7
+ when "error"
8
+ $stdout.write(JSON.dump(error: "Something went wrong"))
9
+ exit 1
10
+ when "hard_error"
11
+ puts "Oh no!"
12
+ exit 0
13
+ else
14
+ $stdout.write(JSON.dump(result: request))
15
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "shellwords"
4
+
5
+ # Valid commands are: `get`, `store`, `erase`. We only want to let `get`
6
+ # through, as the others mutate the credential store.
7
+ if ARGV.include?("get")
8
+ args = ARGV.map { |arg| Shellwords.escape(arg) }.join(" ")
9
+ exec "git credential-store #{args}"
10
+ end
@@ -0,0 +1 @@
1
+ node_modules/
@@ -0,0 +1,2 @@
1
+ PATH_add node_modules/.bin
2
+ export LOCAL_VIMRC=true
@@ -0,0 +1,14 @@
1
+ {
2
+ "plugins": [
3
+ "prettier"
4
+ ],
5
+ "rules": {
6
+ "prettier/prettier": "error"
7
+ },
8
+ "env": {
9
+ "node": true
10
+ },
11
+ "parserOptions": {
12
+ "ecmaVersion": 8
13
+ }
14
+ }
@@ -0,0 +1,7 @@
1
+ augroup fmt
2
+ autocmd!
3
+ autocmd BufWritePre * Neoformat
4
+ augroup END
5
+
6
+ let test#javascript#jest#file_pattern = '\.test\.js'
7
+ let test#javascript#mocha#file_pattern = 'mocha'
@@ -0,0 +1,36 @@
1
+ const lockfileParser = require("../lib/lockfile-parser");
2
+ const updater = require("../lib/updater");
3
+ const subdependencyUpdater = require("../lib/subdependency-updater");
4
+ const peerDependencyChecker = require("../lib/peer-dependency-checker");
5
+
6
+ const functionMap = {
7
+ parseLockfile: lockfileParser.parse,
8
+ update: updater.updateDependencyFiles,
9
+ updateSubdependency: subdependencyUpdater.updateDependencyFile,
10
+ checkPeerDependencies: peerDependencyChecker.checkPeerDependencies
11
+ };
12
+
13
+ function output(obj) {
14
+ process.stdout.write(JSON.stringify(obj));
15
+ }
16
+
17
+ const input = [];
18
+ process.stdin.on("data", data => input.push(data));
19
+ process.stdin.on("end", () => {
20
+ const request = JSON.parse(input.join(""));
21
+ const func = functionMap[request.function];
22
+ if (!func) {
23
+ output({ error: `Invalid function ${request.function}` });
24
+ process.exit(1);
25
+ }
26
+
27
+ func
28
+ .apply(null, request.args)
29
+ .then(result => {
30
+ output({ result: result });
31
+ })
32
+ .catch(error => {
33
+ output({ error: error.message });
34
+ process.exit(1);
35
+ });
36
+ });
@@ -0,0 +1,53 @@
1
+ const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
2
+ const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
3
+ .default;
4
+ const semver = require("semver");
5
+
6
+ // Inspired by yarn-tools. Altered to ensure the latest version is always used
7
+ // for version ranges which allow it.
8
+ module.exports = (data, includePackages = []) => {
9
+ const json = parse(data).object;
10
+ const enableLockfileVersions = Boolean(data.match(/^# yarn v/m));
11
+ const noHeader = !Boolean(data.match(/^# THIS IS AN AU/m));
12
+
13
+ const packages = {};
14
+ const re = /^(.*)@([^@]*?)$/;
15
+
16
+ Object.entries(json).forEach(([name, pkg]) => {
17
+ if (name.match(re)) {
18
+ const [_, packageName, requestedVersion] = name.match(re);
19
+ packages[packageName] = packages[packageName] || [];
20
+ packages[packageName].push(
21
+ Object.assign({}, { name, pkg, packageName, requestedVersion })
22
+ );
23
+ }
24
+ });
25
+
26
+ Object.entries(packages)
27
+ .filter(([name]) => {
28
+ if (includePackages.length === 0) return true;
29
+ return includePackages.includes(name);
30
+ })
31
+ .forEach(([name, packages]) => {
32
+ // Reverse sort, so we'll find the maximum satisfying version first
33
+ const versions = packages.map(p => p.pkg.version).sort(semver.rcompare);
34
+ const ranges = packages.map(p => p.requestedVersion);
35
+
36
+ // Dedup each package to its maxSatisfying version
37
+ packages.forEach(p => {
38
+ const targetVersion = semver.maxSatisfying(
39
+ versions,
40
+ p.requestedVersion
41
+ );
42
+ if (targetVersion === null) return;
43
+ if (targetVersion !== p.pkg.version) {
44
+ const dedupedPackage = packages.find(
45
+ p => p.pkg.version === targetVersion
46
+ );
47
+ json[`${name}@${p.requestedVersion}`] = dedupedPackage.pkg;
48
+ }
49
+ });
50
+ });
51
+
52
+ return stringify(json, noHeader, enableLockfileVersions);
53
+ };
@@ -0,0 +1,5 @@
1
+ function isString(value) {
2
+ return Object.prototype.toString.call(value) === "[object String]";
3
+ }
4
+
5
+ module.exports = { isString };
@@ -0,0 +1,21 @@
1
+ /* YARN.LOCK PARSER
2
+ *
3
+ * Inputs:
4
+ * - directory containing a yarn.lock
5
+ *
6
+ * Outputs:
7
+ * - JSON formatted yarn.lock
8
+ */
9
+ const fs = require("fs");
10
+ const path = require("path");
11
+ const parseLockfile = require("@dependabot/yarn-lib/lib/lockfile/parse")
12
+ .default;
13
+
14
+ async function parse(directory) {
15
+ const readFile = fileName =>
16
+ fs.readFileSync(path.join(directory, fileName)).toString();
17
+ const data = readFile("yarn.lock");
18
+ return parseLockfile(data).object;
19
+ }
20
+
21
+ module.exports = { parse };
@@ -0,0 +1,130 @@
1
+ /* PEER DEPENDENCY CHECKER
2
+ *
3
+ * Inputs:
4
+ * - directory containing a package.json and a yarn.lock
5
+ * - dependency name
6
+ * - new dependency version
7
+ * - requirements for this dependency
8
+ *
9
+ * Outputs:
10
+ * - successful completion, or an error if there are peer dependency warnings
11
+ */
12
+ const path = require("path");
13
+ const { Add } = require("@dependabot/yarn-lib/lib/cli/commands/add");
14
+ const Config = require("@dependabot/yarn-lib/lib/config").default;
15
+ const { BufferReporter } = require("@dependabot/yarn-lib/lib/reporters");
16
+ const Lockfile = require("@dependabot/yarn-lib/lib/lockfile").default;
17
+ const { isString } = require("./helpers");
18
+ const fetcher = require("@dependabot/yarn-lib/lib/package-fetcher.js");
19
+
20
+ // Check peer dependencies without downloading node_modules or updating
21
+ // package/lockfiles
22
+ //
23
+ // Logic copied from the import command
24
+ class LightweightAdd extends Add {
25
+ async bailout() {
26
+ const manifests = await fetcher.fetch(
27
+ this.resolver.getManifests(),
28
+ this.config
29
+ );
30
+ this.resolver.updateManifests(manifests);
31
+ await this.linker.resolvePeerModules();
32
+ return true;
33
+ }
34
+ }
35
+
36
+ function devRequirement(requirements) {
37
+ const groups = requirements.groups;
38
+ return (
39
+ groups.indexOf("devDependencies") > -1 &&
40
+ groups.indexOf("dependencies") == -1
41
+ );
42
+ }
43
+
44
+ function optionalRequirement(requirements) {
45
+ const groups = requirements.groups;
46
+ return (
47
+ groups.indexOf("optionalDependencies") > -1 &&
48
+ groups.indexOf("dependencies") == -1
49
+ );
50
+ }
51
+
52
+ function installArgsWithVersion(depName, desiredVersion, requirements) {
53
+ const source =
54
+ "source" in requirements
55
+ ? requirements.source
56
+ : (requirements.find(req => req.source) || {}).source;
57
+ const req =
58
+ "requirement" in requirements
59
+ ? requirements.requirement
60
+ : (requirements.find(req => req.requirement) || {}).requirement;
61
+
62
+ if (source && source.type === "git") {
63
+ if (desiredVersion) {
64
+ return [`${depName}@${source.url}#${desiredVersion}`];
65
+ } else {
66
+ return [`${depName}@${source.url}`];
67
+ }
68
+ } else {
69
+ return [`${depName}@${desiredVersion || req}`];
70
+ }
71
+ }
72
+
73
+ async function checkPeerDependencies(
74
+ directory,
75
+ depName,
76
+ desiredVersion,
77
+ requirements
78
+ ) {
79
+ for (let req of requirements) {
80
+ await checkPeerDepsForReq(directory, depName, desiredVersion, req);
81
+ }
82
+ }
83
+
84
+ async function checkPeerDepsForReq(
85
+ directory,
86
+ depName,
87
+ desiredVersion,
88
+ requirement
89
+ ) {
90
+ const flags = {
91
+ ignoreScripts: true,
92
+ ignoreWorkspaceRootCheck: true,
93
+ ignoreEngines: true,
94
+ dev: devRequirement(requirement),
95
+ optional: optionalRequirement(requirement)
96
+ };
97
+ const reporter = new BufferReporter();
98
+ const config = new Config(reporter);
99
+
100
+ await config.init({
101
+ cwd: path.join(directory, path.dirname(requirement.file)),
102
+ nonInteractive: true,
103
+ enableDefaultRc: true
104
+ });
105
+
106
+ const lockfile = await Lockfile.fromDirectory(directory, reporter);
107
+
108
+ // Returns dep name and version for yarn add, example: ["react@16.6.0"]
109
+ let args = installArgsWithVersion(depName, desiredVersion, requirement);
110
+
111
+ // Just as if we'd run `yarn add package@version`, but using our lightweight
112
+ // implementation of Add that doesn't actually download and install packages
113
+ const add = new LightweightAdd(args, flags, config, reporter, lockfile);
114
+
115
+ await add.init();
116
+
117
+ const eventBuffer = reporter.getBuffer();
118
+ const peerDependencyWarnings = eventBuffer
119
+ .map(({ data }) => data)
120
+ .filter(data => {
121
+ // Guard against event.data sometimes being an object
122
+ return isString(data) && data.match(/(unmet|incorrect) peer dependency/);
123
+ });
124
+
125
+ if (peerDependencyWarnings.length) {
126
+ throw new Error(peerDependencyWarnings.join("\n"));
127
+ }
128
+ }
129
+
130
+ module.exports = { checkPeerDependencies };
@@ -0,0 +1,45 @@
1
+ const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
2
+ const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
3
+ .default;
4
+
5
+ // Get an array of a dependency's requested version ranges from a lockfile
6
+ function getRequestedVersions(depName, lockfileJson) {
7
+ const requestedVersions = [];
8
+ const re = /^(.*)@([^@]*?)$/;
9
+
10
+ Object.entries(lockfileJson).forEach(([name, _]) => {
11
+ if (name.match(re)) {
12
+ const [_, packageName, requestedVersion] = name.match(re);
13
+ if (packageName === depName) {
14
+ requestedVersions.push(requestedVersion);
15
+ }
16
+ }
17
+ });
18
+
19
+ return requestedVersions;
20
+ }
21
+
22
+ module.exports = (oldLockfileContent, newLockfileContent, depName, newReq) => {
23
+ const oldJson = parse(oldLockfileContent).object;
24
+ const newJson = parse(newLockfileContent).object;
25
+
26
+ const enableLockfileVersions = Boolean(
27
+ oldLockfileContent.match(/^# yarn v/m)
28
+ );
29
+ const noHeader = !Boolean(oldLockfileContent.match(/^# THIS IS AN AU/m));
30
+
31
+ const oldPackageReqs = getRequestedVersions(depName, oldJson);
32
+ const newPackageReqs = getRequestedVersions(depName, newJson);
33
+
34
+ const reqToReplace = newPackageReqs.find(pattern => {
35
+ return !oldPackageReqs.includes(pattern);
36
+ });
37
+
38
+ if (reqToReplace) {
39
+ newJson[`${depName}@${newReq || oldPackageReqs[0]}`] =
40
+ newJson[`${depName}@${reqToReplace}`];
41
+ delete newJson[`${depName}@${reqToReplace}`];
42
+ }
43
+
44
+ return stringify(newJson, noHeader, enableLockfileVersions);
45
+ };
@@ -0,0 +1,69 @@
1
+ /* DEPENDENCY FILE UPDATER
2
+ *
3
+ * Inputs:
4
+ * - directory containing a package.json and a yarn.lock
5
+ * - dependency name
6
+ *
7
+ * Outputs:
8
+ * - yarn.lock file
9
+ *
10
+ * Update the sub-dependency versions for this dependency to that latest
11
+ * possible versions, without unlocking any other dependencies
12
+ */
13
+ const fs = require("fs");
14
+ const path = require("path");
15
+ const { Install } = require("@dependabot/yarn-lib/lib/cli/commands/install");
16
+ const Config = require("@dependabot/yarn-lib/lib/config").default;
17
+ const { EventReporter } = require("@dependabot/yarn-lib/lib/reporters");
18
+ const Lockfile = require("@dependabot/yarn-lib/lib/lockfile").default;
19
+
20
+ class LightweightInstall extends Install {
21
+ async bailout(patterns, workspaceLayout) {
22
+ await this.saveLockfileAndIntegrity(patterns, workspaceLayout);
23
+ return true;
24
+ }
25
+ }
26
+
27
+ // Replace the version comments in the new lockfile with the ones from the old
28
+ // lockfile. If they weren't present in the old lockfile, delete them.
29
+ function recoverVersionComments(oldLockfile, newLockfile) {
30
+ const yarnRegex = /^# yarn v(\S+)\n/gm;
31
+ const nodeRegex = /^# node v(\S+)\n/gm;
32
+ const oldMatch = regex => [].concat(oldLockfile.match(regex))[0];
33
+ return newLockfile
34
+ .replace(yarnRegex, () => oldMatch(yarnRegex) || "")
35
+ .replace(nodeRegex, () => oldMatch(nodeRegex) || "");
36
+ }
37
+
38
+ async function updateDependencyFile(directory, lockfileName) {
39
+ const readFile = fileName =>
40
+ fs.readFileSync(path.join(directory, fileName)).toString();
41
+ const originalYarnLock = readFile(lockfileName);
42
+
43
+ const flags = {
44
+ ignoreScripts: true,
45
+ ignoreWorkspaceRootCheck: true,
46
+ ignoreEngines: true
47
+ };
48
+ const reporter = new EventReporter();
49
+ const config = new Config(reporter);
50
+ await config.init({
51
+ cwd: directory,
52
+ nonInteractive: true,
53
+ enableDefaultRc: true
54
+ });
55
+ config.enableLockfileVersions = Boolean(originalYarnLock.match(/^# yarn v/m));
56
+
57
+ const lockfile = await Lockfile.fromDirectory(directory, reporter);
58
+ const install = new LightweightInstall(flags, config, reporter, lockfile);
59
+ await install.init();
60
+ var updatedYarnLock = readFile(lockfileName);
61
+
62
+ updatedYarnLock = recoverVersionComments(originalYarnLock, updatedYarnLock);
63
+
64
+ return {
65
+ [lockfileName]: updatedYarnLock
66
+ };
67
+ }
68
+
69
+ module.exports = { updateDependencyFile };