renovate 41.0.0-next.21 → 41.0.0-next.23

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 (399) hide show
  1. package/dist/config/decrypt.js +5 -3
  2. package/dist/config/decrypt.js.map +1 -1
  3. package/dist/config/options/index.js +45 -3
  4. package/dist/config/options/index.js.map +1 -1
  5. package/dist/config/presets/github/index.js +2 -2
  6. package/dist/config/presets/github/index.js.map +1 -1
  7. package/dist/config/presets/internal/group.js +21 -0
  8. package/dist/config/presets/internal/group.js.map +1 -1
  9. package/dist/config/presets/internal/workarounds.js +11 -0
  10. package/dist/config/presets/internal/workarounds.js.map +1 -1
  11. package/dist/config/secrets.d.ts +2 -0
  12. package/dist/config/secrets.js +10 -77
  13. package/dist/config/secrets.js.map +1 -1
  14. package/dist/config/types.d.ts +9 -1
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/config-validator.js +4 -2
  17. package/dist/config-validator.js.map +1 -1
  18. package/dist/data/monorepo.json +10 -1
  19. package/dist/data-files.generated.d.ts +1 -1
  20. package/dist/data-files.generated.js +2 -1
  21. package/dist/data-files.generated.js.map +1 -1
  22. package/dist/instrumentation/index.js +5 -3
  23. package/dist/instrumentation/index.js.map +1 -1
  24. package/dist/instrumentation/reporting.d.ts +2 -2
  25. package/dist/instrumentation/reporting.js +3 -7
  26. package/dist/instrumentation/reporting.js.map +1 -1
  27. package/dist/instrumentation/types.d.ts +11 -5
  28. package/dist/instrumentation/types.js.map +1 -1
  29. package/dist/instrumentation/utils.js +3 -2
  30. package/dist/instrumentation/utils.js.map +1 -1
  31. package/dist/logger/once.js +2 -0
  32. package/dist/logger/once.js.map +1 -1
  33. package/dist/modules/datasource/aws-eks-addon/schema.d.ts +14 -38
  34. package/dist/modules/datasource/aws-eks-addon/schema.js +11 -22
  35. package/dist/modules/datasource/aws-eks-addon/schema.js.map +1 -1
  36. package/dist/modules/datasource/cdnjs/index.js +2 -1
  37. package/dist/modules/datasource/cdnjs/index.js.map +1 -1
  38. package/dist/modules/datasource/crate/index.js +7 -2
  39. package/dist/modules/datasource/crate/index.js.map +1 -1
  40. package/dist/modules/datasource/docker/ecr.js +2 -2
  41. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  42. package/dist/modules/datasource/docker/index.js +26 -9
  43. package/dist/modules/datasource/docker/index.js.map +1 -1
  44. package/dist/modules/datasource/docker/schema.d.ts +9 -87
  45. package/dist/modules/datasource/docker/schema.js +1 -1
  46. package/dist/modules/datasource/docker/schema.js.map +1 -1
  47. package/dist/modules/datasource/git-refs/base.js +2 -6
  48. package/dist/modules/datasource/git-refs/base.js.map +1 -1
  49. package/dist/modules/datasource/go/goproxy-parser.js +6 -2
  50. package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
  51. package/dist/modules/datasource/go/index.js +4 -2
  52. package/dist/modules/datasource/go/index.js.map +1 -1
  53. package/dist/modules/datasource/go/releases-goproxy.js +3 -2
  54. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  55. package/dist/modules/datasource/index.js +1 -1
  56. package/dist/modules/datasource/index.js.map +1 -1
  57. package/dist/modules/datasource/maven/index.js +5 -19
  58. package/dist/modules/datasource/maven/index.js.map +1 -1
  59. package/dist/modules/datasource/maven/util.js +8 -1
  60. package/dist/modules/datasource/maven/util.js.map +1 -1
  61. package/dist/modules/datasource/npm/get.js +2 -1
  62. package/dist/modules/datasource/npm/get.js.map +1 -1
  63. package/dist/modules/datasource/npm/npmrc.js +2 -1
  64. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  65. package/dist/modules/datasource/nuget/v3.js +3 -2
  66. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  67. package/dist/modules/datasource/pod/index.js +3 -1
  68. package/dist/modules/datasource/pod/index.js.map +1 -1
  69. package/dist/modules/datasource/pypi/index.js +2 -1
  70. package/dist/modules/datasource/pypi/index.js.map +1 -1
  71. package/dist/modules/datasource/types.d.ts +2 -1
  72. package/dist/modules/datasource/types.js.map +1 -1
  73. package/dist/modules/manager/asdf/upgradeable-tooling.js +8 -0
  74. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  75. package/dist/modules/manager/bazel/rules/git.d.ts +7 -7
  76. package/dist/modules/manager/bazel/rules/git.js +6 -1
  77. package/dist/modules/manager/bazel/rules/git.js.map +1 -1
  78. package/dist/modules/manager/bazel-module/bazelrc.d.ts +2 -0
  79. package/dist/modules/manager/bazel-module/bazelrc.js +30 -1
  80. package/dist/modules/manager/bazel-module/bazelrc.js.map +1 -1
  81. package/dist/modules/manager/bazel-module/parser/rules.js +1 -0
  82. package/dist/modules/manager/bazel-module/parser/rules.js.map +1 -1
  83. package/dist/modules/manager/bazel-module/rules.d.ts +62 -24
  84. package/dist/modules/manager/bazel-module/rules.js +10 -4
  85. package/dist/modules/manager/bazel-module/rules.js.map +1 -1
  86. package/dist/modules/manager/cargo/extract.js +2 -1
  87. package/dist/modules/manager/cargo/extract.js.map +1 -1
  88. package/dist/modules/manager/composer/schema.js +1 -1
  89. package/dist/modules/manager/composer/schema.js.map +1 -1
  90. package/dist/modules/manager/docker-compose/extract.js +2 -0
  91. package/dist/modules/manager/docker-compose/extract.js.map +1 -1
  92. package/dist/modules/manager/docker-compose/schema.d.ts +120 -9
  93. package/dist/modules/manager/docker-compose/schema.js +35 -4
  94. package/dist/modules/manager/docker-compose/schema.js.map +1 -1
  95. package/dist/modules/manager/fingerprint.generated.js +19 -19
  96. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  97. package/dist/modules/manager/fleet/extract.js +2 -2
  98. package/dist/modules/manager/fleet/extract.js.map +1 -1
  99. package/dist/modules/manager/fleet/schema.d.ts +5 -5
  100. package/dist/modules/manager/fleet/schema.js +1 -1
  101. package/dist/modules/manager/fleet/schema.js.map +1 -1
  102. package/dist/modules/manager/flux/extract.js +1 -1
  103. package/dist/modules/manager/flux/extract.js.map +1 -1
  104. package/dist/modules/manager/git-submodules/extract.js +2 -6
  105. package/dist/modules/manager/git-submodules/extract.js.map +1 -1
  106. package/dist/modules/manager/git-submodules/update.js +3 -7
  107. package/dist/modules/manager/git-submodules/update.js.map +1 -1
  108. package/dist/modules/manager/github-actions/extract.js +1 -1
  109. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  110. package/dist/modules/manager/gleam/artifacts.js +5 -1
  111. package/dist/modules/manager/gleam/artifacts.js.map +1 -1
  112. package/dist/modules/manager/gomod/artifacts.js +8 -6
  113. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  114. package/dist/modules/manager/gradle/extract.js +4 -1
  115. package/dist/modules/manager/gradle/extract.js.map +1 -1
  116. package/dist/modules/manager/gradle/utils.js +8 -14
  117. package/dist/modules/manager/gradle/utils.js.map +1 -1
  118. package/dist/modules/manager/helmfile/utils.js +1 -1
  119. package/dist/modules/manager/helmfile/utils.js.map +1 -1
  120. package/dist/modules/manager/helmv3/artifacts.js +8 -2
  121. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  122. package/dist/modules/manager/helmv3/common.d.ts +1 -1
  123. package/dist/modules/manager/helmv3/common.js +9 -3
  124. package/dist/modules/manager/helmv3/common.js.map +1 -1
  125. package/dist/modules/manager/hermit/artifacts.js +2 -2
  126. package/dist/modules/manager/hermit/artifacts.js.map +1 -1
  127. package/dist/modules/manager/kubernetes/extract.js +2 -2
  128. package/dist/modules/manager/kubernetes/extract.js.map +1 -1
  129. package/dist/modules/manager/kustomize/artifacts.js +1 -1
  130. package/dist/modules/manager/kustomize/artifacts.js.map +1 -1
  131. package/dist/modules/manager/maven/extract.d.ts +1 -1
  132. package/dist/modules/manager/maven/extract.js +82 -24
  133. package/dist/modules/manager/maven/extract.js.map +1 -1
  134. package/dist/modules/manager/maven/index.d.ts +0 -1
  135. package/dist/modules/manager/maven/index.js +2 -4
  136. package/dist/modules/manager/maven/index.js.map +1 -1
  137. package/dist/modules/manager/maven/update.js +15 -0
  138. package/dist/modules/manager/maven/update.js.map +1 -1
  139. package/dist/modules/manager/mise/backends.d.ts +48 -0
  140. package/dist/modules/manager/mise/backends.js +219 -0
  141. package/dist/modules/manager/mise/backends.js.map +1 -0
  142. package/dist/modules/manager/mise/extract.js +77 -10
  143. package/dist/modules/manager/mise/extract.js.map +1 -1
  144. package/dist/modules/manager/mise/index.js +37 -2
  145. package/dist/modules/manager/mise/index.js.map +1 -1
  146. package/dist/modules/manager/mise/schema.d.ts +24 -0
  147. package/dist/modules/manager/mise/schema.js +7 -1
  148. package/dist/modules/manager/mise/schema.js.map +1 -1
  149. package/dist/modules/manager/mise/upgradeable-tooling.js +210 -1
  150. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  151. package/dist/modules/manager/mix/artifacts.js +5 -0
  152. package/dist/modules/manager/mix/artifacts.js.map +1 -1
  153. package/dist/modules/manager/npm/extract/index.js +27 -24
  154. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  155. package/dist/modules/manager/npm/post-update/index.js +9 -3
  156. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  157. package/dist/modules/manager/npm/post-update/npm.js +8 -5
  158. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  159. package/dist/modules/manager/npm/post-update/pnpm.js +4 -0
  160. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  161. package/dist/modules/manager/npm/post-update/utils.js +17 -0
  162. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  163. package/dist/modules/manager/npm/post-update/yarn.js +7 -5
  164. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  165. package/dist/modules/manager/npm/schema.d.ts +116 -0
  166. package/dist/modules/manager/npm/schema.js +9 -0
  167. package/dist/modules/manager/npm/schema.js.map +1 -1
  168. package/dist/modules/manager/npm/utils.js +1 -1
  169. package/dist/modules/manager/npm/utils.js.map +1 -1
  170. package/dist/modules/manager/nuget/util.js +9 -0
  171. package/dist/modules/manager/nuget/util.js.map +1 -1
  172. package/dist/modules/manager/pep621/processors/uv.js +1 -1
  173. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  174. package/dist/modules/manager/pip-compile/artifacts.js +6 -4
  175. package/dist/modules/manager/pip-compile/artifacts.js.map +1 -1
  176. package/dist/modules/manager/pip_requirements/common.js +2 -1
  177. package/dist/modules/manager/pip_requirements/common.js.map +1 -1
  178. package/dist/modules/manager/poetry/schema.js +2 -1
  179. package/dist/modules/manager/poetry/schema.js.map +1 -1
  180. package/dist/modules/manager/pre-commit/index.js +2 -1
  181. package/dist/modules/manager/pre-commit/index.js.map +1 -1
  182. package/dist/modules/manager/renovate-config-presets/index.d.ts +1 -1
  183. package/dist/modules/manager/renovate-config-presets/index.js +1 -3
  184. package/dist/modules/manager/renovate-config-presets/index.js.map +1 -1
  185. package/dist/modules/manager/terraform/extractors/others/modules.js +4 -9
  186. package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
  187. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.d.ts +1 -0
  188. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js +9 -4
  189. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js.map +1 -1
  190. package/dist/modules/manager/terraform/extractors/resources/utils.d.ts +1 -0
  191. package/dist/modules/manager/terraform/extractors/resources/utils.js +4 -1
  192. package/dist/modules/manager/terraform/extractors/resources/utils.js.map +1 -1
  193. package/dist/modules/manager/terraform/hcl/types.d.ts +1 -0
  194. package/dist/modules/manager/terraform/hcl/types.js.map +1 -1
  195. package/dist/modules/manager/types.d.ts +3 -0
  196. package/dist/modules/manager/types.js.map +1 -1
  197. package/dist/modules/platform/bitbucket-server/index.js +4 -2
  198. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  199. package/dist/modules/platform/codecommit/codecommit-client.js +7 -5
  200. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  201. package/dist/modules/platform/codecommit/index.js +7 -5
  202. package/dist/modules/platform/codecommit/index.js.map +1 -1
  203. package/dist/modules/platform/default-scm.d.ts +1 -0
  204. package/dist/modules/platform/default-scm.js +3 -0
  205. package/dist/modules/platform/default-scm.js.map +1 -1
  206. package/dist/modules/platform/gerrit/client.d.ts +6 -7
  207. package/dist/modules/platform/gerrit/client.js +58 -38
  208. package/dist/modules/platform/gerrit/client.js.map +1 -1
  209. package/dist/modules/platform/gerrit/index.d.ts +4 -3
  210. package/dist/modules/platform/gerrit/index.js +103 -42
  211. package/dist/modules/platform/gerrit/index.js.map +1 -1
  212. package/dist/modules/platform/gerrit/scm.d.ts +1 -1
  213. package/dist/modules/platform/gerrit/scm.js +56 -34
  214. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  215. package/dist/modules/platform/gerrit/types.d.ts +23 -12
  216. package/dist/modules/platform/gerrit/types.js.map +1 -1
  217. package/dist/modules/platform/gerrit/utils.d.ts +8 -4
  218. package/dist/modules/platform/gerrit/utils.js +24 -12
  219. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  220. package/dist/modules/platform/gitea/index.js +7 -2
  221. package/dist/modules/platform/gitea/index.js.map +1 -1
  222. package/dist/modules/platform/gitea/types.d.ts +2 -1
  223. package/dist/modules/platform/gitea/types.js.map +1 -1
  224. package/dist/modules/platform/github/index.js +12 -26
  225. package/dist/modules/platform/github/index.js.map +1 -1
  226. package/dist/modules/platform/gitlab/code-owners.d.ts +2 -0
  227. package/dist/modules/platform/gitlab/code-owners.js +38 -0
  228. package/dist/modules/platform/gitlab/code-owners.js.map +1 -0
  229. package/dist/modules/platform/gitlab/index.d.ts +2 -1
  230. package/dist/modules/platform/gitlab/index.js +29 -56
  231. package/dist/modules/platform/gitlab/index.js.map +1 -1
  232. package/dist/modules/platform/gitlab/pr-cache.d.ts +21 -0
  233. package/dist/modules/platform/gitlab/pr-cache.js +124 -0
  234. package/dist/modules/platform/gitlab/pr-cache.js.map +1 -0
  235. package/dist/modules/platform/gitlab/types.d.ts +7 -0
  236. package/dist/modules/platform/gitlab/types.js.map +1 -1
  237. package/dist/modules/platform/gitlab/utils.js +1 -0
  238. package/dist/modules/platform/gitlab/utils.js.map +1 -1
  239. package/dist/modules/platform/types.d.ts +8 -0
  240. package/dist/modules/platform/types.js.map +1 -1
  241. package/dist/modules/versioning/api.js +2 -0
  242. package/dist/modules/versioning/api.js.map +1 -1
  243. package/dist/modules/versioning/cargo/index.js +20 -0
  244. package/dist/modules/versioning/cargo/index.js.map +1 -1
  245. package/dist/modules/versioning/composer/index.js +4 -0
  246. package/dist/modules/versioning/composer/index.js.map +1 -1
  247. package/dist/modules/versioning/lambda-node/index.d.ts +8 -0
  248. package/dist/modules/versioning/lambda-node/index.js +27 -0
  249. package/dist/modules/versioning/lambda-node/index.js.map +1 -0
  250. package/dist/modules/versioning/lambda-node/schedule.d.ts +10 -0
  251. package/dist/modules/versioning/lambda-node/schedule.js +19 -0
  252. package/dist/modules/versioning/lambda-node/schedule.js.map +1 -0
  253. package/dist/modules/versioning/npm/index.js +2 -0
  254. package/dist/modules/versioning/npm/index.js.map +1 -1
  255. package/dist/modules/versioning/npm/range.js +4 -0
  256. package/dist/modules/versioning/npm/range.js.map +1 -1
  257. package/dist/modules/versioning/pep440/index.js +1 -1
  258. package/dist/modules/versioning/pep440/index.js.map +1 -1
  259. package/dist/modules/versioning/python/index.d.ts +1 -0
  260. package/dist/modules/versioning/python/index.js +9 -0
  261. package/dist/modules/versioning/python/index.js.map +1 -1
  262. package/dist/modules/versioning/semver/index.d.ts +1 -0
  263. package/dist/modules/versioning/semver/index.js +15 -0
  264. package/dist/modules/versioning/semver/index.js.map +1 -1
  265. package/dist/modules/versioning/semver-coerced/index.js +9 -0
  266. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  267. package/dist/modules/versioning/types.d.ts +1 -0
  268. package/dist/modules/versioning/types.js.map +1 -1
  269. package/dist/util/cache/memory/index.d.ts +1 -0
  270. package/dist/util/cache/memory/index.js +17 -6
  271. package/dist/util/cache/memory/index.js.map +1 -1
  272. package/dist/util/cache/package/index.js +2 -1
  273. package/dist/util/cache/package/index.js.map +1 -1
  274. package/dist/util/cache/package/key.js +1 -1
  275. package/dist/util/cache/package/key.js.map +1 -1
  276. package/dist/util/cache/package/types.d.ts +2 -2
  277. package/dist/util/cache/package/types.js.map +1 -1
  278. package/dist/util/cache/repository/impl/s3.js +2 -1
  279. package/dist/util/cache/repository/impl/s3.js.map +1 -1
  280. package/dist/util/cache/repository/types.d.ts +3 -0
  281. package/dist/util/cache/repository/types.js.map +1 -1
  282. package/dist/util/env.d.ts +6 -0
  283. package/dist/util/env.js +13 -0
  284. package/dist/util/env.js.map +1 -1
  285. package/dist/util/exec/common.js +2 -1
  286. package/dist/util/exec/common.js.map +1 -1
  287. package/dist/util/exec/containerbase.js +2 -1
  288. package/dist/util/exec/containerbase.js.map +1 -1
  289. package/dist/util/exec/env.js +1 -0
  290. package/dist/util/exec/env.js.map +1 -1
  291. package/dist/util/exec/utils.d.ts +1 -1
  292. package/dist/util/exec/utils.js +1 -1
  293. package/dist/util/exec/utils.js.map +1 -1
  294. package/dist/util/fs/index.js +2 -2
  295. package/dist/util/fs/index.js.map +1 -1
  296. package/dist/util/git/auth.js +4 -2
  297. package/dist/util/git/auth.js.map +1 -1
  298. package/dist/util/git/error.js +2 -1
  299. package/dist/util/git/error.js.map +1 -1
  300. package/dist/util/git/index.d.ts +20 -0
  301. package/dist/util/git/index.js +140 -10
  302. package/dist/util/git/index.js.map +1 -1
  303. package/dist/util/git/types.d.ts +1 -0
  304. package/dist/util/git/types.js.map +1 -1
  305. package/dist/util/github/graphql/datasource-fetcher.js +2 -3
  306. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  307. package/dist/util/github/graphql/query-adapters/tags-query-adapter.d.ts +48 -2
  308. package/dist/util/github/graphql/query-adapters/tags-query-adapter.js +27 -7
  309. package/dist/util/github/graphql/query-adapters/tags-query-adapter.js.map +1 -1
  310. package/dist/util/host-rules.js +4 -3
  311. package/dist/util/host-rules.js.map +1 -1
  312. package/dist/util/http/cache/package-http-cache-provider.d.ts +4 -4
  313. package/dist/util/http/cache/package-http-cache-provider.js +4 -4
  314. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
  315. package/dist/util/http/github.js +20 -12
  316. package/dist/util/http/github.js.map +1 -1
  317. package/dist/util/http/gitlab.js +2 -1
  318. package/dist/util/http/gitlab.js.map +1 -1
  319. package/dist/util/http/http.js +7 -3
  320. package/dist/util/http/http.js.map +1 -1
  321. package/dist/util/interpolator.d.ts +8 -0
  322. package/dist/util/interpolator.js +85 -0
  323. package/dist/util/interpolator.js.map +1 -0
  324. package/dist/util/merge-confidence/index.js +4 -1
  325. package/dist/util/merge-confidence/index.js.map +1 -1
  326. package/dist/util/promises.d.ts +4 -4
  327. package/dist/util/promises.js +3 -4
  328. package/dist/util/promises.js.map +1 -1
  329. package/dist/util/regex.js +3 -2
  330. package/dist/util/regex.js.map +1 -1
  331. package/dist/util/{schema-utils.d.ts → schema-utils/index.d.ts} +2 -2
  332. package/dist/util/{schema-utils.js → schema-utils/index.js} +5 -5
  333. package/dist/util/schema-utils/index.js.map +1 -0
  334. package/dist/util/schema-utils/v4.d.ts +7 -0
  335. package/dist/util/schema-utils/v4.js +64 -0
  336. package/dist/util/schema-utils/v4.js.map +1 -0
  337. package/dist/util/stats.d.ts +13 -2
  338. package/dist/util/stats.js +38 -27
  339. package/dist/util/stats.js.map +1 -1
  340. package/dist/workers/global/config/parse/codespaces.js +7 -4
  341. package/dist/workers/global/config/parse/codespaces.js.map +1 -1
  342. package/dist/workers/global/index.js +7 -5
  343. package/dist/workers/global/index.js.map +1 -1
  344. package/dist/workers/repository/config-migration/branch/migrated-data.js +1 -1
  345. package/dist/workers/repository/config-migration/branch/migrated-data.js.map +1 -1
  346. package/dist/workers/repository/dependency-dashboard.d.ts +1 -0
  347. package/dist/workers/repository/dependency-dashboard.js +47 -0
  348. package/dist/workers/repository/dependency-dashboard.js.map +1 -1
  349. package/dist/workers/repository/index.js +1 -0
  350. package/dist/workers/repository/index.js.map +1 -1
  351. package/dist/workers/repository/init/inherited.js +10 -6
  352. package/dist/workers/repository/init/inherited.js.map +1 -1
  353. package/dist/workers/repository/init/merge.d.ts +2 -2
  354. package/dist/workers/repository/init/merge.js +12 -5
  355. package/dist/workers/repository/init/merge.js.map +1 -1
  356. package/dist/workers/repository/package-files.js +11 -1
  357. package/dist/workers/repository/package-files.js.map +1 -1
  358. package/dist/workers/repository/process/extract-update.d.ts +1 -1
  359. package/dist/workers/repository/process/extract-update.js +15 -10
  360. package/dist/workers/repository/process/extract-update.js.map +1 -1
  361. package/dist/workers/repository/process/index.d.ts +1 -1
  362. package/dist/workers/repository/process/index.js +6 -3
  363. package/dist/workers/repository/process/index.js.map +1 -1
  364. package/dist/workers/repository/process/libyear.js +15 -7
  365. package/dist/workers/repository/process/libyear.js.map +1 -1
  366. package/dist/workers/repository/process/lookup/abandonment.d.ts +3 -0
  367. package/dist/workers/repository/process/lookup/abandonment.js +50 -0
  368. package/dist/workers/repository/process/lookup/abandonment.js.map +1 -0
  369. package/dist/workers/repository/process/lookup/current.js +0 -5
  370. package/dist/workers/repository/process/lookup/current.js.map +1 -1
  371. package/dist/workers/repository/process/lookup/generate.js +10 -0
  372. package/dist/workers/repository/process/lookup/generate.js.map +1 -1
  373. package/dist/workers/repository/process/lookup/index.js +7 -0
  374. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  375. package/dist/workers/repository/process/lookup/timestamps.d.ts +4 -4
  376. package/dist/workers/repository/process/lookup/timestamps.js +10 -10
  377. package/dist/workers/repository/process/lookup/timestamps.js.map +1 -1
  378. package/dist/workers/repository/process/lookup/types.d.ts +4 -0
  379. package/dist/workers/repository/process/lookup/types.js.map +1 -1
  380. package/dist/workers/repository/update/branch/auto-replace.js +30 -7
  381. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  382. package/dist/workers/repository/update/branch/bump-versions.d.ts +2 -0
  383. package/dist/workers/repository/update/branch/bump-versions.js +192 -0
  384. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -0
  385. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +14 -8
  386. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  387. package/dist/workers/repository/update/branch/get-updated.js +3 -4
  388. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  389. package/dist/workers/repository/update/branch/index.js +3 -0
  390. package/dist/workers/repository/update/branch/index.js.map +1 -1
  391. package/dist/workers/repository/update/pr/changelog/release-notes.js +23 -19
  392. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  393. package/dist/workers/repository/update/pr/code-owners.js +13 -9
  394. package/dist/workers/repository/update/pr/code-owners.js.map +1 -1
  395. package/dist/workers/repository/updates/generate.js +1 -0
  396. package/dist/workers/repository/updates/generate.js.map +1 -1
  397. package/package.json +75 -80
  398. package/renovate-schema.json +78 -14
  399. package/dist/util/schema-utils.js.map +0 -1
@@ -23,6 +23,7 @@ const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
23
23
  const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
24
24
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
25
25
  const expose_cjs_1 = require("../expose.cjs");
26
+ const env_1 = require("../util/env");
26
27
  const utils_1 = require("./utils");
27
28
  let instrumentations = [];
28
29
  init();
@@ -40,13 +41,14 @@ function init() {
40
41
  const exporter = new exporter_trace_otlp_http_1.OTLPTraceExporter();
41
42
  spanProcessors.push(new sdk_trace_base_1.BatchSpanProcessor(exporter));
42
43
  }
44
+ const env = (0, env_1.getEnv)();
43
45
  const baseResource = (0, resources_1.resourceFromAttributes)({
44
46
  // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#semantic-attributes-with-sdk-provided-default-value
45
- [semantic_conventions_1.ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME ?? 'renovate',
47
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: env.OTEL_SERVICE_NAME ?? 'renovate',
46
48
  // https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv
47
49
  // https://github.com/open-telemetry/opentelemetry-js/blob/e9d3c71918635d490b6a9ac9f8259265b38394d0/semantic-conventions/src/experimental_attributes.ts#L7688
48
- ['service.namespace']: process.env.OTEL_SERVICE_NAMESPACE ?? 'renovatebot.com',
49
- [semantic_conventions_1.ATTR_SERVICE_VERSION]: process.env.OTEL_SERVICE_VERSION ?? expose_cjs_1.pkg.version,
50
+ ['service.namespace']: env.OTEL_SERVICE_NAMESPACE ?? 'renovatebot.com',
51
+ [semantic_conventions_1.ATTR_SERVICE_VERSION]: env.OTEL_SERVICE_VERSION ?? expose_cjs_1.pkg.version,
50
52
  });
51
53
  const detectedResource = (0, resources_1.detectResources)({
52
54
  detectors: [
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/instrumentation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClientRequest } from 'node:http';\nimport type {\n Context,\n Span,\n SpanOptions,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport * as api from '@opentelemetry/api';\nimport { ProxyTracerProvider, SpanStatusCode } from '@opentelemetry/api';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { BunyanInstrumentation } from '@opentelemetry/instrumentation-bunyan';\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http';\nimport {\n awsBeanstalkDetector,\n awsEc2Detector,\n awsEcsDetector,\n awsEksDetector,\n awsLambdaDetector,\n} from '@opentelemetry/resource-detector-aws';\nimport {\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n} from '@opentelemetry/resource-detector-azure';\nimport { gcpDetector } from '@opentelemetry/resource-detector-gcp';\nimport { gitHubDetector } from '@opentelemetry/resource-detector-github';\nimport {\n detectResources,\n envDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport {\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n type SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport {\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport { pkg } from '../expose.cjs';\nimport {\n isTraceDebuggingEnabled,\n isTraceSendingEnabled,\n isTracingEnabled,\n massageThrowable,\n} from './utils';\n\nlet instrumentations: Instrumentation[] = [];\n\ninit();\n\nexport function init(): void {\n if (!isTracingEnabled()) {\n return;\n }\n\n const spanProcessors: SpanProcessor[] = [];\n // add processors\n if (isTraceDebuggingEnabled()) {\n spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n }\n\n // OTEL specification environment variable\n if (isTraceSendingEnabled()) {\n const exporter = new OTLPTraceExporter();\n spanProcessors.push(new BatchSpanProcessor(exporter));\n }\n\n const baseResource = resourceFromAttributes({\n // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#semantic-attributes-with-sdk-provided-default-value\n [ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME ?? 'renovate',\n // https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n // https://github.com/open-telemetry/opentelemetry-js/blob/e9d3c71918635d490b6a9ac9f8259265b38394d0/semantic-conventions/src/experimental_attributes.ts#L7688\n ['service.namespace']:\n process.env.OTEL_SERVICE_NAMESPACE ?? 'renovatebot.com',\n [ATTR_SERVICE_VERSION]: process.env.OTEL_SERVICE_VERSION ?? pkg.version,\n });\n\n const detectedResource = detectResources({\n detectors: [\n awsBeanstalkDetector,\n awsEc2Detector,\n awsEcsDetector,\n awsEksDetector,\n awsLambdaDetector,\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n gcpDetector,\n gitHubDetector,\n envDetector,\n ],\n });\n\n const traceProvider = new NodeTracerProvider({\n resource: baseResource.merge(detectedResource),\n spanProcessors,\n });\n\n const contextManager = new AsyncLocalStorageContextManager();\n traceProvider.register({\n contextManager,\n });\n\n instrumentations = [\n new HttpInstrumentation({\n /* v8 ignore start -- not easily testable */\n applyCustomAttributesOnSpan: (span, request, response) => {\n // ignore 404 errors when the branch protection of Github could not be found. This is expected if no rules are configured\n if (\n request instanceof ClientRequest &&\n request.host === `api.github.com` &&\n request.path.endsWith(`/protection`) &&\n response.statusCode === 404\n ) {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n },\n /* v8 ignore stop */\n }),\n new BunyanInstrumentation(),\n ];\n registerInstrumentations({\n instrumentations,\n });\n}\n\n/* v8 ignore start -- not easily testable */\n// https://github.com/open-telemetry/opentelemetry-js-api/issues/34\nexport async function shutdown(): Promise<void> {\n const traceProvider = getTracerProvider();\n if (traceProvider instanceof NodeTracerProvider) {\n await traceProvider.shutdown();\n } else if (traceProvider instanceof ProxyTracerProvider) {\n const delegateProvider = traceProvider.getDelegate();\n if (delegateProvider instanceof NodeTracerProvider) {\n await delegateProvider.shutdown();\n }\n }\n}\n/* v8 ignore stop */\n\nexport function disableInstrumentations(): void {\n for (const instrumentation of instrumentations) {\n instrumentation.disable();\n }\n}\n\nexport function getTracerProvider(): TracerProvider {\n return api.trace.getTracerProvider();\n}\n\nfunction getTracer(): Tracer {\n return getTracerProvider().getTracer('renovate');\n}\n\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n): ReturnType<F>;\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n options: SpanOptions,\n): ReturnType<F>;\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n options: SpanOptions = {},\n context: Context = api.context.active(),\n): ReturnType<F> {\n return getTracer().startActiveSpan(name, options, context, (span: Span) => {\n try {\n const ret = fn();\n if (ret instanceof Promise) {\n return ret\n .catch((e) => {\n span.recordException(e);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: massageThrowable(e),\n });\n throw e;\n })\n .finally(() => span.end()) as ReturnType<F>;\n }\n span.end();\n return ret;\n } catch (e) {\n span.recordException(e);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: massageThrowable(e),\n });\n span.end();\n throw e;\n }\n });\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/instrumentation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClientRequest } from 'node:http';\nimport type {\n Context,\n Span,\n SpanOptions,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport * as api from '@opentelemetry/api';\nimport { ProxyTracerProvider, SpanStatusCode } from '@opentelemetry/api';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { BunyanInstrumentation } from '@opentelemetry/instrumentation-bunyan';\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http';\nimport {\n awsBeanstalkDetector,\n awsEc2Detector,\n awsEcsDetector,\n awsEksDetector,\n awsLambdaDetector,\n} from '@opentelemetry/resource-detector-aws';\nimport {\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n} from '@opentelemetry/resource-detector-azure';\nimport { gcpDetector } from '@opentelemetry/resource-detector-gcp';\nimport { gitHubDetector } from '@opentelemetry/resource-detector-github';\nimport {\n detectResources,\n envDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport {\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n type SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport {\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport { pkg } from '../expose.cjs';\nimport { getEnv } from '../util/env';\nimport {\n isTraceDebuggingEnabled,\n isTraceSendingEnabled,\n isTracingEnabled,\n massageThrowable,\n} from './utils';\n\nlet instrumentations: Instrumentation[] = [];\n\ninit();\n\nexport function init(): void {\n if (!isTracingEnabled()) {\n return;\n }\n\n const spanProcessors: SpanProcessor[] = [];\n // add processors\n if (isTraceDebuggingEnabled()) {\n spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n }\n\n // OTEL specification environment variable\n if (isTraceSendingEnabled()) {\n const exporter = new OTLPTraceExporter();\n spanProcessors.push(new BatchSpanProcessor(exporter));\n }\n\n const env = getEnv();\n const baseResource = resourceFromAttributes({\n // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#semantic-attributes-with-sdk-provided-default-value\n [ATTR_SERVICE_NAME]: env.OTEL_SERVICE_NAME ?? 'renovate',\n // https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n // https://github.com/open-telemetry/opentelemetry-js/blob/e9d3c71918635d490b6a9ac9f8259265b38394d0/semantic-conventions/src/experimental_attributes.ts#L7688\n ['service.namespace']: env.OTEL_SERVICE_NAMESPACE ?? 'renovatebot.com',\n [ATTR_SERVICE_VERSION]: env.OTEL_SERVICE_VERSION ?? pkg.version,\n });\n\n const detectedResource = detectResources({\n detectors: [\n awsBeanstalkDetector,\n awsEc2Detector,\n awsEcsDetector,\n awsEksDetector,\n awsLambdaDetector,\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n gcpDetector,\n gitHubDetector,\n envDetector,\n ],\n });\n\n const traceProvider = new NodeTracerProvider({\n resource: baseResource.merge(detectedResource),\n spanProcessors,\n });\n\n const contextManager = new AsyncLocalStorageContextManager();\n traceProvider.register({\n contextManager,\n });\n\n instrumentations = [\n new HttpInstrumentation({\n /* v8 ignore start -- not easily testable */\n applyCustomAttributesOnSpan: (span, request, response) => {\n // ignore 404 errors when the branch protection of Github could not be found. This is expected if no rules are configured\n if (\n request instanceof ClientRequest &&\n request.host === `api.github.com` &&\n request.path.endsWith(`/protection`) &&\n response.statusCode === 404\n ) {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n },\n /* v8 ignore stop */\n }),\n new BunyanInstrumentation(),\n ];\n registerInstrumentations({\n instrumentations,\n });\n}\n\n/* v8 ignore start -- not easily testable */\n// https://github.com/open-telemetry/opentelemetry-js-api/issues/34\nexport async function shutdown(): Promise<void> {\n const traceProvider = getTracerProvider();\n if (traceProvider instanceof NodeTracerProvider) {\n await traceProvider.shutdown();\n } else if (traceProvider instanceof ProxyTracerProvider) {\n const delegateProvider = traceProvider.getDelegate();\n if (delegateProvider instanceof NodeTracerProvider) {\n await delegateProvider.shutdown();\n }\n }\n}\n/* v8 ignore stop */\n\nexport function disableInstrumentations(): void {\n for (const instrumentation of instrumentations) {\n instrumentation.disable();\n }\n}\n\nexport function getTracerProvider(): TracerProvider {\n return api.trace.getTracerProvider();\n}\n\nfunction getTracer(): Tracer {\n return getTracerProvider().getTracer('renovate');\n}\n\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n): ReturnType<F>;\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n options: SpanOptions,\n): ReturnType<F>;\nexport function instrument<F extends () => ReturnType<F>>(\n name: string,\n fn: F,\n options: SpanOptions = {},\n context: Context = api.context.active(),\n): ReturnType<F> {\n return getTracer().startActiveSpan(name, options, context, (span: Span) => {\n try {\n const ret = fn();\n if (ret instanceof Promise) {\n return ret\n .catch((e) => {\n span.recordException(e);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: massageThrowable(e),\n });\n throw e;\n })\n .finally(() => span.end()) as ReturnType<F>;\n }\n span.end();\n return ret;\n } catch (e) {\n span.recordException(e);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: massageThrowable(e),\n });\n span.end();\n throw e;\n }\n });\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { RenovateConfig } from '../config/types';
2
2
  import type { BranchCache } from '../util/cache/repository/types';
3
3
  import type { ExtractResult } from '../workers/repository/process/extract-update';
4
- import type { Report } from './types';
4
+ import type { LibYearsWithStatus, Report } from './types';
5
5
  /**
6
6
  * Reset the report
7
7
  * Should only be used for testing
@@ -9,7 +9,7 @@ import type { Report } from './types';
9
9
  export declare function resetReport(): void;
10
10
  export declare function addBranchStats(config: RenovateConfig, branchesInformation: Partial<BranchCache>[]): void;
11
11
  export declare function addExtractionStats(config: RenovateConfig, extractResult: ExtractResult): void;
12
- export declare function addLibYears(config: RenovateConfig, managerLibYears: Record<string, number>, totalLibYears: number, totalDepsCount: number, outdatedDepsCount: number): void;
12
+ export declare function addLibYears(config: RenovateConfig, libYearsWithDepCount: LibYearsWithStatus): void;
13
13
  export declare function finalizeReport(): void;
14
14
  export declare function exportStats(config: RenovateConfig): Promise<void>;
15
15
  export declare function getReport(): Report;
@@ -40,17 +40,13 @@ function addExtractionStats(config, extractResult) {
40
40
  report.repositories[config.repository].packageFiles =
41
41
  extractResult.packageFiles;
42
42
  }
43
- function addLibYears(config, managerLibYears, totalLibYears, totalDepsCount, outdatedDepsCount) {
43
+ function addLibYears(config, libYearsWithDepCount) {
44
44
  if (is_1.default.nullOrUndefined(config.reportType)) {
45
45
  return;
46
46
  }
47
47
  coerceRepo(config.repository);
48
- report.repositories[config.repository].libYears = {
49
- managerLibYears,
50
- totalLibYears,
51
- totalDepsCount,
52
- outdatedDepsCount,
53
- };
48
+ report.repositories[config.repository].libYearsWithStatus =
49
+ libYearsWithDepCount;
54
50
  }
55
51
  function finalizeReport() {
56
52
  const allProblems = structuredClone((0, logger_1.getProblems)());
@@ -1 +1 @@
1
- {"version":3,"file":"reporting.js","sourceRoot":"","sources":["../../lib/instrumentation/reporting.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PutObjectCommandInput } from '@aws-sdk/client-s3';\nimport { PutObjectCommand } from '@aws-sdk/client-s3';\nimport is from '@sindresorhus/is';\nimport type { RenovateConfig } from '../config/types';\nimport { getProblems, logger } from '../logger';\nimport type { BranchCache } from '../util/cache/repository/types';\nimport { writeSystemFile } from '../util/fs';\nimport { getS3Client, parseS3Url } from '../util/s3';\nimport type { ExtractResult } from '../workers/repository/process/extract-update';\nimport type { Report } from './types';\n\nconst report: Report = {\n problems: [],\n repositories: {},\n};\n\n/**\n * Reset the report\n * Should only be used for testing\n */\nexport function resetReport(): void {\n report.problems = [];\n report.repositories = {};\n}\n\nexport function addBranchStats(\n config: RenovateConfig,\n branchesInformation: Partial<BranchCache>[],\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].branches = branchesInformation;\n}\n\nexport function addExtractionStats(\n config: RenovateConfig,\n extractResult: ExtractResult,\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].packageFiles =\n extractResult.packageFiles;\n}\n\nexport function addLibYears(\n config: RenovateConfig,\n managerLibYears: Record<string, number>,\n totalLibYears: number,\n totalDepsCount: number,\n outdatedDepsCount: number,\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].libYears = {\n managerLibYears,\n totalLibYears,\n totalDepsCount,\n outdatedDepsCount,\n };\n}\n\nexport function finalizeReport(): void {\n const allProblems = structuredClone(getProblems());\n for (const problem of allProblems) {\n const repository = problem.repository;\n delete problem.repository;\n\n // if the problem can be connected to a repository add it their else add to the root list\n if (repository) {\n coerceRepo(repository);\n report.repositories[repository].problems.push(problem);\n } else {\n report.problems.push(problem);\n }\n }\n}\n\nexport async function exportStats(config: RenovateConfig): Promise<void> {\n try {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n if (config.reportType === 'logging') {\n logger.info({ report }, 'Printing report');\n return;\n }\n\n if (config.reportType === 'file') {\n const path = config.reportPath!;\n await writeSystemFile(path, JSON.stringify(report));\n logger.debug({ path }, 'Writing report');\n return;\n }\n\n if (config.reportType === 's3') {\n const s3Url = parseS3Url(config.reportPath!);\n if (is.nullOrUndefined(s3Url)) {\n logger.warn(\n { reportPath: config.reportPath },\n 'Failed to parse s3 URL',\n );\n return;\n }\n\n const s3Params: PutObjectCommandInput = {\n Bucket: s3Url.Bucket,\n Key: s3Url.Key,\n Body: JSON.stringify(report),\n ContentType: 'application/json',\n };\n\n const client = getS3Client(config.s3Endpoint, config.s3PathStyle);\n const command = new PutObjectCommand(s3Params);\n await client.send(command);\n }\n } catch (err) {\n logger.warn({ err }, 'Reporting.exportStats() - failure');\n }\n}\n\nexport function getReport(): Report {\n return structuredClone(report);\n}\n\nfunction coerceRepo(repository: string): void {\n if (!is.undefined(report.repositories[repository])) {\n return;\n }\n\n report.repositories[repository] = {\n problems: [],\n branches: [],\n packageFiles: {},\n };\n}\n"]}
1
+ {"version":3,"file":"reporting.js","sourceRoot":"","sources":["../../lib/instrumentation/reporting.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PutObjectCommandInput } from '@aws-sdk/client-s3';\nimport { PutObjectCommand } from '@aws-sdk/client-s3';\nimport is from '@sindresorhus/is';\nimport type { RenovateConfig } from '../config/types';\nimport { getProblems, logger } from '../logger';\nimport type { BranchCache } from '../util/cache/repository/types';\nimport { writeSystemFile } from '../util/fs';\nimport { getS3Client, parseS3Url } from '../util/s3';\nimport type { ExtractResult } from '../workers/repository/process/extract-update';\nimport type { LibYearsWithStatus, Report } from './types';\n\nconst report: Report = {\n problems: [],\n repositories: {},\n};\n\n/**\n * Reset the report\n * Should only be used for testing\n */\nexport function resetReport(): void {\n report.problems = [];\n report.repositories = {};\n}\n\nexport function addBranchStats(\n config: RenovateConfig,\n branchesInformation: Partial<BranchCache>[],\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].branches = branchesInformation;\n}\n\nexport function addExtractionStats(\n config: RenovateConfig,\n extractResult: ExtractResult,\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].packageFiles =\n extractResult.packageFiles;\n}\n\nexport function addLibYears(\n config: RenovateConfig,\n libYearsWithDepCount: LibYearsWithStatus,\n): void {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n coerceRepo(config.repository!);\n report.repositories[config.repository!].libYearsWithStatus =\n libYearsWithDepCount;\n}\n\nexport function finalizeReport(): void {\n const allProblems = structuredClone(getProblems());\n for (const problem of allProblems) {\n const repository = problem.repository;\n delete problem.repository;\n\n // if the problem can be connected to a repository add it their else add to the root list\n if (repository) {\n coerceRepo(repository);\n report.repositories[repository].problems.push(problem);\n } else {\n report.problems.push(problem);\n }\n }\n}\n\nexport async function exportStats(config: RenovateConfig): Promise<void> {\n try {\n if (is.nullOrUndefined(config.reportType)) {\n return;\n }\n\n if (config.reportType === 'logging') {\n logger.info({ report }, 'Printing report');\n return;\n }\n\n if (config.reportType === 'file') {\n const path = config.reportPath!;\n await writeSystemFile(path, JSON.stringify(report));\n logger.debug({ path }, 'Writing report');\n return;\n }\n\n if (config.reportType === 's3') {\n const s3Url = parseS3Url(config.reportPath!);\n if (is.nullOrUndefined(s3Url)) {\n logger.warn(\n { reportPath: config.reportPath },\n 'Failed to parse s3 URL',\n );\n return;\n }\n\n const s3Params: PutObjectCommandInput = {\n Bucket: s3Url.Bucket,\n Key: s3Url.Key,\n Body: JSON.stringify(report),\n ContentType: 'application/json',\n };\n\n const client = getS3Client(config.s3Endpoint, config.s3PathStyle);\n const command = new PutObjectCommand(s3Params);\n await client.send(command);\n }\n } catch (err) {\n logger.warn({ err }, 'Reporting.exportStats() - failure');\n }\n}\n\nexport function getReport(): Report {\n return structuredClone(report);\n}\n\nfunction coerceRepo(repository: string): void {\n if (!is.undefined(report.repositories[repository])) {\n return;\n }\n\n report.repositories[repository] = {\n problems: [],\n branches: [],\n packageFiles: {},\n };\n}\n"]}
@@ -31,12 +31,18 @@ interface RepoReport {
31
31
  problems: BunyanRecord[];
32
32
  branches: Partial<BranchCache>[];
33
33
  packageFiles: Record<string, PackageFile[]>;
34
- libYears?: LibYears;
34
+ libYearsWithStatus?: LibYearsWithStatus;
35
+ }
36
+ export interface LibYearsWithStatus {
37
+ libYears: LibYears;
38
+ dependencyStatus: DependencyStatus;
35
39
  }
36
40
  export interface LibYears {
37
- outdatedDepsCount: number;
38
- totalDepsCount: number;
39
- totalLibYears: number;
40
- managerLibYears: Record<string, number>;
41
+ total: number;
42
+ managers: Record<string, number>;
43
+ }
44
+ export interface DependencyStatus {
45
+ outdated: number;
46
+ total: number;
41
47
  }
42
48
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/instrumentation/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Attributes, SpanKind } from '@opentelemetry/api';\nimport type { BunyanRecord } from '../logger/types';\nimport type { PackageFile } from '../modules/manager/types';\nimport type { BranchCache } from '../util/cache/repository/types';\n\n/**\n * The instrumentation decorator parameters.\n */\nexport interface SpanParameters {\n /**\n * The name of the span\n */\n name: string;\n\n /**\n * Attributes which should be added to the span\n */\n attributes?: Attributes | undefined;\n\n /**\n * Should this span be added to the root span or to the current active span\n */\n ignoreParentSpan?: boolean;\n\n /**\n * Type of span this represents. Default: SpanKind.Internal\n */\n kind?: SpanKind;\n}\n\nexport interface Report {\n problems: BunyanRecord[];\n repositories: Record<string, RepoReport>;\n}\n\ninterface RepoReport {\n problems: BunyanRecord[];\n branches: Partial<BranchCache>[];\n packageFiles: Record<string, PackageFile[]>;\n libYears?: LibYears;\n}\n\nexport interface LibYears {\n outdatedDepsCount: number;\n totalDepsCount: number;\n totalLibYears: number;\n managerLibYears: Record<string, number>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/instrumentation/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Attributes, SpanKind } from '@opentelemetry/api';\nimport type { BunyanRecord } from '../logger/types';\nimport type { PackageFile } from '../modules/manager/types';\nimport type { BranchCache } from '../util/cache/repository/types';\n\n/**\n * The instrumentation decorator parameters.\n */\nexport interface SpanParameters {\n /**\n * The name of the span\n */\n name: string;\n\n /**\n * Attributes which should be added to the span\n */\n attributes?: Attributes | undefined;\n\n /**\n * Should this span be added to the root span or to the current active span\n */\n ignoreParentSpan?: boolean;\n\n /**\n * Type of span this represents. Default: SpanKind.Internal\n */\n kind?: SpanKind;\n}\n\nexport interface Report {\n problems: BunyanRecord[];\n repositories: Record<string, RepoReport>;\n}\n\ninterface RepoReport {\n problems: BunyanRecord[];\n branches: Partial<BranchCache>[];\n packageFiles: Record<string, PackageFile[]>;\n libYearsWithStatus?: LibYearsWithStatus;\n}\n\nexport interface LibYearsWithStatus {\n libYears: LibYears;\n dependencyStatus: DependencyStatus;\n}\n\nexport interface LibYears {\n total: number;\n managers: Record<string, number>;\n}\n\nexport interface DependencyStatus {\n outdated: number;\n total: number;\n}\n"]}
@@ -6,14 +6,15 @@ exports.isTraceSendingEnabled = isTraceSendingEnabled;
6
6
  exports.massageThrowable = massageThrowable;
7
7
  const tslib_1 = require("tslib");
8
8
  const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
9
+ const env_1 = require("../util/env");
9
10
  function isTracingEnabled() {
10
11
  return isTraceDebuggingEnabled() || isTraceSendingEnabled();
11
12
  }
12
13
  function isTraceDebuggingEnabled() {
13
- return !!process.env.RENOVATE_TRACING_CONSOLE_EXPORTER;
14
+ return !!(0, env_1.getEnv)().RENOVATE_TRACING_CONSOLE_EXPORTER;
14
15
  }
15
16
  function isTraceSendingEnabled() {
16
- return !!process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
17
+ return !!(0, env_1.getEnv)().OTEL_EXPORTER_OTLP_ENDPOINT;
17
18
  }
18
19
  function massageThrowable(e) {
19
20
  if (is_1.default.nullOrUndefined(e)) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/instrumentation/utils.ts"],"names":[],"mappings":";;AAEA,4CAEC;AAED,0DAEC;AAED,sDAEC;AAED,4CAQC;;AAtBD,kEAAkC;AAElC,SAAgB,gBAAgB;IAC9B,OAAO,uBAAuB,EAAE,IAAI,qBAAqB,EAAE,CAAC;AAC9D,CAAC;AAED,SAAgB,uBAAuB;IACrC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;AACzD,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;AACnD,CAAC;AAED,SAAgB,gBAAgB,CAAC,CAAU;IACzC,IAAI,YAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;AAC/E,CAAC","sourcesContent":["import is from '@sindresorhus/is';\n\nexport function isTracingEnabled(): boolean {\n return isTraceDebuggingEnabled() || isTraceSendingEnabled();\n}\n\nexport function isTraceDebuggingEnabled(): boolean {\n return !!process.env.RENOVATE_TRACING_CONSOLE_EXPORTER;\n}\n\nexport function isTraceSendingEnabled(): boolean {\n return !!process.env.OTEL_EXPORTER_OTLP_ENDPOINT;\n}\n\nexport function massageThrowable(e: unknown): string | undefined {\n if (is.nullOrUndefined(e)) {\n return undefined;\n }\n if (e instanceof Error) {\n return e.message;\n }\n return String(e); // eslint-disable-line @typescript-eslint/no-base-to-string\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/instrumentation/utils.ts"],"names":[],"mappings":";;AAGA,4CAEC;AAED,0DAEC;AAED,sDAEC;AAED,4CAQC;;AAvBD,kEAAkC;AAClC,qCAAqC;AAErC,SAAgB,gBAAgB;IAC9B,OAAO,uBAAuB,EAAE,IAAI,qBAAqB,EAAE,CAAC;AAC9D,CAAC;AAED,SAAgB,uBAAuB;IACrC,OAAO,CAAC,CAAC,IAAA,YAAM,GAAE,CAAC,iCAAiC,CAAC;AACtD,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO,CAAC,CAAC,IAAA,YAAM,GAAE,CAAC,2BAA2B,CAAC;AAChD,CAAC;AAED,SAAgB,gBAAgB,CAAC,CAAU;IACzC,IAAI,YAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;AAC/E,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { getEnv } from '../util/env';\n\nexport function isTracingEnabled(): boolean {\n return isTraceDebuggingEnabled() || isTraceSendingEnabled();\n}\n\nexport function isTraceDebuggingEnabled(): boolean {\n return !!getEnv().RENOVATE_TRACING_CONSOLE_EXPORTER;\n}\n\nexport function isTraceSendingEnabled(): boolean {\n return !!getEnv().OTEL_EXPORTER_OTLP_ENDPOINT;\n}\n\nexport function massageThrowable(e: unknown): string | undefined {\n if (is.nullOrUndefined(e)) {\n return undefined;\n }\n if (e instanceof Error) {\n return e.message;\n }\n return String(e); // eslint-disable-line @typescript-eslint/no-base-to-string\n}\n"]}
@@ -13,6 +13,8 @@ exports.reset = reset;
13
13
  */
14
14
  function getCallSite(omitFn) {
15
15
  const stackTraceLimitOrig = Error.stackTraceLimit;
16
+ // We don't use `Error.captureStackTrace` directly, we simply restore it later.
17
+ // eslint-disable-next-line @typescript-eslint/unbound-method
16
18
  const prepareStackTraceOrig = Error.prepareStackTrace;
17
19
  let result = null;
18
20
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"once.js","sourceRoot":"","sources":["../../lib/logger/once.ts"],"names":[],"mappings":";;AAyCA,oBAYC;AAMD,sBAEC;AA3DD,wCAAwC;AAExC;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC;IAClD,MAAM,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAEtD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAE/C,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,iBAAiB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QACjD,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,2CAA2C;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ;IACV,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,eAAe,GAAG,mBAAmB,CAAC;QAC5C,KAAK,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;AAE/B,SAAgB,IAAI,CAAC,QAAoB,EAAE,SAAiB,IAAI;IAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK;IACnB,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,CAAC","sourcesContent":["type OmitFn = (...args: any[]) => any;\n\n// TODO: use `callsite` package instead?\n\n/**\n * Get the single frame of this function's callers stack.\n *\n * @param omitFn Starting from this function, stack frames will be ignored.\n * @returns The string containing file name, line number and column name.\n *\n * @example getCallSite() // => 'Object.<anonymous> (/path/to/file.js:10:15)'\n */\nfunction getCallSite(omitFn: OmitFn): string | null {\n const stackTraceLimitOrig = Error.stackTraceLimit;\n const prepareStackTraceOrig = Error.prepareStackTrace;\n\n let result: string | null = null;\n try {\n const res: { stack: string[] } = { stack: [] };\n\n Error.stackTraceLimit = 1;\n Error.prepareStackTrace = (_err, stack) => stack;\n Error.captureStackTrace(res, omitFn);\n\n const [callsite] = res.stack;\n if (callsite) {\n result = callsite.toString();\n }\n /* v8 ignore next 2 -- should not happen */\n } catch {\n // no-op\n } finally {\n Error.stackTraceLimit = stackTraceLimitOrig;\n Error.prepareStackTrace = prepareStackTraceOrig;\n }\n\n return result;\n}\n\nconst keys = new Set<string>();\n\nexport function once(callback: () => void, omitFn: OmitFn = once): void {\n const key = getCallSite(omitFn);\n\n /* v8 ignore next 3 -- should not happen */\n if (!key) {\n return;\n }\n\n if (!keys.has(key)) {\n keys.add(key);\n callback();\n }\n}\n\n/**\n * Before processing each repository,\n * all keys are supposed to be reset.\n */\nexport function reset(): void {\n keys.clear();\n}\n"]}
1
+ {"version":3,"file":"once.js","sourceRoot":"","sources":["../../lib/logger/once.ts"],"names":[],"mappings":";;AA2CA,oBAYC;AAMD,sBAEC;AA7DD,wCAAwC;AAExC;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC;IAClD,+EAA+E;IAC/E,6DAA6D;IAC7D,MAAM,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAEtD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAE/C,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,iBAAiB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QACjD,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,2CAA2C;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ;IACV,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,eAAe,GAAG,mBAAmB,CAAC;QAC5C,KAAK,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;AAE/B,SAAgB,IAAI,CAAC,QAAoB,EAAE,SAAiB,IAAI;IAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK;IACnB,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,CAAC","sourcesContent":["type OmitFn = (...args: any[]) => any;\n\n// TODO: use `callsite` package instead?\n\n/**\n * Get the single frame of this function's callers stack.\n *\n * @param omitFn Starting from this function, stack frames will be ignored.\n * @returns The string containing file name, line number and column name.\n *\n * @example getCallSite() // => 'Object.<anonymous> (/path/to/file.js:10:15)'\n */\nfunction getCallSite(omitFn: OmitFn): string | null {\n const stackTraceLimitOrig = Error.stackTraceLimit;\n // We don't use `Error.captureStackTrace` directly, we simply restore it later.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const prepareStackTraceOrig = Error.prepareStackTrace;\n\n let result: string | null = null;\n try {\n const res: { stack: string[] } = { stack: [] };\n\n Error.stackTraceLimit = 1;\n Error.prepareStackTrace = (_err, stack) => stack;\n Error.captureStackTrace(res, omitFn);\n\n const [callsite] = res.stack;\n if (callsite) {\n result = callsite.toString();\n }\n /* v8 ignore next 2 -- should not happen */\n } catch {\n // no-op\n } finally {\n Error.stackTraceLimit = stackTraceLimitOrig;\n Error.prepareStackTrace = prepareStackTraceOrig;\n }\n\n return result;\n}\n\nconst keys = new Set<string>();\n\nexport function once(callback: () => void, omitFn: OmitFn = once): void {\n const key = getCallSite(omitFn);\n\n /* v8 ignore next 3 -- should not happen */\n if (!key) {\n return;\n }\n\n if (!keys.has(key)) {\n keys.add(key);\n callback();\n }\n}\n\n/**\n * Before processing each repository,\n * all keys are supposed to be reset.\n */\nexport function reset(): void {\n keys.clear();\n}\n"]}
@@ -1,40 +1,16 @@
1
- import { type ZodEffects, type ZodString, z } from 'zod';
1
+ import { z } from 'zod/v4';
2
2
  export declare const EksAddonsFilterSchema: z.ZodObject<{
3
- addonName: ZodString;
4
- kubernetesVersion: z.ZodOptional<ZodString>;
5
- default: z.ZodUnion<[z.ZodOptional<z.ZodBoolean>, ZodEffects<ZodString, boolean, string>]>;
6
- region: z.ZodOptional<ZodString>;
7
- profile: z.ZodOptional<ZodString>;
8
- }, "strip", z.ZodTypeAny, {
9
- addonName: string;
10
- default?: boolean | undefined;
11
- profile?: string | undefined;
12
- kubernetesVersion?: string | undefined;
13
- region?: string | undefined;
14
- }, {
15
- addonName: string;
16
- default?: string | boolean | undefined;
17
- profile?: string | undefined;
18
- kubernetesVersion?: string | undefined;
19
- region?: string | undefined;
20
- }>;
3
+ addonName: z.ZodString;
4
+ kubernetesVersion: z.ZodOptional<z.ZodString>;
5
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
6
+ region: z.ZodOptional<z.ZodString>;
7
+ profile: z.ZodOptional<z.ZodString>;
8
+ }, z.core.$strip>;
21
9
  export type EksAddonsFilter = z.infer<typeof EksAddonsFilterSchema>;
22
- export declare const EksAddonsFilter: z.ZodPipeline<ZodEffects<ZodString, string | number | boolean | import("type-fest").JsonObject | import("type-fest").JsonValue[] | readonly import("type-fest").JsonValue[] | null, string>, z.ZodObject<{
23
- addonName: ZodString;
24
- kubernetesVersion: z.ZodOptional<ZodString>;
25
- default: z.ZodUnion<[z.ZodOptional<z.ZodBoolean>, ZodEffects<ZodString, boolean, string>]>;
26
- region: z.ZodOptional<ZodString>;
27
- profile: z.ZodOptional<ZodString>;
28
- }, "strip", z.ZodTypeAny, {
29
- addonName: string;
30
- default?: boolean | undefined;
31
- profile?: string | undefined;
32
- kubernetesVersion?: string | undefined;
33
- region?: string | undefined;
34
- }, {
35
- addonName: string;
36
- default?: string | boolean | undefined;
37
- profile?: string | undefined;
38
- kubernetesVersion?: string | undefined;
39
- region?: string | undefined;
40
- }>>;
10
+ export declare const EksAddonsFilter: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<unknown, string>>, z.ZodObject<{
11
+ addonName: z.ZodString;
12
+ kubernetesVersion: z.ZodOptional<z.ZodString>;
13
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
14
+ region: z.ZodOptional<z.ZodString>;
15
+ profile: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>>;
@@ -1,31 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EksAddonsFilter = exports.EksAddonsFilterSchema = void 0;
4
- const zod_1 = require("zod");
4
+ const v4_1 = require("zod/v4");
5
5
  const regex_1 = require("../../../util/regex");
6
- const schema_utils_1 = require("../../../util/schema-utils");
7
- const stringIsBoolSchema = zod_1.z
8
- .string()
9
- .transform((value) => {
10
- if (value === 'true') {
11
- return true;
12
- }
13
- else if (value === 'false') {
14
- return false;
15
- }
16
- else {
17
- return false;
18
- }
19
- });
20
- exports.EksAddonsFilterSchema = zod_1.z.object({
21
- addonName: zod_1.z.string().nonempty().regex((0, regex_1.regEx)('^[a-z0-9][a-z0-9-]*[a-z0-9]$')),
22
- kubernetesVersion: zod_1.z
6
+ const v4_2 = require("../../../util/schema-utils/v4");
7
+ exports.EksAddonsFilterSchema = v4_1.z.object({
8
+ addonName: v4_1.z.string().nonempty().regex((0, regex_1.regEx)('^[a-z0-9][a-z0-9-]*[a-z0-9]$')),
9
+ kubernetesVersion: v4_1.z
23
10
  .string()
24
11
  .regex((0, regex_1.regEx)('^(?<major>\\d+)\\.(?<minor>\\d+)$'))
25
12
  .optional(),
26
- default: zod_1.z.oboolean().or(stringIsBoolSchema),
27
- region: zod_1.z.string().optional(),
28
- profile: zod_1.z.string().optional(),
13
+ default: v4_1.z
14
+ .union([v4_1.z.boolean(), v4_1.z.string().transform((value) => value === 'true')])
15
+ .optional(),
16
+ region: v4_1.z.string().optional(),
17
+ profile: v4_1.z.string().optional(),
29
18
  });
30
- exports.EksAddonsFilter = schema_utils_1.Json.pipe(exports.EksAddonsFilterSchema);
19
+ exports.EksAddonsFilter = v4_2.Json.pipe(exports.EksAddonsFilterSchema);
31
20
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/aws-eks-addon/schema.ts"],"names":[],"mappings":";;;AAAA,6BAAyD;AACzD,+CAA4C;AAC5C,6DAAkD;AAElD,MAAM,kBAAkB,GAA2C,OAAC;KACjE,MAAM,EAAE;KACR,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC,CAAC;AAEQ,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAA,aAAK,EAAC,8BAA8B,CAAC,CAAC;IAC7E,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,KAAK,CAAC,IAAA,aAAK,EAAC,mCAAmC,CAAC,CAAC;SACjD,QAAQ,EAAE;IACb,OAAO,EAAE,OAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC;IAC5C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGU,QAAA,eAAe,GAAG,mBAAI,CAAC,IAAI,CAAC,6BAAqB,CAAC,CAAC","sourcesContent":["import { type ZodEffects, type ZodString, z } from 'zod';\nimport { regEx } from '../../../util/regex';\nimport { Json } from '../../../util/schema-utils';\n\nconst stringIsBoolSchema: ZodEffects<ZodString, boolean, string> = z\n .string()\n .transform((value) => {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else {\n return false;\n }\n });\n\nexport const EksAddonsFilterSchema = z.object({\n addonName: z.string().nonempty().regex(regEx('^[a-z0-9][a-z0-9-]*[a-z0-9]$')),\n kubernetesVersion: z\n .string()\n .regex(regEx('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)$'))\n .optional(),\n default: z.oboolean().or(stringIsBoolSchema),\n region: z.string().optional(),\n profile: z.string().optional(),\n});\n\nexport type EksAddonsFilter = z.infer<typeof EksAddonsFilterSchema>;\nexport const EksAddonsFilter = Json.pipe(EksAddonsFilterSchema);\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/aws-eks-addon/schema.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAC3B,+CAA4C;AAC5C,sDAAqD;AAExC,QAAA,qBAAqB,GAAG,MAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAA,aAAK,EAAC,8BAA8B,CAAC,CAAC;IAC7E,iBAAiB,EAAE,MAAC;SACjB,MAAM,EAAE;SACR,KAAK,CAAC,IAAA,aAAK,EAAC,mCAAmC,CAAC,CAAC;SACjD,QAAQ,EAAE;IACb,OAAO,EAAE,MAAC;SACP,KAAK,CAAC,CAAC,MAAC,CAAC,OAAO,EAAE,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;SACvE,QAAQ,EAAE;IACb,MAAM,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGU,QAAA,eAAe,GAAG,SAAI,CAAC,IAAI,CAAC,6BAAqB,CAAC,CAAC","sourcesContent":["import { z } from 'zod/v4';\nimport { regEx } from '../../../util/regex';\nimport { Json } from '../../../util/schema-utils/v4';\n\nexport const EksAddonsFilterSchema = z.object({\n addonName: z.string().nonempty().regex(regEx('^[a-z0-9][a-z0-9-]*[a-z0-9]$')),\n kubernetesVersion: z\n .string()\n .regex(regEx('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)$'))\n .optional(),\n default: z\n .union([z.boolean(), z.string().transform((value) => value === 'true')])\n .optional(),\n region: z.string().optional(),\n profile: z.string().optional(),\n});\n\nexport type EksAddonsFilter = z.infer<typeof EksAddonsFilterSchema>;\nexport const EksAddonsFilter = Json.pipe(EksAddonsFilterSchema);\n"]}
@@ -6,6 +6,7 @@ const zod_1 = require("zod");
6
6
  const logger_1 = require("../../../logger");
7
7
  const external_host_error_1 = require("../../../types/errors/external-host-error");
8
8
  const decorator_1 = require("../../../util/cache/package/decorator");
9
+ const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
9
10
  const result_1 = require("../../../util/result");
10
11
  const datasource_1 = require("../datasource");
11
12
  const schema_1 = require("../schema");
@@ -24,7 +25,7 @@ class CdnjsDatasource extends datasource_1.Datasource {
24
25
  .transform(({ packageName, registryUrl }) => {
25
26
  const [library] = packageName.split('/');
26
27
  const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;
27
- return this.http.getJsonSafe(url, schema_2.CdnjsAPIVersionResponseSchema);
28
+ return this.http.getJsonSafe(url, { cacheProvider: memory_http_cache_provider_1.memCacheProvider }, schema_2.CdnjsAPIVersionResponseSchema);
28
29
  })
29
30
  .transform(({ versions, homepage, repository }) => {
30
31
  const releases = versions;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cdnjs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { Result } from '../../../util/result';\nimport { Datasource } from '../datasource';\nimport { DigestsConfig, ReleasesConfig } from '../schema';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport {\n CdnjsAPISriResponseSchema,\n CdnjsAPIVersionResponseSchema,\n} from './schema';\n\nexport class CdnjsDatasource extends Datasource {\n static readonly id = 'cdnjs';\n\n constructor() {\n super(CdnjsDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://api.cdnjs.com/'];\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => {\n const library = packageName.split('/')[0];\n return `getReleases:${library}`;\n },\n })\n async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result = Result.parse(config, ReleasesConfig)\n .transform(({ packageName, registryUrl }) => {\n const [library] = packageName.split('/');\n\n const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;\n\n return this.http.getJsonSafe(url, CdnjsAPIVersionResponseSchema);\n })\n .transform(({ versions, homepage, repository }): ReleaseResult => {\n const releases: Release[] = versions;\n\n const res: ReleaseResult = { releases };\n\n if (homepage) {\n res.homepage = homepage;\n }\n\n if (repository) {\n res.sourceUrl = repository;\n }\n\n return res;\n });\n\n const { val, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ registryUrl, packageName }: DigestConfig, newValue: string) =>\n `getDigest:${registryUrl}:${packageName}:${newValue}}`,\n })\n override async getDigest(\n config: DigestConfig,\n newValue: string,\n ): Promise<string | null> {\n const { packageName } = config;\n const [library] = packageName.split('/');\n const assetName = packageName.replace(`${library}/`, '');\n\n const result = Result.parse(config, DigestsConfig)\n .transform(({ registryUrl }) => {\n const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`;\n\n return this.http.getJsonSafe(url, CdnjsAPISriResponseSchema);\n })\n .transform(({ sri }): string => {\n return sri?.[assetName];\n });\n\n const { val = null, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n override handleHttpErrors(err: HttpError): void {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cdnjs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { Result } from '../../../util/result';\nimport { Datasource } from '../datasource';\nimport { DigestsConfig, ReleasesConfig } from '../schema';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport {\n CdnjsAPISriResponseSchema,\n CdnjsAPIVersionResponseSchema,\n} from './schema';\n\nexport class CdnjsDatasource extends Datasource {\n static readonly id = 'cdnjs';\n\n constructor() {\n super(CdnjsDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://api.cdnjs.com/'];\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => {\n const library = packageName.split('/')[0];\n return `getReleases:${library}`;\n },\n })\n async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result = Result.parse(config, ReleasesConfig)\n .transform(({ packageName, registryUrl }) => {\n const [library] = packageName.split('/');\n\n const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;\n\n return this.http.getJsonSafe(\n url,\n { cacheProvider: memCacheProvider },\n CdnjsAPIVersionResponseSchema,\n );\n })\n .transform(({ versions, homepage, repository }): ReleaseResult => {\n const releases: Release[] = versions;\n\n const res: ReleaseResult = { releases };\n\n if (homepage) {\n res.homepage = homepage;\n }\n\n if (repository) {\n res.sourceUrl = repository;\n }\n\n return res;\n });\n\n const { val, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ registryUrl, packageName }: DigestConfig, newValue: string) =>\n `getDigest:${registryUrl}:${packageName}:${newValue}}`,\n })\n override async getDigest(\n config: DigestConfig,\n newValue: string,\n ): Promise<string | null> {\n const { packageName } = config;\n const [library] = packageName.split('/');\n const assetName = packageName.replace(`${library}/`, '');\n\n const result = Result.parse(config, DigestsConfig)\n .transform(({ registryUrl }) => {\n const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`;\n\n return this.http.getJsonSafe(url, CdnjsAPISriResponseSchema);\n })\n .transform(({ sri }): string => {\n return sri?.[assetName];\n });\n\n const { val = null, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n override handleHttpErrors(err: HttpError): void {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
@@ -8,9 +8,11 @@ const global_1 = require("../../../config/global");
8
8
  const logger_1 = require("../../../logger");
9
9
  const memCache = tslib_1.__importStar(require("../../../util/cache/memory"));
10
10
  const decorator_1 = require("../../../util/cache/package/decorator");
11
+ const utils_1 = require("../../../util/exec/utils");
11
12
  const fs_1 = require("../../../util/fs");
12
13
  const config_1 = require("../../../util/git/config");
13
14
  const hash_1 = require("../../../util/hash");
15
+ const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
14
16
  const regex_1 = require("../../../util/regex");
15
17
  const url_1 = require("../../../util/url");
16
18
  const cargoVersioning = tslib_1.__importStar(require("../../versioning/cargo"));
@@ -209,7 +211,10 @@ class CrateDatasource extends datasource_1.Datasource {
209
211
  else {
210
212
  clonePath = upath_1.default.join((0, fs_1.privateCacheDir)(), CrateDatasource.cacheDirFromUrl(url));
211
213
  logger_1.logger.info({ clonePath, registryFetchUrl }, `Cloning private cargo registry`);
212
- const git = (0, simple_git_1.default)({ ...(0, config_1.simpleGitConfig)(), maxConcurrentProcesses: 1 });
214
+ const git = (0, simple_git_1.default)({
215
+ ...(0, config_1.simpleGitConfig)(),
216
+ maxConcurrentProcesses: 1,
217
+ }).env((0, utils_1.getChildEnv)());
213
218
  const clonePromise = git.clone(registryFetchUrl, clonePath, {
214
219
  '--depth': 1,
215
220
  });
@@ -255,7 +260,7 @@ class CrateDatasource extends datasource_1.Datasource {
255
260
  return release;
256
261
  }
257
262
  const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;
258
- const { body: releaseTimestamp } = await this.http.getJson(url, schema_1.ReleaseTimestampSchema);
263
+ const { body: releaseTimestamp } = await this.http.getJson(url, { cacheProvider: memory_http_cache_provider_1.memCacheProvider }, schema_1.ReleaseTimestampSchema);
259
264
  release.releaseTimestamp = releaseTimestamp;
260
265
  return release;
261
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({ ...simpleGitConfig(), maxConcurrentProcesses: 1 });\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildEnv());\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
@@ -7,8 +7,8 @@ const client_ecr_1 = require("@aws-sdk/client-ecr");
7
7
  const logger_1 = require("../../../logger");
8
8
  const regex_1 = require("../../../util/regex");
9
9
  const sanitize_1 = require("../../../util/sanitize");
10
- exports.ecrRegex = (0, regex_1.regEx)(/\d+\.dkr\.ecr(?:-fips)?\.([-a-z0-9]+)\.amazonaws\.com/);
11
- exports.ecrPublicRegex = (0, regex_1.regEx)(/public\.ecr\.aws/);
10
+ exports.ecrRegex = (0, regex_1.regEx)(/\d+\.(?:dkr\.ecr|dkr-ecr)(?:-fips)?\.([-a-z0-9]+)\.(?:amazonaws\.com|on\.aws)/);
11
+ exports.ecrPublicRegex = (0, regex_1.regEx)(/public\.ecr\.aws|ecr-public\.aws\.com/);
12
12
  async function getECRAuthToken(region, opts) {
13
13
  const config = { region };
14
14
  if (opts.username === `AWS` && opts.password) {
@@ -1 +1 @@
1
- {"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/ecr.ts"],"names":[],"mappings":";;;AAcA,0CAsCC;AAED,oDAUC;AA/DD,oDAA0C;AAC1C,4CAAyC;AAIzC,+CAA4C;AAC5C,qDAAgE;AAEnD,QAAA,QAAQ,GAAG,IAAA,aAAK,EAC3B,uDAAuD,CACxD,CAAC;AACW,QAAA,cAAc,GAAG,IAAA,aAAK,EAAC,kBAAkB,CAAC,CAAC;AAEjD,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,IAAc;IAEd,MAAM,MAAM,GAAoB,EAAE,MAAM,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,eAAM,CAAC,KAAK,CACV,sEAAsE,CACvE,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C,eAAM,CAAC,KAAK,CACV,iEAAiE,CAClE,CAAC;QACF,MAAM,CAAC,WAAW,GAAG;YACnB,WAAW,EAAE,IAAI,CAAC,QAAQ;YAC1B,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,gBAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC;QAC5E,IAAI,kBAAkB,EAAE,CAAC;YACvB,iBAAiB;YACjB,IAAA,iCAAsB,EAAC,kBAAkB,CAAC,CAAC;YAC3C,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,eAAM,CAAC,IAAI,CACT,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAc;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAyC,CAAC;IAC3D,OAAO,CAAC,CAAC,CACP,IAAI,EAAE,UAAU,KAAK,GAAG;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC,iCAAiC,CAAC;QACjD,sIAAsI;QACtI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CACvC,mDAAmD,CACpD,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { ECRClientConfig } from '@aws-sdk/client-ecr';\nimport { ECR } from '@aws-sdk/client-ecr';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport type { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { addSecretForSanitizing } from '../../../util/sanitize';\n\nexport const ecrRegex = regEx(\n /\\d+\\.dkr\\.ecr(?:-fips)?\\.([-a-z0-9]+)\\.amazonaws\\.com/,\n);\nexport const ecrPublicRegex = regEx(/public\\.ecr\\.aws/);\n\nexport async function getECRAuthToken(\n region: string,\n opts: HostRule,\n): Promise<string | null> {\n const config: ECRClientConfig = { region };\n if (opts.username === `AWS` && opts.password) {\n logger.trace(\n `AWS user specified, encoding basic auth credentials for ECR registry`,\n );\n return Buffer.from(`AWS:${opts.password}`).toString('base64');\n } else if (opts.username && opts.password) {\n logger.trace(\n `Using AWS accessKey to get Authorization token for ECR registry`,\n );\n config.credentials = {\n accessKeyId: opts.username,\n secretAccessKey: opts.password,\n ...(opts.token && { sessionToken: opts.token }),\n };\n }\n\n const ecr = new ECR(config);\n try {\n const data = await ecr.getAuthorizationToken({});\n const authorizationToken = data?.authorizationData?.[0]?.authorizationToken;\n if (authorizationToken) {\n // sanitize token\n addSecretForSanitizing(authorizationToken);\n return authorizationToken;\n }\n logger.warn(\n 'Could not extract authorizationToken from ECR getAuthorizationToken response',\n );\n } catch (err) {\n logger.trace({ err }, 'err');\n logger.warn('ECR getAuthorizationToken error');\n }\n return null;\n}\n\nexport function isECRMaxResultsError(err: HttpError): boolean {\n const resp = err.response as HttpResponse<any> | undefined;\n return !!(\n resp?.statusCode === 405 &&\n resp.headers?.['docker-distribution-api-version'] &&\n // https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n resp.body?.errors?.[0]?.message?.includes(\n 'Member must have value less than or equal to 1000',\n )\n );\n}\n"]}
1
+ {"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/ecr.ts"],"names":[],"mappings":";;;AAcA,0CAsCC;AAED,oDAUC;AA/DD,oDAA0C;AAC1C,4CAAyC;AAIzC,+CAA4C;AAC5C,qDAAgE;AAEnD,QAAA,QAAQ,GAAG,IAAA,aAAK,EAC3B,+EAA+E,CAChF,CAAC;AACW,QAAA,cAAc,GAAG,IAAA,aAAK,EAAC,uCAAuC,CAAC,CAAC;AAEtE,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,IAAc;IAEd,MAAM,MAAM,GAAoB,EAAE,MAAM,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,eAAM,CAAC,KAAK,CACV,sEAAsE,CACvE,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C,eAAM,CAAC,KAAK,CACV,iEAAiE,CAClE,CAAC;QACF,MAAM,CAAC,WAAW,GAAG;YACnB,WAAW,EAAE,IAAI,CAAC,QAAQ;YAC1B,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,gBAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC;QAC5E,IAAI,kBAAkB,EAAE,CAAC;YACvB,iBAAiB;YACjB,IAAA,iCAAsB,EAAC,kBAAkB,CAAC,CAAC;YAC3C,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,eAAM,CAAC,IAAI,CACT,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAc;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAyC,CAAC;IAC3D,OAAO,CAAC,CAAC,CACP,IAAI,EAAE,UAAU,KAAK,GAAG;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC,iCAAiC,CAAC;QACjD,sIAAsI;QACtI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CACvC,mDAAmD,CACpD,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { ECRClientConfig } from '@aws-sdk/client-ecr';\nimport { ECR } from '@aws-sdk/client-ecr';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport type { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { addSecretForSanitizing } from '../../../util/sanitize';\n\nexport const ecrRegex = regEx(\n /\\d+\\.(?:dkr\\.ecr|dkr-ecr)(?:-fips)?\\.([-a-z0-9]+)\\.(?:amazonaws\\.com|on\\.aws)/,\n);\nexport const ecrPublicRegex = regEx(/public\\.ecr\\.aws|ecr-public\\.aws\\.com/);\n\nexport async function getECRAuthToken(\n region: string,\n opts: HostRule,\n): Promise<string | null> {\n const config: ECRClientConfig = { region };\n if (opts.username === `AWS` && opts.password) {\n logger.trace(\n `AWS user specified, encoding basic auth credentials for ECR registry`,\n );\n return Buffer.from(`AWS:${opts.password}`).toString('base64');\n } else if (opts.username && opts.password) {\n logger.trace(\n `Using AWS accessKey to get Authorization token for ECR registry`,\n );\n config.credentials = {\n accessKeyId: opts.username,\n secretAccessKey: opts.password,\n ...(opts.token && { sessionToken: opts.token }),\n };\n }\n\n const ecr = new ECR(config);\n try {\n const data = await ecr.getAuthorizationToken({});\n const authorizationToken = data?.authorizationData?.[0]?.authorizationToken;\n if (authorizationToken) {\n // sanitize token\n addSecretForSanitizing(authorizationToken);\n return authorizationToken;\n }\n logger.warn(\n 'Could not extract authorizationToken from ECR getAuthorizationToken response',\n );\n } catch (err) {\n logger.trace({ err }, 'err');\n logger.warn('ECR getAuthorizationToken error');\n }\n return null;\n}\n\nexport function isECRMaxResultsError(err: HttpError): boolean {\n const resp = err.response as HttpResponse<any> | undefined;\n return !!(\n resp?.statusCode === 405 &&\n resp.headers?.['docker-distribution-api-version'] &&\n // https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n resp.body?.errors?.[0]?.message?.includes(\n 'Member must have value less than or equal to 1000',\n )\n );\n}\n"]}