forceupdate 0.1.0__tar.gz → 1.0.0__tar.gz

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 (813) hide show
  1. {forceupdate-0.1.0 → forceupdate-1.0.0}/.gitignore +3 -0
  2. forceupdate-1.0.0/PKG-INFO +192 -0
  3. forceupdate-1.0.0/README.md +152 -0
  4. {forceupdate-0.1.0 → forceupdate-1.0.0}/pyproject.toml +12 -3
  5. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/__main__.py +2 -2
  6. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/advisories/__init__.py +4 -0
  7. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/advisories/osv.py +10 -3
  8. forceupdate-1.0.0/src/forceupdate/advisories/packagist.py +257 -0
  9. forceupdate-1.0.0/src/forceupdate/checks/__init__.py +66 -0
  10. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/checks/base.py +33 -3
  11. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/checks/deprecated.py +45 -10
  12. forceupdate-1.0.0/src/forceupdate/checks/eol.py +541 -0
  13. forceupdate-1.0.0/src/forceupdate/checks/outdated.py +330 -0
  14. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/checks/priority.py +17 -8
  15. forceupdate-1.0.0/src/forceupdate/checks/runtimes.py +137 -0
  16. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/checks/vulns.py +94 -6
  17. forceupdate-1.0.0/src/forceupdate/cli.py +527 -0
  18. forceupdate-1.0.0/src/forceupdate/config.py +564 -0
  19. forceupdate-1.0.0/src/forceupdate/detect/code.py +68 -0
  20. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/detect/languages.py +10 -0
  21. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/detect/manifests.py +185 -19
  22. forceupdate-1.0.0/src/forceupdate/endoflife.py +268 -0
  23. forceupdate-1.0.0/src/forceupdate/engine.py +815 -0
  24. forceupdate-1.0.0/src/forceupdate/forges/__init__.py +169 -0
  25. forceupdate-1.0.0/src/forceupdate/forges/accounts.py +486 -0
  26. forceupdate-1.0.0/src/forceupdate/forges/base.py +426 -0
  27. forceupdate-1.0.0/src/forceupdate/forges/bitbucket.py +1068 -0
  28. forceupdate-1.0.0/src/forceupdate/forges/git.py +540 -0
  29. forceupdate-1.0.0/src/forceupdate/forges/github.py +1003 -0
  30. forceupdate-1.0.0/src/forceupdate/forges/gitlab.py +925 -0
  31. forceupdate-1.0.0/src/forceupdate/managed.py +330 -0
  32. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/models.py +267 -28
  33. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/net/__init__.py +2 -1
  34. forceupdate-1.0.0/src/forceupdate/net/auth.py +199 -0
  35. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/net/cache.py +65 -5
  36. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/net/http.py +163 -22
  37. forceupdate-1.0.0/src/forceupdate/parsers/__init__.py +96 -0
  38. forceupdate-1.0.0/src/forceupdate/parsers/code.py +695 -0
  39. forceupdate-1.0.0/src/forceupdate/parsers/go.py +651 -0
  40. forceupdate-1.0.0/src/forceupdate/parsers/gradle.py +1166 -0
  41. forceupdate-1.0.0/src/forceupdate/parsers/gradle_spans.py +139 -0
  42. forceupdate-1.0.0/src/forceupdate/parsers/imports.py +475 -0
  43. forceupdate-1.0.0/src/forceupdate/parsers/java.py +35 -0
  44. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/lockfiles.py +63 -9
  45. forceupdate-1.0.0/src/forceupdate/parsers/maven.py +633 -0
  46. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/npm.py +187 -54
  47. forceupdate-1.0.0/src/forceupdate/parsers/nuget.py +1185 -0
  48. forceupdate-1.0.0/src/forceupdate/parsers/php.py +447 -0
  49. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/python.py +451 -4
  50. forceupdate-1.0.0/src/forceupdate/parsers/ruby.py +979 -0
  51. forceupdate-1.0.0/src/forceupdate/parsers/ruby_spans.py +292 -0
  52. forceupdate-1.0.0/src/forceupdate/parsers/runtimes.py +1000 -0
  53. forceupdate-1.0.0/src/forceupdate/parsers/rust.py +789 -0
  54. forceupdate-1.0.0/src/forceupdate/parsers/xml_spans.py +219 -0
  55. forceupdate-1.0.0/src/forceupdate/parsers/yaml_spans.py +99 -0
  56. forceupdate-1.0.0/src/forceupdate/preferences.py +237 -0
  57. forceupdate-1.0.0/src/forceupdate/processes.py +131 -0
  58. forceupdate-1.0.0/src/forceupdate/registries/__init__.py +106 -0
  59. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/registries/base.py +86 -16
  60. forceupdate-1.0.0/src/forceupdate/registries/composer.py +143 -0
  61. forceupdate-1.0.0/src/forceupdate/registries/crates.py +112 -0
  62. forceupdate-1.0.0/src/forceupdate/registries/goproxy.py +239 -0
  63. forceupdate-1.0.0/src/forceupdate/registries/maven.py +209 -0
  64. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/registries/npm.py +13 -0
  65. forceupdate-1.0.0/src/forceupdate/registries/nuget.py +241 -0
  66. forceupdate-1.0.0/src/forceupdate/registries/packagist.py +143 -0
  67. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/registries/pypi.py +107 -1
  68. forceupdate-1.0.0/src/forceupdate/registries/rubygems.py +154 -0
  69. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/report/__init__.py +120 -15
  70. forceupdate-1.0.0/src/forceupdate/report/json.py +70 -0
  71. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/report/markdown.py +39 -22
  72. forceupdate-1.0.0/src/forceupdate/report/spreadsheet.py +124 -0
  73. forceupdate-1.0.0/src/forceupdate/report/synthesis.py +79 -0
  74. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/report/terminal.py +209 -19
  75. forceupdate-1.0.0/src/forceupdate/routing/__init__.py +254 -0
  76. forceupdate-1.0.0/src/forceupdate/routing/cargo.py +406 -0
  77. forceupdate-1.0.0/src/forceupdate/routing/composer.py +200 -0
  78. forceupdate-1.0.0/src/forceupdate/routing/go.py +204 -0
  79. forceupdate-1.0.0/src/forceupdate/routing/maven.py +449 -0
  80. forceupdate-1.0.0/src/forceupdate/routing/netrc.py +88 -0
  81. forceupdate-1.0.0/src/forceupdate/routing/npm.py +315 -0
  82. forceupdate-1.0.0/src/forceupdate/routing/nuget.py +361 -0
  83. forceupdate-1.0.0/src/forceupdate/routing/python.py +529 -0
  84. forceupdate-1.0.0/src/forceupdate/routing/ruby.py +386 -0
  85. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/sources/base.py +29 -0
  86. forceupdate-1.0.0/src/forceupdate/sources/forge.py +263 -0
  87. forceupdate-1.0.0/src/forceupdate/sources/local.py +368 -0
  88. forceupdate-1.0.0/src/forceupdate/update/__init__.py +10 -0
  89. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/update/constraints.py +214 -20
  90. forceupdate-1.0.0/src/forceupdate/update/forge.py +481 -0
  91. forceupdate-1.0.0/src/forceupdate/update/git.py +83 -0
  92. forceupdate-1.0.0/src/forceupdate/update/local.py +116 -0
  93. forceupdate-1.0.0/src/forceupdate/update/lockfiles.py +3007 -0
  94. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/update/planner.py +353 -30
  95. forceupdate-1.0.0/src/forceupdate/update/project_npm.py +234 -0
  96. forceupdate-1.0.0/src/forceupdate/update/writers/__init__.py +683 -0
  97. forceupdate-1.0.0/src/forceupdate/update/writers/base.py +75 -0
  98. forceupdate-1.0.0/src/forceupdate/update/writers/go.py +38 -0
  99. forceupdate-1.0.0/src/forceupdate/update/writers/java.py +78 -0
  100. forceupdate-1.0.0/src/forceupdate/update/writers/npm.py +108 -0
  101. forceupdate-1.0.0/src/forceupdate/update/writers/nuget.py +233 -0
  102. forceupdate-1.0.0/src/forceupdate/update/writers/php.py +19 -0
  103. forceupdate-1.0.0/src/forceupdate/update/writers/python.py +129 -0
  104. forceupdate-1.0.0/src/forceupdate/update/writers/ruby.py +90 -0
  105. forceupdate-1.0.0/src/forceupdate/update/writers/rust.py +88 -0
  106. forceupdate-1.0.0/src/forceupdate/userfiles.py +115 -0
  107. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/versions/__init__.py +14 -2
  108. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/versions/base.py +48 -2
  109. forceupdate-1.0.0/src/forceupdate/versions/cargo.py +314 -0
  110. forceupdate-1.0.0/src/forceupdate/versions/composer.py +666 -0
  111. forceupdate-1.0.0/src/forceupdate/versions/go.py +184 -0
  112. forceupdate-1.0.0/src/forceupdate/versions/maven.py +482 -0
  113. forceupdate-1.0.0/src/forceupdate/versions/nuget.py +612 -0
  114. forceupdate-1.0.0/src/forceupdate/versions/rubygems.py +256 -0
  115. forceupdate-1.0.0/src/forceupdate/web/__init__.py +21 -0
  116. forceupdate-1.0.0/src/forceupdate/web/app.py +223 -0
  117. forceupdate-1.0.0/src/forceupdate/web/connections.py +292 -0
  118. forceupdate-1.0.0/src/forceupdate/web/jobs.py +720 -0
  119. forceupdate-1.0.0/src/forceupdate/web/openapi.json +7457 -0
  120. forceupdate-1.0.0/src/forceupdate/web/openapi.py +104 -0
  121. forceupdate-1.0.0/src/forceupdate/web/picker.py +133 -0
  122. forceupdate-1.0.0/src/forceupdate/web/preferences.py +103 -0
  123. forceupdate-1.0.0/src/forceupdate/web/proposals.py +475 -0
  124. forceupdate-1.0.0/src/forceupdate/web/repositories.py +602 -0
  125. forceupdate-1.0.0/src/forceupdate/web/routes/__init__.py +86 -0
  126. forceupdate-1.0.0/src/forceupdate/web/routes/accounts.py +399 -0
  127. forceupdate-1.0.0/src/forceupdate/web/routes/files.py +95 -0
  128. forceupdate-1.0.0/src/forceupdate/web/routes/fs.py +183 -0
  129. forceupdate-1.0.0/src/forceupdate/web/routes/oauth.py +89 -0
  130. forceupdate-1.0.0/src/forceupdate/web/routes/proposals.py +80 -0
  131. forceupdate-1.0.0/src/forceupdate/web/routes/repositories.py +109 -0
  132. forceupdate-1.0.0/src/forceupdate/web/routes/scans.py +144 -0
  133. forceupdate-1.0.0/src/forceupdate/web/routes/settings.py +80 -0
  134. forceupdate-1.0.0/src/forceupdate/web/routes/updates.py +170 -0
  135. forceupdate-1.0.0/src/forceupdate/web/schemas.py +1103 -0
  136. forceupdate-1.0.0/src/forceupdate/web/security.py +212 -0
  137. forceupdate-1.0.0/src/forceupdate/web/sse.py +59 -0
  138. forceupdate-1.0.0/src/forceupdate/web/static/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
  139. forceupdate-1.0.0/src/forceupdate/web/static/assets/index-BC2Th5dh.js +13 -0
  140. forceupdate-1.0.0/src/forceupdate/web/static/assets/index-BjeR_JJV.css +2 -0
  141. forceupdate-1.0.0/src/forceupdate/web/static/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  142. forceupdate-1.0.0/src/forceupdate/web/static/favicon.svg +1 -0
  143. forceupdate-1.0.0/src/forceupdate/web/static/index.html +17 -0
  144. forceupdate-1.0.0/src/forceupdate/web/static/licenses/LICENSE-lucide.txt +43 -0
  145. forceupdate-1.0.0/src/forceupdate/web/static/licenses/LICENSE-simple-icons.txt +10 -0
  146. forceupdate-1.0.0/src/forceupdate/web/static/licenses/OFL-IBM-Plex-Sans.txt +93 -0
  147. forceupdate-1.0.0/src/forceupdate/web/static/licenses/OFL-JetBrains-Mono.txt +93 -0
  148. forceupdate-1.0.0/src/forceupdate/web/static/theme.js +14 -0
  149. forceupdate-1.0.0/src/forceupdate/web/workdirs.py +123 -0
  150. forceupdate-1.0.0/tests/conftest.py +609 -0
  151. forceupdate-1.0.0/tests/e2e_server.py +409 -0
  152. forceupdate-1.0.0/tests/fake_bitbucket.py +545 -0
  153. forceupdate-1.0.0/tests/fake_bundler.py +97 -0
  154. forceupdate-1.0.0/tests/fake_forge.py +469 -0
  155. forceupdate-1.0.0/tests/fake_gitlab.py +493 -0
  156. forceupdate-1.0.0/tests/fixtures/crates/anyhow.jsonl +106 -0
  157. forceupdate-1.0.0/tests/fixtures/crates/log.jsonl +64 -0
  158. forceupdate-1.0.0/tests/fixtures/crates/rand.jsonl +94 -0
  159. forceupdate-1.0.0/tests/fixtures/crates/regex.jsonl +169 -0
  160. forceupdate-1.0.0/tests/fixtures/crates/smallvec.jsonl +86 -0
  161. forceupdate-1.0.0/tests/fixtures/crates/time.jsonl +135 -0
  162. forceupdate-1.0.0/tests/fixtures/endoflife/angularjs.json +1 -0
  163. forceupdate-1.0.0/tests/fixtures/endoflife/django.json +1 -0
  164. forceupdate-1.0.0/tests/fixtures/endoflife/dotnet.json +1 -0
  165. forceupdate-1.0.0/tests/fixtures/endoflife/dotnetfx.json +1 -0
  166. forceupdate-1.0.0/tests/fixtures/endoflife/eclipse-temurin.json +1 -0
  167. forceupdate-1.0.0/tests/fixtures/endoflife/electron.json +1 -0
  168. forceupdate-1.0.0/tests/fixtures/endoflife/go.json +1 -0
  169. forceupdate-1.0.0/tests/fixtures/endoflife/guzzle.json +1 -0
  170. forceupdate-1.0.0/tests/fixtures/endoflife/log4j.json +1 -0
  171. forceupdate-1.0.0/tests/fixtures/endoflife/nestjs.json +1 -0
  172. forceupdate-1.0.0/tests/fixtures/endoflife/nodejs.json +1 -0
  173. forceupdate-1.0.0/tests/fixtures/endoflife/numpy.json +1 -0
  174. forceupdate-1.0.0/tests/fixtures/endoflife/php.json +1 -0
  175. forceupdate-1.0.0/tests/fixtures/endoflife/python.json +1 -0
  176. forceupdate-1.0.0/tests/fixtures/endoflife/react.json +1 -0
  177. forceupdate-1.0.0/tests/fixtures/endoflife/ruby.json +1 -0
  178. forceupdate-1.0.0/tests/fixtures/endoflife/spring-boot.json +1 -0
  179. forceupdate-1.0.0/tests/fixtures/endoflife/spring-framework.json +1 -0
  180. forceupdate-1.0.0/tests/fixtures/endoflife/symfony.json +1 -0
  181. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__BurntSushi__toml.json +17 -0
  182. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__davecgh__go-spew.json +17 -0
  183. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__go-chi__chi.json +37 -0
  184. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__golang-jwt__jwt__v4.json +22 -0
  185. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__golang__protobuf.json +17 -0
  186. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__google__uuid.json +17 -0
  187. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__mattn__go-sqlite3.json +17 -0
  188. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__pmezard__go-difflib.json +17 -0
  189. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__russross__blackfriday.json +22 -0
  190. forceupdate-1.0.0/tests/fixtures/goproxy/github.com__stretchr__testify.json +17 -0
  191. forceupdate-1.0.0/tests/fixtures/goproxy/golang.org__x__exp.json +22 -0
  192. forceupdate-1.0.0/tests/fixtures/goproxy/golang.org__x__text.json +17 -0
  193. forceupdate-1.0.0/tests/fixtures/goproxy/gopkg.in__yaml.v3.json +17 -0
  194. forceupdate-1.0.0/tests/fixtures/maven/androidx.annotation__annotation.xml +77 -0
  195. forceupdate-1.0.0/tests/fixtures/maven/com.fasterxml.jackson.core__jackson-databind.xml +250 -0
  196. forceupdate-1.0.0/tests/fixtures/maven/com.fasterxml.jackson__jackson-bom.xml +171 -0
  197. forceupdate-1.0.0/tests/fixtures/maven/com.github.ben-manes.versions.xml +14 -0
  198. forceupdate-1.0.0/tests/fixtures/maven/com.google.guava__guava.xml +172 -0
  199. forceupdate-1.0.0/tests/fixtures/maven/com.squareup.okhttp3__logging-interceptor.xml +122 -0
  200. forceupdate-1.0.0/tests/fixtures/maven/com.squareup.okhttp3__okhttp.xml +122 -0
  201. forceupdate-1.0.0/tests/fixtures/maven/javax.servlet__javax.servlet-api.xml +32 -0
  202. forceupdate-1.0.0/tests/fixtures/maven/junit__junit.xml +44 -0
  203. forceupdate-1.0.0/tests/fixtures/maven/org.apache.commons__commons-text.xml +30 -0
  204. forceupdate-1.0.0/tests/fixtures/maven/org.apache.logging.log4j__log4j-api.xml +89 -0
  205. forceupdate-1.0.0/tests/fixtures/maven/org.apache.logging.log4j__log4j-core.xml +90 -0
  206. forceupdate-1.0.0/tests/fixtures/maven/org.apache.maven.plugins__maven-compiler-plugin.xml +52 -0
  207. forceupdate-1.0.0/tests/fixtures/maven/org.apache.maven.plugins__maven-surefire-plugin.xml +85 -0
  208. forceupdate-1.0.0/tests/fixtures/maven/org.apache.maven.plugins__maven-war-plugin.xml +39 -0
  209. forceupdate-1.0.0/tests/fixtures/maven/org.apache__apache.xml +52 -0
  210. forceupdate-1.0.0/tests/fixtures/maven/org.mockito__mockito-core.xml +362 -0
  211. forceupdate-1.0.0/tests/fixtures/maven/org.springframework.boot.xml +14 -0
  212. forceupdate-1.0.0/tests/fixtures/maven/org.springframework__spring-webmvc.xml +349 -0
  213. forceupdate-1.0.0/tests/fixtures/maven/org.yaml__snakeyaml.xml +50 -0
  214. forceupdate-1.0.0/tests/fixtures/maven/poms/androidx.annotation__annotation__1.11.0.pom +58 -0
  215. forceupdate-1.0.0/tests/fixtures/maven/poms/com.fasterxml.jackson.core__jackson-databind__2.22.4.pom +608 -0
  216. forceupdate-1.0.0/tests/fixtures/maven/poms/com.fasterxml.jackson__jackson-bom__2.13.0.pom +423 -0
  217. forceupdate-1.0.0/tests/fixtures/maven/poms/com.fasterxml.jackson__jackson-bom__2.22.4.pom +490 -0
  218. forceupdate-1.0.0/tests/fixtures/maven/poms/com.fasterxml.jackson__jackson-parent__2.13.pom +191 -0
  219. forceupdate-1.0.0/tests/fixtures/maven/poms/com.fasterxml__oss-parent__43.pom +660 -0
  220. forceupdate-1.0.0/tests/fixtures/maven/poms/com.google.guava__guava__33.8.0-jre.pom +252 -0
  221. forceupdate-1.0.0/tests/fixtures/maven/poms/com.squareup.okhttp3__logging-interceptor__5.5.1.pom +46 -0
  222. forceupdate-1.0.0/tests/fixtures/maven/poms/com.squareup.okhttp3__okhttp__5.5.1.pom +47 -0
  223. forceupdate-1.0.0/tests/fixtures/maven/poms/javax.servlet__javax.servlet-api__4.0.1.pom +375 -0
  224. forceupdate-1.0.0/tests/fixtures/maven/poms/junit__junit__4.13.2.pom +633 -0
  225. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.commons__commons-text__1.15.0.pom +639 -0
  226. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.logging.log4j__log4j-api__2.26.1.pom +117 -0
  227. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.logging.log4j__log4j-core__2.26.1.pom +248 -0
  228. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.maven.plugins__maven-compiler-plugin__3.16.0.pom +277 -0
  229. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.maven.plugins__maven-surefire-plugin__3.6.1.pom +138 -0
  230. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache.maven.plugins__maven-war-plugin__3.5.1.pom +293 -0
  231. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache__apache__23.pom +492 -0
  232. forceupdate-1.0.0/tests/fixtures/maven/poms/org.apache__apache__40.pom +656 -0
  233. forceupdate-1.0.0/tests/fixtures/maven/poms/org.mockito__mockito-core__5.24.0.pom +83 -0
  234. forceupdate-1.0.0/tests/fixtures/maven/poms/org.springframework__spring-webmvc__7.0.10.pom +80 -0
  235. forceupdate-1.0.0/tests/fixtures/maven/poms/org.yaml__snakeyaml__2.7.pom +518 -0
  236. forceupdate-1.0.0/tests/fixtures/npm/p-limit.json +1 -0
  237. forceupdate-1.0.0/tests/fixtures/nuget/Microsoft.AspNetCore.Http.json.gz +0 -0
  238. forceupdate-1.0.0/tests/fixtures/nuget/Microsoft.NET.Test.Sdk.json.gz +0 -0
  239. forceupdate-1.0.0/tests/fixtures/nuget/Microsoft.SourceLink.GitHub.json.gz +0 -0
  240. forceupdate-1.0.0/tests/fixtures/nuget/NUnit.json.gz +0 -0
  241. forceupdate-1.0.0/tests/fixtures/nuget/Newtonsoft.Json.json.gz +0 -0
  242. forceupdate-1.0.0/tests/fixtures/nuget/Serilog.json.gz +0 -0
  243. forceupdate-1.0.0/tests/fixtures/nuget/StyleCop.Analyzers.json.gz +0 -0
  244. forceupdate-1.0.0/tests/fixtures/nuget/System.Text.Encodings.Web.json.gz +0 -0
  245. forceupdate-1.0.0/tests/fixtures/nuget/log4net.json.gz +0 -0
  246. forceupdate-1.0.0/tests/fixtures/nuget/xunit.json.gz +0 -0
  247. forceupdate-1.0.0/tests/fixtures/nuget/xunit.runner.visualstudio.json.gz +0 -0
  248. forceupdate-1.0.0/tests/fixtures/osv/queries.json +1316 -0
  249. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-22f2-v57c-j9cx.json +1 -0
  250. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-25mq-v84q-4j7r.json +1 -0
  251. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-269g-pwp5-87pp.json +1 -0
  252. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-29wx-vh33-7x7r.json +1 -0
  253. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-2cwj-8chv-9pp9.json +1 -0
  254. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-2g2g-8p8h-fgwm.json +1 -0
  255. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-2vqw-3mp8-cgmx.json +1 -0
  256. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-2x8x-jmrp-phxw.json +1 -0
  257. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-34xg-wgjx-8xph.json +1 -0
  258. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-36p3-wjmg-h94x.json +1 -0
  259. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3chg-m5w7-qfv5.json +1 -0
  260. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3cqm-mf7h-prrj.json +1 -0
  261. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3h57-hmj3-gj3p.json +1 -0
  262. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3h9f-r86x-qvjx.json +1 -0
  263. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3mc7-4q67-w48m.json +1 -0
  264. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3pxv-7cmr-fjr4.json +1 -0
  265. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3wrr-7qpf-2prh.json +1 -0
  266. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-3x8x-79m2-3w2w.json +1 -0
  267. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-43w2-9j62-hq99.json +1 -0
  268. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-4773-3jfm-qmx3.json +1 -0
  269. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-4f7c-pmjv-c25w.json +1 -0
  270. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-4j38-f5cw-54h7.json +1 -0
  271. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-529h-vh3j-85hq.json +1 -0
  272. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-52m2-vc4m-jj33.json +1 -0
  273. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-54rr-7fvw-6x8f.json +1 -0
  274. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-57j2-w4cx-62h2.json +1 -0
  275. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-599f-7c49-w659.json +1 -0
  276. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5crp-9r3c-p9vr.json +1 -0
  277. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5gvw-p9qm-jgwh.json +1 -0
  278. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5jmj-h7xm-6q6v.json +1 -0
  279. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5mg8-w23w-74h3.json +1 -0
  280. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5prr-v3j2-97mh.json +1 -0
  281. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5v5v-ww74-355v.json +1 -0
  282. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-5v8h-3h3q-446p.json +1 -0
  283. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-625h-95r8-8xpm.json +1 -0
  284. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6377-hfv9-hqf6.json +1 -0
  285. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-65f5-mfpf-vfhj.json +1 -0
  286. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-68xg-gqqm-vgj8.json +1 -0
  287. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-69ch-w2m2-3vjp.json +1 -0
  288. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6hcq-hmm3-jj3c.json +1 -0
  289. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6hg6-v5c8-fphq.json +1 -0
  290. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6j75-5wfj-gh66.json +1 -0
  291. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6p4f-wcwh-5vvm.json +1 -0
  292. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6w2r-r2m5-xq5w.json +1 -0
  293. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-6xw4-3v39-52mm.json +1 -0
  294. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-72pg-x5f8-j25j.json +1 -0
  295. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7fxw-r6jv-74c8.json +1 -0
  296. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7g2v-jj9q-g3rg.json +1 -0
  297. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7g45-4rm6-3mm3.json +1 -0
  298. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7mqq-6cf9-v2qp.json +1 -0
  299. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7p85-w9px-jpjp.json +1 -0
  300. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7phw-cxx7-q9vq.json +1 -0
  301. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7rjr-3q55-vv33.json +1 -0
  302. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7wqh-767x-r66v.json +1 -0
  303. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-7xr5-9hcq-chf9.json +1 -0
  304. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8489-44mv-ggj8.json +1 -0
  305. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8678-w3jw-xfc2.json +1 -0
  306. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8cgq-6mh2-7j6v.json +1 -0
  307. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8cjm-8mp7-r2xf.json +1 -0
  308. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8qcx-xf44-272x.json +1 -0
  309. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8vqr-qjwx-82mw.json +1 -0
  310. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-8x9c-rmqh-456c.json +1 -0
  311. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-923m-gv2p-w5qp.json +1 -0
  312. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-93pm-5p5f-3ghx.json +1 -0
  313. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-94pj-82f3-465w.json +1 -0
  314. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-957g-f97v-vppc.json +1 -0
  315. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-98wm-3w3q-mw94.json +1 -0
  316. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-9cv2-cfxc-v4v2.json +1 -0
  317. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-9hf4-67fc-4vf4.json +1 -0
  318. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-9w3m-gqgf-c4p9.json +1 -0
  319. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-c2f4-cvqm-65w2.json +1 -0
  320. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-c2w2-prh8-qm98.json +1 -0
  321. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-c4r9-r8fh-9vj2.json +1 -0
  322. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-c4rq-3m3g-8wgx.json +1 -0
  323. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-c6qg-cjj8-47qp.json +1 -0
  324. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-cjpg-rgq5-fr37.json +1 -0
  325. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-crhf-3pfg-w68w.json +1 -0
  326. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-cwmx-hcrq-mhc3.json +1 -0
  327. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-cwxw-98qj-8qjx.json +1 -0
  328. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-cx7f-g6mp-7hqm.json +1 -0
  329. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-cxp5-3px4-pw24.json +1 -0
  330. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-f283-ghqc-fg79.json +1 -0
  331. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-f2wf-25xc-69c9.json +1 -0
  332. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-f7vp-7xgx-4w4r.json +1 -0
  333. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-frmv-pr5f-9mcr.json +1 -0
  334. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-g446-98w2-8p5w.json +1 -0
  335. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-g5vr-rgqm-vf78.json +1 -0
  336. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-ghhp-997w-qr28.json +1 -0
  337. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-gjh7-p2fx-99vx.json +1 -0
  338. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-gx83-3vf8-gh7j.json +1 -0
  339. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h2jq-g4cq-5ppq.json +1 -0
  340. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h383-gmxw-35v2.json +1 -0
  341. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h3qp-gqrc-q736.json +1 -0
  342. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h7pc-vwp9-298g.json +1 -0
  343. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h8vq-8gpg-mhcg.json +1 -0
  344. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-h95v-h523-3mw8.json +1 -0
  345. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hgj6-7826-r7m5.json +1 -0
  346. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hhhw-99gj-p3c3.json +1 -0
  347. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hp87-p4gw-j4gq.json +1 -0
  348. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hq7v-mx3g-29hw.json +1 -0
  349. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hxqx-xwvh-44m2.json +1 -0
  350. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hxrm-9w7p-39cc.json +1 -0
  351. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-hxx2-7vcw-mqr3.json +1 -0
  352. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-j3rv-43j4-c7qm.json +1 -0
  353. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-jfh8-c2jp-5v3q.json +1 -0
  354. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-jjjh-jjxp-wpff.json +1 -0
  355. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-jjxq-ff2g-95vh.json +1 -0
  356. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-m5pq-gvj9-9vr8.json +1 -0
  357. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-mh63-6h87-95cp.json +1 -0
  358. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-mjmj-j48q-9wg2.json +1 -0
  359. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-mq64-j8f9-9gcj.json +1 -0
  360. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-mr3q-g2mv-mr4q.json +1 -0
  361. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-mxw3-3hh2-x2mh.json +1 -0
  362. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-p42q-9prx-q5wq.json +1 -0
  363. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-p543-xpfm-54cp.json +1 -0
  364. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-p67v-3w7g-wjg7.json +1 -0
  365. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-p6xc-xr62-6r2g.json +1 -0
  366. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-pc63-qcmh-9cmg.json +1 -0
  367. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-phwj-rprq-35pp.json +1 -0
  368. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-pr2w-4gpj-cpq4.json +1 -0
  369. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-q238-5cxm-5c9h.json +1 -0
  370. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-q2ww-5357-x388.json +1 -0
  371. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-q4qf-9j86-f5mh.json +1 -0
  372. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-q559-8m2m-g699.json +1 -0
  373. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-q7rv-6hp3-vh96.json +1 -0
  374. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-qpgp-93vx-g8v8.json +1 -0
  375. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-qv7j-4883-hwh7.json +1 -0
  376. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-qv9r-c865-cp47.json +1 -0
  377. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-qw25-v68c-qjf3.json +1 -0
  378. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-r657-rxjc-j557.json +1 -0
  379. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-r936-gwx5-v52f.json +1 -0
  380. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-rgv9-q543-rqg4.json +1 -0
  381. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-rmj7-2vxq-3g9f.json +1 -0
  382. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-rqv2-275x-2jq5.json +1 -0
  383. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-rrqc-c2jx-6jgv.json +1 -0
  384. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-v2fc-qm4h-8hqv.json +1 -0
  385. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-v569-hp3g-36wr.json +1 -0
  386. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-v5mv-p594-2x33.json +1 -0
  387. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vc5p-v9hr-52mj.json +1 -0
  388. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vcc8-phrv-43wj.json +1 -0
  389. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vgpv-f759-9wx3.json +1 -0
  390. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vm85-hxw5-5432.json +1 -0
  391. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vpfw-47h7-xj4g.json +1 -0
  392. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-vvgp-rfg2-7rr6.json +1 -0
  393. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-w248-ffj2-4v5q.json +1 -0
  394. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-w37g-rhq8-7m4j.json +1 -0
  395. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-w3c8-7r8f-9jp8.json +1 -0
  396. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-w9pc-fmgc-vxvw.json +1 -0
  397. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wcg3-cvx6-7396.json +1 -0
  398. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wfpw-mmfh-qq69.json +1 -0
  399. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wg35-8jpf-2xv3.json +1 -0
  400. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-whrj-4476-wvmp.json +1 -0
  401. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wjgm-6hv5-3cvf.json +1 -0
  402. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wjv4-x9w8-wm3h.json +1 -0
  403. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wm3w-8rrp-j577.json +1 -0
  404. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wpv5-97wm-hp9c.json +1 -0
  405. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wpwq-4j6v-78m3.json +1 -0
  406. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wq4h-7r42-5hrr.json +1 -0
  407. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wv8q-qhhj-9h54.json +1 -0
  408. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wvqv-fj8w-qmhm.json +1 -0
  409. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wx95-c6cv-8532.json +1 -0
  410. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-wxmh-65f7-jcvw.json +1 -0
  411. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-x23c-287f-qqv5.json +1 -0
  412. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-x8cg-fq8g-mxfx.json +1 -0
  413. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-xj5v-6v4g-jfw6.json +1 -0
  414. forceupdate-1.0.0/tests/fixtures/osv/vulns/GHSA-xxph-c9ww-hj94.json +1 -0
  415. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2022-0603.json +1 -0
  416. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2022-1059.json +1 -0
  417. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2024-3250.json +1 -0
  418. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2025-3553.json +1 -0
  419. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2026-4316.json +1 -0
  420. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2026-5970.json +1 -0
  421. forceupdate-1.0.0/tests/fixtures/osv/vulns/GO-2026-6629.json +1 -0
  422. forceupdate-1.0.0/tests/fixtures/osv/vulns/PYSEC-2026-1297.json +1 -0
  423. forceupdate-1.0.0/tests/fixtures/osv/vulns/PYSEC-2026-3717.json +1 -0
  424. forceupdate-1.0.0/tests/fixtures/osv/vulns/PYSEC-2026-4035.json +1 -0
  425. forceupdate-1.0.0/tests/fixtures/osv/vulns/RUSTSEC-2020-0071.json +1 -0
  426. forceupdate-1.0.0/tests/fixtures/osv/vulns/RUSTSEC-2021-0003.json +1 -0
  427. forceupdate-1.0.0/tests/fixtures/osv/vulns/RUSTSEC-2022-0013.json +1 -0
  428. forceupdate-1.0.0/tests/fixtures/osv/vulns/RUSTSEC-2026-0190.json +1 -0
  429. forceupdate-1.0.0/tests/fixtures/packagist/doctrine__cache.json +1 -0
  430. forceupdate-1.0.0/tests/fixtures/packagist/guzzlehttp__guzzle.json +1 -0
  431. forceupdate-1.0.0/tests/fixtures/packagist/guzzlehttp__psr7.json +1 -0
  432. forceupdate-1.0.0/tests/fixtures/packagist/monolog__monolog.json +1 -0
  433. forceupdate-1.0.0/tests/fixtures/packagist/php-http__message-factory.json +1 -0
  434. forceupdate-1.0.0/tests/fixtures/packagist/psr__log.json +1 -0
  435. forceupdate-1.0.0/tests/fixtures/packagist/symfony__console.json +1 -0
  436. forceupdate-1.0.0/tests/fixtures/packagist/twig__twig.json +1 -0
  437. forceupdate-1.0.0/tests/fixtures/packagist-advisories.json +1110 -0
  438. forceupdate-1.0.0/tests/fixtures/pypi/django.json +1 -0
  439. forceupdate-1.0.0/tests/fixtures/pypi/python-dateutil.json +1 -0
  440. forceupdate-1.0.0/tests/fixtures/record.py +489 -0
  441. forceupdate-1.0.0/tests/fixtures/rubygems/concurrent-ruby.txt +139 -0
  442. forceupdate-1.0.0/tests/fixtures/rubygems/diff-lcs.txt +24 -0
  443. forceupdate-1.0.0/tests/fixtures/rubygems/json.txt +250 -0
  444. forceupdate-1.0.0/tests/fixtures/rubygems/minitest.txt +159 -0
  445. forceupdate-1.0.0/tests/fixtures/rubygems/mustermann.txt +35 -0
  446. forceupdate-1.0.0/tests/fixtures/rubygems/nio4r.txt +96 -0
  447. forceupdate-1.0.0/tests/fixtures/rubygems/nokogiri.txt +1186 -0
  448. forceupdate-1.0.0/tests/fixtures/rubygems/puma.txt +361 -0
  449. forceupdate-1.0.0/tests/fixtures/rubygems/racc.txt +44 -0
  450. forceupdate-1.0.0/tests/fixtures/rubygems/rack-protection.txt +54 -0
  451. forceupdate-1.0.0/tests/fixtures/rubygems/rack.txt +185 -0
  452. forceupdate-1.0.0/tests/fixtures/rubygems/rake.txt +97 -0
  453. forceupdate-1.0.0/tests/fixtures/rubygems/rest-client.txt +114 -0
  454. forceupdate-1.0.0/tests/fixtures/rubygems/rspec-core.txt +150 -0
  455. forceupdate-1.0.0/tests/fixtures/rubygems/rspec-expectations.txt +127 -0
  456. forceupdate-1.0.0/tests/fixtures/rubygems/rspec-mocks.txt +136 -0
  457. forceupdate-1.0.0/tests/fixtures/rubygems/rspec-support.txt +54 -0
  458. forceupdate-1.0.0/tests/fixtures/rubygems/rspec.txt +174 -0
  459. forceupdate-1.0.0/tests/fixtures/rubygems/ruby2_keywords.txt +7 -0
  460. forceupdate-1.0.0/tests/fixtures/rubygems/sinatra.txt +109 -0
  461. forceupdate-1.0.0/tests/fixtures/rubygems/tilt.txt +49 -0
  462. forceupdate-1.0.0/tests/fixtures/rubygems/tzinfo-data.txt +82 -0
  463. forceupdate-1.0.0/tests/fixtures/rubygems/tzinfo.txt +96 -0
  464. forceupdate-1.0.0/tests/fixtures/tls/ca.pem +19 -0
  465. forceupdate-1.0.0/tests/projects/README.md +49 -0
  466. forceupdate-1.0.0/tests/projects/bundler/Gemfile +19 -0
  467. forceupdate-1.0.0/tests/projects/bundler/Gemfile.lock +105 -0
  468. forceupdate-1.0.0/tests/projects/bundler/demo.gemspec +13 -0
  469. forceupdate-1.0.0/tests/projects/bundler/helper/helper.gemspec +11 -0
  470. forceupdate-1.0.0/tests/projects/bundler/helper/lib/helper.rb +8 -0
  471. forceupdate-1.0.0/tests/projects/bundler/lib/demo.rb +8 -0
  472. forceupdate-1.0.0/tests/projects/cargo/Cargo.lock +316 -0
  473. forceupdate-1.0.0/tests/projects/cargo/Cargo.toml +25 -0
  474. forceupdate-1.0.0/tests/projects/cargo/src/lib.rs +3 -0
  475. forceupdate-1.0.0/tests/projects/cargo/vendor/local-crate/Cargo.toml +7 -0
  476. forceupdate-1.0.0/tests/projects/cargo/vendor/local-crate/src/lib.rs +3 -0
  477. forceupdate-1.0.0/tests/projects/cargo-workspace/Cargo.lock +111 -0
  478. forceupdate-1.0.0/tests/projects/cargo-workspace/Cargo.toml +14 -0
  479. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/app/Cargo.toml +13 -0
  480. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/app/src/lib.rs +3 -0
  481. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/core/Cargo.toml +9 -0
  482. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/core/src/lib.rs +3 -0
  483. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/excluded/Cargo.toml +7 -0
  484. forceupdate-1.0.0/tests/projects/cargo-workspace/crates/excluded/src/lib.rs +3 -0
  485. forceupdate-1.0.0/tests/projects/composer/composer.json +50 -0
  486. forceupdate-1.0.0/tests/projects/composer/composer.lock +1712 -0
  487. forceupdate-1.0.0/tests/projects/composer/src/App.php +22 -0
  488. forceupdate-1.0.0/tests/projects/composer/third_party/acme-tools/composer.json +15 -0
  489. forceupdate-1.0.0/tests/projects/composer/third_party/acme-tools/src/Slug.php +11 -0
  490. forceupdate-1.0.0/tests/projects/eol/.nvmrc +1 -0
  491. forceupdate-1.0.0/tests/projects/eol/.python-version +1 -0
  492. forceupdate-1.0.0/tests/projects/eol/Dockerfile +14 -0
  493. forceupdate-1.0.0/tests/projects/eol/app/__init__.py +5 -0
  494. forceupdate-1.0.0/tests/projects/eol/package.json +11 -0
  495. forceupdate-1.0.0/tests/projects/eol/pyproject.toml +7 -0
  496. forceupdate-1.0.0/tests/projects/exports/pdm/pdm.lock +286 -0
  497. forceupdate-1.0.0/tests/projects/exports/pdm/pyproject.toml +8 -0
  498. forceupdate-1.0.0/tests/projects/exports/pdm/requirements.txt +174 -0
  499. forceupdate-1.0.0/tests/projects/exports/pip-compile/pyproject.toml +5 -0
  500. forceupdate-1.0.0/tests/projects/exports/pip-compile/requirements.txt +16 -0
  501. forceupdate-1.0.0/tests/projects/exports/poetry/requirements.txt +239 -0
  502. forceupdate-1.0.0/tests/projects/exports/uv/pyproject.toml +8 -0
  503. forceupdate-1.0.0/tests/projects/exports/uv/requirements.txt +183 -0
  504. forceupdate-1.0.0/tests/projects/exports/uv/uv.lock +272 -0
  505. forceupdate-1.0.0/tests/projects/go/go.mod +28 -0
  506. forceupdate-1.0.0/tests/projects/go/go.sum +21 -0
  507. forceupdate-1.0.0/tests/projects/go/main.go +19 -0
  508. forceupdate-1.0.0/tests/projects/go/main_test.go +9 -0
  509. forceupdate-1.0.0/tests/projects/go/third_party/localmod/go.mod +3 -0
  510. forceupdate-1.0.0/tests/projects/go/third_party/localmod/localmod.go +5 -0
  511. forceupdate-1.0.0/tests/projects/go-workspace/app/go.mod +12 -0
  512. forceupdate-1.0.0/tests/projects/go-workspace/app/go.sum +4 -0
  513. forceupdate-1.0.0/tests/projects/go-workspace/app/main.go +11 -0
  514. forceupdate-1.0.0/tests/projects/go-workspace/go.work +9 -0
  515. forceupdate-1.0.0/tests/projects/go-workspace/go.work.sum +2 -0
  516. forceupdate-1.0.0/tests/projects/go-workspace/lib/go.mod +5 -0
  517. forceupdate-1.0.0/tests/projects/go-workspace/lib/go.sum +2 -0
  518. forceupdate-1.0.0/tests/projects/go-workspace/lib/lib.go +7 -0
  519. forceupdate-1.0.0/tests/projects/go-workspace/tools/go.mod +7 -0
  520. forceupdate-1.0.0/tests/projects/go-workspace/tools/go.sum +2 -0
  521. forceupdate-1.0.0/tests/projects/go-workspace/tools/main.go +10 -0
  522. forceupdate-1.0.0/tests/projects/gradle/app/build.gradle +12 -0
  523. forceupdate-1.0.0/tests/projects/gradle/app/src/main/java/demo/App.java +7 -0
  524. forceupdate-1.0.0/tests/projects/gradle/build.gradle.kts +16 -0
  525. forceupdate-1.0.0/tests/projects/gradle/gradle/libs.versions.toml +12 -0
  526. forceupdate-1.0.0/tests/projects/gradle/gradle.properties +2 -0
  527. forceupdate-1.0.0/tests/projects/gradle/settings.gradle.kts +3 -0
  528. forceupdate-1.0.0/tests/projects/maven/app/pom.xml +70 -0
  529. forceupdate-1.0.0/tests/projects/maven/app/src/main/java/demo/app/App.java +9 -0
  530. forceupdate-1.0.0/tests/projects/maven/lib/pom.xml +36 -0
  531. forceupdate-1.0.0/tests/projects/maven/lib/src/main/java/demo/lib/Greeter.java +7 -0
  532. forceupdate-1.0.0/tests/projects/maven/pom.xml +71 -0
  533. forceupdate-1.0.0/tests/projects/nuget/Directory.Build.props +6 -0
  534. forceupdate-1.0.0/tests/projects/nuget/Directory.Packages.props +17 -0
  535. forceupdate-1.0.0/tests/projects/nuget/legacy/packages.config +6 -0
  536. forceupdate-1.0.0/tests/projects/nuget/src/App/App.csproj +14 -0
  537. forceupdate-1.0.0/tests/projects/nuget/src/App/Greeter.cs +6 -0
  538. forceupdate-1.0.0/tests/projects/nuget/src/App/packages.lock.json +141 -0
  539. forceupdate-1.0.0/tests/projects/nuget/src/App.Tests/App.Tests.csproj +19 -0
  540. forceupdate-1.0.0/tests/projects/nuget/src/App.Tests/GreeterTests.cs +7 -0
  541. forceupdate-1.0.0/tests/projects/nuget/src/App.Tests/packages.lock.json +423 -0
  542. forceupdate-1.0.0/tests/projects/poetry/poetry.lock +405 -0
  543. forceupdate-1.0.0/tests/projects/poetry/pyproject.toml +21 -0
  544. forceupdate-1.0.0/tests/projects/scripts/helpers.py +1 -0
  545. forceupdate-1.0.0/tests/projects/scripts/imports.py +16 -0
  546. forceupdate-1.0.0/tests/projects/scripts/index.ts +12 -0
  547. forceupdate-1.0.0/tests/projects/scripts/locked.py +9 -0
  548. forceupdate-1.0.0/tests/projects/scripts/locked.py.lock +201 -0
  549. forceupdate-1.0.0/tests/projects/scripts/main.go +15 -0
  550. forceupdate-1.0.0/tests/projects/scripts/pep723.py +14 -0
  551. forceupdate-1.0.0/tests/test_advisories_packagist.py +208 -0
  552. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_checks.py +15 -1
  553. forceupdate-1.0.0/tests/test_checks_eol.py +350 -0
  554. forceupdate-1.0.0/tests/test_checks_runtimes.py +138 -0
  555. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_checks_vulns.py +7 -1
  556. forceupdate-1.0.0/tests/test_cli.py +593 -0
  557. forceupdate-1.0.0/tests/test_code_files.py +305 -0
  558. forceupdate-1.0.0/tests/test_config.py +520 -0
  559. forceupdate-1.0.0/tests/test_conftest.py +68 -0
  560. forceupdate-1.0.0/tests/test_downloads.py +281 -0
  561. forceupdate-1.0.0/tests/test_endoflife.py +161 -0
  562. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_engine.py +12 -2
  563. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_engine_check.py +16 -5
  564. forceupdate-1.0.0/tests/test_eol_project.py +219 -0
  565. forceupdate-1.0.0/tests/test_exclude_newer.py +92 -0
  566. forceupdate-1.0.0/tests/test_forges_accounts.py +436 -0
  567. forceupdate-1.0.0/tests/test_forges_bitbucket.py +691 -0
  568. forceupdate-1.0.0/tests/test_forges_git.py +357 -0
  569. forceupdate-1.0.0/tests/test_forges_github.py +623 -0
  570. forceupdate-1.0.0/tests/test_forges_gitlab.py +603 -0
  571. forceupdate-1.0.0/tests/test_forges_repos.py +303 -0
  572. forceupdate-1.0.0/tests/test_forges_requests.py +310 -0
  573. forceupdate-1.0.0/tests/test_go_projects.py +340 -0
  574. forceupdate-1.0.0/tests/test_java_projects.py +302 -0
  575. forceupdate-1.0.0/tests/test_lockfile_retry.py +452 -0
  576. forceupdate-1.0.0/tests/test_lockfiles.py +2606 -0
  577. forceupdate-1.0.0/tests/test_managed.py +188 -0
  578. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_manifests.py +40 -0
  579. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_net_cache.py +42 -1
  580. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_net_http.py +166 -1
  581. forceupdate-1.0.0/tests/test_nuget_projects.py +288 -0
  582. forceupdate-1.0.0/tests/test_nuget_references.py +336 -0
  583. forceupdate-1.0.0/tests/test_parsers_code.py +405 -0
  584. forceupdate-1.0.0/tests/test_parsers_go.py +394 -0
  585. forceupdate-1.0.0/tests/test_parsers_gradle.py +505 -0
  586. forceupdate-1.0.0/tests/test_parsers_imports.py +237 -0
  587. forceupdate-1.0.0/tests/test_parsers_maven.py +412 -0
  588. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_parsers_npm.py +127 -0
  589. forceupdate-1.0.0/tests/test_parsers_nuget.py +628 -0
  590. forceupdate-1.0.0/tests/test_parsers_php.py +434 -0
  591. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_parsers_python.py +20 -4
  592. forceupdate-1.0.0/tests/test_parsers_ruby.py +613 -0
  593. forceupdate-1.0.0/tests/test_parsers_runtimes.py +662 -0
  594. forceupdate-1.0.0/tests/test_parsers_rust.py +598 -0
  595. forceupdate-1.0.0/tests/test_pep723.py +206 -0
  596. forceupdate-1.0.0/tests/test_php_projects.py +342 -0
  597. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_planner.py +172 -2
  598. forceupdate-1.0.0/tests/test_preferences.py +324 -0
  599. forceupdate-1.0.0/tests/test_processes.py +148 -0
  600. forceupdate-1.0.0/tests/test_project_npm.py +564 -0
  601. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_registries.py +26 -3
  602. forceupdate-1.0.0/tests/test_registries_crates.py +199 -0
  603. forceupdate-1.0.0/tests/test_registries_goproxy.py +297 -0
  604. forceupdate-1.0.0/tests/test_registries_maven.py +309 -0
  605. forceupdate-1.0.0/tests/test_registries_nuget.py +199 -0
  606. forceupdate-1.0.0/tests/test_registries_packagist.py +212 -0
  607. forceupdate-1.0.0/tests/test_registries_rubygems.py +156 -0
  608. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_report.py +19 -0
  609. forceupdate-1.0.0/tests/test_report_synthesis.py +88 -0
  610. forceupdate-1.0.0/tests/test_requirements_exports.py +318 -0
  611. forceupdate-1.0.0/tests/test_robustness.py +334 -0
  612. forceupdate-1.0.0/tests/test_routing.py +267 -0
  613. forceupdate-1.0.0/tests/test_routing_cargo.py +306 -0
  614. forceupdate-1.0.0/tests/test_routing_composer.py +211 -0
  615. forceupdate-1.0.0/tests/test_routing_go.py +254 -0
  616. forceupdate-1.0.0/tests/test_routing_maven.py +370 -0
  617. forceupdate-1.0.0/tests/test_routing_npm.py +295 -0
  618. forceupdate-1.0.0/tests/test_routing_nuget.py +284 -0
  619. forceupdate-1.0.0/tests/test_routing_python.py +394 -0
  620. forceupdate-1.0.0/tests/test_routing_ruby.py +402 -0
  621. forceupdate-1.0.0/tests/test_ruby_projects.py +239 -0
  622. forceupdate-1.0.0/tests/test_rust_projects.py +232 -0
  623. forceupdate-1.0.0/tests/test_rust_version.py +118 -0
  624. forceupdate-1.0.0/tests/test_sources.py +344 -0
  625. forceupdate-1.0.0/tests/test_sources_code.py +140 -0
  626. forceupdate-1.0.0/tests/test_sources_forge.py +435 -0
  627. forceupdate-1.0.0/tests/test_tables_network.py +133 -0
  628. forceupdate-1.0.0/tests/test_update_constraints.py +508 -0
  629. forceupdate-1.0.0/tests/test_update_forge.py +449 -0
  630. forceupdate-1.0.0/tests/test_update_git.py +78 -0
  631. forceupdate-1.0.0/tests/test_update_local.py +95 -0
  632. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_versions.py +6 -4
  633. forceupdate-1.0.0/tests/test_versions_cargo.py +310 -0
  634. forceupdate-1.0.0/tests/test_versions_composer.py +462 -0
  635. forceupdate-1.0.0/tests/test_versions_go.py +182 -0
  636. forceupdate-1.0.0/tests/test_versions_maven.py +382 -0
  637. forceupdate-1.0.0/tests/test_versions_nuget.py +642 -0
  638. forceupdate-1.0.0/tests/test_versions_rubygems.py +262 -0
  639. forceupdate-1.0.0/tests/test_web_accounts.py +705 -0
  640. forceupdate-1.0.0/tests/test_web_api.py +912 -0
  641. forceupdate-1.0.0/tests/test_web_bitbucket.py +330 -0
  642. forceupdate-1.0.0/tests/test_web_gitlab.py +388 -0
  643. forceupdate-1.0.0/tests/test_web_proposals.py +529 -0
  644. forceupdate-1.0.0/tests/test_web_repositories.py +486 -0
  645. forceupdate-1.0.0/tests/test_web_security.py +299 -0
  646. forceupdate-1.0.0/tests/test_web_server.py +489 -0
  647. forceupdate-1.0.0/tests/test_web_workdirs.py +156 -0
  648. forceupdate-1.0.0/tests/test_writers.py +1374 -0
  649. forceupdate-1.0.0/tests/test_yaml_spans.py +80 -0
  650. forceupdate-0.1.0/PKG-INFO +0 -79
  651. forceupdate-0.1.0/README.md +0 -43
  652. forceupdate-0.1.0/src/forceupdate/checks/__init__.py +0 -49
  653. forceupdate-0.1.0/src/forceupdate/checks/outdated.py +0 -183
  654. forceupdate-0.1.0/src/forceupdate/cli.py +0 -309
  655. forceupdate-0.1.0/src/forceupdate/engine.py +0 -313
  656. forceupdate-0.1.0/src/forceupdate/parsers/__init__.py +0 -43
  657. forceupdate-0.1.0/src/forceupdate/registries/__init__.py +0 -52
  658. forceupdate-0.1.0/src/forceupdate/report/json.py +0 -34
  659. forceupdate-0.1.0/src/forceupdate/sources/local.py +0 -183
  660. forceupdate-0.1.0/src/forceupdate/update/__init__.py +0 -8
  661. forceupdate-0.1.0/tests/conftest.py +0 -187
  662. forceupdate-0.1.0/tests/fixtures/osv/queries.json +0 -321
  663. forceupdate-0.1.0/tests/fixtures/record.py +0 -160
  664. forceupdate-0.1.0/tests/projects/README.md +0 -29
  665. forceupdate-0.1.0/tests/test_cli.py +0 -299
  666. forceupdate-0.1.0/tests/test_conftest.py +0 -35
  667. forceupdate-0.1.0/tests/test_sources.py +0 -169
  668. forceupdate-0.1.0/tests/test_update_constraints.py +0 -184
  669. {forceupdate-0.1.0 → forceupdate-1.0.0}/LICENSE +0 -0
  670. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/__init__.py +0 -0
  671. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/advisories/cvss.py +0 -0
  672. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/detect/__init__.py +0 -0
  673. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/base.py +0 -0
  674. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/json_spans.py +0 -0
  675. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/parsers/toml_spans.py +0 -0
  676. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/sources/__init__.py +0 -0
  677. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/versions/npm.py +0 -0
  678. {forceupdate-0.1.0 → forceupdate-1.0.0}/src/forceupdate/versions/pypi.py +0 -0
  679. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/npm/@hapi__joi.json +0 -0
  680. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/npm/colors.json +0 -0
  681. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/npm/crossenv.json +0 -0
  682. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/npm/left-pad.json +0 -0
  683. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/npm/lodash.json +0 -0
  684. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-29mw-wpgm-hmr9.json +0 -0
  685. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-29vq-49wr-vm6x.json +0 -0
  686. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-2g68-c3qc-8985.json +0 -0
  687. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-35jh-r3h4-6jhm.json +0 -0
  688. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-462w-v97r-4m45.json +0 -0
  689. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-562c-5r94-xh97.json +0 -0
  690. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-5wv5-4vpf-pj6m.json +0 -0
  691. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-652x-xj99-gmcc.json +0 -0
  692. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-68rp-wp8r-4726.json +0 -0
  693. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-87hc-h4r5-73f7.json +0 -0
  694. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-9hjg-9r4m-mvj7.json +0 -0
  695. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-9wx4-h78v-vm56.json +0 -0
  696. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-9x64-5r7x-2q53.json +0 -0
  697. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-c2m4-w5hm-vqjw.json +0 -0
  698. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-cfj3-7x9c-4p3h.json +0 -0
  699. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-cpwx-vrp4-4pq7.json +0 -0
  700. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-f23m-r3pf-42rh.json +0 -0
  701. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-f9vj-2wh5-fj8j.json +0 -0
  702. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-g3rq-g295-4j3m.json +0 -0
  703. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-g6x2-hccm-hh4m.json +0 -0
  704. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-gc5v-m9x4-r6x2.json +0 -0
  705. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-gq9m-qvpx-68hc.json +0 -0
  706. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-h5c8-rqwp-cp95.json +0 -0
  707. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-h75v-3vvj-5mfj.json +0 -0
  708. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-hgf8-39gv-g3f2.json +0 -0
  709. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-j544-7q9p-6xp8.json +0 -0
  710. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-m2qf-hxjv-5gpq.json +0 -0
  711. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-mh6f-8j2x-4483.json +0 -0
  712. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-p6mc-m468-83gw.json +0 -0
  713. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-pjwm-rvh2-c87w.json +0 -0
  714. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-px8h-6qxv-m22q.json +0 -0
  715. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-q2x7-8rv6-6q7h.json +0 -0
  716. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-r5fr-rjxr-66jc.json +0 -0
  717. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-x84v-xcm2-53pg.json +0 -0
  718. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-xg9f-g7g7-2323.json +0 -0
  719. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/GHSA-xxjr-mmjv-4gpg.json +0 -0
  720. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/MAL-2025-20690.json +0 -0
  721. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2014-13.json +0 -0
  722. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2014-14.json +0 -0
  723. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2015-17.json +0 -0
  724. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2018-28.json +0 -0
  725. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2018-66.json +0 -0
  726. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2019-140.json +0 -0
  727. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2019-179.json +0 -0
  728. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2019-217.json +0 -0
  729. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2021-66.json +0 -0
  730. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2022-203.json +0 -0
  731. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2023-221.json +0 -0
  732. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2023-57.json +0 -0
  733. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2023-58.json +0 -0
  734. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2023-62.json +0 -0
  735. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1065.json +0 -0
  736. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1471.json +0 -0
  737. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1473.json +0 -0
  738. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1474.json +0 -0
  739. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1475.json +0 -0
  740. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1872.json +0 -0
  741. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-1873.json +0 -0
  742. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2043.json +0 -0
  743. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2044.json +0 -0
  744. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2045.json +0 -0
  745. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2046.json +0 -0
  746. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2151.json +0 -0
  747. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2275.json +0 -0
  748. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-2320.json +0 -0
  749. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/osv/vulns/PYSEC-2026-4312.json +0 -0
  750. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/pypi/aioredis.json +0 -0
  751. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/pypi/flask.json +0 -0
  752. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/pypi/jinja2.json +0 -0
  753. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/pypi/requests.json +0 -0
  754. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/fixtures/pypi/werkzeug.json +0 -0
  755. {forceupdate-0.1.0/tests/projects → forceupdate-1.0.0/tests/projects/exports}/poetry/poetry.lock +0 -0
  756. {forceupdate-0.1.0/tests/projects → forceupdate-1.0.0/tests/projects/exports}/poetry/pyproject.toml +0 -0
  757. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm/package-lock.json +0 -0
  758. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm/package.json +0 -0
  759. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm/vendor/local-lib/package.json +0 -0
  760. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm-workspace/package-lock.json +0 -0
  761. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm-workspace/package.json +0 -0
  762. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm-workspace/packages/a/package.json +0 -0
  763. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm-workspace/packages/b/package.json +0 -0
  764. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/npm-workspace/tools/script/package.json +0 -0
  765. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip/constraints.txt +0 -0
  766. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip/requirements-dev.txt +0 -0
  767. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip/requirements.txt +0 -0
  768. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip-tools/requirements-dev.in +0 -0
  769. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip-tools/requirements-dev.txt +0 -0
  770. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip-tools/requirements.in +0 -0
  771. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pip-tools/requirements.txt +0 -0
  772. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pipenv/Pipfile +0 -0
  773. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pipenv/Pipfile.lock +0 -0
  774. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm-catalog/package.json +0 -0
  775. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm-catalog/packages/app/package.json +0 -0
  776. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm-catalog/pnpm-lock.yaml +0 -0
  777. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm-catalog/pnpm-workspace.yaml +0 -0
  778. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/package.json +0 -0
  779. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/packages/app/package.json +0 -0
  780. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/packages/excluded/package.json +0 -0
  781. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/packages/lib/package.json +0 -0
  782. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/pnpm-lock.yaml +0 -0
  783. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/pnpm9/pnpm-workspace.yaml +0 -0
  784. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/setuptools/pyproject.toml +0 -0
  785. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/setuptools/setup.cfg +0 -0
  786. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/setuptools/setup.py +0 -0
  787. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/uv/packages/legacy/pyproject.toml +0 -0
  788. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/uv/packages/lib/pyproject.toml +0 -0
  789. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/uv/pyproject.toml +0 -0
  790. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/uv/tools/script/pyproject.toml +0 -0
  791. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/uv/uv.lock +0 -0
  792. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/vulnerable/package-lock.json +0 -0
  793. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/vulnerable/package.json +0 -0
  794. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/vulnerable/requirements.in +0 -0
  795. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/vulnerable/requirements.txt +0 -0
  796. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn1/package.json +0 -0
  797. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn1/vendor/local-lib/package.json +0 -0
  798. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn1/yarn.lock +0 -0
  799. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn4/package.json +0 -0
  800. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn4/packages/lib/package.json +0 -0
  801. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/projects/yarn4/yarn.lock +0 -0
  802. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_cvss.py +0 -0
  803. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_json_spans.py +0 -0
  804. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_languages.py +0 -0
  805. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_models.py +0 -0
  806. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_npm_projects.py +0 -0
  807. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_osv.py +0 -0
  808. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_python_projects.py +0 -0
  809. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_registries_npm.py +0 -0
  810. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_registries_pypi.py +0 -0
  811. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_toml_spans.py +0 -0
  812. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_versions_npm.py +0 -0
  813. {forceupdate-0.1.0 → forceupdate-1.0.0}/tests/test_versions_pypi.py +0 -0
@@ -10,3 +10,6 @@ htmlcov/
10
10
  dist/
11
11
  build/
12
12
  *.egg-info/
13
+
14
+ # Le front construit (npm run build) : livré dans le paquet, pas versionné
15
+ src/forceupdate/web/static/
@@ -0,0 +1,192 @@
1
+ Metadata-Version: 2.5
2
+ Name: forceupdate
3
+ Version: 1.0.0
4
+ Summary: Trouve les dépendances à mettre à jour (versions, failles, fins de vie) et fait les mises à jour : en local, ou par pull request sur GitHub, GitLab et Bitbucket.
5
+ Project-URL: Homepage, https://github.com/Pauzzle-ozz/forceupdate
6
+ Project-URL: Repository, https://github.com/Pauzzle-ozz/forceupdate
7
+ Project-URL: Issues, https://github.com/Pauzzle-ozz/forceupdate/issues
8
+ Author: Pauzzle
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: dependencies,end-of-life,osv,outdated,pull-request,update,vulnerabilities
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Natural Language :: French
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Security
25
+ Classifier: Topic :: Software Development
26
+ Classifier: Topic :: System :: Software Distribution
27
+ Classifier: Topic :: Utilities
28
+ Requires-Python: >=3.11
29
+ Requires-Dist: fastapi>=0.162.0
30
+ Requires-Dist: httpx>=0.28.1
31
+ Requires-Dist: keyring>=25.7.0
32
+ Requires-Dist: packaging>=26.3
33
+ Requires-Dist: platformdirs>=4.13.6
34
+ Requires-Dist: pyyaml>=6.0.3
35
+ Requires-Dist: rich>=15.0.0
36
+ Requires-Dist: truststore>=0.10.5
37
+ Requires-Dist: typer>=0.27.3
38
+ Requires-Dist: uvicorn>=0.54.0
39
+ Description-Content-Type: text/markdown
40
+
41
+ # forceupdate
42
+
43
+ On donne du code à forceupdate : un dossier, un fichier, ou tous ses dépôts GitHub, GitLab et
44
+ Bitbucket. Il repère les langages et les dépendances, et dit ce qui doit être mis à jour :
45
+ failles connues, fins de vie, versions retirées ou dépréciées, versions plus récentes. Puis il
46
+ fait les mises à jour cochées : en local, il réécrit les fichiers et régénère les lockfiles ;
47
+ sur une forge, il ouvre une pull request par dépôt.
48
+
49
+ Tout se passe dans une interface web qui tourne sur son ordinateur (`forceupdate ui`), ou en
50
+ ligne de commande (`forceupdate scan`, `forceupdate update`) pour les scripts et la CI. Huit
51
+ écosystèmes : Python, JavaScript (npm, Yarn, pnpm), Rust, Go, PHP, Ruby, Java (Maven, Gradle)
52
+ et .NET. Interface et messages en français. Licence MIT.
53
+
54
+ ![Le rapport d'un dossier : 28 failles, 2 versions plus récentes, la gravité des constats, le projet et ses fichiers](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/rapport.png)
55
+
56
+ ## Installation
57
+
58
+ Avec [uv](https://docs.astral.sh/uv/) :
59
+
60
+ ```bash
61
+ uv tool install forceupdate
62
+ ```
63
+
64
+ ou `pipx install forceupdate`. Python 3.11 ou plus récent ; Windows, Linux ou macOS. L'interface
65
+ est livrée dans le paquet : node n'est pas nécessaire.
66
+
67
+ Ce qu'il faut en plus, selon l'usage :
68
+
69
+ - **git**, pour ouvrir des PR (forceupdate clone, commite et pousse) et pour le garde-fou des
70
+ mises à jour locales ;
71
+ - **l'outil de chaque lockfile** (npm, pnpm, Yarn, uv, Poetry, PDM, pipenv, pip-compile, cargo,
72
+ go, Composer, Bundler, dotnet), pour le régénérer ; sans lui, forceupdate réécrit les
73
+ manifestes et donne la commande à lancer.
74
+
75
+ ## Démarrer
76
+
77
+ ```bash
78
+ forceupdate ui
79
+ ```
80
+
81
+ Le serveur démarre sur `127.0.0.1` (jamais sur le réseau), et le navigateur s'ouvre sur
82
+ l'interface. L'adresse porte un jeton de session : seul qui l'a peut s'en servir. Ctrl+C
83
+ l'arrête.
84
+
85
+ 1. **Analyser** : choisir un dossier ou un fichier de l'ordinateur (ou le déposer sur la page).
86
+ Le rapport range les constats du plus grave au moins grave, avec le détail de chaque
87
+ dépendance.
88
+ 2. **Mettre à jour** : les mises à jour sûres sont cochées d'office (correctifs, mineures,
89
+ corrections de failles), les majeures sont proposées sans être cochées (sauf si on le
90
+ règle). On lit le diff de chaque fichier et les lockfiles qui seront régénérés, puis on
91
+ applique.
92
+ 3. **Mes dépôts** : connecter son compte GitHub, GitLab ou Bitbucket, analyser tous ses dépôts
93
+ sans les cloner, puis ouvrir une PR (une MR sur GitLab) par dépôt.
94
+
95
+ ![L'écran de mise à jour : pour chaque paquet, les versions possibles et ce qu'elles corrigent ; à droite, le récapitulatif](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/mise-a-jour.png)
96
+
97
+ ![Mes dépôts, en thème sombre : la synthèse de tous les dépôts du compte et l'état de chacun](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/depots.png)
98
+
99
+ Avant l'envoi, le récapitulatif dit ce que chaque PR contiendra ; rien ne part avant
100
+ « Envoyer ». La PR vit sur la branche `forceupdate/dependencies`, jamais sur la branche par
101
+ défaut ; relancé, forceupdate met à jour la même PR.
102
+
103
+ ![Le récapitulatif des PR : les mises à jour du dépôt, les fichiers réécrits, les lockfiles régénérés, et un dépôt sauté faute de droit de push](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/pr-recapitulatif.png)
104
+
105
+ ![Une PR ouverte par forceupdate sur un dépôt de test : sa description, rendue par GitHub, liste les mises à jour, les failles corrigées et les lockfiles régénérés](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/pr-github.png)
106
+
107
+ Les captures viennent du serveur des tests de bout en bout (données enregistrées, forge
108
+ simulée), sauf la dernière : la description de la PR #1 du dépôt de test, rendue par GitHub.
109
+
110
+ ## En ligne de commande
111
+
112
+ ```bash
113
+ forceupdate scan . # le rapport dans le terminal
114
+ forceupdate scan . --format json -o rapport.json # ou --format md, ou csv (pour un tableur) ; en UTF-8
115
+ forceupdate scan . --fail-on vuln # code 1 si une faille est connue
116
+
117
+ forceupdate update . --dry-run # le plan et le diff, sans rien écrire
118
+ forceupdate update . # correctifs et mineures, après confirmation
119
+ forceupdate update . --security-only --yes # seulement les failles, sans demander
120
+ ```
121
+
122
+ Codes de retour : 0 rien à signaler, 1 seuil de `--fail-on` atteint, 2 erreur (dont un refus
123
+ du garde-fou git, ou un lockfile que son outil n'a pas pu régénérer). Toutes les options sont
124
+ dans [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md#la-ligne-de-commande).
125
+
126
+ ## Ce qui part sur le réseau
127
+
128
+ forceupdate ne lit le code que sur l'ordinateur. Il envoie les noms et les versions des
129
+ paquets aux registres (PyPI, npm, crates.io, proxy Go, Packagist, RubyGems, Maven Central,
130
+ nuget.org, ou les registres privés déclarés), à [OSV](https://osv.dev) pour les failles, et
131
+ les noms des runtimes et des frameworks à [endoflife.date](https://endoflife.date). Un
132
+ paquet privé n'est jamais demandé au registre public ni à OSV. Les tokens des forges restent
133
+ dans le trousseau du système, jamais dans le navigateur.
134
+
135
+ ## Les écosystèmes
136
+
137
+ | Écosystème | Manifestes | Lockfiles régénérés par |
138
+ |---|---|---|
139
+ | Python | `requirements*.txt` et `.in`, `pyproject.toml` (PEP 621, Poetry, uv, PDM), `Pipfile`, `setup.cfg`, le bloc PEP 723 d'un script | uv, Poetry, PDM, pipenv, pip-compile |
140
+ | JavaScript | `package.json`, `pnpm-workspace.yaml` | npm, pnpm, Yarn 1 et 2+ |
141
+ | Rust | `Cargo.toml` | cargo |
142
+ | Go | `go.mod`, `go.work` | `go mod tidy` |
143
+ | PHP | `composer.json` | Composer |
144
+ | Ruby | `Gemfile`, `gems.rb`, `.gemspec` | Bundler |
145
+ | Java | `pom.xml`, `build.gradle(.kts)`, `settings.gradle(.kts)`, `libs.versions.toml` | aucun : Maven et Gradle ne sont jamais lancés |
146
+ | .NET | `.csproj`, `.fsproj`, `.vbproj`, `packages.config`, `Directory.Build.props`, `Directory.Packages.props` | `dotnet restore` |
147
+
148
+ Les manifestes sont lus sans être exécutés (`setup.py` n'est donc pas lu, ni un script Gradle
149
+ évalué), et les lockfiles régénérés sans les scripts du projet. Ce qu'un outil exécute quand
150
+ même, faute d'option pour l'en empêcher (le `Gemfile` pour Bundler, le code de construction
151
+ d'un paquet publié sans wheel pour uv…), est dit dans le plan, avant d'appliquer.
152
+
153
+ ### Les principales limites
154
+
155
+ - **Python** : `setup.py` n'est pas lu (il faudrait l'exécuter) ; pipenv re-résout tout, et
156
+ peut monter plus haut que la version choisie ; une contrainte continuée sur la ligne suivante
157
+ se réécrit à la main.
158
+ - **JavaScript** : Yarn monte à la plus haute version que la contrainte permet ; un intervalle
159
+ dépassé, `*` ou une étiquette se réécrivent à la main.
160
+ - **Rust** : sans `rust-version` ni `rust-toolchain`, la version de Rust du projet n'est pas
161
+ connue (forceupdate ne lance pas `rustc`) ; un index de registre en git n'est pas lu.
162
+ - **Go** : les `go.mod` des dépendances ne sont pas lus (une indirecte peut être construite
163
+ plus haut) ; une majeure est un autre module, à faire à la main (`go get …/vN`).
164
+ - **PHP** : seules des versions stables sont proposées ; `vendor/` n'est pas refait (lancer
165
+ `composer install` ensuite).
166
+ - **Ruby** : le `Gemfile` est lu, pas exécuté : une condition n'est pas évaluée, le fichier
167
+ d'un `eval_gemfile` n'est pas lu.
168
+ - **Java** : aucun lockfile n'est régénéré (Maven et Gradle ne sont jamais lancés) ; une
169
+ version de `buildSrc`, d'un catalogue publié ou d'une expression ne se lit pas ; une version
170
+ gérée par un parent ou un BOM se met à jour avec lui, à la main.
171
+ - **.NET** : les conditions MSBuild ne sont pas évaluées ; NuGet prend la plus basse version
172
+ qui convient, donc une mise à jour réécrit la borne basse.
173
+
174
+ Toutes les limites, écosystème par écosystème : [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md#les-écosystèmes).
175
+
176
+ ## Documentation
177
+
178
+ - [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md) : l'interface écran par écran, toutes les commandes et options,
179
+ la configuration, chaque écosystème et ses limites, les registres privés, le réseau
180
+ d'entreprise ;
181
+ - [docs/FORGES.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/FORGES.md) : connecter GitHub, GitLab et Bitbucket, les droits, ce que
182
+ contient une PR, enregistrer sa propre application OAuth ;
183
+ - [docs/JSON_FORMAT.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/JSON_FORMAT.md) : le format du rapport JSON, et l'API de
184
+ l'interface ;
185
+ - [CHANGELOG.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/CHANGELOG.md) : les versions.
186
+
187
+ Pour contribuer : [PLAN.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/PLAN.md) (l'avancement), [docs/BRIEF.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/BRIEF.md) (les
188
+ décisions), et les commandes de développement dans [CLAUDE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/CLAUDE.md#commandes).
189
+
190
+ ## Licence
191
+
192
+ [MIT](https://github.com/Pauzzle-ozz/forceupdate/blob/main/LICENSE), © 2026 Pauzzle.
@@ -0,0 +1,152 @@
1
+ # forceupdate
2
+
3
+ On donne du code à forceupdate : un dossier, un fichier, ou tous ses dépôts GitHub, GitLab et
4
+ Bitbucket. Il repère les langages et les dépendances, et dit ce qui doit être mis à jour :
5
+ failles connues, fins de vie, versions retirées ou dépréciées, versions plus récentes. Puis il
6
+ fait les mises à jour cochées : en local, il réécrit les fichiers et régénère les lockfiles ;
7
+ sur une forge, il ouvre une pull request par dépôt.
8
+
9
+ Tout se passe dans une interface web qui tourne sur son ordinateur (`forceupdate ui`), ou en
10
+ ligne de commande (`forceupdate scan`, `forceupdate update`) pour les scripts et la CI. Huit
11
+ écosystèmes : Python, JavaScript (npm, Yarn, pnpm), Rust, Go, PHP, Ruby, Java (Maven, Gradle)
12
+ et .NET. Interface et messages en français. Licence MIT.
13
+
14
+ ![Le rapport d'un dossier : 28 failles, 2 versions plus récentes, la gravité des constats, le projet et ses fichiers](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/rapport.png)
15
+
16
+ ## Installation
17
+
18
+ Avec [uv](https://docs.astral.sh/uv/) :
19
+
20
+ ```bash
21
+ uv tool install forceupdate
22
+ ```
23
+
24
+ ou `pipx install forceupdate`. Python 3.11 ou plus récent ; Windows, Linux ou macOS. L'interface
25
+ est livrée dans le paquet : node n'est pas nécessaire.
26
+
27
+ Ce qu'il faut en plus, selon l'usage :
28
+
29
+ - **git**, pour ouvrir des PR (forceupdate clone, commite et pousse) et pour le garde-fou des
30
+ mises à jour locales ;
31
+ - **l'outil de chaque lockfile** (npm, pnpm, Yarn, uv, Poetry, PDM, pipenv, pip-compile, cargo,
32
+ go, Composer, Bundler, dotnet), pour le régénérer ; sans lui, forceupdate réécrit les
33
+ manifestes et donne la commande à lancer.
34
+
35
+ ## Démarrer
36
+
37
+ ```bash
38
+ forceupdate ui
39
+ ```
40
+
41
+ Le serveur démarre sur `127.0.0.1` (jamais sur le réseau), et le navigateur s'ouvre sur
42
+ l'interface. L'adresse porte un jeton de session : seul qui l'a peut s'en servir. Ctrl+C
43
+ l'arrête.
44
+
45
+ 1. **Analyser** : choisir un dossier ou un fichier de l'ordinateur (ou le déposer sur la page).
46
+ Le rapport range les constats du plus grave au moins grave, avec le détail de chaque
47
+ dépendance.
48
+ 2. **Mettre à jour** : les mises à jour sûres sont cochées d'office (correctifs, mineures,
49
+ corrections de failles), les majeures sont proposées sans être cochées (sauf si on le
50
+ règle). On lit le diff de chaque fichier et les lockfiles qui seront régénérés, puis on
51
+ applique.
52
+ 3. **Mes dépôts** : connecter son compte GitHub, GitLab ou Bitbucket, analyser tous ses dépôts
53
+ sans les cloner, puis ouvrir une PR (une MR sur GitLab) par dépôt.
54
+
55
+ ![L'écran de mise à jour : pour chaque paquet, les versions possibles et ce qu'elles corrigent ; à droite, le récapitulatif](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/mise-a-jour.png)
56
+
57
+ ![Mes dépôts, en thème sombre : la synthèse de tous les dépôts du compte et l'état de chacun](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/depots.png)
58
+
59
+ Avant l'envoi, le récapitulatif dit ce que chaque PR contiendra ; rien ne part avant
60
+ « Envoyer ». La PR vit sur la branche `forceupdate/dependencies`, jamais sur la branche par
61
+ défaut ; relancé, forceupdate met à jour la même PR.
62
+
63
+ ![Le récapitulatif des PR : les mises à jour du dépôt, les fichiers réécrits, les lockfiles régénérés, et un dépôt sauté faute de droit de push](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/pr-recapitulatif.png)
64
+
65
+ ![Une PR ouverte par forceupdate sur un dépôt de test : sa description, rendue par GitHub, liste les mises à jour, les failles corrigées et les lockfiles régénérés](https://raw.githubusercontent.com/Pauzzle-ozz/forceupdate/main/docs/images/pr-github.png)
66
+
67
+ Les captures viennent du serveur des tests de bout en bout (données enregistrées, forge
68
+ simulée), sauf la dernière : la description de la PR #1 du dépôt de test, rendue par GitHub.
69
+
70
+ ## En ligne de commande
71
+
72
+ ```bash
73
+ forceupdate scan . # le rapport dans le terminal
74
+ forceupdate scan . --format json -o rapport.json # ou --format md, ou csv (pour un tableur) ; en UTF-8
75
+ forceupdate scan . --fail-on vuln # code 1 si une faille est connue
76
+
77
+ forceupdate update . --dry-run # le plan et le diff, sans rien écrire
78
+ forceupdate update . # correctifs et mineures, après confirmation
79
+ forceupdate update . --security-only --yes # seulement les failles, sans demander
80
+ ```
81
+
82
+ Codes de retour : 0 rien à signaler, 1 seuil de `--fail-on` atteint, 2 erreur (dont un refus
83
+ du garde-fou git, ou un lockfile que son outil n'a pas pu régénérer). Toutes les options sont
84
+ dans [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md#la-ligne-de-commande).
85
+
86
+ ## Ce qui part sur le réseau
87
+
88
+ forceupdate ne lit le code que sur l'ordinateur. Il envoie les noms et les versions des
89
+ paquets aux registres (PyPI, npm, crates.io, proxy Go, Packagist, RubyGems, Maven Central,
90
+ nuget.org, ou les registres privés déclarés), à [OSV](https://osv.dev) pour les failles, et
91
+ les noms des runtimes et des frameworks à [endoflife.date](https://endoflife.date). Un
92
+ paquet privé n'est jamais demandé au registre public ni à OSV. Les tokens des forges restent
93
+ dans le trousseau du système, jamais dans le navigateur.
94
+
95
+ ## Les écosystèmes
96
+
97
+ | Écosystème | Manifestes | Lockfiles régénérés par |
98
+ |---|---|---|
99
+ | Python | `requirements*.txt` et `.in`, `pyproject.toml` (PEP 621, Poetry, uv, PDM), `Pipfile`, `setup.cfg`, le bloc PEP 723 d'un script | uv, Poetry, PDM, pipenv, pip-compile |
100
+ | JavaScript | `package.json`, `pnpm-workspace.yaml` | npm, pnpm, Yarn 1 et 2+ |
101
+ | Rust | `Cargo.toml` | cargo |
102
+ | Go | `go.mod`, `go.work` | `go mod tidy` |
103
+ | PHP | `composer.json` | Composer |
104
+ | Ruby | `Gemfile`, `gems.rb`, `.gemspec` | Bundler |
105
+ | Java | `pom.xml`, `build.gradle(.kts)`, `settings.gradle(.kts)`, `libs.versions.toml` | aucun : Maven et Gradle ne sont jamais lancés |
106
+ | .NET | `.csproj`, `.fsproj`, `.vbproj`, `packages.config`, `Directory.Build.props`, `Directory.Packages.props` | `dotnet restore` |
107
+
108
+ Les manifestes sont lus sans être exécutés (`setup.py` n'est donc pas lu, ni un script Gradle
109
+ évalué), et les lockfiles régénérés sans les scripts du projet. Ce qu'un outil exécute quand
110
+ même, faute d'option pour l'en empêcher (le `Gemfile` pour Bundler, le code de construction
111
+ d'un paquet publié sans wheel pour uv…), est dit dans le plan, avant d'appliquer.
112
+
113
+ ### Les principales limites
114
+
115
+ - **Python** : `setup.py` n'est pas lu (il faudrait l'exécuter) ; pipenv re-résout tout, et
116
+ peut monter plus haut que la version choisie ; une contrainte continuée sur la ligne suivante
117
+ se réécrit à la main.
118
+ - **JavaScript** : Yarn monte à la plus haute version que la contrainte permet ; un intervalle
119
+ dépassé, `*` ou une étiquette se réécrivent à la main.
120
+ - **Rust** : sans `rust-version` ni `rust-toolchain`, la version de Rust du projet n'est pas
121
+ connue (forceupdate ne lance pas `rustc`) ; un index de registre en git n'est pas lu.
122
+ - **Go** : les `go.mod` des dépendances ne sont pas lus (une indirecte peut être construite
123
+ plus haut) ; une majeure est un autre module, à faire à la main (`go get …/vN`).
124
+ - **PHP** : seules des versions stables sont proposées ; `vendor/` n'est pas refait (lancer
125
+ `composer install` ensuite).
126
+ - **Ruby** : le `Gemfile` est lu, pas exécuté : une condition n'est pas évaluée, le fichier
127
+ d'un `eval_gemfile` n'est pas lu.
128
+ - **Java** : aucun lockfile n'est régénéré (Maven et Gradle ne sont jamais lancés) ; une
129
+ version de `buildSrc`, d'un catalogue publié ou d'une expression ne se lit pas ; une version
130
+ gérée par un parent ou un BOM se met à jour avec lui, à la main.
131
+ - **.NET** : les conditions MSBuild ne sont pas évaluées ; NuGet prend la plus basse version
132
+ qui convient, donc une mise à jour réécrit la borne basse.
133
+
134
+ Toutes les limites, écosystème par écosystème : [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md#les-écosystèmes).
135
+
136
+ ## Documentation
137
+
138
+ - [docs/USAGE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/USAGE.md) : l'interface écran par écran, toutes les commandes et options,
139
+ la configuration, chaque écosystème et ses limites, les registres privés, le réseau
140
+ d'entreprise ;
141
+ - [docs/FORGES.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/FORGES.md) : connecter GitHub, GitLab et Bitbucket, les droits, ce que
142
+ contient une PR, enregistrer sa propre application OAuth ;
143
+ - [docs/JSON_FORMAT.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/JSON_FORMAT.md) : le format du rapport JSON, et l'API de
144
+ l'interface ;
145
+ - [CHANGELOG.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/CHANGELOG.md) : les versions.
146
+
147
+ Pour contribuer : [PLAN.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/PLAN.md) (l'avancement), [docs/BRIEF.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/docs/BRIEF.md) (les
148
+ décisions), et les commandes de développement dans [CLAUDE.md](https://github.com/Pauzzle-ozz/forceupdate/blob/main/CLAUDE.md#commandes).
149
+
150
+ ## Licence
151
+
152
+ [MIT](https://github.com/Pauzzle-ozz/forceupdate/blob/main/LICENSE), © 2026 Pauzzle.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "forceupdate"
3
- version = "0.1.0"
3
+ version = "1.0.0"
4
4
  description = "Trouve les dépendances à mettre à jour (versions, failles, fins de vie) et fait les mises à jour : en local, ou par pull request sur GitHub, GitLab et Bitbucket."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -17,7 +17,7 @@ keywords = [
17
17
  "pull-request",
18
18
  ]
19
19
  classifiers = [
20
- "Development Status :: 2 - Pre-Alpha",
20
+ "Development Status :: 5 - Production/Stable",
21
21
  "Environment :: Console",
22
22
  "Environment :: Web Environment",
23
23
  "Intended Audience :: Developers",
@@ -35,12 +35,16 @@ classifiers = [
35
35
  "Topic :: Utilities",
36
36
  ]
37
37
  dependencies = [
38
+ "fastapi>=0.162.0",
38
39
  "httpx>=0.28.1",
40
+ "keyring>=25.7.0",
39
41
  "packaging>=26.3",
40
42
  "platformdirs>=4.13.6",
41
43
  "pyyaml>=6.0.3",
42
44
  "rich>=15.0.0",
45
+ "truststore>=0.10.5",
43
46
  "typer>=0.27.3",
47
+ "uvicorn>=0.54.0",
44
48
  ]
45
49
 
46
50
  [project.urls]
@@ -49,10 +53,11 @@ Repository = "https://github.com/Pauzzle-ozz/forceupdate"
49
53
  Issues = "https://github.com/Pauzzle-ozz/forceupdate/issues"
50
54
 
51
55
  [project.scripts]
52
- forceupdate = "forceupdate.cli:app"
56
+ forceupdate = "forceupdate.cli:run"
53
57
 
54
58
  [dependency-groups]
55
59
  dev = [
60
+ "httpx2>=2.16.0",
56
61
  "pytest>=9.1.1",
57
62
  "respx>=0.23.1",
58
63
  "ruff>=0.17.3",
@@ -64,9 +69,13 @@ build-backend = "hatchling.build"
64
69
 
65
70
  [tool.hatch.build.targets.wheel]
66
71
  packages = ["src/forceupdate"]
72
+ # Le front construit (npm run build), ignoré par git mais livré : pas besoin de node pour
73
+ # utiliser l'outil.
74
+ artifacts = ["src/forceupdate/web/static/"]
67
75
 
68
76
  [tool.hatch.build.targets.sdist]
69
77
  include = ["/src", "/tests"]
78
+ artifacts = ["src/forceupdate/web/static/"]
70
79
 
71
80
  [tool.ruff]
72
81
  line-length = 100
@@ -1,5 +1,5 @@
1
1
  """``python -m forceupdate`` : la même chose que la commande ``forceupdate``."""
2
2
 
3
- from forceupdate.cli import app
3
+ from forceupdate.cli import run
4
4
 
5
- app(prog_name="forceupdate")
5
+ run()
@@ -2,6 +2,8 @@
2
2
 
3
3
  - ``osv.py`` : le client d'OSV (``Osv``), et ``Advisory``, un avis réduit à ce qui sert,
4
4
  avec la version qui corrige la faille (``Advisory.fixed_in``) ;
5
+ - ``packagist.py`` : les avis de Packagist (GitHub et FriendsOfPHP, ceux de ``composer audit``),
6
+ ajoutés à ceux d'OSV pour les paquets PHP (E34) ;
5
7
  - ``cvss.py`` : le score CVSS 3 d'un vecteur, et la gravité qui va avec.
6
8
 
7
9
  Les constats qu'on en tire sont dans ``checks/vulns.py``, qui ne parle pas au réseau.
@@ -17,6 +19,7 @@ from forceupdate.advisories.osv import (
17
19
  Vulnerabilities,
18
20
  parse_vuln,
19
21
  )
22
+ from forceupdate.advisories.packagist import PackagistAdvisories
20
23
 
21
24
  __all__ = [
22
25
  "Advisory",
@@ -24,6 +27,7 @@ __all__ = [
24
27
  "AffectedRange",
25
28
  "Osv",
26
29
  "OsvError",
30
+ "PackagistAdvisories",
27
31
  "Query",
28
32
  "Vulnerabilities",
29
33
  "parse_vuln",
@@ -127,10 +127,14 @@ class Advisory:
127
127
  unavailable: str | None = None
128
128
  """Pourquoi l'avis complet n'a pas pu être lu (réseau, hors ligne…) ; ``None`` s'il l'a
129
129
  été. Un avis indisponible reste une faille : on n'en connaît que l'identifiant."""
130
+ link: str | None = None
131
+ """La page de l'avis quand il ne vient pas d'OSV (un avis de Packagist, E34)."""
130
132
 
131
133
  @property
132
134
  def url(self) -> str:
133
- """La page de l'avis sur osv.dev."""
135
+ """La page de l'avis : sur osv.dev, ou celle que donne sa base (``link``)."""
136
+ if self.link is not None:
137
+ return self.link
134
138
  return f"https://osv.dev/vulnerability/{quote(self.id, safe='')}"
135
139
 
136
140
  def fixed_in(self, ecosystem: Ecosystem, name: str, version: str) -> str | None:
@@ -140,7 +144,8 @@ class Advisory:
140
144
 
141
145
  Avec deux branches corrigées (Flask : ``< 2.2.5`` et ``>= 2.3.0, < 2.3.2``), depuis
142
146
  0.12 c'est 2.2.5, depuis 2.3.0 c'est 2.3.2. ``None`` si l'avis n'en donne pas : faille
143
- jamais corrigée, seulement une dernière version concernée, paquet malveillant.
147
+ jamais corrigée, seulement une dernière version concernée, paquet malveillant. Écrite
148
+ comme dans le manifeste (``VersionScheme.written`` : ``v0.3.8`` pour Go).
144
149
  """
145
150
  scheme = versions.for_ecosystem(ecosystem)
146
151
  try:
@@ -163,7 +168,7 @@ class Advisory:
163
168
  fixes.sort(key=lambda fix: fix[0])
164
169
  for parsed, text in fixes:
165
170
  if not _concerned(scheme, entries, parsed):
166
- return text
171
+ return scheme.written(text)
167
172
  return None
168
173
 
169
174
  def affects(self, ecosystem: Ecosystem, name: str, version: str) -> bool:
@@ -501,6 +506,8 @@ def _same_time(first: str, second: str) -> bool:
501
506
  def _same_name(ecosystem: Ecosystem, first: str, second: str) -> bool:
502
507
  if ecosystem is Ecosystem.PYPI:
503
508
  return canonicalize_name(first) == canonicalize_name(second)
509
+ if ecosystem in (Ecosystem.PACKAGIST, Ecosystem.NUGET): # ni Composer ni NuGet ne tiennent
510
+ return first.lower() == second.lower() # compte de la casse
504
511
  return first == second
505
512
 
506
513