From e70baf8951f28e1aa36fd6343afdb0684ea8c269 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 17 Jan 2024 14:19:37 +0100 Subject: [PATCH 01/17] docs(GitHub and GHES): fix broken admonition (#26697) Co-authored-by: Rhys Arkins --- lib/modules/platform/github/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/modules/platform/github/readme.md b/lib/modules/platform/github/readme.md index 7559b1c77bdc9b..9fb40fe0446c5e 100644 --- a/lib/modules/platform/github/readme.md +++ b/lib/modules/platform/github/readme.md @@ -96,7 +96,8 @@ When Renovate runs against repositories on `github.com`, and the environment var - `rubygems.pkg.github.com` -!!! warning Users have reported that this feature is not working correctly, so it has been reverted to experimental mode. +!!! warning + We reverted the Package Registry Credentials feature to experimental mode, because users reported it's not working correctly with app tokens. ## Features awaiting implementation From a79279064cde7aef792e927c0c60f2b3cafc46f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:26:56 +0100 Subject: [PATCH 02/17] build(deps): update dependency @cdktf/hcl2json to v0.20.1 (#26698) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c27f93be858aea..0642c54b157deb 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "@aws-sdk/client-s3": "3.363.0", "@aws-sdk/credential-providers": "3.363.0", "@breejs/later": "4.2.0", - "@cdktf/hcl2json": "0.20.0", + "@cdktf/hcl2json": "0.20.1", "@opentelemetry/api": "1.7.0", "@opentelemetry/context-async-hooks": "1.19.0", "@opentelemetry/exporter-trace-otlp-http": "0.46.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3f68a77834041..0ab302154c5b82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: 4.2.0 version: 4.2.0 '@cdktf/hcl2json': - specifier: 0.20.0 - version: 0.20.0 + specifier: 0.20.1 + version: 0.20.1 '@opentelemetry/api': specifier: 1.7.0 version: 1.7.0 @@ -1901,8 +1901,8 @@ packages: engines: {node: '>= 10'} dev: false - /@cdktf/hcl2json@0.20.0: - resolution: {integrity: sha512-de5GaNsJqKX934EJG5xnsbpvyVf99f36/7ScK53znsbamnTJvl791fCR/tgkF+zrmZYAw0QSSEX1bHY4IPluzw==} + /@cdktf/hcl2json@0.20.1: + resolution: {integrity: sha512-pFSs2QfCS0I5qRhO9SI0VK87Zz8ZJK4MO8GlYprEO2s1aXo1VH6WWJw5tFFqMgntbzeci+Xj0kx7VaLgr21cTQ==} dependencies: fs-extra: 11.2.0 dev: false From d385009b66d1013b738741f69e18f834210c23c2 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 17 Jan 2024 16:09:03 +0100 Subject: [PATCH 03/17] fix(datasource/hex): allow null message for retirements (#26706) --- lib/modules/datasource/hex/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/datasource/hex/schema.ts b/lib/modules/datasource/hex/schema.ts index fea85b0919da78..6f5bd14b6d192b 100644 --- a/lib/modules/datasource/hex/schema.ts +++ b/lib/modules/datasource/hex/schema.ts @@ -24,7 +24,7 @@ export const HexRelease = z .record( z.string(), z.object({ - message: z.string(), + message: z.string().nullable(), reason: z.string(), }), ) From d0afac0236006a9a1872a577c966a19fb9d16df5 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 17 Jan 2024 16:10:12 +0100 Subject: [PATCH 04/17] ci(scorecard): delete fixtures to suppress false positives (#26707) --- .github/workflows/scorecard.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d19ded7344caa5..e9d0e82bf06c1e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -24,6 +24,10 @@ jobs: with: persist-credentials: false + - name: Delete fixtures to suppress false positives + run: | + find ./lib -type d -name '__fixtures__' -exec rm -rf {} \; || true + - name: 'Run analysis' uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: From 9bf06584aa9b2398a8a7914150fdf711e2a6f3b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:21:21 +0000 Subject: [PATCH 05/17] chore(deps): update pnpm to v8.14.1 (#26709) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0642c54b157deb..1e992e2e834558 100644 --- a/package.json +++ b/package.json @@ -348,7 +348,7 @@ "typescript": "5.3.3", "unified": "9.2.2" }, - "packageManager": "pnpm@8.14.0", + "packageManager": "pnpm@8.14.1", "files": [ "dist", "renovate-schema.json" From a055853bbe34a7cb58c18665c3af8ab4cc4cf5fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:38:30 +0000 Subject: [PATCH 06/17] chore(deps): update github/codeql-action action to v2.23.1 (#26712) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/trivy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 5e1315edb8dd44..0b559ddfddcce9 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -31,7 +31,7 @@ jobs: format: 'sarif' output: 'trivy-results.sarif' - - uses: github/codeql-action/upload-sarif@8b7fcbfac2aae0e6c24d9f9ebd5830b1290b18e4 # v2.23.0 + - uses: github/codeql-action/upload-sarif@4759df8df70c5ebe7042c3029bbace20eee13edd # v2.23.1 with: sarif_file: trivy-results.sarif category: 'docker-image-${{ matrix.tag }}' From bd0adf2d055755969ab2348f1196a4d2046c8958 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 17 Jan 2024 16:52:22 -0300 Subject: [PATCH 07/17] refactor: Deprecate compression with `base64` encoding (#26711) --- lib/util/cache/package/file.ts | 6 +++--- lib/util/cache/package/redis.ts | 6 +++--- lib/util/cache/repository/impl/base.ts | 6 +++--- lib/util/cache/repository/impl/local.spec.ts | 4 ++-- lib/util/compress.spec.ts | 18 ++++++++++++++---- lib/util/compress.ts | 14 +++++++++++--- 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/lib/util/cache/package/file.ts b/lib/util/cache/package/file.ts index 4a6a298437d117..313f97b1a44da8 100644 --- a/lib/util/cache/package/file.ts +++ b/lib/util/cache/package/file.ts @@ -2,7 +2,7 @@ import cacache from 'cacache'; import { DateTime } from 'luxon'; import upath from 'upath'; import { logger } from '../../../logger'; -import { compress, decompress } from '../../compress'; +import { compressToBase64, decompressFromBase64 } from '../../compress'; function getKey(namespace: string, key: string): string { return `${namespace}-${key}`; @@ -32,7 +32,7 @@ export async function get( if (!cachedValue.compress) { return cachedValue.value; } - const res = await decompress(cachedValue.value); + const res = await decompressFromBase64(cachedValue.value); return JSON.parse(res); } await rm(namespace, key); @@ -58,7 +58,7 @@ export async function set( getKey(namespace, key), JSON.stringify({ compress: true, - value: await compress(JSON.stringify(value)), + value: await compressToBase64(value), expiry: DateTime.local().plus({ minutes: ttlMinutes }), }), ); diff --git a/lib/util/cache/package/redis.ts b/lib/util/cache/package/redis.ts index 408e9263b084c0..1914ea3dca5f17 100644 --- a/lib/util/cache/package/redis.ts +++ b/lib/util/cache/package/redis.ts @@ -2,7 +2,7 @@ import { DateTime } from 'luxon'; import { createClient } from 'redis'; import { logger } from '../../../logger'; -import { compress, decompress } from '../../compress'; +import { compressToBase64, decompressFromBase64 } from '../../compress'; let client: ReturnType | undefined; let rprefix: string | undefined; @@ -43,7 +43,7 @@ export async function get( if (!cachedValue.compress) { return cachedValue.value; } - const res = await decompress(cachedValue.value); + const res = await decompressFromBase64(cachedValue.value); return JSON.parse(res); } // istanbul ignore next @@ -71,7 +71,7 @@ export async function set( getKey(namespace, key), JSON.stringify({ compress: true, - value: await compress(JSON.stringify(value)), + value: await compressToBase64(value), expiry: DateTime.local().plus({ minutes: ttlMinutes }), }), { EX: redisTTL }, diff --git a/lib/util/cache/repository/impl/base.ts b/lib/util/cache/repository/impl/base.ts index e034f46bc75661..0a74accb69e197 100644 --- a/lib/util/cache/repository/impl/base.ts +++ b/lib/util/cache/repository/impl/base.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { GlobalConfig } from '../../../../config/global'; import { logger } from '../../../../logger'; -import { compress, decompress } from '../../../compress'; +import { compressToBase64, decompressFromBase64 } from '../../../compress'; import { hash } from '../../../hash'; import { safeStringify } from '../../../stringify'; import { CACHE_REVISION } from '../common'; @@ -41,7 +41,7 @@ export abstract class RepoCacheBase implements RepoCache { logger.debug('Repository cache fingerprint is invalid'); return; } - const jsonStr = await decompress(oldCache.payload); + const jsonStr = await decompressFromBase64(oldCache.payload); this.data = RepoCacheBase.parseData(jsonStr); this.oldHash = oldCache.hash; } @@ -80,7 +80,7 @@ export abstract class RepoCacheBase implements RepoCache { const repository = this.repository; const fingerprint = this.fingerprint; - const payload = await compress(jsonStr); + const payload = await compressToBase64(jsonStr); await this.write({ revision, diff --git a/lib/util/cache/repository/impl/local.spec.ts b/lib/util/cache/repository/impl/local.spec.ts index 3362f4034ad728..fb30643011036d 100644 --- a/lib/util/cache/repository/impl/local.spec.ts +++ b/lib/util/cache/repository/impl/local.spec.ts @@ -1,7 +1,7 @@ import { fs } from '../../../../../test/util'; import { GlobalConfig } from '../../../../config/global'; import { logger } from '../../../../logger'; -import { compress } from '../../../compress'; +import { compressToBase64 } from '../../../compress'; import { hash } from '../../../hash'; import { CACHE_REVISION } from '../common'; import type { RepoCacheRecord } from '../schema'; @@ -21,7 +21,7 @@ async function createCacheRecord( const jsonStr = JSON.stringify(data); const hashedJsonStr = hash(jsonStr); - const payload = await compress(jsonStr); + const payload = await compressToBase64(jsonStr); return { revision, diff --git a/lib/util/compress.spec.ts b/lib/util/compress.spec.ts index f458bfdc0ce312..3c05451d83c39c 100644 --- a/lib/util/compress.spec.ts +++ b/lib/util/compress.spec.ts @@ -1,13 +1,23 @@ -import { compress, decompress } from './compress'; +import { compressToBase64, decompressFromBase64 } from './compress'; describe('util/compress', () => { - it('works', async () => { + it('compresses strings', async () => { const input = 'foobar'; - const compressed = await compress(input); + const compressed = await compressToBase64(input); expect(compressed).toBe('iwKAZm9vYmFyAw=='); - const decompressed = await decompress(compressed); + const decompressed = await decompressFromBase64(compressed); expect(decompressed).toBe(input); }); + + it('compresses objects', async () => { + const input = { foo: 'bar' }; + + const compressed = await compressToBase64(input); + expect(compressed).toBe('CwaAeyJmb28iOiJiYXIifQM='); + + const decompressed = await decompressFromBase64(compressed); + expect(JSON.parse(decompressed)).toEqual(input); + }); }); diff --git a/lib/util/compress.ts b/lib/util/compress.ts index dd97c1aefbe6bc..5a06004247b00c 100644 --- a/lib/util/compress.ts +++ b/lib/util/compress.ts @@ -1,11 +1,16 @@ import { promisify } from 'node:util'; import zlib, { constants } from 'node:zlib'; +import is from '@sindresorhus/is'; const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); -export async function compress(input: string): Promise { - const buf = await brotliCompress(input, { +/** + * @deprecated + */ +export async function compressToBase64(input: unknown): Promise { + const jsonStr = is.string(input) ? input : JSON.stringify(input); + const buf = await brotliCompress(jsonStr, { params: { [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_TEXT, [constants.BROTLI_PARAM_QUALITY]: 8, @@ -14,7 +19,10 @@ export async function compress(input: string): Promise { return buf.toString('base64'); } -export async function decompress(input: string): Promise { +/** + * @deprecated + */ +export async function decompressFromBase64(input: string): Promise { const buf = Buffer.from(input, 'base64'); const str = await brotliDecompress(buf); return str.toString('utf8'); From 0d9db2109bf6f4f056219133043d044e7e659436 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:05:33 +0000 Subject: [PATCH 08/17] build(deps): update dependency google-auth-library to v9.4.2 (#26714) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1e992e2e834558..02638a2f133849 100644 --- a/package.json +++ b/package.json @@ -203,7 +203,7 @@ "glob": "10.3.10", "global-agent": "3.0.0", "good-enough-parser": "1.1.23", - "google-auth-library": "9.4.1", + "google-auth-library": "9.4.2", "got": "11.8.6", "graph-data-structure": "3.5.0", "handlebars": "4.7.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ab302154c5b82..1e2280e37c9a95 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -183,8 +183,8 @@ importers: specifier: 1.1.23 version: 1.1.23 google-auth-library: - specifier: 9.4.1 - version: 9.4.1 + specifier: 9.4.2 + version: 9.4.2 got: specifier: 11.8.6 version: 11.8.6 @@ -6395,8 +6395,8 @@ packages: moo: 0.5.2 dev: false - /google-auth-library@9.4.1: - resolution: {integrity: sha512-Chs7cuzDuav8W/BXOoRgSXw4u0zxYtuqAHETDR5Q6dG1RwNwz7NUKjsDDHAsBV3KkiiJBtJqjbzy1XU1L41w1g==} + /google-auth-library@9.4.2: + resolution: {integrity: sha512-rTLO4gjhqqo3WvYKL5IdtlCvRqeQ4hxUx/p4lObobY2xotFW3bCQC+Qf1N51CYOfiqfMecdMwW9RIo7dFWYjqw==} engines: {node: '>=14'} dependencies: base64-js: 1.5.1 From 13edab356c087bfbf6ee8b520661ec3bc4c20eef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 23:27:09 +0000 Subject: [PATCH 09/17] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v1.14.0 (#26716) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 7f166a323faad3..7b21f82e871176 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -4,12 +4,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:1.13.4@sha256:5873f8f7068354c731c09010313294d13bdf2f45c54da42e18f6f2a6d2758ff8 AS slim-base +FROM ghcr.io/renovatebot/base-image:1.14.0@sha256:5a6c38c732bb4bb8c8cb8ac0446091dec240f5b6c0ad20e71f35a71d6c30128b AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:1.13.4-full@sha256:a78dc231d82097191bee8184093d44368883d23c34f7f2d53ef013caca96cefe AS full-base +FROM ghcr.io/renovatebot/base-image:1.14.0-full@sha256:3596826bdccb428a3380ac28118856330998aa2188d46ace03c0ba7bf561cae0 AS full-base # -------------------------------------- # final image From 19eb68b6a6e422e5d508b203c8c4adb1e54760fe Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Thu, 18 Jan 2024 07:58:55 +0100 Subject: [PATCH 10/17] ci(scorecard): remove fixtures removals and fix found vulnerability (#26715) --- .github/workflows/scorecard.yml | 4 ---- .../__fixtures__/update-lockfile-massage-1/package-lock.json | 4 ++-- .../manager/npm/post-update/__snapshots__/npm.spec.ts.snap | 4 ++-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index e9d0e82bf06c1e..d19ded7344caa5 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -24,10 +24,6 @@ jobs: with: persist-credentials: false - - name: Delete fixtures to suppress false positives - run: | - find ./lib -type d -name '__fixtures__' -exec rm -rf {} \; || true - - name: 'Run analysis' uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: diff --git a/lib/modules/manager/npm/post-update/__fixtures__/update-lockfile-massage-1/package-lock.json b/lib/modules/manager/npm/post-update/__fixtures__/update-lockfile-massage-1/package-lock.json index 3426f0d759cb83..4ea04f54e6d6bf 100644 --- a/lib/modules/manager/npm/post-update/__fixtures__/update-lockfile-massage-1/package-lock.json +++ b/lib/modules/manager/npm/post-update/__fixtures__/update-lockfile-massage-1/package-lock.json @@ -28,8 +28,8 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/postcss": { - "version": "8.4.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dependencies": { "nanoid": "^3.3.1", diff --git a/lib/modules/manager/npm/post-update/__snapshots__/npm.spec.ts.snap b/lib/modules/manager/npm/post-update/__snapshots__/npm.spec.ts.snap index 459c4f599bade8..7df15bab03e492 100644 --- a/lib/modules/manager/npm/post-update/__snapshots__/npm.spec.ts.snap +++ b/lib/modules/manager/npm/post-update/__snapshots__/npm.spec.ts.snap @@ -100,8 +100,8 @@ exports[`modules/manager/npm/post-update/npm performs lock file updates retainin "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/postcss": { - "version": "8.4.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dependencies": { "nanoid": "^3.3.1", From adc98842257a3b635b663d7107d11b873b94d385 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jan 2024 17:04:50 +0000 Subject: [PATCH 11/17] build(deps): update dependency azure-devops-node-api to v12.2.0 (#26729) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 02638a2f133849..3e4ed9b8970c8f 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "aggregate-error": "3.1.0", "auth-header": "1.0.0", "aws4": "1.12.0", - "azure-devops-node-api": "12.1.0", + "azure-devops-node-api": "12.2.0", "bunyan": "1.8.15", "cacache": "18.0.2", "cacheable-lookup": "5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e2280e37c9a95..d46d7905aa7917 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,8 +102,8 @@ importers: specifier: 1.12.0 version: 1.12.0 azure-devops-node-api: - specifier: 12.1.0 - version: 12.1.0 + specifier: 12.2.0 + version: 12.2.0 bunyan: specifier: 1.8.15 version: 1.8.15 @@ -4523,8 +4523,8 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: false - /azure-devops-node-api@12.1.0: - resolution: {integrity: sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==} + /azure-devops-node-api@12.2.0: + resolution: {integrity: sha512-htza/rAmMNdLWpoFh5kG7CQFaZ17ylDEGCcQCTIu39R33YFCB8LIJNzjIL9Uqudzc5VdU47sxcXxAJvcuwc3Tw==} dependencies: tunnel: 0.0.6 typed-rest-client: 1.8.11 @@ -10624,6 +10624,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + requiresBuild: true /write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} From 1679f05b2a42b0662e9f3c5c07a9c4d3f5c59179 Mon Sep 17 00:00:00 2001 From: Nils Andresen Date: Thu, 18 Jan 2024 18:37:53 +0100 Subject: [PATCH 12/17] fix(cake): fix explicit registryUrl (#26713) --- lib/modules/manager/cake/__fixtures__/build.cake | 2 ++ lib/modules/manager/cake/index.spec.ts | 7 ++++++- lib/modules/manager/cake/index.ts | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/cake/__fixtures__/build.cake b/lib/modules/manager/cake/__fixtures__/build.cake index faffeb069f4714..2f48f8ecae948e 100644 --- a/lib/modules/manager/cake/__fixtures__/build.cake +++ b/lib/modules/manager/cake/__fixtures__/build.cake @@ -2,6 +2,8 @@ foo #addin nuget:?package=Foo.Foo #addin "nuget:?package=Bim.Bim&version=6.6.6" #tool nuget:https://example.com?package=Bar.Bar&version=2.2.2 +#tool nuget:https://example.com/feed/v3/?package=Cake.Git&version=2.2.3 +#tool nuget:https://example.com/feed/v3/index.json?package=Cake.MinVer&version=2.2.4 #module nuget:file:///tmp/?package=Baz.Baz&version=3.3.3 #load nuget:?package=Cake.7zip&version=1.0.3 #l nuget:?package=Cake.asciidoctorj&version=1.0.0 diff --git a/lib/modules/manager/cake/index.spec.ts b/lib/modules/manager/cake/index.spec.ts index 0fb2e913fc9116..4098cf737449b0 100644 --- a/lib/modules/manager/cake/index.spec.ts +++ b/lib/modules/manager/cake/index.spec.ts @@ -7,7 +7,12 @@ describe('modules/manager/cake/index', () => { deps: [ { depName: 'Foo.Foo', currentValue: undefined }, { depName: 'Bim.Bim', currentValue: '6.6.6' }, - { depName: 'Bar.Bar', registryUrls: ['https://example.com'] }, + { depName: 'Bar.Bar', registryUrls: ['https://example.com/'] }, + { depName: 'Cake.Git', registryUrls: ['https://example.com/feed/v3/'] }, + { + depName: 'Cake.MinVer', + registryUrls: ['https://example.com/feed/v3/index.json'], + }, { depName: 'Baz.Baz', skipReason: 'unsupported-url' }, { depName: 'Cake.7zip', currentValue: '1.0.3' }, { depName: 'Cake.asciidoctorj', currentValue: '1.0.0' }, diff --git a/lib/modules/manager/cake/index.ts b/lib/modules/manager/cake/index.ts index 2687374f93c20b..565803bbcf9992 100644 --- a/lib/modules/manager/cake/index.ts +++ b/lib/modules/manager/cake/index.ts @@ -31,7 +31,8 @@ function parseDependencyLine(line: string): PackageDependency | null { const isEmptyHost = url.startsWith('?'); url = isEmptyHost ? `http://localhost/${url}` : url; - const { origin: registryUrl, protocol, searchParams } = new URL(url); + const { origin, pathname, protocol, searchParams } = new URL(url); + const registryUrl = `${origin}${pathname}`; const depName = searchParams.get('package')!; const currentValue = searchParams.get('version') ?? undefined; From fdb4be831b2b012bd7b9f417f2a022654d6dcb4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20K=C3=B6rner?= <20133276+dazze1812@users.noreply.github.com> Date: Thu, 18 Jan 2024 20:02:59 +0100 Subject: [PATCH 13/17] fix(conan): correct regex for packages without @user/channel but with revisions (#26702) --- lib/modules/manager/conan/__fixtures__/conanfile.txt | 9 +++++---- lib/modules/manager/conan/extract.spec.ts | 10 ++++++++++ lib/modules/manager/conan/extract.ts | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/modules/manager/conan/__fixtures__/conanfile.txt b/lib/modules/manager/conan/__fixtures__/conanfile.txt index d9f3d1d993ed89..fb8a66eab42492 100644 --- a/lib/modules/manager/conan/__fixtures__/conanfile.txt +++ b/lib/modules/manager/conan/__fixtures__/conanfile.txt @@ -1,16 +1,17 @@ [requires] poco/1.9.4 -zlib/[~1.2.3, loose=False] +zlib/[~1.2.3, loose=False] fake/8.62.134@test/dev +cairo/1.17.2#aff2d03608351db075ec1348a3afc9ff cairo/1.17.2@_/_#aff2d03608351db075ec1348a3afc9ff [build_requires] 7zip/[>1.1 <2.1, include_prerelease=True] curl/[~1.2.3, loose=False, include_prerelease=True]@test/dev boost/[>1.1 <2.1] -catch2/[2.8] +catch2/[2.8] openssl/[~=3.0]@test/prod -cmake/[>1.1 || 0.8] +cmake/[>1.1 || 0.8] cryptopp/[1.2.7 || >=1.2.9 <2.0.0]@test/local #commentedout/1.2 # commentedout/3.4 @@ -29,4 +30,4 @@ openssl:shared=True [imports] bin, *.dll -> ./bin # Copies all dll files from packages bin folder to my local "bin" folder -lib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my local "bin" folder \ No newline at end of file +lib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my local "bin" folder diff --git a/lib/modules/manager/conan/extract.spec.ts b/lib/modules/manager/conan/extract.spec.ts index 632686835a3d36..b0df8a12a5f878 100644 --- a/lib/modules/manager/conan/extract.spec.ts +++ b/lib/modules/manager/conan/extract.spec.ts @@ -35,6 +35,16 @@ describe('modules/manager/conan/extract', () => { packageName: 'fake/8.62.134@test/dev', replaceString: 'fake/8.62.134@test/dev', }, + { + autoReplaceStringTemplate: + '{{depName}}/{{newValue}}@_/_{{#if newDigest}}#{{newDigest}}{{/if}}', + currentDigest: 'aff2d03608351db075ec1348a3afc9ff', + currentValue: '1.17.2', + depName: 'cairo', + depType: 'requires', + packageName: 'cairo/1.17.2@_/_', + replaceString: 'cairo/1.17.2#aff2d03608351db075ec1348a3afc9ff', + }, { autoReplaceStringTemplate: '{{depName}}/{{newValue}}@_/_{{#if newDigest}}#{{newDigest}}{{/if}}', diff --git a/lib/modules/manager/conan/extract.ts b/lib/modules/manager/conan/extract.ts index e35e16a2eb8d23..e4fab9f50233b7 100644 --- a/lib/modules/manager/conan/extract.ts +++ b/lib/modules/manager/conan/extract.ts @@ -4,7 +4,7 @@ import type { PackageDependency, PackageFileContent } from '../types'; import { isComment } from './common'; const regex = regEx( - `(?[-_a-z0-9]+)/(?[^@\n{*"']+)(?@[-_a-zA-Z0-9]+(?:/[^#\n.{*"' ]+|))?#?(?[-_a-f0-9]+[^\n{*"'])?`, + `(?[-_a-z0-9]+)/(?[^@#\n{*"']+)(?@[-_a-zA-Z0-9]+(?:/[^#\n.{*"' ]+|))?#?(?[-_a-f0-9]+[^\n{*"'])?`, ); function setDepType(content: string, originalType: string): string { From 625698369ba2b7cc9e3927d004f23b1a852c9d49 Mon Sep 17 00:00:00 2001 From: Florian Greinacher Date: Thu, 18 Jan 2024 20:04:03 +0100 Subject: [PATCH 14/17] refactor(manager): move some logic from gitlabci-include to gitlabci manager (#26722) --- .../manager/gitlabci-include/common.spec.ts | 61 ------------------- .../manager/gitlabci-include/common.ts | 34 ----------- .../manager/gitlabci-include/extract.ts | 10 +-- lib/modules/manager/gitlabci/common.spec.ts | 59 +++++++++++++++++- lib/modules/manager/gitlabci/common.ts | 28 ++++++++- 5 files changed, 90 insertions(+), 102 deletions(-) delete mode 100644 lib/modules/manager/gitlabci-include/common.spec.ts delete mode 100644 lib/modules/manager/gitlabci-include/common.ts diff --git a/lib/modules/manager/gitlabci-include/common.spec.ts b/lib/modules/manager/gitlabci-include/common.spec.ts deleted file mode 100644 index da66940cf4ad2a..00000000000000 --- a/lib/modules/manager/gitlabci-include/common.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Fixtures } from '../../../../test/fixtures'; -import { parseSingleYaml } from '../../../util/yaml'; -import type { GitlabPipeline } from '../gitlabci/types'; -import { replaceReferenceTags } from '../gitlabci/utils'; -import { - filterIncludeFromGitlabPipeline, - isGitlabIncludeLocal, - isGitlabIncludeProject, - isNonEmptyObject, -} from './common'; - -const yamlFileMultiConfig = Fixtures.get('gitlab-ci.1.yaml'); -// TODO: use schema (#9610) -const pipeline = parseSingleYaml( - replaceReferenceTags(yamlFileMultiConfig), -); -const includeLocal = { local: 'something' }; -const includeProject = { project: 'something' }; - -describe('modules/manager/gitlabci-include/common', () => { - describe('filterIncludeFromGitlabPipeline()', () => { - it('returns GitlabPipeline without top level include key', () => { - expect(pipeline).toHaveProperty('include'); - const filtered_pipeline = filterIncludeFromGitlabPipeline(pipeline); - expect(filtered_pipeline).not.toHaveProperty('include'); - expect(filtered_pipeline).toEqual({ - script: [null, null], - }); - }); - }); - - describe('isGitlabIncludeLocal()', () => { - it('returns true if GitlabInclude is GitlabIncludeLocal', () => { - expect(isGitlabIncludeLocal(includeLocal)).toBe(true); - }); - - it('returns false if GitlabInclude is not GitlabIncludeLocal', () => { - expect(isGitlabIncludeLocal(includeProject)).toBe(false); - }); - }); - - describe('isGitlabIncludeProject()', () => { - it('returns true if GitlabInclude is GitlabIncludeProject', () => { - expect(isGitlabIncludeProject(includeProject)).toBe(true); - }); - - it('returns false if GitlabInclude is not GitlabIncludeProject', () => { - expect(isGitlabIncludeProject(includeLocal)).toBe(false); - }); - }); - - describe('isNonEmptyObject()', () => { - it('returns true if not empty', () => { - expect(isNonEmptyObject({ attribute1: 1 })).toBe(true); - }); - - it('returns false if empty', () => { - expect(isNonEmptyObject({})).toBe(false); - }); - }); -}); diff --git a/lib/modules/manager/gitlabci-include/common.ts b/lib/modules/manager/gitlabci-include/common.ts deleted file mode 100644 index 7aefb628e62d00..00000000000000 --- a/lib/modules/manager/gitlabci-include/common.ts +++ /dev/null @@ -1,34 +0,0 @@ -import is from '@sindresorhus/is'; -import type { - GitlabInclude, - GitlabIncludeLocal, - GitlabIncludeProject, - GitlabPipeline, -} from '../gitlabci/types'; - -export function isNonEmptyObject(obj: any): boolean { - return is.object(obj) && Object.keys(obj).length !== 0; -} - -export function filterIncludeFromGitlabPipeline( - pipeline: GitlabPipeline, -): GitlabPipeline { - const pipeline_without_include: GitlabPipeline = {}; - for (const key of Object.keys(pipeline).filter((key) => key !== 'include')) { - const pipeline_key = key as keyof typeof pipeline; - pipeline_without_include[pipeline_key] = pipeline[pipeline_key]; - } - return pipeline_without_include; -} - -export function isGitlabIncludeProject( - include: GitlabInclude, -): include is GitlabIncludeProject { - return !is.undefined((include as GitlabIncludeProject).project); -} - -export function isGitlabIncludeLocal( - include: GitlabInclude, -): include is GitlabIncludeLocal { - return !is.undefined((include as GitlabIncludeLocal).local); -} diff --git a/lib/modules/manager/gitlabci-include/extract.ts b/lib/modules/manager/gitlabci-include/extract.ts index 78c84dd0e9dabd..2cc369e78c513f 100644 --- a/lib/modules/manager/gitlabci-include/extract.ts +++ b/lib/modules/manager/gitlabci-include/extract.ts @@ -4,6 +4,11 @@ import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; import { parseSingleYaml } from '../../../util/yaml'; import { GitlabTagsDatasource } from '../../datasource/gitlab-tags'; +import { + filterIncludeFromGitlabPipeline, + isGitlabIncludeProject, + isNonEmptyObject, +} from '../gitlabci/common'; import type { GitlabInclude, GitlabIncludeProject, @@ -11,11 +16,6 @@ import type { } from '../gitlabci/types'; import { replaceReferenceTags } from '../gitlabci/utils'; import type { PackageDependency, PackageFileContent } from '../types'; -import { - filterIncludeFromGitlabPipeline, - isGitlabIncludeProject, - isNonEmptyObject, -} from './common'; function extractDepFromIncludeFile( includeObj: GitlabIncludeProject, diff --git a/lib/modules/manager/gitlabci/common.spec.ts b/lib/modules/manager/gitlabci/common.spec.ts index d40f202d265f11..5000b3ccb84587 100644 --- a/lib/modules/manager/gitlabci/common.spec.ts +++ b/lib/modules/manager/gitlabci/common.spec.ts @@ -1,9 +1,46 @@ -import { isGitlabIncludeLocal } from './common'; +import { codeBlock } from 'common-tags'; +import { parseSingleYaml } from '../../../util/yaml'; +import type { GitlabPipeline } from '../gitlabci/types'; +import { replaceReferenceTags } from '../gitlabci/utils'; +import { + filterIncludeFromGitlabPipeline, + isGitlabIncludeLocal, + isGitlabIncludeProject, + isNonEmptyObject, +} from './common'; +// TODO: use schema (#9610) +const pipeline = parseSingleYaml( + replaceReferenceTags(codeBlock` + include: + - project: mikebryant/include-source-example + file: /template.yaml + ref: 1.0.0 + - project: mikebryant/include-source-example2 + file: /template.yaml + ref: master + - {"project":"mikebryant/include-source-example3", "file": "/template.yaml",} + - {} + + script: + - !reference [.setup, script] + - !reference [arbitrary job name with space and no starting dot, nested1, nested2, nested3]`), +); const includeLocal = { local: 'something' }; const includeProject = { project: 'something' }; describe('modules/manager/gitlabci/common', () => { + describe('filterIncludeFromGitlabPipeline()', () => { + it('returns GitlabPipeline without top level include key', () => { + expect(pipeline).toHaveProperty('include'); + const filtered_pipeline = filterIncludeFromGitlabPipeline(pipeline); + expect(filtered_pipeline).not.toHaveProperty('include'); + expect(filtered_pipeline).toEqual({ + script: [null, null], + }); + }); + }); + describe('isGitlabIncludeLocal()', () => { it('returns true if GitlabInclude is GitlabIncludeLocal', () => { expect(isGitlabIncludeLocal(includeLocal)).toBe(true); @@ -13,4 +50,24 @@ describe('modules/manager/gitlabci/common', () => { expect(isGitlabIncludeLocal(includeProject)).toBe(false); }); }); + + describe('isGitlabIncludeProject()', () => { + it('returns true if GitlabInclude is GitlabIncludeProject', () => { + expect(isGitlabIncludeProject(includeProject)).toBe(true); + }); + + it('returns false if GitlabInclude is not GitlabIncludeProject', () => { + expect(isGitlabIncludeProject(includeLocal)).toBe(false); + }); + }); + + describe('isNonEmptyObject()', () => { + it('returns true if not empty', () => { + expect(isNonEmptyObject({ attribute1: 1 })).toBe(true); + }); + + it('returns false if empty', () => { + expect(isNonEmptyObject({})).toBe(false); + }); + }); }); diff --git a/lib/modules/manager/gitlabci/common.ts b/lib/modules/manager/gitlabci/common.ts index 4c7b4c4b92368d..7aefb628e62d00 100644 --- a/lib/modules/manager/gitlabci/common.ts +++ b/lib/modules/manager/gitlabci/common.ts @@ -1,5 +1,31 @@ import is from '@sindresorhus/is'; -import type { GitlabInclude, GitlabIncludeLocal } from '../gitlabci/types'; +import type { + GitlabInclude, + GitlabIncludeLocal, + GitlabIncludeProject, + GitlabPipeline, +} from '../gitlabci/types'; + +export function isNonEmptyObject(obj: any): boolean { + return is.object(obj) && Object.keys(obj).length !== 0; +} + +export function filterIncludeFromGitlabPipeline( + pipeline: GitlabPipeline, +): GitlabPipeline { + const pipeline_without_include: GitlabPipeline = {}; + for (const key of Object.keys(pipeline).filter((key) => key !== 'include')) { + const pipeline_key = key as keyof typeof pipeline; + pipeline_without_include[pipeline_key] = pipeline[pipeline_key]; + } + return pipeline_without_include; +} + +export function isGitlabIncludeProject( + include: GitlabInclude, +): include is GitlabIncludeProject { + return !is.undefined((include as GitlabIncludeProject).project); +} export function isGitlabIncludeLocal( include: GitlabInclude, From b6bef2121ed2516441bb99413f6934bb202aafff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jan 2024 19:08:09 +0000 Subject: [PATCH 15/17] build(deps): update dependency azure-devops-node-api to v12.3.0 (#26734) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3e4ed9b8970c8f..70ef8bac83d184 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "aggregate-error": "3.1.0", "auth-header": "1.0.0", "aws4": "1.12.0", - "azure-devops-node-api": "12.2.0", + "azure-devops-node-api": "12.3.0", "bunyan": "1.8.15", "cacache": "18.0.2", "cacheable-lookup": "5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d46d7905aa7917..0c118cd451de5f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,8 +102,8 @@ importers: specifier: 1.12.0 version: 1.12.0 azure-devops-node-api: - specifier: 12.2.0 - version: 12.2.0 + specifier: 12.3.0 + version: 12.3.0 bunyan: specifier: 1.8.15 version: 1.8.15 @@ -4523,8 +4523,8 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: false - /azure-devops-node-api@12.2.0: - resolution: {integrity: sha512-htza/rAmMNdLWpoFh5kG7CQFaZ17ylDEGCcQCTIu39R33YFCB8LIJNzjIL9Uqudzc5VdU47sxcXxAJvcuwc3Tw==} + /azure-devops-node-api@12.3.0: + resolution: {integrity: sha512-5HDhBFIXJxiFhcJ+A3hN87gwo92PrDNLJvcvRHjr+p7AsuUSF64yQU+M6wcBDczkIDVV7m+MrraKQ2tqUxSbCA==} dependencies: tunnel: 0.0.6 typed-rest-client: 1.8.11 From 96aabff9f6eac7390dd57a9d49ff28e66b12a6ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jan 2024 22:47:43 +0000 Subject: [PATCH 16/17] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v1.14.1 (#26736) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 7b21f82e871176..7d2d641a4ec2e8 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -4,12 +4,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:1.14.0@sha256:5a6c38c732bb4bb8c8cb8ac0446091dec240f5b6c0ad20e71f35a71d6c30128b AS slim-base +FROM ghcr.io/renovatebot/base-image:1.14.1@sha256:a9d5efabfe929d36939dda4808430c2dd953d240790ab6f19787c12cb382fe7b AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:1.14.0-full@sha256:3596826bdccb428a3380ac28118856330998aa2188d46ace03c0ba7bf561cae0 AS full-base +FROM ghcr.io/renovatebot/base-image:1.14.1-full@sha256:97bf54a792fce498d9478a24ca38adc8a2e2e4bf7bc0b402baa73252359f89b8 AS full-base # -------------------------------------- # final image From d59316e1d1af0b6cb1a1450e23a0f341435b62ed Mon Sep 17 00:00:00 2001 From: Johannes Feichtner <343448+Churro@users.noreply.github.com> Date: Fri, 19 Jan 2024 04:14:19 +0100 Subject: [PATCH 17/17] fix(manager/gradle): fix potential parsing error for plugins in inlined version catalogs (#26737) --- lib/modules/manager/gradle/parser.spec.ts | 1 + lib/modules/manager/gradle/parser/version-catalogs.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/gradle/parser.spec.ts b/lib/modules/manager/gradle/parser.spec.ts index a6d35c004757f1..e120db42dbb08d 100644 --- a/lib/modules/manager/gradle/parser.spec.ts +++ b/lib/modules/manager/gradle/parser.spec.ts @@ -721,6 +721,7 @@ describe('modules/manager/gradle/parser', () => { ${''} | ${'library("foo", "bar", "baz", "qux").version("1.2.3")'} | ${null} ${''} | ${'library("foo.bar", "foo", "bar").version("1.2.3", "4.5.6")'} | ${null} ${''} | ${'library("foo", bar, "baz").version("1.2.3")'} | ${null} + ${''} | ${'plugin("foo.bar", "foo")'} | ${null} ${''} | ${'plugin("foo.bar", "foo").version("1.2.3")'} | ${{ depName: 'foo', currentValue: '1.2.3' }} ${''} | ${'alias("foo.bar").to("foo", "bar").version("1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} ${'version("baz", "1.2.3")'} | ${'alias("foo.bar").to("foo", "bar").versionRef("baz")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} diff --git a/lib/modules/manager/gradle/parser/version-catalogs.ts b/lib/modules/manager/gradle/parser/version-catalogs.ts index 781183e99a70b2..272688ee6084b1 100644 --- a/lib/modules/manager/gradle/parser/version-catalogs.ts +++ b/lib/modules/manager/gradle/parser/version-catalogs.ts @@ -79,7 +79,7 @@ const qVersionCatalogPlugins = q .handler((ctx) => storeInTokenMap(ctx, 'pluginName')) .end(), }) - .opt(qVersionCatalogVersion) + .join(qVersionCatalogVersion) .handler(handlePlugin) .handler(cleanupTempVars);