renovate 41.0.0-next.22 → 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
@@ -8,6 +8,7 @@ const error_messages_1 = require("../../../constants/error-messages");
8
8
  const logger_1 = require("../../../logger");
9
9
  const external_host_error_1 = require("../../../types/errors/external-host-error");
10
10
  const decorator_1 = require("../../../util/cache/package/decorator");
11
+ const env_1 = require("../../../util/env");
11
12
  const http_1 = require("../../../util/http");
12
13
  const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
13
14
  const object_1 = require("../../../util/object");
@@ -245,7 +246,7 @@ class DockerDatasource extends datasource_1.Datasource {
245
246
  async getLabels(registryHost, dockerRepository, tag) {
246
247
  logger_1.logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);
247
248
  // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set
248
- if (process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&
249
+ if ((0, env_1.getEnv)().RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&
249
250
  registryHost === 'https://index.docker.io') {
250
251
  logger_1.logger.debug('Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP');
251
252
  return {};
@@ -383,7 +384,13 @@ class DockerDatasource extends datasource_1.Datasource {
383
384
  return null;
384
385
  }
385
386
  let page = 0;
386
- const pages = global_1.GlobalConfig.get('dockerMaxPages', 20);
387
+ const hostsNeedingAllPages = [
388
+ 'https://ghcr.io', // GHCR sorts from oldest to newest, so we need to get all pages
389
+ ];
390
+ const pages = hostsNeedingAllPages.includes(registryHost)
391
+ ? 1000
392
+ : global_1.GlobalConfig.get('dockerMaxPages', 20);
393
+ logger_1.logger.trace({ registryHost, dockerRepository, pages }, 'docker.getTags');
387
394
  let foundMaxResultsError = false;
388
395
  do {
389
396
  let res;
@@ -408,14 +415,24 @@ class DockerDatasource extends datasource_1.Datasource {
408
415
  tags = tags.concat(res.body.tags);
409
416
  const linkHeader = (0, url_1.parseLinkHeader)(res.headers.link);
410
417
  if ((0, util_1.isArtifactoryServer)(res)) {
411
- // Artifactory incorrectly returns a next link without the virtual repository name
412
- // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971
413
- url = linkHeader?.next?.last
414
- ? `${url}&last=${linkHeader.next.last}`
415
- : null;
418
+ // Artifactory bug: next link comes back without virtual-repo prefix (RTFACT-18971)
419
+ if (linkHeader?.next?.last) {
420
+ // parse the current URL, strip any old "last" param, then set the new one
421
+ const parsed = new URL(url);
422
+ parsed.searchParams.delete('last');
423
+ parsed.searchParams.set('last', linkHeader.next.last);
424
+ url = parsed.href;
425
+ }
426
+ else {
427
+ url = null;
428
+ }
429
+ }
430
+ else if (linkHeader?.next?.url) {
431
+ // for the normal case we can still use URL to resolve relative-next
432
+ url = new URL(linkHeader.next.url, url).href;
416
433
  }
417
434
  else {
418
- url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;
435
+ url = null;
419
436
  }
420
437
  page += 1;
421
438
  } while (url && page < pages);
@@ -634,7 +651,7 @@ class DockerDatasource extends datasource_1.Datasource {
634
651
  const getTags = () => result_1.Result.wrapNullable(this.getTags(registryHost, dockerRepository), 'tags-error').transform((tags) => tags.map((version) => ({ version })));
635
652
  const getDockerHubTags = () => result_1.Result.wrapNullable(this.getDockerHubTags(dockerRepository), 'dockerhub-error').catch(getTags);
636
653
  const tagsResult = registryHost === 'https://index.docker.io' &&
637
- !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE
654
+ !(0, env_1.getEnv)().RENOVATE_X_DOCKER_HUB_TAGS_DISABLE
638
655
  ? getDockerHubTags()
639
656
  : getTags();
640
657
  const { val: releases, err } = await tagsResult.unwrap();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n cacheProvider: memCacheProvider,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n /* v8 ignore next 3 -- should never happen */\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n /* v8 ignore next 3 -- should never happen */\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const pages = GlobalConfig.get('dockerMaxPages', 20);\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory incorrectly returns a next link without the virtual repository name\n // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971\n url = linkHeader?.next?.last\n ? `${url}&last=${linkHeader.next.last}`\n : null;\n } else {\n url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n /* v8 ignore next 3 -- TODO: add test */\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getEnv } from '../../../util/env';\nimport { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n cacheProvider: memCacheProvider,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n /* v8 ignore next 3 -- should never happen */\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n getEnv().RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n /* v8 ignore next 3 -- should never happen */\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const hostsNeedingAllPages = [\n 'https://ghcr.io', // GHCR sorts from oldest to newest, so we need to get all pages\n ];\n const pages = hostsNeedingAllPages.includes(registryHost)\n ? 1000\n : GlobalConfig.get('dockerMaxPages', 20);\n logger.trace({ registryHost, dockerRepository, pages }, 'docker.getTags');\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory bug: next link comes back without virtual-repo prefix (RTFACT-18971)\n if (linkHeader?.next?.last) {\n // parse the current URL, strip any old \"last\" param, then set the new one\n const parsed: URL = new URL(url);\n parsed.searchParams.delete('last');\n parsed.searchParams.set('last', linkHeader.next.last);\n url = parsed.href;\n } else {\n url = null;\n }\n } else if (linkHeader?.next?.url) {\n // for the normal case we can still use URL to resolve relative-next\n url = new URL(linkHeader.next.url, url).href;\n } else {\n url = null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !getEnv().RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n /* v8 ignore next 3 -- TODO: add test */\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
@@ -130,33 +130,14 @@ export declare const OciImageIndexManifest: z.ZodObject<{
130
130
  schemaVersion: z.ZodLiteral<2>;
131
131
  } & {
132
132
  mediaType: z.ZodLiteral<"application/vnd.oci.image.index.v1+json">;
133
- manifests: z.ZodArray<z.ZodObject<{
134
- digest: z.ZodString;
135
- size: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
136
- } & {
137
- mediaType: z.ZodEnum<["application/vnd.oci.image.manifest.v1+json", "application/vnd.oci.image.index.v1+json"]>;
138
- platform: z.ZodOptional<z.ZodNullable<z.ZodObject<{
139
- architecture: z.ZodOptional<z.ZodNullable<z.ZodString>>;
140
- }, "strip", z.ZodTypeAny, {
141
- architecture?: string | null | undefined;
142
- }, {
143
- architecture?: string | null | undefined;
144
- }>>>;
145
- }, "strip", z.ZodTypeAny, {
133
+ manifests: z.ZodEffects<z.ZodArray<z.ZodAny, "many">, {
146
134
  digest: string;
147
135
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
148
136
  platform?: {
149
137
  architecture?: string | null | undefined;
150
138
  } | null | undefined;
151
139
  size?: number | null | undefined;
152
- }, {
153
- digest: string;
154
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
155
- platform?: {
156
- architecture?: string | null | undefined;
157
- } | null | undefined;
158
- size?: number | null | undefined;
159
- }>, "many">;
140
+ }[], any[]>;
160
141
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
161
142
  }, "strip", z.ZodTypeAny, {
162
143
  schemaVersion: 2;
@@ -173,14 +154,7 @@ export declare const OciImageIndexManifest: z.ZodObject<{
173
154
  }, {
174
155
  schemaVersion: 2;
175
156
  mediaType: "application/vnd.oci.image.index.v1+json";
176
- manifests: {
177
- digest: string;
178
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
179
- platform?: {
180
- architecture?: string | null | undefined;
181
- } | null | undefined;
182
- size?: number | null | undefined;
183
- }[];
157
+ manifests: any[];
184
158
  annotations?: Record<string, string> | null | undefined;
185
159
  }>;
186
160
  /**
@@ -424,33 +398,14 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
424
398
  schemaVersion: z.ZodLiteral<2>;
425
399
  } & {
426
400
  mediaType: z.ZodLiteral<"application/vnd.oci.image.index.v1+json">;
427
- manifests: z.ZodArray<z.ZodObject<{
428
- digest: z.ZodString;
429
- size: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
430
- } & {
431
- mediaType: z.ZodEnum<["application/vnd.oci.image.manifest.v1+json", "application/vnd.oci.image.index.v1+json"]>;
432
- platform: z.ZodOptional<z.ZodNullable<z.ZodObject<{
433
- architecture: z.ZodOptional<z.ZodNullable<z.ZodString>>;
434
- }, "strip", z.ZodTypeAny, {
435
- architecture?: string | null | undefined;
436
- }, {
437
- architecture?: string | null | undefined;
438
- }>>>;
439
- }, "strip", z.ZodTypeAny, {
401
+ manifests: z.ZodEffects<z.ZodArray<z.ZodAny, "many">, {
440
402
  digest: string;
441
403
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
442
404
  platform?: {
443
405
  architecture?: string | null | undefined;
444
406
  } | null | undefined;
445
407
  size?: number | null | undefined;
446
- }, {
447
- digest: string;
448
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
449
- platform?: {
450
- architecture?: string | null | undefined;
451
- } | null | undefined;
452
- size?: number | null | undefined;
453
- }>, "many">;
408
+ }[], any[]>;
454
409
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
455
410
  }, "strip", z.ZodTypeAny, {
456
411
  schemaVersion: 2;
@@ -467,14 +422,7 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
467
422
  }, {
468
423
  schemaVersion: 2;
469
424
  mediaType: "application/vnd.oci.image.index.v1+json";
470
- manifests: {
471
- digest: string;
472
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
473
- platform?: {
474
- architecture?: string | null | undefined;
475
- } | null | undefined;
476
- size?: number | null | undefined;
477
- }[];
425
+ manifests: any[];
478
426
  annotations?: Record<string, string> | null | undefined;
479
427
  }>]>>;
480
428
  export type Manifest = z.infer<typeof Manifest>;
@@ -621,33 +569,14 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
621
569
  schemaVersion: z.ZodLiteral<2>;
622
570
  } & {
623
571
  mediaType: z.ZodLiteral<"application/vnd.oci.image.index.v1+json">;
624
- manifests: z.ZodArray<z.ZodObject<{
625
- digest: z.ZodString;
626
- size: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
627
- } & {
628
- mediaType: z.ZodEnum<["application/vnd.oci.image.manifest.v1+json", "application/vnd.oci.image.index.v1+json"]>;
629
- platform: z.ZodOptional<z.ZodNullable<z.ZodObject<{
630
- architecture: z.ZodOptional<z.ZodNullable<z.ZodString>>;
631
- }, "strip", z.ZodTypeAny, {
632
- architecture?: string | null | undefined;
633
- }, {
634
- architecture?: string | null | undefined;
635
- }>>>;
636
- }, "strip", z.ZodTypeAny, {
637
- digest: string;
638
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
639
- platform?: {
640
- architecture?: string | null | undefined;
641
- } | null | undefined;
642
- size?: number | null | undefined;
643
- }, {
572
+ manifests: z.ZodEffects<z.ZodArray<z.ZodAny, "many">, {
644
573
  digest: string;
645
574
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
646
575
  platform?: {
647
576
  architecture?: string | null | undefined;
648
577
  } | null | undefined;
649
578
  size?: number | null | undefined;
650
- }>, "many">;
579
+ }[], any[]>;
651
580
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
652
581
  }, "strip", z.ZodTypeAny, {
653
582
  schemaVersion: 2;
@@ -664,14 +593,7 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
664
593
  }, {
665
594
  schemaVersion: 2;
666
595
  mediaType: "application/vnd.oci.image.index.v1+json";
667
- manifests: {
668
- digest: string;
669
- mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
670
- platform?: {
671
- architecture?: string | null | undefined;
672
- } | null | undefined;
673
- size?: number | null | undefined;
674
- }[];
596
+ manifests: any[];
675
597
  annotations?: Record<string, string> | null | undefined;
676
598
  }>]>>>;
677
599
  export declare const DockerHubTag: z.ZodObject<{
@@ -76,7 +76,7 @@ exports.OciImageManifest = exports.ManifestObject.extend({
76
76
  */
77
77
  exports.OciImageIndexManifest = exports.ManifestObject.extend({
78
78
  mediaType: zod_1.z.literal('application/vnd.oci.image.index.v1+json'),
79
- manifests: zod_1.z.array(exports.Descriptor.extend({
79
+ manifests: (0, schema_utils_1.LooseArray)(exports.Descriptor.extend({
80
80
  mediaType: zod_1.z.enum([
81
81
  'application/vnd.oci.image.manifest.v1+json',
82
82
  'application/vnd.oci.image.index.v1+json',
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { Json, LooseArray } from '../../../util/schema-utils';\n\n// OCI manifests\n\n/**\n * OCI manifest object\n */\nexport const ManifestObject = z.object({\n schemaVersion: z.literal(2),\n mediaType: z.string().nullish(),\n});\n\n/**\n * Oci descriptor\n * https://github.com/opencontainers/image-spec/blob/main/descriptor.md\n */\nexport const Descriptor = z.object({\n mediaType: z.string(),\n digest: z.string(),\n size: z.number().int().gte(0).nullish(),\n});\n/**\n * OCI platform properties\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nconst OciPlatform = z\n .object({\n architecture: z.string().nullish(),\n })\n .nullish();\n\n/**\n * OCI Image Configuration.\n *\n * Compatible with old docker configiguration.\n * https://github.com/opencontainers/image-spec/blob/main/config.md\n */\nexport const OciImageConfig = z.object({\n // This is required by the spec, but probably not present in the wild.\n architecture: z.string().nullish(),\n config: z.object({ Labels: z.record(z.string()).nullish() }).nullish(),\n});\nexport type OciImageConfig = z.infer<typeof OciImageConfig>;\n\n/**\n * OCI Helm Configuration\n * https://helm.sh/docs/topics/charts/#the-chartyaml-file\n */\nexport const OciHelmConfig = z.object({\n name: z.string(),\n version: z.string(),\n home: z.string().nullish(),\n sources: z.array(z.string()).nullish(),\n});\nexport type OciHelmConfig = z.infer<typeof OciHelmConfig>;\n\n/**\n * OCI Image Manifest\n * The same structure as docker image manifest, but mediaType is not required and is not present in the wild.\n * https://github.com/opencontainers/image-spec/blob/main/manifest.md\n */\nexport const OciImageManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.manifest.v1+json'),\n config: Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.config.v1+json',\n 'application/vnd.cncf.helm.config.v1+json',\n 'application/vnd.devcontainers',\n 'application/vnd.oci.empty.v1+json',\n 'application/vnd.cncf.flux.config.v1+json',\n ]),\n }),\n annotations: z.record(z.string()).nullish(),\n});\nexport type OciImageManifest = z.infer<typeof OciImageManifest>;\n\n/**\n * OCI Image List\n * mediaType is not required.\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nexport const OciImageIndexManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.index.v1+json'),\n manifests: z.array(\n Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ]),\n platform: OciPlatform,\n }),\n ),\n annotations: z.record(z.string()).nullish(),\n});\n\n// Old Docker manifests\n\n/**\n * Image Manifest\n * https://docs.docker.com/registry/spec/manifest-v2-2/#image-manifest\n */\nexport const DistributionManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.docker.distribution.manifest.v2+json'),\n config: Descriptor.extend({\n mediaType: z.literal('application/vnd.docker.container.image.v1+json'),\n }),\n});\nexport type DistributionManifest = z.infer<typeof DistributionManifest>;\n\n/**\n * Manifest List\n * https://docs.docker.com/registry/spec/manifest-v2-2/#manifest-list\n */\nexport const DistributionListManifest = ManifestObject.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n ),\n manifests: z.array(\n Descriptor.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.v2+json',\n ),\n platform: OciPlatform,\n }),\n ),\n});\n\n// Combined manifests\nexport const Manifest = ManifestObject.passthrough()\n .transform((value, ctx) => {\n if (value.mediaType === undefined) {\n if ('config' in value) {\n value.mediaType = 'application/vnd.oci.image.manifest.v1+json';\n } else if ('manifests' in value) {\n value.mediaType = 'application/vnd.oci.image.index.v1+json';\n } else {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid manifest, missing mediaType.',\n });\n return z.NEVER;\n }\n }\n return value;\n })\n .pipe(\n z.discriminatedUnion('mediaType', [\n DistributionManifest,\n DistributionListManifest,\n OciImageManifest,\n OciImageIndexManifest,\n ]),\n );\n\nexport type Manifest = z.infer<typeof Manifest>;\nexport const ManifestJson = Json.pipe(Manifest);\n\nexport const DockerHubTag = z.object({\n id: z.number(),\n last_updated: z.string().datetime(),\n name: z.string(),\n tag_last_pushed: z.string().datetime().nullable().catch(null),\n digest: z.string().nullable().catch(null),\n});\nexport type DockerHubTag = z.infer<typeof DockerHubTag>;\n\nexport const DockerHubTagsPage = z.object({\n count: z.number(),\n next: z.string().nullable().catch(null),\n results: LooseArray(DockerHubTag, {\n /* v8 ignore next 6 -- TODO: add test */\n onError: ({ error }) => {\n logger.debug(\n { error },\n 'Docker: Failed to parse some tags from Docker Hub',\n );\n },\n }),\n});\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { Json, LooseArray } from '../../../util/schema-utils';\n\n// OCI manifests\n\n/**\n * OCI manifest object\n */\nexport const ManifestObject = z.object({\n schemaVersion: z.literal(2),\n mediaType: z.string().nullish(),\n});\n\n/**\n * Oci descriptor\n * https://github.com/opencontainers/image-spec/blob/main/descriptor.md\n */\nexport const Descriptor = z.object({\n mediaType: z.string(),\n digest: z.string(),\n size: z.number().int().gte(0).nullish(),\n});\n/**\n * OCI platform properties\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nconst OciPlatform = z\n .object({\n architecture: z.string().nullish(),\n })\n .nullish();\n\n/**\n * OCI Image Configuration.\n *\n * Compatible with old docker configiguration.\n * https://github.com/opencontainers/image-spec/blob/main/config.md\n */\nexport const OciImageConfig = z.object({\n // This is required by the spec, but probably not present in the wild.\n architecture: z.string().nullish(),\n config: z.object({ Labels: z.record(z.string()).nullish() }).nullish(),\n});\nexport type OciImageConfig = z.infer<typeof OciImageConfig>;\n\n/**\n * OCI Helm Configuration\n * https://helm.sh/docs/topics/charts/#the-chartyaml-file\n */\nexport const OciHelmConfig = z.object({\n name: z.string(),\n version: z.string(),\n home: z.string().nullish(),\n sources: z.array(z.string()).nullish(),\n});\nexport type OciHelmConfig = z.infer<typeof OciHelmConfig>;\n\n/**\n * OCI Image Manifest\n * The same structure as docker image manifest, but mediaType is not required and is not present in the wild.\n * https://github.com/opencontainers/image-spec/blob/main/manifest.md\n */\nexport const OciImageManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.manifest.v1+json'),\n config: Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.config.v1+json',\n 'application/vnd.cncf.helm.config.v1+json',\n 'application/vnd.devcontainers',\n 'application/vnd.oci.empty.v1+json',\n 'application/vnd.cncf.flux.config.v1+json',\n ]),\n }),\n annotations: z.record(z.string()).nullish(),\n});\nexport type OciImageManifest = z.infer<typeof OciImageManifest>;\n\n/**\n * OCI Image List\n * mediaType is not required.\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nexport const OciImageIndexManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.index.v1+json'),\n manifests: LooseArray(\n Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ]),\n platform: OciPlatform,\n }),\n ),\n annotations: z.record(z.string()).nullish(),\n});\n\n// Old Docker manifests\n\n/**\n * Image Manifest\n * https://docs.docker.com/registry/spec/manifest-v2-2/#image-manifest\n */\nexport const DistributionManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.docker.distribution.manifest.v2+json'),\n config: Descriptor.extend({\n mediaType: z.literal('application/vnd.docker.container.image.v1+json'),\n }),\n});\nexport type DistributionManifest = z.infer<typeof DistributionManifest>;\n\n/**\n * Manifest List\n * https://docs.docker.com/registry/spec/manifest-v2-2/#manifest-list\n */\nexport const DistributionListManifest = ManifestObject.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n ),\n manifests: z.array(\n Descriptor.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.v2+json',\n ),\n platform: OciPlatform,\n }),\n ),\n});\n\n// Combined manifests\nexport const Manifest = ManifestObject.passthrough()\n .transform((value, ctx) => {\n if (value.mediaType === undefined) {\n if ('config' in value) {\n value.mediaType = 'application/vnd.oci.image.manifest.v1+json';\n } else if ('manifests' in value) {\n value.mediaType = 'application/vnd.oci.image.index.v1+json';\n } else {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid manifest, missing mediaType.',\n });\n return z.NEVER;\n }\n }\n return value;\n })\n .pipe(\n z.discriminatedUnion('mediaType', [\n DistributionManifest,\n DistributionListManifest,\n OciImageManifest,\n OciImageIndexManifest,\n ]),\n );\n\nexport type Manifest = z.infer<typeof Manifest>;\nexport const ManifestJson = Json.pipe(Manifest);\n\nexport const DockerHubTag = z.object({\n id: z.number(),\n last_updated: z.string().datetime(),\n name: z.string(),\n tag_last_pushed: z.string().datetime().nullable().catch(null),\n digest: z.string().nullable().catch(null),\n});\nexport type DockerHubTag = z.infer<typeof DockerHubTag>;\n\nexport const DockerHubTagsPage = z.object({\n count: z.number(),\n next: z.string().nullable().catch(null),\n results: LooseArray(DockerHubTag, {\n /* v8 ignore next 6 -- TODO: add test */\n onError: ({ error }) => {\n logger.debug(\n { error },\n 'Docker: Failed to parse some tags from Docker Hub',\n );\n },\n }),\n});\n"]}
@@ -6,6 +6,7 @@ const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
6
6
  const simple_git_1 = require("simple-git");
7
7
  const logger_1 = require("../../../logger");
8
8
  const decorator_1 = require("../../../util/cache/package/decorator");
9
+ const utils_1 = require("../../../util/exec/utils");
9
10
  const auth_1 = require("../../../util/git/auth");
10
11
  const config_1 = require("../../../util/git/config");
11
12
  const url_1 = require("../../../util/git/url");
@@ -24,12 +25,7 @@ class GitDatasource extends datasource_1.Datasource {
24
25
  const gitSubmoduleAuthEnvironmentVariables = (0, auth_1.getGitEnvironmentVariables)([
25
26
  this.id,
26
27
  ]);
27
- const gitEnv = {
28
- // pass all existing env variables
29
- ...process.env,
30
- // add all known git Variables
31
- ...gitSubmoduleAuthEnvironmentVariables,
32
- };
28
+ const gitEnv = (0, utils_1.getChildEnv)({ env: gitSubmoduleAuthEnvironmentVariables });
33
29
  const git = (0, simple_git_1.simpleGit)((0, config_1.simpleGitConfig)()).env(gitEnv);
34
30
  // fetch remote tags
35
31
  const lsRemote = await git.listRemote([