renovate 39.176.4 → 40.0.0-next.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 (244) hide show
  1. package/dist/config/migrations/custom/package-rules-migration.js.map +1 -1
  2. package/dist/config/migrations/migrations-service.d.ts +2 -2
  3. package/dist/config/migrations/migrations-service.js.map +1 -1
  4. package/dist/config/migrations/types.d.ts +1 -3
  5. package/dist/config/migrations/types.js.map +1 -1
  6. package/dist/config/options/index.js +1 -1
  7. package/dist/config/options/index.js.map +1 -1
  8. package/dist/config/presets/internal/group.js +0 -1
  9. package/dist/config/presets/internal/group.js.map +1 -1
  10. package/dist/config/presets/types.d.ts +4 -4
  11. package/dist/config/presets/types.js.map +1 -1
  12. package/dist/config-validator.js.map +1 -1
  13. package/dist/logger/utils.js +4 -2
  14. package/dist/logger/utils.js.map +1 -1
  15. package/dist/modules/datasource/artifactory/index.js +1 -1
  16. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  17. package/dist/modules/datasource/conan/index.js +1 -1
  18. package/dist/modules/datasource/conan/index.js.map +1 -1
  19. package/dist/modules/datasource/crate/index.js.map +1 -1
  20. package/dist/modules/datasource/datasource.d.ts +1 -1
  21. package/dist/modules/datasource/datasource.js +3 -1
  22. package/dist/modules/datasource/datasource.js.map +1 -1
  23. package/dist/modules/datasource/deb/common.d.ts +3 -3
  24. package/dist/modules/datasource/deb/common.js.map +1 -1
  25. package/dist/modules/datasource/docker/ecr.js +1 -1
  26. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  27. package/dist/modules/datasource/docker/index.js.map +1 -1
  28. package/dist/modules/datasource/hexpm-bob/index.js +1 -1
  29. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  30. package/dist/modules/datasource/nuget/v2.js +1 -1
  31. package/dist/modules/datasource/nuget/v2.js.map +1 -1
  32. package/dist/modules/datasource/pod/index.js +1 -2
  33. package/dist/modules/datasource/pod/index.js.map +1 -1
  34. package/dist/modules/datasource/rubygems/metadata-cache.js.map +1 -1
  35. package/dist/modules/datasource/sbt-plugin/index.js +1 -2
  36. package/dist/modules/datasource/sbt-plugin/index.js.map +1 -1
  37. package/dist/modules/manager/ansible-galaxy/collections-metadata.js +1 -2
  38. package/dist/modules/manager/ansible-galaxy/collections-metadata.js.map +1 -1
  39. package/dist/modules/manager/asdf/upgradeable-tooling.js +4 -4
  40. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  41. package/dist/modules/manager/batect/extract.js.map +1 -1
  42. package/dist/modules/manager/bazel/artifacts.js +2 -2
  43. package/dist/modules/manager/bazel/artifacts.js.map +1 -1
  44. package/dist/modules/manager/bazel/common.js +1 -2
  45. package/dist/modules/manager/bazel/common.js.map +1 -1
  46. package/dist/modules/manager/bazel/parser.js +1 -1
  47. package/dist/modules/manager/bazel/parser.js.map +1 -1
  48. package/dist/modules/manager/bazel-module/parser/context.d.ts +4 -3
  49. package/dist/modules/manager/bazel-module/parser/context.js +9 -6
  50. package/dist/modules/manager/bazel-module/parser/context.js.map +1 -1
  51. package/dist/modules/manager/bazel-module/parser/extension-tags.js +10 -2
  52. package/dist/modules/manager/bazel-module/parser/extension-tags.js.map +1 -1
  53. package/dist/modules/manager/bazel-module/parser/fragments.d.ts +20 -2
  54. package/dist/modules/manager/bazel-module/parser/fragments.js +8 -2
  55. package/dist/modules/manager/bazel-module/parser/fragments.js.map +1 -1
  56. package/dist/modules/manager/bazel-module/parser/index.js +1 -1
  57. package/dist/modules/manager/bazel-module/parser/index.js.map +1 -1
  58. package/dist/modules/manager/bazel-module/parser/maven.d.ts +16 -0
  59. package/dist/modules/manager/bazel-module/parser/oci.d.ts +8 -0
  60. package/dist/modules/manager/bazel-module/parser/oci.js +4 -1
  61. package/dist/modules/manager/bazel-module/parser/oci.js.map +1 -1
  62. package/dist/modules/manager/bun/artifacts.js +1 -1
  63. package/dist/modules/manager/bun/artifacts.js.map +1 -1
  64. package/dist/modules/manager/bundler/extract.js.map +1 -1
  65. package/dist/modules/manager/cargo/artifacts.js +1 -1
  66. package/dist/modules/manager/cargo/artifacts.js.map +1 -1
  67. package/dist/modules/manager/cargo/extract.js.map +1 -1
  68. package/dist/modules/manager/cargo/types.d.ts +1 -3
  69. package/dist/modules/manager/cargo/types.js.map +1 -1
  70. package/dist/modules/manager/composer/utils.js +4 -4
  71. package/dist/modules/manager/composer/utils.js.map +1 -1
  72. package/dist/modules/manager/deps-edn/extract.js +3 -3
  73. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  74. package/dist/modules/manager/deps-edn/types.js.map +1 -1
  75. package/dist/modules/manager/dockerfile/extract.js +2 -3
  76. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  77. package/dist/modules/manager/fingerprint.generated.js +17 -17
  78. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  79. package/dist/modules/manager/flux/types.d.ts +3 -3
  80. package/dist/modules/manager/flux/types.js.map +1 -1
  81. package/dist/modules/manager/git-submodules/types.d.ts +2 -2
  82. package/dist/modules/manager/git-submodules/types.js.map +1 -1
  83. package/dist/modules/manager/github-actions/extract.js +2 -2
  84. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  85. package/dist/modules/manager/glasskube/types.d.ts +2 -2
  86. package/dist/modules/manager/glasskube/types.js.map +1 -1
  87. package/dist/modules/manager/gleam/artifacts.js +1 -1
  88. package/dist/modules/manager/gleam/artifacts.js.map +1 -1
  89. package/dist/modules/manager/gradle/utils.js +6 -2
  90. package/dist/modules/manager/gradle/utils.js.map +1 -1
  91. package/dist/modules/manager/haskell-cabal/extract.js +1 -1
  92. package/dist/modules/manager/haskell-cabal/extract.js.map +1 -1
  93. package/dist/modules/manager/helmfile/artifacts.js +1 -1
  94. package/dist/modules/manager/helmfile/artifacts.js.map +1 -1
  95. package/dist/modules/manager/helmfile/extract.js +2 -2
  96. package/dist/modules/manager/helmfile/extract.js.map +1 -1
  97. package/dist/modules/manager/helmv3/artifacts.js +1 -1
  98. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  99. package/dist/modules/manager/helmv3/extract.js.map +1 -1
  100. package/dist/modules/manager/helmv3/utils.js +1 -1
  101. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  102. package/dist/modules/manager/homebrew/util.js +1 -2
  103. package/dist/modules/manager/homebrew/util.js.map +1 -1
  104. package/dist/modules/manager/jsonnet-bundler/extract.js +1 -1
  105. package/dist/modules/manager/jsonnet-bundler/extract.js.map +1 -1
  106. package/dist/modules/manager/leiningen/extract.js +1 -2
  107. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  108. package/dist/modules/manager/maven/extract.js.map +1 -1
  109. package/dist/modules/manager/maven/update.js.map +1 -1
  110. package/dist/modules/manager/mise/upgradeable-tooling.js +7 -7
  111. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  112. package/dist/modules/manager/nix/extract.js +1 -1
  113. package/dist/modules/manager/nix/extract.js.map +1 -1
  114. package/dist/modules/manager/npm/extract/pnpm.js +1 -1
  115. package/dist/modules/manager/npm/extract/pnpm.js.map +1 -1
  116. package/dist/modules/manager/npm/post-update/index.js +1 -1
  117. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  118. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  119. package/dist/modules/manager/npm/update/dependency/index.js +1 -1
  120. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  121. package/dist/modules/manager/nuget/config-formatter.js +1 -2
  122. package/dist/modules/manager/nuget/config-formatter.js.map +1 -1
  123. package/dist/modules/manager/nuget/package-tree.js +1 -1
  124. package/dist/modules/manager/nuget/package-tree.js.map +1 -1
  125. package/dist/modules/manager/nuget/util.js +2 -2
  126. package/dist/modules/manager/nuget/util.js.map +1 -1
  127. package/dist/modules/manager/osgi/extract.js +3 -3
  128. package/dist/modules/manager/osgi/extract.js.map +1 -1
  129. package/dist/modules/manager/pep621/processors/pdm.js +1 -1
  130. package/dist/modules/manager/pep621/processors/pdm.js.map +1 -1
  131. package/dist/modules/manager/pep621/processors/uv.js +3 -2
  132. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  133. package/dist/modules/manager/pip-compile/artifacts.js +8 -2
  134. package/dist/modules/manager/pip-compile/artifacts.js.map +1 -1
  135. package/dist/modules/manager/pip-compile/common.d.ts +5 -3
  136. package/dist/modules/manager/pip-compile/common.js +34 -13
  137. package/dist/modules/manager/pip-compile/common.js.map +1 -1
  138. package/dist/modules/manager/pip-compile/extract.js.map +1 -1
  139. package/dist/modules/manager/pip-compile/types.d.ts +1 -0
  140. package/dist/modules/manager/pip-compile/types.js.map +1 -1
  141. package/dist/modules/manager/poetry/artifacts.js +2 -2
  142. package/dist/modules/manager/poetry/artifacts.js.map +1 -1
  143. package/dist/modules/manager/pre-commit/types.d.ts +2 -2
  144. package/dist/modules/manager/pre-commit/types.js.map +1 -1
  145. package/dist/modules/manager/pub/artifacts.js +1 -1
  146. package/dist/modules/manager/pub/artifacts.js.map +1 -1
  147. package/dist/modules/manager/swift/extract.js +1 -2
  148. package/dist/modules/manager/swift/extract.js.map +1 -1
  149. package/dist/modules/manager/terraform/extractors/terraform-block/required-provider.js +2 -2
  150. package/dist/modules/manager/terraform/extractors/terraform-block/required-provider.js.map +1 -1
  151. package/dist/modules/manager/terraform/hcl/types.d.ts +1 -3
  152. package/dist/modules/manager/terraform/hcl/types.js.map +1 -1
  153. package/dist/modules/manager/terraform/lockfile/index.js +1 -1
  154. package/dist/modules/manager/terraform/lockfile/index.js.map +1 -1
  155. package/dist/modules/manager/terragrunt/artifacts.js +1 -1
  156. package/dist/modules/manager/terragrunt/artifacts.js.map +1 -1
  157. package/dist/modules/manager/types.d.ts +1 -0
  158. package/dist/modules/manager/types.js.map +1 -1
  159. package/dist/modules/manager/woodpecker/types.d.ts +2 -2
  160. package/dist/modules/manager/woodpecker/types.js.map +1 -1
  161. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  162. package/dist/modules/platform/azure/index.js +1 -1
  163. package/dist/modules/platform/azure/index.js.map +1 -1
  164. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  165. package/dist/modules/platform/bitbucket/utils.js.map +1 -1
  166. package/dist/modules/platform/bitbucket-server/index.js +2 -2
  167. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  168. package/dist/modules/platform/gerrit/scm.js +1 -1
  169. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  170. package/dist/modules/platform/gitea/index.js +6 -5
  171. package/dist/modules/platform/gitea/index.js.map +1 -1
  172. package/dist/modules/platform/gitea/pr-cache.d.ts +3 -2
  173. package/dist/modules/platform/gitea/pr-cache.js +21 -12
  174. package/dist/modules/platform/gitea/pr-cache.js.map +1 -1
  175. package/dist/modules/platform/github/index.js.map +1 -1
  176. package/dist/modules/platform/gitlab/index.js +20 -16
  177. package/dist/modules/platform/gitlab/index.js.map +1 -1
  178. package/dist/modules/platform/types.d.ts +2 -2
  179. package/dist/modules/platform/types.js.map +1 -1
  180. package/dist/modules/versioning/bazel-module/bzlmod-version.d.ts +1 -1
  181. package/dist/modules/versioning/bazel-module/bzlmod-version.js.map +1 -1
  182. package/dist/modules/versioning/generic.d.ts +2 -6
  183. package/dist/modules/versioning/generic.js.map +1 -1
  184. package/dist/modules/versioning/gradle/compare.d.ts +2 -2
  185. package/dist/modules/versioning/gradle/compare.js.map +1 -1
  186. package/dist/modules/versioning/gradle/index.js +1 -1
  187. package/dist/modules/versioning/gradle/index.js.map +1 -1
  188. package/dist/modules/versioning/pvp/range.js +2 -2
  189. package/dist/modules/versioning/pvp/range.js.map +1 -1
  190. package/dist/modules/versioning/rpm/index.js +5 -5
  191. package/dist/modules/versioning/rpm/index.js.map +1 -1
  192. package/dist/modules/versioning/semver-coerced/index.js +4 -4
  193. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  194. package/dist/modules/versioning/types.d.ts +1 -3
  195. package/dist/modules/versioning/types.js.map +1 -1
  196. package/dist/types/git.d.ts +2 -2
  197. package/dist/types/git.js.map +1 -1
  198. package/dist/types/platform/github/index.d.ts +4 -4
  199. package/dist/types/platform/github/index.js.map +1 -1
  200. package/dist/types/platform/gitlab/index.d.ts +2 -2
  201. package/dist/types/platform/gitlab/index.js.map +1 -1
  202. package/dist/util/assign-keys.d.ts +1 -3
  203. package/dist/util/assign-keys.js.map +1 -1
  204. package/dist/util/cache/repository/http-cache.js +1 -1
  205. package/dist/util/cache/repository/http-cache.js.map +1 -1
  206. package/dist/util/exec/types.d.ts +2 -2
  207. package/dist/util/exec/types.js.map +1 -1
  208. package/dist/util/git/auth.js +1 -1
  209. package/dist/util/git/auth.js.map +1 -1
  210. package/dist/util/git/index.d.ts +10 -10
  211. package/dist/util/git/index.js +22 -26
  212. package/dist/util/git/index.js.map +1 -1
  213. package/dist/util/http/bitbucket.js.map +1 -1
  214. package/dist/util/http/cache/abstract-http-cache-provider.js +1 -1
  215. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  216. package/dist/util/http/index.js.map +1 -1
  217. package/dist/util/http/types.d.ts +3 -5
  218. package/dist/util/http/types.js.map +1 -1
  219. package/dist/util/pretty-time.js.map +1 -1
  220. package/dist/util/schema-utils.js.map +1 -1
  221. package/dist/util/stats.js +1 -0
  222. package/dist/util/stats.js.map +1 -1
  223. package/dist/workers/repository/dependency-dashboard.js +2 -2
  224. package/dist/workers/repository/dependency-dashboard.js.map +1 -1
  225. package/dist/workers/repository/init/config.d.ts +1 -2
  226. package/dist/workers/repository/init/config.js +0 -13
  227. package/dist/workers/repository/init/config.js.map +1 -1
  228. package/dist/workers/repository/init/merge.d.ts +2 -1
  229. package/dist/workers/repository/init/merge.js +13 -3
  230. package/dist/workers/repository/init/merge.js.map +1 -1
  231. package/dist/workers/repository/model/commit-message.js.map +1 -1
  232. package/dist/workers/repository/process/vulnerabilities.js +3 -1
  233. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  234. package/dist/workers/repository/process/write.js +1 -1
  235. package/dist/workers/repository/process/write.js.map +1 -1
  236. package/dist/workers/repository/reconfigure/validate.js +3 -1
  237. package/dist/workers/repository/reconfigure/validate.js.map +1 -1
  238. package/dist/workers/repository/update/branch/schedule.js +1 -1
  239. package/dist/workers/repository/update/branch/schedule.js.map +1 -1
  240. package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
  241. package/dist/workers/repository/updates/generate.js +9 -0
  242. package/dist/workers/repository/updates/generate.js.map +1 -1
  243. package/package.json +28 -24
  244. package/renovate-schema.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../lib/modules/manager/osgi/extract.ts"],"names":[],"mappings":";;AAYA,gDAwFC;;AApGD,kEAAkC;AAClC,qDAA+B;AAC/B,mCAA2C;AAC3C,4CAAyC;AACzC,kDAAyD;AAQzD,SAAgB,kBAAkB,CAChC,OAAe,EACf,WAAmB,EACnB,OAAuB;IAEvB,cAAc;IACd,2GAA2G;IAC3G,4HAA4H;IAC5H,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAEtD,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,IAAI,YAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,iDAAiD;QACjD,YAAY,GAAG,KAAK,CAAC,KAAK,CAAe,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;IACE,4BAA4B;IAC5B,YAAE,CAAC,eAAe,CAAC,YAAY,CAAC;QAChC,2CAA2C;QAC3C,CAAC,iCAAiC,CAAC,YAAY,EAAE,WAAW,CAAC,EAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0CAA0C;IAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC;IAE9C,8FAA8F;IAC9F,MAAM,gBAAgB,GACpB,YAAY,CAAC,kCAAkC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,YAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,wBAAwB;IACxB,EAAE;IACF,iEAAiE;IACjE,yEAAyE;IACzE,gBAAgB;IAChB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACpE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjE,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,8DAA8D;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,kCAAkC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvC,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC;gBACR,OAAO,EAAE,GAAG;gBACZ,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,oDAAoD;QACpD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAsB;YAChC,UAAU,EAAE,uBAAe,CAAC,EAAE;YAC9B,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;SACnC,CAAC;QACF,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,UAAU,GAAG,mBAAmB,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,iCAAiC,CACxC,YAA0B,EAC1B,QAAgB;IAEhB,MAAM,eAAe,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACjE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,cAAc,GAAG,IAAA,eAAM,EAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CACV,iBAAiB,QAAQ,6CAA6C,eAAe,GAAG,CACzF,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,IAAA,kBAAS,EAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;YACrC,eAAM,CAAC,KAAK,CACV,iBAAiB,QAAQ,iDAAiD,eAAe,GAAG,CAC7F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAmB,EACnB,YAAqB;IAErB,kFAAkF;IAClF,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,YAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAClE,OAAO,YAAwB,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport * as json5 from 'json5';\nimport { coerce, satisfies } from 'semver';\nimport { logger } from '../../../logger';\nimport { MavenDatasource } from '../../datasource/maven';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types';\nimport type { Bundle, FeatureModel } from './types';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): PackageFileContent | null {\n // References:\n // - OSGi compendium release 8 ( https://docs.osgi.org/specification/osgi.cmpn/8.0.0/service.feature.html )\n // - The Sling implementation of the feature model ( https://sling.apache.org/documentation/development/feature-model.html )\n logger.trace(`osgi.extractPackageFile($packageFile)`);\n\n const deps: PackageDependency[] = [];\n let featureModel: FeatureModel;\n try {\n // Compendium R8 159.3: JS comments are supported\n featureModel = json5.parse<FeatureModel>(content);\n } catch (err) {\n logger.warn({ packageFile, err }, 'Failed to parse osgi file');\n return null;\n }\n\n if (\n // for empty an empty result\n is.nullOrUndefined(featureModel) ||\n // Compendium R8 159.9: resource versioning\n !isSupportedFeatureResourceVersion(featureModel, packageFile)\n ) {\n return null;\n }\n\n // OSGi Compendium R8 159.4: bundles entry\n const allBundles = featureModel.bundles ?? [];\n\n // The 'execution-environment' key is supported by the Sling/OSGi feature model implementation\n const execEnvFramework =\n featureModel['execution-environment:JSON|false']?.['framework'];\n if (!is.nullOrUndefined(execEnvFramework)) {\n allBundles.push(execEnvFramework);\n }\n\n // parse custom sections\n //\n // Note: we do not support artifact list extensions as defined in\n // section 159.7.3 yet. As of 05-12-2022, there is no implementation that\n // supports this\n for (const [section, value] of Object.entries(featureModel)) {\n logger.trace({ fileName: packageFile, section }, 'Parsing section');\n const customSectionEntries = extractArtifactList(section, value);\n allBundles.push(...customSectionEntries);\n }\n\n // convert bundles to dependencies\n for (const entry of allBundles) {\n const rawGav = typeof entry === 'string' ? entry : entry.id;\n // skip invalid definitions, such as objects without an id set\n if (!rawGav) {\n continue;\n }\n\n // both '/' and ':' are valid separators, but the Maven datasource\n // expects the separator to be ':'\n const gav = rawGav.replace(/\\//g, ':');\n\n // identifiers support 3-5 parts, see OSGi R8 - 159.2.1 Identifiers\n // groupId ':' artifactId ( ':' type ( ':' classifier )? )? ':' version\n const parts = gav.split(':');\n if (parts.length < 3 || parts.length > 5) {\n deps.push({\n depName: gav,\n skipReason: 'invalid-value',\n });\n continue;\n }\n // parsing should use the last entry for the version\n const currentValue = parts[parts.length - 1];\n const result: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${parts[0]}:${parts[1]}`,\n };\n if (currentValue.includes('${')) {\n result.skipReason = 'contains-variable';\n } else {\n result.currentValue = currentValue;\n }\n\n deps.push(result);\n }\n\n return deps.length ? { deps } : null;\n}\n\nfunction isSupportedFeatureResourceVersion(\n featureModel: FeatureModel,\n fileName: string,\n): boolean {\n const resourceVersion = featureModel['feature-resource-version'];\n if (resourceVersion) {\n const resourceSemVer = coerce(resourceVersion);\n if (!resourceSemVer) {\n logger.debug(\n `Skipping file ${fileName} due to invalid feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n\n // we only support 1.x, although no over version has been defined\n if (!satisfies(resourceSemVer, '^1')) {\n logger.debug(\n `Skipping file ${fileName} due to unsupported feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n }\n\n return true;\n}\n\nfunction extractArtifactList(\n sectionName: string,\n sectionValue: unknown,\n): Bundle[] {\n // The 'ARTIFACTS' key is supported by the Sling/OSGi feature model implementation\n if (sectionName.includes(':ARTIFACTS|') && is.array(sectionValue)) {\n return sectionValue as Bundle[];\n }\n\n return [];\n}\n"]}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../lib/modules/manager/osgi/extract.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport json5 from 'json5';\nimport { coerce, satisfies } from 'semver';\nimport { logger } from '../../../logger';\nimport { MavenDatasource } from '../../datasource/maven';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types';\nimport type { Bundle, FeatureModel } from './types';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): PackageFileContent | null {\n // References:\n // - OSGi compendium release 8 ( https://docs.osgi.org/specification/osgi.cmpn/8.0.0/service.feature.html )\n // - The Sling implementation of the feature model ( https://sling.apache.org/documentation/development/feature-model.html )\n logger.trace(`osgi.extractPackageFile($packageFile)`);\n\n const deps: PackageDependency[] = [];\n let featureModel: FeatureModel;\n try {\n // Compendium R8 159.3: JS comments are supported\n featureModel = json5.parse<FeatureModel>(content);\n } catch (err) {\n logger.warn({ packageFile, err }, 'Failed to parse osgi file');\n return null;\n }\n\n if (\n // for empty an empty result\n is.nullOrUndefined(featureModel) ||\n // Compendium R8 159.9: resource versioning\n !isSupportedFeatureResourceVersion(featureModel, packageFile)\n ) {\n return null;\n }\n\n // OSGi Compendium R8 159.4: bundles entry\n const allBundles = featureModel.bundles ?? [];\n\n // The 'execution-environment' key is supported by the Sling/OSGi feature model implementation\n const execEnvFramework =\n featureModel['execution-environment:JSON|false']?.framework;\n if (!is.nullOrUndefined(execEnvFramework)) {\n allBundles.push(execEnvFramework);\n }\n\n // parse custom sections\n //\n // Note: we do not support artifact list extensions as defined in\n // section 159.7.3 yet. As of 05-12-2022, there is no implementation that\n // supports this\n for (const [section, value] of Object.entries(featureModel)) {\n logger.trace({ fileName: packageFile, section }, 'Parsing section');\n const customSectionEntries = extractArtifactList(section, value);\n allBundles.push(...customSectionEntries);\n }\n\n // convert bundles to dependencies\n for (const entry of allBundles) {\n const rawGav = typeof entry === 'string' ? entry : entry.id;\n // skip invalid definitions, such as objects without an id set\n if (!rawGav) {\n continue;\n }\n\n // both '/' and ':' are valid separators, but the Maven datasource\n // expects the separator to be ':'\n const gav = rawGav.replace(/\\//g, ':');\n\n // identifiers support 3-5 parts, see OSGi R8 - 159.2.1 Identifiers\n // groupId ':' artifactId ( ':' type ( ':' classifier )? )? ':' version\n const parts = gav.split(':');\n if (parts.length < 3 || parts.length > 5) {\n deps.push({\n depName: gav,\n skipReason: 'invalid-value',\n });\n continue;\n }\n // parsing should use the last entry for the version\n const currentValue = parts[parts.length - 1];\n const result: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${parts[0]}:${parts[1]}`,\n };\n if (currentValue.includes('${')) {\n result.skipReason = 'contains-variable';\n } else {\n result.currentValue = currentValue;\n }\n\n deps.push(result);\n }\n\n return deps.length ? { deps } : null;\n}\n\nfunction isSupportedFeatureResourceVersion(\n featureModel: FeatureModel,\n fileName: string,\n): boolean {\n const resourceVersion = featureModel['feature-resource-version'];\n if (resourceVersion) {\n const resourceSemVer = coerce(resourceVersion);\n if (!resourceSemVer) {\n logger.debug(\n `Skipping file ${fileName} due to invalid feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n\n // we only support 1.x, although no over version has been defined\n if (!satisfies(resourceSemVer, '^1')) {\n logger.debug(\n `Skipping file ${fileName} due to unsupported feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n }\n\n return true;\n}\n\nfunction extractArtifactList(\n sectionName: string,\n sectionValue: unknown,\n): Bundle[] {\n // The 'ARTIFACTS' key is supported by the Sling/OSGi feature model implementation\n if (sectionName.includes(':ARTIFACTS|') && is.array(sectionValue)) {\n return sectionValue as Bundle[];\n }\n\n return [];\n}\n"]}
@@ -59,7 +59,7 @@ class PdmProcessor {
59
59
  }
60
60
  async updateArtifacts(updateArtifact, project) {
61
61
  const { config, updatedDeps, packageFileName } = updateArtifact;
62
- const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';
62
+ const { isLockFileMaintenance } = config;
63
63
  // abort if no lockfile is defined
64
64
  const lockFileName = (0, fs_1.getSiblingFileName)(packageFileName, 'pdm.lock');
65
65
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"pdm.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/pep621/processors/pdm.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { exec } from '../../../../util/exec';\nimport type { ExecOptions, ToolConstraint } from '../../../../util/exec/types';\nimport { getSiblingFileName, readLocalFile } from '../../../../util/fs';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth';\nimport { Result } from '../../../../util/result';\nimport { PypiDatasource } from '../../../datasource/pypi';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types';\nimport { PdmLockfileSchema, type PyProject } from '../schema';\nimport type { Pep621ManagerData } from '../types';\nimport { depTypes, parseDependencyGroupRecord } from '../utils';\nimport type { PyProjectProcessor } from './types';\n\nconst pdmUpdateCMD = 'pdm update --no-sync --update-eager';\n\nexport class PdmProcessor implements PyProjectProcessor {\n process(\n project: PyProject,\n deps: PackageDependency[],\n ): PackageDependency<Pep621ManagerData>[] {\n const pdm = project.tool?.pdm;\n if (is.nullOrUndefined(pdm)) {\n return deps;\n }\n\n deps.push(\n ...parseDependencyGroupRecord(\n depTypes.pdmDevDependencies,\n pdm['dev-dependencies'],\n ),\n );\n\n const pdmSource = pdm.source;\n if (is.nullOrUndefined(pdmSource)) {\n return deps;\n }\n\n // add pypi default url, if there is no source declared with the name `pypi`. https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n const containsPyPiUrl = pdmSource.some((value) => value.name === 'pypi');\n const registryUrls: string[] = [];\n if (!containsPyPiUrl) {\n registryUrls.push(PypiDatasource.defaultURL);\n }\n for (const source of pdmSource) {\n registryUrls.push(source.url);\n }\n for (const dep of deps) {\n dep.registryUrls = [...registryUrls];\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n if (\n is.nullOrUndefined(project.tool?.pdm) &&\n project['build-system']?.['build-backend'] !== 'pdm.backend'\n ) {\n return Promise.resolve(deps);\n }\n\n const lockFileName = getSiblingFileName(packageFile, 'pdm.lock');\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const lockFileMapping = Result.parse(\n lockFileContent,\n PdmLockfileSchema.transform(({ lock }) => lock),\n ).unwrapOr({});\n\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';\n\n // abort if no lockfile is defined\n const lockFileName = getSiblingFileName(packageFileName, 'pdm.lock');\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (is.nullOrUndefined(existingLockFileContent)) {\n logger.debug('No pdm.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const pdmConstraint: ToolConstraint = {\n toolName: 'pdm',\n constraint: config.constraints?.pdm,\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [pythonConstraint, pdmConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n const cmds: string[] = [];\n if (isLockFileMaintenance) {\n cmds.push(pdmUpdateCMD);\n } else {\n cmds.push(...generateCMDs(updatedDeps));\n }\n await exec(cmds, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('pdm.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update PDM lock file');\n return [\n {\n artifactError: {\n lockFile: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMDs(updatedDeps: Upgrade<Pep621ManagerData>[]): string[] {\n const cmds: string[] = [];\n const packagesByCMD: Record<string, string[]> = {};\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n if (is.nullOrUndefined(dep.managerData?.depGroup)) {\n logger.once.warn(\n { dep: dep.depName },\n 'Unexpected optional dependency without group',\n );\n continue;\n }\n addPackageToCMDRecord(\n packagesByCMD,\n `${pdmUpdateCMD} -G ${quote(dep.managerData.depGroup)}`,\n dep.packageName!,\n );\n break;\n }\n case depTypes.dependencyGroups:\n case depTypes.pdmDevDependencies: {\n if (is.nullOrUndefined(dep.managerData?.depGroup)) {\n logger.once.warn(\n { dep: dep.depName },\n 'Unexpected dev dependency without group',\n );\n continue;\n }\n addPackageToCMDRecord(\n packagesByCMD,\n `${pdmUpdateCMD} -dG ${quote(dep.managerData.depGroup)}`,\n dep.packageName!,\n );\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n // Reference: https://github.com/pdm-project/pdm/discussions/2869\n break;\n default: {\n addPackageToCMDRecord(packagesByCMD, pdmUpdateCMD, dep.packageName!);\n }\n }\n }\n\n for (const commandPrefix in packagesByCMD) {\n const packageList = packagesByCMD[commandPrefix].map(quote).join(' ');\n const cmd = `${commandPrefix} ${packageList}`;\n cmds.push(cmd);\n }\n\n return cmds;\n}\n\nfunction addPackageToCMDRecord(\n packagesByCMD: Record<string, string[]>,\n commandPrefix: string,\n packageName: string,\n): void {\n if (is.nullOrUndefined(packagesByCMD[commandPrefix])) {\n packagesByCMD[commandPrefix] = [];\n }\n packagesByCMD[commandPrefix].push(packageName);\n}\n"]}
1
+ {"version":3,"file":"pdm.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/pep621/processors/pdm.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { exec } from '../../../../util/exec';\nimport type { ExecOptions, ToolConstraint } from '../../../../util/exec/types';\nimport { getSiblingFileName, readLocalFile } from '../../../../util/fs';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth';\nimport { Result } from '../../../../util/result';\nimport { PypiDatasource } from '../../../datasource/pypi';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types';\nimport { PdmLockfileSchema, type PyProject } from '../schema';\nimport type { Pep621ManagerData } from '../types';\nimport { depTypes, parseDependencyGroupRecord } from '../utils';\nimport type { PyProjectProcessor } from './types';\n\nconst pdmUpdateCMD = 'pdm update --no-sync --update-eager';\n\nexport class PdmProcessor implements PyProjectProcessor {\n process(\n project: PyProject,\n deps: PackageDependency[],\n ): PackageDependency<Pep621ManagerData>[] {\n const pdm = project.tool?.pdm;\n if (is.nullOrUndefined(pdm)) {\n return deps;\n }\n\n deps.push(\n ...parseDependencyGroupRecord(\n depTypes.pdmDevDependencies,\n pdm['dev-dependencies'],\n ),\n );\n\n const pdmSource = pdm.source;\n if (is.nullOrUndefined(pdmSource)) {\n return deps;\n }\n\n // add pypi default url, if there is no source declared with the name `pypi`. https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n const containsPyPiUrl = pdmSource.some((value) => value.name === 'pypi');\n const registryUrls: string[] = [];\n if (!containsPyPiUrl) {\n registryUrls.push(PypiDatasource.defaultURL);\n }\n for (const source of pdmSource) {\n registryUrls.push(source.url);\n }\n for (const dep of deps) {\n dep.registryUrls = [...registryUrls];\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n if (\n is.nullOrUndefined(project.tool?.pdm) &&\n project['build-system']?.['build-backend'] !== 'pdm.backend'\n ) {\n return Promise.resolve(deps);\n }\n\n const lockFileName = getSiblingFileName(packageFile, 'pdm.lock');\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const lockFileMapping = Result.parse(\n lockFileContent,\n PdmLockfileSchema.transform(({ lock }) => lock),\n ).unwrapOr({});\n\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = getSiblingFileName(packageFileName, 'pdm.lock');\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (is.nullOrUndefined(existingLockFileContent)) {\n logger.debug('No pdm.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const pdmConstraint: ToolConstraint = {\n toolName: 'pdm',\n constraint: config.constraints?.pdm,\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [pythonConstraint, pdmConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n const cmds: string[] = [];\n if (isLockFileMaintenance) {\n cmds.push(pdmUpdateCMD);\n } else {\n cmds.push(...generateCMDs(updatedDeps));\n }\n await exec(cmds, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('pdm.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update PDM lock file');\n return [\n {\n artifactError: {\n lockFile: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMDs(updatedDeps: Upgrade<Pep621ManagerData>[]): string[] {\n const cmds: string[] = [];\n const packagesByCMD: Record<string, string[]> = {};\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n if (is.nullOrUndefined(dep.managerData?.depGroup)) {\n logger.once.warn(\n { dep: dep.depName },\n 'Unexpected optional dependency without group',\n );\n continue;\n }\n addPackageToCMDRecord(\n packagesByCMD,\n `${pdmUpdateCMD} -G ${quote(dep.managerData.depGroup)}`,\n dep.packageName!,\n );\n break;\n }\n case depTypes.dependencyGroups:\n case depTypes.pdmDevDependencies: {\n if (is.nullOrUndefined(dep.managerData?.depGroup)) {\n logger.once.warn(\n { dep: dep.depName },\n 'Unexpected dev dependency without group',\n );\n continue;\n }\n addPackageToCMDRecord(\n packagesByCMD,\n `${pdmUpdateCMD} -dG ${quote(dep.managerData.depGroup)}`,\n dep.packageName!,\n );\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n // Reference: https://github.com/pdm-project/pdm/discussions/2869\n break;\n default: {\n addPackageToCMDRecord(packagesByCMD, pdmUpdateCMD, dep.packageName!);\n }\n }\n }\n\n for (const commandPrefix in packagesByCMD) {\n const packageList = packagesByCMD[commandPrefix].map(quote).join(' ');\n const cmd = `${commandPrefix} ${packageList}`;\n cmds.push(cmd);\n }\n\n return cmds;\n}\n\nfunction addPackageToCMDRecord(\n packagesByCMD: Record<string, string[]>,\n commandPrefix: string,\n packageName: string,\n): void {\n if (is.nullOrUndefined(packagesByCMD[commandPrefix])) {\n packagesByCMD[commandPrefix] = [];\n }\n packagesByCMD[commandPrefix].push(packageName);\n}\n"]}
@@ -108,7 +108,7 @@ class UvProcessor {
108
108
  }
109
109
  async updateArtifacts(updateArtifact, project) {
110
110
  const { config, updatedDeps, packageFileName } = updateArtifact;
111
- const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';
111
+ const { isLockFileMaintenance } = config;
112
112
  // abort if no lockfile is defined
113
113
  const lockFileName = (0, fs_1.getSiblingFileName)(packageFileName, 'uv.lock');
114
114
  try {
@@ -231,7 +231,8 @@ async function getUvExtraIndexUrl(project, deps) {
231
231
  .filter((dep) => {
232
232
  // Remove dependencies that are pinned to a specific index
233
233
  const sources = project.tool?.uv?.sources;
234
- return !sources || !(dep.packageName in sources);
234
+ const packageName = dep.packageName;
235
+ return !sources || !(packageName in sources);
235
236
  })
236
237
  .flatMap((dep) => dep.registryUrls)
237
238
  .filter(is_1.default.string)
@@ -1 +1 @@
1
- {"version":3,"file":"uv.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport type { HostRule } from '../../../../types';\nimport { exec } from '../../../../util/exec';\nimport type { ExecOptions, ToolConstraint } from '../../../../util/exec/types';\nimport { getSiblingFileName, readLocalFile } from '../../../../util/fs';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth';\nimport { find } from '../../../../util/host-rules';\nimport { Result } from '../../../../util/result';\nimport { parseUrl } from '../../../../util/url';\nimport { PypiDatasource } from '../../../datasource/pypi';\nimport { getGoogleAuthHostRule } from '../../../datasource/util';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types';\nimport { applyGitSource } from '../../util';\nimport { type PyProject, UvLockfileSchema } from '../schema';\nimport { depTypes, parseDependencyList } from '../utils';\nimport type { PyProjectProcessor } from './types';\n\nconst uvUpdateCMD = 'uv lock';\n\nexport class UvProcessor implements PyProjectProcessor {\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (is.nullOrUndefined(uv)) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n deps.push(\n ...parseDependencyList(\n depTypes.uvDevDependencies,\n uv['dev-dependencies'],\n ),\n );\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n // istanbul ignore if\n if (!dep.packageName) {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSource = uv.sources?.[dep.packageName];\n if (depSource) {\n // Dependency is pinned to a specific source.\n dep.depType = depTypes.uvSources;\n if ('index' in depSource) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n dep.registryUrls = [index.url];\n }\n } else if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = getSiblingFileName(packageFile, 'uv.lock');\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfileSchema,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';\n\n // abort if no lockfile is defined\n const lockFileName = getSiblingFileName(packageFileName, 'uv.lock');\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (is.nullOrUndefined(existingLockFileContent)) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint: config.constraints?.uv,\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await exec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n lockFile: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!.split('/')[1]);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n } else {\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n return !sources || !(dep.packageName! in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(is.string)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls =\n project.tool?.uv?.index?.map(({ url }) => url) ?? [];\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (is.nullOrUndefined(uv_indexes)) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n // istanbul ignore if\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(/[^A-Z0-9]/g, '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"]}
1
+ {"version":3,"file":"uv.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport type { HostRule } from '../../../../types';\nimport { exec } from '../../../../util/exec';\nimport type { ExecOptions, ToolConstraint } from '../../../../util/exec/types';\nimport { getSiblingFileName, readLocalFile } from '../../../../util/fs';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth';\nimport { find } from '../../../../util/host-rules';\nimport { Result } from '../../../../util/result';\nimport { parseUrl } from '../../../../util/url';\nimport { PypiDatasource } from '../../../datasource/pypi';\nimport { getGoogleAuthHostRule } from '../../../datasource/util';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types';\nimport { applyGitSource } from '../../util';\nimport { type PyProject, UvLockfileSchema } from '../schema';\nimport { depTypes, parseDependencyList } from '../utils';\nimport type { PyProjectProcessor } from './types';\n\nconst uvUpdateCMD = 'uv lock';\n\nexport class UvProcessor implements PyProjectProcessor {\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (is.nullOrUndefined(uv)) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n deps.push(\n ...parseDependencyList(\n depTypes.uvDevDependencies,\n uv['dev-dependencies'],\n ),\n );\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n // istanbul ignore if\n if (!dep.packageName) {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSource = uv.sources?.[dep.packageName];\n if (depSource) {\n // Dependency is pinned to a specific source.\n dep.depType = depTypes.uvSources;\n if ('index' in depSource) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n dep.registryUrls = [index.url];\n }\n } else if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = getSiblingFileName(packageFile, 'uv.lock');\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfileSchema,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = getSiblingFileName(packageFileName, 'uv.lock');\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (is.nullOrUndefined(existingLockFileContent)) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint: config.constraints?.uv,\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await exec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n lockFile: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!.split('/')[1]);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n } else {\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n const packageName = dep.packageName!;\n return !sources || !(packageName in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(is.string)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls =\n project.tool?.uv?.index?.map(({ url }) => url) ?? [];\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (is.nullOrUndefined(uv_indexes)) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n // istanbul ignore if\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(/[^A-Z0-9]/g, '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"]}
@@ -78,7 +78,13 @@ async function updateArtifacts({ packageFileName: inputFileName, newPackageFileC
78
78
  await (0, fs_1.deleteLocalFile)(outputFileName);
79
79
  }
80
80
  const compileArgs = (0, common_2.extractHeaderCommand)(existingOutput, outputFileName);
81
- const pythonVersion = (0, common_2.extractPythonVersion)(compileArgs.commandType, existingOutput, outputFileName);
81
+ let pythonVersion;
82
+ if (compileArgs.commandType === 'uv') {
83
+ pythonVersion = compileArgs.pythonVersion;
84
+ }
85
+ else {
86
+ pythonVersion = (0, common_2.extractPythonVersion)(existingOutput, outputFileName);
87
+ }
82
88
  const cwd = (0, utils_1.inferCommandExecDir)(outputFileName, compileArgs.outputFile);
83
89
  const upgradePackages = updatedDeps.filter((dep) => dep.isLockfileUpdate);
84
90
  const packageFiles = [];
@@ -96,7 +102,7 @@ async function updateArtifacts({ packageFileName: inputFileName, newPackageFileC
96
102
  }
97
103
  }
98
104
  const cmd = constructPipCompileCmd(compileArgs, upgradePackages);
99
- const execOptions = await (0, common_2.getExecOptions)(config, cwd, (0, common_2.getRegistryCredVarsFromPackageFiles)(packageFiles), pythonVersion);
105
+ const execOptions = await (0, common_2.getExecOptions)(config, compileArgs.commandType, cwd, (0, common_2.getRegistryCredVarsFromPackageFiles)(packageFiles), pythonVersion);
100
106
  logger_1.logger.trace({ cwd, cmd }, 'pip-compile command');
101
107
  logger_1.logger.trace({ env: execOptions.extraEnv }, 'pip-compile extra env vars');
102
108
  await (0, exec_1.exec)(cmd, execOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { quote } from 'shlex';\nimport upath from 'upath';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { exec } from '../../../util/exec';\nimport {\n deleteLocalFile,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs';\nimport { getRepoStatus } from '../../../util/git';\nimport { extractPackageFileFlags as extractRequirementsFileFlags } from '../pip_requirements/common';\nimport type {\n PackageFileContent,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../types';\nimport {\n extractHeaderCommand,\n extractPythonVersion,\n getExecOptions,\n getRegistryCredVarsFromPackageFiles,\n matchManager,\n} from './common';\nimport type { PipCompileArgs } from './types';\nimport { inferCommandExecDir } from './utils';\n\nfunction haveCredentialsInPipEnvironmentVariables(): boolean {\n if (process.env.PIP_INDEX_URL) {\n try {\n const indexUrl = new URL(process.env.PIP_INDEX_URL);\n if (!!indexUrl.username || !!indexUrl.password) {\n return true;\n }\n } catch {\n // Assume that an invalid URL contains credentials, just in case\n return true;\n }\n }\n\n try {\n if (process.env.PIP_EXTRA_INDEX_URL) {\n return process.env.PIP_EXTRA_INDEX_URL.split(' ')\n .map((urlString) => new URL(urlString))\n .some((url) => !!url.username || !!url.password);\n }\n } catch {\n // Assume that an invalid URL contains credentials, just in case\n return true;\n }\n\n return false;\n}\n\nexport function constructPipCompileCmd(\n compileArgs: PipCompileArgs,\n upgradePackages: Upgrade[] = [],\n): string {\n if (compileArgs.commandType === 'custom') {\n throw new Error(\n 'Detected custom command, header modified or set by CUSTOM_COMPILE_COMMAND',\n );\n }\n\n if (!compileArgs.outputFile) {\n logger.debug(`pip-compile: implicit output file`);\n }\n // safeguard against index url leak if not explicitly set by an option\n if (\n compileArgs.commandType === 'pip-compile' &&\n !compileArgs.noEmitIndexUrl &&\n !compileArgs.emitIndexUrl &&\n haveCredentialsInPipEnvironmentVariables()\n ) {\n compileArgs.argv.splice(1, 0, '--no-emit-index-url');\n }\n for (const dep of upgradePackages) {\n compileArgs.argv.push(\n `--upgrade-package=${quote(dep.depName + '==' + dep.newVersion)}`,\n );\n }\n return compileArgs.argv.map(quote).join(' ');\n}\n\nexport async function updateArtifacts({\n packageFileName: inputFileName,\n newPackageFileContent: newInputContent,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n if (!config.lockFiles) {\n logger.warn(\n { packageFileName: inputFileName },\n 'pip-compile: No lock files associated with a package file',\n );\n return null;\n }\n logger.debug(\n `pipCompile.updateArtifacts(${inputFileName}->${JSON.stringify(\n config.lockFiles,\n )})`,\n );\n const result: UpdateArtifactsResult[] = [];\n for (const outputFileName of config.lockFiles) {\n const existingOutput = await readLocalFile(outputFileName, 'utf8');\n if (!existingOutput) {\n logger.debug('pip-compile: No output file found');\n return null;\n }\n try {\n await writeLocalFile(inputFileName, newInputContent);\n // TODO(not7cd): use --upgrade option instead deleting\n if (config.isLockFileMaintenance) {\n await deleteLocalFile(outputFileName);\n }\n const compileArgs = extractHeaderCommand(existingOutput, outputFileName);\n const pythonVersion = extractPythonVersion(\n compileArgs.commandType,\n existingOutput,\n outputFileName,\n );\n const cwd = inferCommandExecDir(outputFileName, compileArgs.outputFile);\n const upgradePackages = updatedDeps.filter((dep) => dep.isLockfileUpdate);\n const packageFiles: PackageFileContent[] = [];\n for (const name of compileArgs.sourceFiles) {\n const manager = matchManager(name);\n if (manager === 'pip_requirements') {\n const path = upath.join(cwd, name);\n const content = await readLocalFile(path, 'utf8');\n if (content) {\n const packageFile = extractRequirementsFileFlags(content);\n if (packageFile) {\n packageFiles.push(packageFile);\n }\n }\n }\n }\n const cmd = constructPipCompileCmd(compileArgs, upgradePackages);\n const execOptions = await getExecOptions(\n config,\n cwd,\n getRegistryCredVarsFromPackageFiles(packageFiles),\n pythonVersion,\n );\n logger.trace({ cwd, cmd }, 'pip-compile command');\n logger.trace({ env: execOptions.extraEnv }, 'pip-compile extra env vars');\n await exec(cmd, execOptions);\n const status = await getRepoStatus();\n if (status?.modified.includes(outputFileName)) {\n result.push({\n file: {\n type: 'addition',\n path: outputFileName,\n contents: await readLocalFile(outputFileName, 'utf8'),\n },\n });\n }\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'pip-compile: Failed to run command');\n result.push({\n artifactError: {\n lockFile: outputFileName,\n stderr: err.message,\n },\n });\n }\n }\n logger.debug('pip-compile: Returning updated output file(s)');\n return result.length === 0 ? null : result;\n}\n"]}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { quote } from 'shlex';\nimport upath from 'upath';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { exec } from '../../../util/exec';\nimport {\n deleteLocalFile,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs';\nimport { getRepoStatus } from '../../../util/git';\nimport { extractPackageFileFlags as extractRequirementsFileFlags } from '../pip_requirements/common';\nimport type {\n PackageFileContent,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../types';\nimport {\n extractHeaderCommand,\n extractPythonVersion,\n getExecOptions,\n getRegistryCredVarsFromPackageFiles,\n matchManager,\n} from './common';\nimport type { PipCompileArgs } from './types';\nimport { inferCommandExecDir } from './utils';\n\nfunction haveCredentialsInPipEnvironmentVariables(): boolean {\n if (process.env.PIP_INDEX_URL) {\n try {\n const indexUrl = new URL(process.env.PIP_INDEX_URL);\n if (!!indexUrl.username || !!indexUrl.password) {\n return true;\n }\n } catch {\n // Assume that an invalid URL contains credentials, just in case\n return true;\n }\n }\n\n try {\n if (process.env.PIP_EXTRA_INDEX_URL) {\n return process.env.PIP_EXTRA_INDEX_URL.split(' ')\n .map((urlString) => new URL(urlString))\n .some((url) => !!url.username || !!url.password);\n }\n } catch {\n // Assume that an invalid URL contains credentials, just in case\n return true;\n }\n\n return false;\n}\n\nexport function constructPipCompileCmd(\n compileArgs: PipCompileArgs,\n upgradePackages: Upgrade[] = [],\n): string {\n if (compileArgs.commandType === 'custom') {\n throw new Error(\n 'Detected custom command, header modified or set by CUSTOM_COMPILE_COMMAND',\n );\n }\n\n if (!compileArgs.outputFile) {\n logger.debug(`pip-compile: implicit output file`);\n }\n // safeguard against index url leak if not explicitly set by an option\n if (\n compileArgs.commandType === 'pip-compile' &&\n !compileArgs.noEmitIndexUrl &&\n !compileArgs.emitIndexUrl &&\n haveCredentialsInPipEnvironmentVariables()\n ) {\n compileArgs.argv.splice(1, 0, '--no-emit-index-url');\n }\n for (const dep of upgradePackages) {\n compileArgs.argv.push(\n `--upgrade-package=${quote(dep.depName + '==' + dep.newVersion)}`,\n );\n }\n return compileArgs.argv.map(quote).join(' ');\n}\n\nexport async function updateArtifacts({\n packageFileName: inputFileName,\n newPackageFileContent: newInputContent,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n if (!config.lockFiles) {\n logger.warn(\n { packageFileName: inputFileName },\n 'pip-compile: No lock files associated with a package file',\n );\n return null;\n }\n logger.debug(\n `pipCompile.updateArtifacts(${inputFileName}->${JSON.stringify(\n config.lockFiles,\n )})`,\n );\n const result: UpdateArtifactsResult[] = [];\n for (const outputFileName of config.lockFiles) {\n const existingOutput = await readLocalFile(outputFileName, 'utf8');\n if (!existingOutput) {\n logger.debug('pip-compile: No output file found');\n return null;\n }\n try {\n await writeLocalFile(inputFileName, newInputContent);\n // TODO(not7cd): use --upgrade option instead deleting\n if (config.isLockFileMaintenance) {\n await deleteLocalFile(outputFileName);\n }\n const compileArgs = extractHeaderCommand(existingOutput, outputFileName);\n let pythonVersion: string | undefined;\n if (compileArgs.commandType === 'uv') {\n pythonVersion = compileArgs.pythonVersion;\n } else {\n pythonVersion = extractPythonVersion(existingOutput, outputFileName);\n }\n const cwd = inferCommandExecDir(outputFileName, compileArgs.outputFile);\n const upgradePackages = updatedDeps.filter((dep) => dep.isLockfileUpdate);\n const packageFiles: PackageFileContent[] = [];\n for (const name of compileArgs.sourceFiles) {\n const manager = matchManager(name);\n if (manager === 'pip_requirements') {\n const path = upath.join(cwd, name);\n const content = await readLocalFile(path, 'utf8');\n if (content) {\n const packageFile = extractRequirementsFileFlags(content);\n if (packageFile) {\n packageFiles.push(packageFile);\n }\n }\n }\n }\n const cmd = constructPipCompileCmd(compileArgs, upgradePackages);\n const execOptions = await getExecOptions(\n config,\n compileArgs.commandType,\n cwd,\n getRegistryCredVarsFromPackageFiles(packageFiles),\n pythonVersion,\n );\n logger.trace({ cwd, cmd }, 'pip-compile command');\n logger.trace({ env: execOptions.extraEnv }, 'pip-compile extra env vars');\n await exec(cmd, execOptions);\n const status = await getRepoStatus();\n if (status?.modified.includes(outputFileName)) {\n result.push({\n file: {\n type: 'addition',\n path: outputFileName,\n contents: await readLocalFile(outputFileName, 'utf8'),\n },\n });\n }\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'pip-compile: Failed to run command');\n result.push({\n artifactError: {\n lockFile: outputFileName,\n stderr: err.message,\n },\n });\n }\n }\n logger.debug('pip-compile: Returning updated output file(s)');\n return result.length === 0 ? null : result;\n}\n"]}
@@ -1,14 +1,16 @@
1
- import type { ExecOptions, ExtraEnv } from '../../../util/exec/types';
1
+ import type { ExecOptions, ExtraEnv, ToolConstraint } from '../../../util/exec/types';
2
2
  import type { PackageFileContent, UpdateArtifactsConfig } from '../types';
3
3
  import type { CommandType, PipCompileArgs, SupportedManagers } from './types';
4
4
  export declare function getPythonVersionConstraint(config: UpdateArtifactsConfig, extractedPythonVersion: string | undefined): string | undefined | null;
5
5
  export declare function getPipToolsVersionConstraint(config: UpdateArtifactsConfig): string;
6
- export declare function getExecOptions(config: UpdateArtifactsConfig, cwd: string, extraEnv: ExtraEnv<string>, extractedPythonVersion: string | undefined): Promise<ExecOptions>;
6
+ export declare function getUvVersionConstraint(config: UpdateArtifactsConfig): string;
7
+ export declare function getToolVersionConstraint(config: UpdateArtifactsConfig, commandType: CommandType): ToolConstraint;
8
+ export declare function getExecOptions(config: UpdateArtifactsConfig, commandType: CommandType, cwd: string, extraEnv: ExtraEnv<string>, extractedPythonVersion: string | undefined): Promise<ExecOptions>;
7
9
  export declare const constraintLineRegex: RegExp;
8
10
  export declare const disallowedPipOptions: string[];
9
11
  export declare const optionsWithArguments: string[];
10
12
  export declare const allowedOptions: Record<CommandType, string[]>;
11
13
  export declare function extractHeaderCommand(content: string, fileName: string): PipCompileArgs;
12
- export declare function extractPythonVersion(commandType: CommandType, content: string, fileName: string): string | undefined;
14
+ export declare function extractPythonVersion(content: string, fileName: string): string | undefined;
13
15
  export declare function getRegistryCredVarsFromPackageFiles(packageFiles: PackageFileContent[]): ExtraEnv<string>;
14
16
  export declare function matchManager(filename: string): SupportedManagers | 'unknown';
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.allowedOptions = exports.optionsWithArguments = exports.disallowedPipOptions = exports.constraintLineRegex = void 0;
4
4
  exports.getPythonVersionConstraint = getPythonVersionConstraint;
5
5
  exports.getPipToolsVersionConstraint = getPipToolsVersionConstraint;
6
+ exports.getUvVersionConstraint = getUvVersionConstraint;
7
+ exports.getToolVersionConstraint = getToolVersionConstraint;
6
8
  exports.getExecOptions = getExecOptions;
7
9
  exports.extractHeaderCommand = extractHeaderCommand;
8
10
  exports.extractPythonVersion = extractPythonVersion;
@@ -40,9 +42,29 @@ function getPipToolsVersionConstraint(config) {
40
42
  }
41
43
  return '';
42
44
  }
43
- async function getExecOptions(config, cwd, extraEnv, extractedPythonVersion) {
45
+ function getUvVersionConstraint(config) {
46
+ const { constraints = {} } = config;
47
+ const { uv } = constraints;
48
+ if (is_1.default.string(uv)) {
49
+ logger_1.logger.debug('Using uv constraint from config');
50
+ return uv;
51
+ }
52
+ return '';
53
+ }
54
+ function getToolVersionConstraint(config, commandType) {
55
+ if (commandType === 'uv') {
56
+ return {
57
+ toolName: 'uv',
58
+ constraint: getUvVersionConstraint(config),
59
+ };
60
+ }
61
+ return {
62
+ toolName: 'pip-tools',
63
+ constraint: getPipToolsVersionConstraint(config),
64
+ };
65
+ }
66
+ async function getExecOptions(config, commandType, cwd, extraEnv, extractedPythonVersion) {
44
67
  const constraint = getPythonVersionConstraint(config, extractedPythonVersion);
45
- const pipToolsConstraint = getPipToolsVersionConstraint(config);
46
68
  const execOptions = {
47
69
  cwd: (0, util_1.ensureLocalPath)(cwd),
48
70
  docker: {},
@@ -52,10 +74,7 @@ async function getExecOptions(config, cwd, extraEnv, extractedPythonVersion) {
52
74
  toolName: 'python',
53
75
  constraint,
54
76
  },
55
- {
56
- toolName: 'pip-tools',
57
- constraint: pipToolsConstraint,
58
- },
77
+ getToolVersionConstraint(config, commandType),
59
78
  ],
60
79
  extraEnv: {
61
80
  PIP_CACHE_DIR: await (0, fs_1.ensureCacheDir)('pip'),
@@ -81,7 +100,11 @@ const pipOptionsWithArguments = [
81
100
  '--constraint',
82
101
  ...commonOptionsWithArguments,
83
102
  ];
84
- const uvOptionsWithArguments = ['--constraints', ...commonOptionsWithArguments];
103
+ const uvOptionsWithArguments = [
104
+ '--constraints',
105
+ '--python-version',
106
+ ...commonOptionsWithArguments,
107
+ ];
85
108
  exports.optionsWithArguments = [
86
109
  ...pipOptionsWithArguments,
87
110
  ...uvOptionsWithArguments,
@@ -173,6 +196,9 @@ function extractHeaderCommand(content, fileName) {
173
196
  }
174
197
  result.outputFile = upath_1.default.normalize(value);
175
198
  }
199
+ else if (option === '--python-version') {
200
+ result.pythonVersion = value;
201
+ }
176
202
  else if (option === '--index-url') {
177
203
  if (result.indexUrl) {
178
204
  throw new Error('Cannot use multiple --index-url options');
@@ -211,12 +237,7 @@ function extractHeaderCommand(content, fileName) {
211
237
  return result;
212
238
  }
213
239
  const pythonVersionRegex = (0, regex_1.regEx)(/^(#.*?\r?\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\d+(\.\d+)*)\s/, 'i');
214
- function extractPythonVersion(commandType, content, fileName) {
215
- // uv's headers do not include the Python version
216
- // https://github.com/astral-sh/uv/issues/3588
217
- if (commandType === 'uv') {
218
- return;
219
- }
240
+ function extractPythonVersion(content, fileName) {
220
241
  const match = pythonVersionRegex.exec(content);
221
242
  if (match?.groups === undefined) {
222
243
  logger_1.logger.warn({ fileName, content }, 'pip-compile: failed to extract Python version from header in file');
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/common.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { split } from 'shlex';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { isNotNullOrUndefined } from '../../../util/array';\nimport type { ExecOptions, ExtraEnv } from '../../../util/exec/types';\nimport { ensureCacheDir } from '../../../util/fs';\nimport { ensureLocalPath } from '../../../util/fs/util';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport type { PackageFileContent, UpdateArtifactsConfig } from '../types';\nimport type { CommandType, PipCompileArgs, SupportedManagers } from './types';\n\nexport function getPythonVersionConstraint(\n config: UpdateArtifactsConfig,\n extractedPythonVersion: string | undefined,\n): string | undefined | null {\n const { constraints = {} } = config;\n const { python } = constraints;\n\n if (python) {\n logger.debug('Using python constraint from config');\n return python;\n }\n\n if (extractedPythonVersion) {\n logger.debug('Using python constraint extracted from the lock file');\n return `==${extractedPythonVersion}`;\n }\n\n return undefined;\n}\nexport function getPipToolsVersionConstraint(\n config: UpdateArtifactsConfig,\n): string {\n const { constraints = {} } = config;\n const { pipTools } = constraints;\n\n if (is.string(pipTools)) {\n logger.debug('Using pipTools constraint from config');\n return pipTools;\n }\n\n return '';\n}\nexport async function getExecOptions(\n config: UpdateArtifactsConfig,\n cwd: string,\n extraEnv: ExtraEnv<string>,\n extractedPythonVersion: string | undefined,\n): Promise<ExecOptions> {\n const constraint = getPythonVersionConstraint(config, extractedPythonVersion);\n const pipToolsConstraint = getPipToolsVersionConstraint(config);\n const execOptions: ExecOptions = {\n cwd: ensureLocalPath(cwd),\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [\n {\n toolName: 'python',\n constraint,\n },\n {\n toolName: 'pip-tools',\n constraint: pipToolsConstraint,\n },\n ],\n extraEnv: {\n PIP_CACHE_DIR: await ensureCacheDir('pip'),\n PIP_NO_INPUT: 'true', // ensure pip doesn't block forever waiting for credentials on stdin\n PIP_KEYRING_PROVIDER: 'import',\n PYTHON_KEYRING_BACKEND: 'keyrings.envvars.keyring.EnvvarsKeyring',\n ...extraEnv,\n },\n };\n return execOptions;\n}\n\nexport const constraintLineRegex = regEx(\n /^(#.*?\\r?\\n)+# {4}(?<command>\\S*)(?<arguments> .*?)?\\r?\\n/,\n);\n\nexport const disallowedPipOptions = [\n '--no-header', // header is required by this manager\n];\nconst commonOptionsWithArguments = [\n '--output-file',\n '--extra',\n '--extra-index-url',\n];\nconst pipOptionsWithArguments = [\n '--resolver',\n '--constraint',\n ...commonOptionsWithArguments,\n];\nconst uvOptionsWithArguments = ['--constraints', ...commonOptionsWithArguments];\nexport const optionsWithArguments = [\n ...pipOptionsWithArguments,\n ...uvOptionsWithArguments,\n];\nconst allowedCommonOptions = [\n '-v',\n '--generate-hashes',\n '--emit-index-url',\n '--index-url',\n];\nexport const allowedOptions: Record<CommandType, string[]> = {\n 'pip-compile': [\n '--all-extras',\n '--allow-unsafe',\n '--generate-hashes',\n '--no-emit-index-url',\n '--strip-extras',\n ...allowedCommonOptions,\n ...pipOptionsWithArguments,\n ],\n uv: [\n '--no-strip-extras',\n '--universal',\n ...allowedCommonOptions,\n ...uvOptionsWithArguments,\n ],\n custom: [],\n};\n\n// TODO(not7cd): test on all correct headers, even with CUSTOM_COMPILE_COMMAND\nexport function extractHeaderCommand(\n content: string,\n fileName: string,\n): PipCompileArgs {\n const compileCommand = constraintLineRegex.exec(content);\n if (compileCommand?.groups === undefined) {\n throw new Error(\n `Failed to extract command from header in ${fileName} ${content}`,\n );\n }\n logger.trace(\n `pip-compile: found header in ${fileName}: \\n${compileCommand[0]}`,\n );\n const command = compileCommand.groups.command;\n const argv = [command];\n let commandType: CommandType;\n if (command === 'pip-compile') {\n commandType = 'pip-compile';\n } else if (command === 'uv') {\n commandType = 'uv';\n } else {\n commandType = 'custom';\n }\n if (compileCommand.groups.arguments) {\n argv.push(...split(compileCommand.groups.arguments));\n }\n logger.debug(\n { fileName, argv, commandType },\n `pip-compile: extracted command from header`,\n );\n\n const result: PipCompileArgs = {\n argv,\n command,\n commandType,\n outputFile: '',\n sourceFiles: [],\n };\n for (const arg of argv.slice(1)) {\n if (commandType === 'uv' && ['pip', 'compile'].includes(arg)) {\n continue;\n }\n // TODO(not7cd): check for \"--option -- argument\" case\n if (!arg.startsWith('-')) {\n result.sourceFiles.push(arg);\n continue;\n }\n throwForDisallowedOption(arg);\n throwForNoEqualSignInOptionWithArgument(arg);\n throwForUnknownOption(commandType, arg);\n\n if (arg.includes('=')) {\n const [option, value] = arg.split('=');\n if (option === '--extra') {\n result.extra = result.extra ?? [];\n result.extra.push(value);\n } else if (option === '--extra-index-url') {\n result.extraIndexUrl = result.extraIndexUrl ?? [];\n result.extraIndexUrl.push(value);\n // TODO: add to secrets? next PR\n } else if (['--constraint', '--constraints'].includes(option)) {\n result.constraintsFiles = result.constraintsFiles ?? [];\n result.constraintsFiles.push(value);\n } else if (option === '--output-file') {\n if (result.outputFile) {\n throw new Error('Cannot use multiple --output-file options');\n }\n result.outputFile = upath.normalize(value);\n } else if (option === '--index-url') {\n if (result.indexUrl) {\n throw new Error('Cannot use multiple --index-url options');\n }\n result.indexUrl = value;\n // TODO: add to secrets? next PR\n } else {\n logger.debug({ option }, `pip-compile: option not handled`);\n }\n continue;\n }\n if (arg === '--no-emit-index-url') {\n result.noEmitIndexUrl = true;\n continue;\n }\n if (arg === '--emit-index-url') {\n result.emitIndexUrl = true;\n continue;\n }\n if (arg === '--all-extras') {\n result.allExtras = true;\n continue;\n }\n\n logger.debug({ option: arg }, `pip-compile: option not handled`);\n }\n logger.trace(\n {\n ...result,\n },\n 'Parsed pip-compile command from header',\n );\n if (result.noEmitIndexUrl && result.emitIndexUrl) {\n throw new Error('Cannot use both --no-emit-index-url and --emit-index-url');\n }\n if (result.sourceFiles.length === 0) {\n throw new Error(\n 'No source files detected in command, pass at least one package file explicitly',\n );\n }\n return result;\n}\n\nconst pythonVersionRegex = regEx(\n /^(#.*?\\r?\\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\\d+(\\.\\d+)*)\\s/,\n 'i',\n);\n\nexport function extractPythonVersion(\n commandType: CommandType,\n content: string,\n fileName: string,\n): string | undefined {\n // uv's headers do not include the Python version\n // https://github.com/astral-sh/uv/issues/3588\n if (commandType === 'uv') {\n return;\n }\n const match = pythonVersionRegex.exec(content);\n if (match?.groups === undefined) {\n logger.warn(\n { fileName, content },\n 'pip-compile: failed to extract Python version from header in file',\n );\n return undefined;\n }\n logger.trace(\n `pip-compile: found Python version header in ${fileName}: \\n${match[0]}`,\n );\n const { pythonVersion } = match.groups;\n logger.debug(\n { fileName, pythonVersion },\n `pip-compile: extracted Python version from header`,\n );\n return pythonVersion;\n}\n\nfunction throwForDisallowedOption(arg: string): void {\n if (disallowedPipOptions.includes(arg)) {\n throw new Error(`Option ${arg} not allowed for this manager`);\n }\n}\nfunction throwForNoEqualSignInOptionWithArgument(arg: string): void {\n if (optionsWithArguments.includes(arg)) {\n throw new Error(\n `Option ${arg} must have equal sign '=' separating it's argument`,\n );\n }\n}\nfunction throwForUnknownOption(commandType: CommandType, arg: string): void {\n if (arg.includes('=')) {\n const [option] = arg.split('=');\n if (allowedOptions[commandType].includes(option)) {\n return;\n }\n }\n if (allowedOptions[commandType].includes(arg)) {\n return;\n }\n throw new Error(`Option ${arg} not supported (yet)`);\n}\n\nfunction getRegistryCredEnvVars(\n url: URL,\n index: number,\n): Record<string, string> {\n const hostRule = hostRules.find({ url: url.href });\n logger.debug(hostRule, `Found host rule for url ${url.href}`);\n const ret: Record<string, string> = {};\n if (!!hostRule.username || !!hostRule.password) {\n ret[`KEYRING_SERVICE_NAME_${index}`] = url.hostname;\n ret[`KEYRING_SERVICE_USERNAME_${index}`] = hostRule.username ?? '';\n ret[`KEYRING_SERVICE_PASSWORD_${index}`] = hostRule.password ?? '';\n }\n return ret;\n}\n\nfunction cleanUrl(url: string): URL | null {\n try {\n // Strip everything but protocol, host, and port\n const urlObj = new URL(url);\n return new URL(urlObj.origin);\n } catch {\n return null;\n }\n}\n\nexport function getRegistryCredVarsFromPackageFiles(\n packageFiles: PackageFileContent[],\n): ExtraEnv<string> {\n const urls: string[] = [];\n for (const packageFile of packageFiles) {\n urls.push(\n ...(packageFile.registryUrls ?? []),\n ...(packageFile.additionalRegistryUrls ?? []),\n );\n }\n logger.debug(urls, 'Extracted registry URLs from package files');\n\n const uniqueHosts = new Set<URL>(\n urls.map(cleanUrl).filter(isNotNullOrUndefined),\n );\n\n let allCreds: ExtraEnv<string> = {};\n for (const [index, host] of [...uniqueHosts].entries()) {\n const hostCreds = getRegistryCredEnvVars(host, index);\n allCreds = {\n ...allCreds,\n ...hostCreds,\n };\n }\n\n return allCreds;\n}\n\nexport function matchManager(filename: string): SupportedManagers | 'unknown' {\n if (filename.endsWith('setup.py')) {\n return 'pip_setup';\n }\n if (filename.endsWith('setup.cfg')) {\n return 'setup-cfg';\n }\n if (filename.endsWith('pyproject.toml')) {\n return 'pep621';\n }\n // naive, could be improved, maybe use pip_requirements.fileMatch\n if (filename.endsWith('.in') || filename.endsWith('.txt')) {\n return 'pip_requirements';\n }\n return 'unknown';\n}\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/common.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { split } from 'shlex';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { isNotNullOrUndefined } from '../../../util/array';\nimport type {\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../util/exec/types';\nimport { ensureCacheDir } from '../../../util/fs';\nimport { ensureLocalPath } from '../../../util/fs/util';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport type { PackageFileContent, UpdateArtifactsConfig } from '../types';\nimport type { CommandType, PipCompileArgs, SupportedManagers } from './types';\n\nexport function getPythonVersionConstraint(\n config: UpdateArtifactsConfig,\n extractedPythonVersion: string | undefined,\n): string | undefined | null {\n const { constraints = {} } = config;\n const { python } = constraints;\n\n if (python) {\n logger.debug('Using python constraint from config');\n return python;\n }\n\n if (extractedPythonVersion) {\n logger.debug('Using python constraint extracted from the lock file');\n return `==${extractedPythonVersion}`;\n }\n\n return undefined;\n}\n\nexport function getPipToolsVersionConstraint(\n config: UpdateArtifactsConfig,\n): string {\n const { constraints = {} } = config;\n const { pipTools } = constraints;\n\n if (is.string(pipTools)) {\n logger.debug('Using pipTools constraint from config');\n return pipTools;\n }\n\n return '';\n}\n\nexport function getUvVersionConstraint(config: UpdateArtifactsConfig): string {\n const { constraints = {} } = config;\n const { uv } = constraints;\n\n if (is.string(uv)) {\n logger.debug('Using uv constraint from config');\n return uv;\n }\n\n return '';\n}\n\nexport function getToolVersionConstraint(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n): ToolConstraint {\n if (commandType === 'uv') {\n return {\n toolName: 'uv',\n constraint: getUvVersionConstraint(config),\n };\n }\n\n return {\n toolName: 'pip-tools',\n constraint: getPipToolsVersionConstraint(config),\n };\n}\n\nexport async function getExecOptions(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n cwd: string,\n extraEnv: ExtraEnv<string>,\n extractedPythonVersion: string | undefined,\n): Promise<ExecOptions> {\n const constraint = getPythonVersionConstraint(config, extractedPythonVersion);\n const execOptions: ExecOptions = {\n cwd: ensureLocalPath(cwd),\n docker: {},\n userConfiguredEnv: config.env,\n toolConstraints: [\n {\n toolName: 'python',\n constraint,\n },\n getToolVersionConstraint(config, commandType),\n ],\n extraEnv: {\n PIP_CACHE_DIR: await ensureCacheDir('pip'),\n PIP_NO_INPUT: 'true', // ensure pip doesn't block forever waiting for credentials on stdin\n PIP_KEYRING_PROVIDER: 'import',\n PYTHON_KEYRING_BACKEND: 'keyrings.envvars.keyring.EnvvarsKeyring',\n ...extraEnv,\n },\n };\n return execOptions;\n}\n\nexport const constraintLineRegex = regEx(\n /^(#.*?\\r?\\n)+# {4}(?<command>\\S*)(?<arguments> .*?)?\\r?\\n/,\n);\n\nexport const disallowedPipOptions = [\n '--no-header', // header is required by this manager\n];\nconst commonOptionsWithArguments = [\n '--output-file',\n '--extra',\n '--extra-index-url',\n];\nconst pipOptionsWithArguments = [\n '--resolver',\n '--constraint',\n ...commonOptionsWithArguments,\n];\nconst uvOptionsWithArguments = [\n '--constraints',\n '--python-version',\n ...commonOptionsWithArguments,\n];\nexport const optionsWithArguments = [\n ...pipOptionsWithArguments,\n ...uvOptionsWithArguments,\n];\nconst allowedCommonOptions = [\n '-v',\n '--generate-hashes',\n '--emit-index-url',\n '--index-url',\n];\nexport const allowedOptions: Record<CommandType, string[]> = {\n 'pip-compile': [\n '--all-extras',\n '--allow-unsafe',\n '--generate-hashes',\n '--no-emit-index-url',\n '--strip-extras',\n ...allowedCommonOptions,\n ...pipOptionsWithArguments,\n ],\n uv: [\n '--no-strip-extras',\n '--universal',\n ...allowedCommonOptions,\n ...uvOptionsWithArguments,\n ],\n custom: [],\n};\n\n// TODO(not7cd): test on all correct headers, even with CUSTOM_COMPILE_COMMAND\nexport function extractHeaderCommand(\n content: string,\n fileName: string,\n): PipCompileArgs {\n const compileCommand = constraintLineRegex.exec(content);\n if (compileCommand?.groups === undefined) {\n throw new Error(\n `Failed to extract command from header in ${fileName} ${content}`,\n );\n }\n logger.trace(\n `pip-compile: found header in ${fileName}: \\n${compileCommand[0]}`,\n );\n const command = compileCommand.groups.command;\n const argv = [command];\n let commandType: CommandType;\n if (command === 'pip-compile') {\n commandType = 'pip-compile';\n } else if (command === 'uv') {\n commandType = 'uv';\n } else {\n commandType = 'custom';\n }\n if (compileCommand.groups.arguments) {\n argv.push(...split(compileCommand.groups.arguments));\n }\n logger.debug(\n { fileName, argv, commandType },\n `pip-compile: extracted command from header`,\n );\n\n const result: PipCompileArgs = {\n argv,\n command,\n commandType,\n outputFile: '',\n sourceFiles: [],\n };\n for (const arg of argv.slice(1)) {\n if (commandType === 'uv' && ['pip', 'compile'].includes(arg)) {\n continue;\n }\n // TODO(not7cd): check for \"--option -- argument\" case\n if (!arg.startsWith('-')) {\n result.sourceFiles.push(arg);\n continue;\n }\n throwForDisallowedOption(arg);\n throwForNoEqualSignInOptionWithArgument(arg);\n throwForUnknownOption(commandType, arg);\n\n if (arg.includes('=')) {\n const [option, value] = arg.split('=');\n if (option === '--extra') {\n result.extra = result.extra ?? [];\n result.extra.push(value);\n } else if (option === '--extra-index-url') {\n result.extraIndexUrl = result.extraIndexUrl ?? [];\n result.extraIndexUrl.push(value);\n // TODO: add to secrets? next PR\n } else if (['--constraint', '--constraints'].includes(option)) {\n result.constraintsFiles = result.constraintsFiles ?? [];\n result.constraintsFiles.push(value);\n } else if (option === '--output-file') {\n if (result.outputFile) {\n throw new Error('Cannot use multiple --output-file options');\n }\n result.outputFile = upath.normalize(value);\n } else if (option === '--python-version') {\n result.pythonVersion = value;\n } else if (option === '--index-url') {\n if (result.indexUrl) {\n throw new Error('Cannot use multiple --index-url options');\n }\n result.indexUrl = value;\n // TODO: add to secrets? next PR\n } else {\n logger.debug({ option }, `pip-compile: option not handled`);\n }\n continue;\n }\n if (arg === '--no-emit-index-url') {\n result.noEmitIndexUrl = true;\n continue;\n }\n if (arg === '--emit-index-url') {\n result.emitIndexUrl = true;\n continue;\n }\n if (arg === '--all-extras') {\n result.allExtras = true;\n continue;\n }\n\n logger.debug({ option: arg }, `pip-compile: option not handled`);\n }\n logger.trace(\n {\n ...result,\n },\n 'Parsed pip-compile command from header',\n );\n if (result.noEmitIndexUrl && result.emitIndexUrl) {\n throw new Error('Cannot use both --no-emit-index-url and --emit-index-url');\n }\n if (result.sourceFiles.length === 0) {\n throw new Error(\n 'No source files detected in command, pass at least one package file explicitly',\n );\n }\n return result;\n}\n\nconst pythonVersionRegex = regEx(\n /^(#.*?\\r?\\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\\d+(\\.\\d+)*)\\s/,\n 'i',\n);\n\nexport function extractPythonVersion(\n content: string,\n fileName: string,\n): string | undefined {\n const match = pythonVersionRegex.exec(content);\n if (match?.groups === undefined) {\n logger.warn(\n { fileName, content },\n 'pip-compile: failed to extract Python version from header in file',\n );\n return undefined;\n }\n logger.trace(\n `pip-compile: found Python version header in ${fileName}: \\n${match[0]}`,\n );\n const { pythonVersion } = match.groups;\n logger.debug(\n { fileName, pythonVersion },\n `pip-compile: extracted Python version from header`,\n );\n return pythonVersion;\n}\n\nfunction throwForDisallowedOption(arg: string): void {\n if (disallowedPipOptions.includes(arg)) {\n throw new Error(`Option ${arg} not allowed for this manager`);\n }\n}\nfunction throwForNoEqualSignInOptionWithArgument(arg: string): void {\n if (optionsWithArguments.includes(arg)) {\n throw new Error(\n `Option ${arg} must have equal sign '=' separating it's argument`,\n );\n }\n}\nfunction throwForUnknownOption(commandType: CommandType, arg: string): void {\n if (arg.includes('=')) {\n const [option] = arg.split('=');\n if (allowedOptions[commandType].includes(option)) {\n return;\n }\n }\n if (allowedOptions[commandType].includes(arg)) {\n return;\n }\n throw new Error(`Option ${arg} not supported (yet)`);\n}\n\nfunction getRegistryCredEnvVars(\n url: URL,\n index: number,\n): Record<string, string> {\n const hostRule = hostRules.find({ url: url.href });\n logger.debug(hostRule, `Found host rule for url ${url.href}`);\n const ret: Record<string, string> = {};\n if (!!hostRule.username || !!hostRule.password) {\n ret[`KEYRING_SERVICE_NAME_${index}`] = url.hostname;\n ret[`KEYRING_SERVICE_USERNAME_${index}`] = hostRule.username ?? '';\n ret[`KEYRING_SERVICE_PASSWORD_${index}`] = hostRule.password ?? '';\n }\n return ret;\n}\n\nfunction cleanUrl(url: string): URL | null {\n try {\n // Strip everything but protocol, host, and port\n const urlObj = new URL(url);\n return new URL(urlObj.origin);\n } catch {\n return null;\n }\n}\n\nexport function getRegistryCredVarsFromPackageFiles(\n packageFiles: PackageFileContent[],\n): ExtraEnv<string> {\n const urls: string[] = [];\n for (const packageFile of packageFiles) {\n urls.push(\n ...(packageFile.registryUrls ?? []),\n ...(packageFile.additionalRegistryUrls ?? []),\n );\n }\n logger.debug(urls, 'Extracted registry URLs from package files');\n\n const uniqueHosts = new Set<URL>(\n urls.map(cleanUrl).filter(isNotNullOrUndefined),\n );\n\n let allCreds: ExtraEnv<string> = {};\n for (const [index, host] of [...uniqueHosts].entries()) {\n const hostCreds = getRegistryCredEnvVars(host, index);\n allCreds = {\n ...allCreds,\n ...hostCreds,\n };\n }\n\n return allCreds;\n}\n\nexport function matchManager(filename: string): SupportedManagers | 'unknown' {\n if (filename.endsWith('setup.py')) {\n return 'pip_setup';\n }\n if (filename.endsWith('setup.cfg')) {\n return 'setup-cfg';\n }\n if (filename.endsWith('pyproject.toml')) {\n return 'pep621';\n }\n // naive, could be improved, maybe use pip_requirements.fileMatch\n if (filename.endsWith('.in') || filename.endsWith('.txt')) {\n return 'pip_requirements';\n }\n return 'unknown';\n}\n"]}