From 24865055f9cf7da9695ff00a79b0c27d3802f3d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:28:21 +0000 Subject: [PATCH 01/73] chore(deps): update codecov/codecov-action action to v5.1.0 (#32932) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4fcc7715fc4926..8689997348e780 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -438,7 +438,7 @@ jobs: merge-multiple: true - name: Codecov - uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7 + uses: codecov/codecov-action@c2fcb216de2b0348de0100baa3ea2cad9f100a01 # v5.1.0 with: token: ${{ secrets.CODECOV_TOKEN }} directory: coverage/lcov From 2b17eea5f42f03a2ac2a55affb3ca0df6bad0e8f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:28:22 +0000 Subject: [PATCH 02/73] chore(deps): update actions/cache action to v4.2.0 (#32931) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/calculate-prefetch-matrix/action.yml | 4 ++-- .github/actions/setup-node/action.yml | 6 +++--- .github/workflows/build.yml | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/actions/calculate-prefetch-matrix/action.yml b/.github/actions/calculate-prefetch-matrix/action.yml index a667666922260f..5448c2e08e07d0 100644 --- a/.github/actions/calculate-prefetch-matrix/action.yml +++ b/.github/actions/calculate-prefetch-matrix/action.yml @@ -34,7 +34,7 @@ runs: - name: Check cache miss for MacOS id: macos-cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: node_modules key: ${{ env.MACOS_KEY }} @@ -43,7 +43,7 @@ runs: - name: Check cache miss for Windows id: windows-cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: node_modules key: ${{ env.WINDOWS_KEY }} diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index 623dbd7039985c..1ac3793460792c 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -34,7 +34,7 @@ runs: - name: Restore `node_modules` id: node-modules-restore - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: node_modules key: ${{ env.CACHE_KEY }} @@ -64,7 +64,7 @@ runs: - name: Cache and restore `pnpm store` if: env.CACHE_HIT != 'true' - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ${{ env.PNPM_STORE }} key: | @@ -87,7 +87,7 @@ runs: - name: Write `node_modules` cache if: inputs.save-cache == 'true' && env.CACHE_HIT != 'true' - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: node_modules key: ${{ env.CACHE_KEY }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8689997348e780..21ee0a59fd97d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -209,7 +209,7 @@ jobs: os: ${{ runner.os }} - name: Restore eslint cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .cache/eslint key: eslint-main-cache @@ -228,7 +228,7 @@ jobs: - name: Save eslint cache if: github.event_name == 'push' - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .cache/eslint key: eslint-main-cache @@ -255,7 +255,7 @@ jobs: os: ${{ runner.os }} - name: Restore prettier cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .cache/prettier key: prettier-main-cache @@ -280,7 +280,7 @@ jobs: - name: Save prettier cache if: github.event_name == 'push' - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .cache/prettier key: prettier-main-cache @@ -373,7 +373,7 @@ jobs: os: ${{ runner.os }} - name: Cache jest - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .cache/jest key: | From b619c6af11c8fb22366a2ce60d0dc91c7c78c0d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 23:24:03 +0000 Subject: [PATCH 03/73] chore(deps): update codecov/codecov-action action to v5.1.1 (#32934) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21ee0a59fd97d8..5934f74ce83dc2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -438,7 +438,7 @@ jobs: merge-multiple: true - name: Codecov - uses: codecov/codecov-action@c2fcb216de2b0348de0100baa3ea2cad9f100a01 # v5.1.0 + uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1 with: token: ${{ secrets.CODECOV_TOKEN }} directory: coverage/lcov From 27b82f8dd8a099ff45fb670b0b6f6f9a792b8c99 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:24:45 +0100 Subject: [PATCH 04/73] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v9.15.0 (#32935) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 429abc9036c8eb..275a22192afe0a 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.14.1@sha256:681641f310b63c5f1187df97b94bb6ddde280a00667624e0364b92dface942c1 AS slim-base +FROM ghcr.io/renovatebot/base-image:9.15.0@sha256:12891c6b442e0a45e4bdf119c2122bb4d11d8755af96394dfc13785bfbfd4544 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.14.1-full@sha256:677fb390a315a28a517394f4ee34cc9827da17bd4a854461c293b94a521f8f10 AS full-base +FROM ghcr.io/renovatebot/base-image:9.15.0-full@sha256:c7c8712b552fca3a140098fe1f515914bda1ffc15a9693da717d57d02a10b5f7 AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.14.1@sha256:681641f310b63c5f1187df97b94bb6ddde280a00667624e0364b92dface942c1 AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.15.0@sha256:12891c6b442e0a45e4bdf119c2122bb4d11d8755af96394dfc13785bfbfd4544 AS build # We want a specific node version here # renovate: datasource=node-version From 9c999fb13e8746830a0c163bad9c244b0b926c6a Mon Sep 17 00:00:00 2001 From: Otiel Date: Fri, 6 Dec 2024 06:23:12 +0100 Subject: [PATCH 05/73] feat(manager/nuget): add support for "disabledPackageSources" in nuget.config (#32011) Co-authored-by: Rhys Arkins --- lib/modules/manager/nuget/util.spec.ts | 168 +++++++++++++++++++++---- lib/modules/manager/nuget/util.ts | 27 +++- 2 files changed, 168 insertions(+), 27 deletions(-) diff --git a/lib/modules/manager/nuget/util.spec.ts b/lib/modules/manager/nuget/util.spec.ts index 13097f69016a5f..0956e2014c0383 100644 --- a/lib/modules/manager/nuget/util.spec.ts +++ b/lib/modules/manager/nuget/util.spec.ts @@ -34,9 +34,7 @@ describe('modules/manager/nuget/util', () => { describe('getConfiguredRegistries', () => { it('reads nuget config file', async () => { - fs.findUpLocal.mockReturnValue( - Promise.resolve('NuGet.config'), - ); + fs.findUpLocal.mockResolvedValue('NuGet.config'); fs.readLocalFile.mockResolvedValueOnce( codeBlock` @@ -58,23 +56,22 @@ describe('modules/manager/nuget/util', () => { ); const registries = await getConfiguredRegistries('NuGet.config'); - expect(registries?.length).toBe(2); - expect(registries![0].name).toBe('nuget.org'); - expect(registries![0].url).toBe('https://api.nuget.org/v3/index.json'); - expect(registries![0].sourceMappedPackagePatterns).toEqual(['*']); - - expect(registries![1].name).toBe('contoso.com'); - expect(registries![1].url).toBe('https://contoso.com/packages/'); - expect(registries![1].sourceMappedPackagePatterns).toEqual([ - 'Contoso.*', - 'NuGet.Common', + expect(registries).toEqual([ + { + name: 'nuget.org', + url: 'https://api.nuget.org/v3/index.json', + sourceMappedPackagePatterns: ['*'], + }, + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + sourceMappedPackagePatterns: ['Contoso.*', 'NuGet.Common'], + }, ]); }); it('reads nuget config file with default registry', async () => { - fs.findUpLocal.mockReturnValue( - Promise.resolve('NuGet.config'), - ); + fs.findUpLocal.mockResolvedValue('NuGet.config'); fs.readLocalFile.mockResolvedValueOnce( codeBlock` @@ -94,18 +91,137 @@ describe('modules/manager/nuget/util', () => { ); const registries = await getConfiguredRegistries('NuGet.config'); - expect(registries?.length).toBe(2); - expect(registries![0].name).toBe('nuget.org'); - expect(registries![0].url).toBe('https://api.nuget.org/v3/index.json'); - expect(registries![0].sourceMappedPackagePatterns).toEqual(['*']); - - expect(registries![1].name).toBe('contoso.com'); - expect(registries![1].url).toBe('https://contoso.com/packages/'); - expect(registries![1].sourceMappedPackagePatterns).toEqual([ - 'Contoso.*', - 'NuGet.Common', + expect(registries).toEqual([ + { + name: 'nuget.org', + url: 'https://api.nuget.org/v3/index.json', + sourceMappedPackagePatterns: ['*'], + }, + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + sourceMappedPackagePatterns: ['Contoso.*', 'NuGet.Common'], + }, ]); }); + + it('reads nuget config file with default registry disabled and added sources', async () => { + fs.findUpLocal.mockResolvedValue('NuGet.config'); + fs.readLocalFile.mockResolvedValueOnce( + codeBlock` + + + + + + + + `, + ); + + const registries = await getConfiguredRegistries('NuGet.config'); + expect(registries).toEqual([ + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + }, + ]); + }); + + it('reads nuget config file with default registry disabled given default registry added', async () => { + fs.findUpLocal.mockResolvedValue('NuGet.config'); + fs.readLocalFile.mockResolvedValueOnce( + codeBlock` + + + + + + + + + `, + ); + + const registries = await getConfiguredRegistries('NuGet.config'); + expect(registries).toEqual([ + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + }, + ]); + }); + + it('reads nuget config file with unknown disabled source', async () => { + fs.findUpLocal.mockResolvedValue('NuGet.config'); + fs.readLocalFile.mockResolvedValueOnce( + codeBlock` + + + + + + + + `, + ); + + const registries = await getConfiguredRegistries('NuGet.config'); + expect(registries).toEqual([ + { + name: 'nuget.org', + url: 'https://api.nuget.org/v3/index.json', + }, + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + }, + ]); + }); + + it('reads nuget config file with disabled source with value false', async () => { + fs.findUpLocal.mockResolvedValue('NuGet.config'); + fs.readLocalFile.mockResolvedValueOnce( + codeBlock` + + + + + + + + + + `, + ); + + const registries = await getConfiguredRegistries('NuGet.config'); + expect(registries).toEqual([ + { + name: 'nuget.org', + url: 'https://api.nuget.org/v3/index.json', + }, + { + name: 'contoso.com', + url: 'https://contoso.com/packages/', + }, + ]); + }); + + it('reads nuget config file without packageSources and ignores disabledPackageSources', async () => { + fs.findUpLocal.mockResolvedValue('NuGet.config'); + fs.readLocalFile.mockResolvedValueOnce( + codeBlock` + + + + + `, + ); + + const registries = await getConfiguredRegistries('NuGet.config'); + expect(registries).toBeUndefined(); + }); }); describe('applyRegistries', () => { diff --git a/lib/modules/manager/nuget/util.ts b/lib/modules/manager/nuget/util.ts index 38126468e4462f..dd210357d3a863 100644 --- a/lib/modules/manager/nuget/util.ts +++ b/lib/modules/manager/nuget/util.ts @@ -52,13 +52,19 @@ export async function getConfiguredRegistries( } const packageSources = nuGetConfig.childNamed('packageSources'); + if (!packageSources) { + // If there are no packageSources, don't even look for any + // disabledPackageSources + // Even if NuGet default source (nuget.org) was among the + // disabledPackageSources, Renovate will default to the default source + // (nuget.org) anyway return undefined; } const packageSourceMapping = nuGetConfig.childNamed('packageSourceMapping'); - const registries = getDefaultRegistries(); + let registries = getDefaultRegistries(); // Map optional source mapped package patterns to default registries for (const registry of registries) { @@ -111,6 +117,25 @@ export async function getConfiguredRegistries( // child.name === 'remove' not supported } } + + const disabledPackageSources = nuGetConfig.childNamed( + 'disabledPackageSources', + ); + + if (disabledPackageSources) { + for (const child of disabledPackageSources.children) { + if ( + child.type === 'element' && + child.name === 'add' && + child.attr.value === 'true' + ) { + const disabledRegistryKey = child.attr.key; + registries = registries.filter((o) => o.name !== disabledRegistryKey); + logger.debug(`Disabled registry with key: ${disabledRegistryKey}`); + } + } + } + return registries; } From d29698e0131231652970f02765312769975e4d38 Mon Sep 17 00:00:00 2001 From: Jason Sipula Date: Fri, 6 Dec 2024 01:27:09 -0800 Subject: [PATCH 06/73] feat(manager/gleam): enable update-lockfile (#31002) --- docs/usage/configuration-options.md | 2 +- lib/modules/manager/gleam/artifacts.ts | 8 +++++++- lib/modules/manager/gleam/range.spec.ts | 10 ---------- lib/modules/manager/gleam/range.ts | 10 ---------- lib/modules/manager/gleam/readme.md | 11 +++++------ 5 files changed, 13 insertions(+), 28 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 343eeb76405c5a..5fa92c7fafccda 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3613,7 +3613,7 @@ Behavior: - `bump` = e.g. bump the range even if the new version satisfies the existing range, e.g. `^1.0.0` -> `^1.1.0` - `replace` = Replace the range with a newer one if the new version falls outside it, and update nothing otherwise - `widen` = Widen the range with newer one, e.g. `^1.0.0` -> `^1.0.0 || ^2.0.0` -- `update-lockfile` = Update the lock file when in-range updates are available, otherwise `replace` for updates out of range. Works for `bundler`, `cargo`, `composer`, `npm`, `yarn`, `pnpm`, `terraform` and `poetry` so far +- `update-lockfile` = Update the lock file when in-range updates are available, otherwise `replace` for updates out of range. Works for `bundler`, `cargo`, `composer`, `gleam`, `npm`, `yarn`, `pnpm`, `terraform` and `poetry` so far - `in-range-only` = Update the lock file when in-range updates are available, ignore package file updates Renovate's `"auto"` strategy works like this for npm: diff --git a/lib/modules/manager/gleam/artifacts.ts b/lib/modules/manager/gleam/artifacts.ts index 8a88595a61d23c..ccd1b37f807c79 100644 --- a/lib/modules/manager/gleam/artifacts.ts +++ b/lib/modules/manager/gleam/artifacts.ts @@ -49,7 +49,13 @@ export async function updateArtifacts( ], }; - await exec('gleam deps download', execOptions); + // `gleam deps update` with no packages rebuilds the lock file + const packagesToUpdate = isLockFileMaintenance + ? [] + : updatedDeps.map((dep) => dep.depName).filter(Boolean); + + const updateCommand = ['gleam deps update', ...packagesToUpdate].join(' '); + await exec(updateCommand, execOptions); const newLockFileContent = await readLocalFile(lockFileName, 'utf8'); if (!newLockFileContent) { logger.debug(`No ${lockFileName} found`); diff --git a/lib/modules/manager/gleam/range.spec.ts b/lib/modules/manager/gleam/range.spec.ts index da0083582cc088..6dc4e912918b70 100644 --- a/lib/modules/manager/gleam/range.spec.ts +++ b/lib/modules/manager/gleam/range.spec.ts @@ -16,16 +16,6 @@ describe('modules/manager/gleam/range', () => { expect(getRangeStrategy(config)).toBe('widen'); }); - it('returns widen if update-lockfile', () => { - const config: RangeConfig = { rangeStrategy: 'update-lockfile' }; - expect(getRangeStrategy(config)).toBe('widen'); - }); - - it('returns widen if in-range-only', () => { - const config: RangeConfig = { rangeStrategy: 'in-range-only' }; - expect(getRangeStrategy(config)).toBe('widen'); - }); - it('defaults to widen', () => { const config: RangeConfig = { rangeStrategy: 'auto', diff --git a/lib/modules/manager/gleam/range.ts b/lib/modules/manager/gleam/range.ts index f8436aa2d71d46..61b62cd73f5768 100644 --- a/lib/modules/manager/gleam/range.ts +++ b/lib/modules/manager/gleam/range.ts @@ -16,16 +16,6 @@ export function getRangeStrategy(config: RangeConfig): RangeStrategy { ); return 'widen'; } - if (rangeStrategy === 'update-lockfile') { - logger.warn( - 'Unsupported rangeStrategy update-lockfile, defaulting to widen', - ); - return 'widen'; - } - if (rangeStrategy === 'in-range-only') { - logger.warn('Unsupported rangeStrategy in-range-only, defaulting to widen'); - return 'widen'; - } if (rangeStrategy !== 'auto') { return rangeStrategy; } diff --git a/lib/modules/manager/gleam/readme.md b/lib/modules/manager/gleam/readme.md index 1254744d2762e2..27a8fed0e78411 100644 --- a/lib/modules/manager/gleam/readme.md +++ b/lib/modules/manager/gleam/readme.md @@ -31,11 +31,10 @@ Here's how `"auto"` works with the `gleam` manager: | Simple range | `0.39.0` | `<= 0.38.0` | `<= 0.39.0` | If update outside current range: widens range to include the new version. | | Exact version constraint | `0.13.0` | `== 0.12.0` | `== 0.13.0` | Replace old version with new version. | -#### Do not set `rangeStrategy` to `update-lockfile` or `in-range-only` +### Recommended `rangeStrategy` for apps and libraries -Do _not_ set `rangeStrategy` to: +For applications, we recommend using `rangeStrategy=pin`. +This pins your dependencies to exact versions, which is generally considered [best practice for apps](../../../dependency-pinning.md). -- `"update-lockfile"` -- `"in-range-only"` - -Renovate's `gleam` manager ignores these values, and uses the `widen` strategy instead. +For libraries, use `rangeStrategy=widen` with version ranges in your `gleam.toml`. +This allows for greater compatibility with other projects that may use your library as a dependency. From 6690a6ec3482a57363410d6f0faf37c6e1a2a61f Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Fri, 6 Dec 2024 01:27:35 -0800 Subject: [PATCH 07/73] feat(preset): Add sea-orm monorepo group (#32928) --- lib/data/monorepo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index 67cecd213fa88e..50acc763b7c1da 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -479,6 +479,7 @@ "sanity": "https://github.com/sanity-io/sanity", "serilog-ui": "https://github.com/serilog-contrib/serilog-ui", "scaffdog": "https://github.com/scaffdog/scaffdog", + "sea-orm": "https://github.com/SeaQL/sea-orm", "secretlint": "https://github.com/secretlint/secretlint", "sendgrid-nodejs": "https://github.com/sendgrid/sendgrid-nodejs", "sentry-dotnet": "https://github.com/getsentry/sentry-dotnet", From c41e345e499e282322cc0ff3d54a1d776a23851d Mon Sep 17 00:00:00 2001 From: Brad Adams Date: Fri, 6 Dec 2024 10:38:56 +0100 Subject: [PATCH 08/73] feat: calculate `semanticCommitType` priority (#32069) Co-authored-by: Rhys Arkins --- .../repository/updates/generate.spec.ts | 48 +++++++++++++++++++ lib/workers/repository/updates/generate.ts | 27 +++++++++++ 2 files changed, 75 insertions(+) diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts index 3332212e322ae0..6769da86bb6803 100644 --- a/lib/workers/repository/updates/generate.spec.ts +++ b/lib/workers/repository/updates/generate.spec.ts @@ -703,6 +703,54 @@ describe('workers/repository/updates/generate', () => { ); }); + it('calculates the highest priority semanticCommitType', () => { + const branch = [ + { + ...requiredDefaultOptions, + manager: 'some-manager', + depName: 'some-dep', + semanticCommits: 'enabled', + semanticCommitType: 'chore', + semanticCommitScope: 'package', + newValue: '1.2.0', + isSingleVersion: true, + newVersion: '1.2.0', + branchName: 'some-branch', + }, + { + ...requiredDefaultOptions, + manager: 'some-manager', + depName: 'some-dep', + semanticCommits: 'enabled', + semanticCommitType: 'feat', + semanticCommitScope: 'package', + newValue: '1.2.0', + isSingleVersion: true, + newVersion: '1.2.0', + branchName: 'some-branch', + }, + { + ...requiredDefaultOptions, + manager: 'some-manager', + depName: 'some-dep', + semanticCommits: 'enabled', + semanticCommitType: 'fix', + semanticCommitScope: 'package', + newValue: '1.2.0', + isSingleVersion: true, + newVersion: '1.2.0', + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; + const res = generateBranchConfig(branch); + expect(res.prTitle).toBe( + 'feat(package): update dependency some-dep to v1.2.0', + ); + expect(res.commitMessage).toBe( + 'feat(package): update dependency some-dep to v1.2.0', + ); + }); + it('scopes monorepo commits', () => { const branch = [ { diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index 234e20e40a9185..f2637f2fb95a66 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -159,6 +159,9 @@ function compilePrTitle( logger.trace(`prTitle: ` + JSON.stringify(upgrade.prTitle)); } +// Sorted by priority, from low to high +const semanticCommitTypeByPriority = ['chore', 'ci', 'build', 'fix', 'feat']; + export function generateBranchConfig( upgrades: BranchUpgradeConfig[], ): BranchConfig { @@ -355,6 +358,30 @@ export function generateBranchConfig( releaseTimestamp: releaseTimestamp!, }; // TODO: fixme (#9666) + // Enable `semanticCommits` if one of the branches has it enabled + if ( + config.upgrades.some((upgrade) => upgrade.semanticCommits === 'enabled') + ) { + config.semanticCommits = 'enabled'; + // Calculate the highest priority `semanticCommitType` + let highestIndex = -1; + for (const upgrade of config.upgrades) { + if (upgrade.semanticCommits === 'enabled' && upgrade.semanticCommitType) { + const priorityIndex = semanticCommitTypeByPriority.indexOf( + upgrade.semanticCommitType, + ); + + if (priorityIndex > highestIndex) { + highestIndex = priorityIndex; + } + } + } + + if (highestIndex > -1) { + config.semanticCommitType = semanticCommitTypeByPriority[highestIndex]; + } + } + // Use templates to generate strings const commitMessage = compileCommitMessage(config); compilePrTitle(config, commitMessage); From acf6d8d9c11251976fe982db97b5db464f1be0f2 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:41:34 +0100 Subject: [PATCH 09/73] docs(datasource/aws-rds): improve readme (#29870) Co-authored-by: Rhys Arkins --- lib/modules/datasource/aws-rds/readme.md | 50 +++++++++++++++++++----- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/lib/modules/datasource/aws-rds/readme.md b/lib/modules/datasource/aws-rds/readme.md index be47f3644d2c1b..c82ff7c8b68f78 100644 --- a/lib/modules/datasource/aws-rds/readme.md +++ b/lib/modules/datasource/aws-rds/readme.md @@ -1,9 +1,16 @@ This datasource returns the database engine versions available for use on [AWS RDS](https://aws.amazon.com/rds/) via the AWS API. + Generally speaking, all publicly released database versions are available for use on RDS. However, new versions may not be available on RDS for a few weeks or months after their release while AWS tests them. In addition, AWS may pull existing versions if serious problems arise during their use. -**AWS API configuration** + +!!! warning + The default versioning of the `aws-rds` datasource is _not_ compatible with [AWS Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)! + If you use AWS Aurora, you must set your own custom versioning. + Scroll down to see an example. + +### AWS API configuration Since the datasource uses the AWS SDK for JavaScript, you can configure it like other AWS Tools. You can use common AWS configuration options, for example: @@ -14,9 +21,7 @@ You can use common AWS configuration options, for example: Read the [AWS Developer Guide - Configuring the SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html) for more information on these configuration options. -The minimal IAM privileges required for this datasource are: - -```json +```json title="Minimal IAM privileges needed for this datasource" { "Sid": "AllowDBEngineVersionLookup", "Effect": "Allow", @@ -27,7 +32,7 @@ The minimal IAM privileges required for this datasource are: Read the [AWS RDS IAM reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html) for more information. -**Usage** +### Usage Because Renovate has no manager for the AWS RDS datasource, you need to help Renovate by configuring the custom manager to identify the RDS dependencies you want updated. @@ -53,16 +58,14 @@ For example: [{"Name":"engine","Values":["mysql"]},{"Name":"engine-version","Values":["5.7"]}] ``` -Here's an example of using the custom manager to configure this datasource: - -```json +```json title="Using a custom manager to configure this datasource" { "customManagers": [ { "customType": "regex", "fileMatch": ["\\.yaml$"], "matchStrings": [ - ".*amiFilter=(?.+?)[ ]*\n[ ]*(?[a-zA-Z0-9-_:]*)[ ]*?:[ ]*?[\"|']?(?[.\\d]+)[\"|']?.*" + ".*rdsFilter=(?.+?)[ ]*\n[ ]*(?[a-zA-Z0-9-_:]*)[ ]*?:[ ]*?[\"|']?(?[.\\d]+)[\"|']?.*" ], "datasourceTemplate": "aws-rds" } @@ -74,6 +77,33 @@ The configuration above matches every YAML file, and recognizes these lines: ```yaml spec: - # amiFilter=[{"Name":"engine","Values":["mysql"]},{"Name":"engine-version","Values":["5.7"]}] + # rdsFilter=[{"Name":"engine","Values":["mysql"]},{"Name":"engine-version","Values":["5.7"]}] engineVersion: 5.7.34 ``` + +#### Using Terraform, `aws-rds` datasource and Aurora MySQL + +Here is the Renovate configuration to use Terraform, `aws-rds` and Aurora MySQL: + +```json +{ + "customManagers": [ + { + "description": "Update RDS", + "customType": "regex", + "fileMatch": [".+\\.tf$"], + "matchStrings": [ + "\\s*#\\s*renovate:\\s*rdsFilter=(?.+?) depName=(?.*) versioning=(?.*)\\s*.*_version\\s*=\\s*\"(?.*)\"" + ], + "datasourceTemplate": "aws-rds" + } + ] +} +``` + +The above configuration is an example of updating an AWS RDS version inside a Terraform file, using a custom manager. + +``` +# renovate:rdsFilter=[{"Name":"engine","Values":["aurora-mysql"]},{"Name":"engine-version","Values":["8.0"]}] depName=aurora-mysql versioning=loose +engine_version = "8.0.mysql_aurora.3.05.2" +``` From 7b5d84dfa27d3fd3d882e59b123b651f3b191ecf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 09:55:47 +0000 Subject: [PATCH 10/73] build(deps): update dependency jsonata to v2.0.6 (#32939) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index bd39aa6556137a..6f5adc0d59eb99 100644 --- a/package.json +++ b/package.json @@ -212,7 +212,7 @@ "json-dup-key-validator": "1.0.3", "json-stringify-pretty-compact": "3.0.0", "json5": "2.2.3", - "jsonata": "2.0.5", + "jsonata": "2.0.6", "jsonc-parser": "3.3.1", "klona": "2.0.6", "luxon": "3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a66d8b771e706..4db5c9580a8c24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,8 +219,8 @@ importers: specifier: 2.2.3 version: 2.2.3 jsonata: - specifier: 2.0.5 - version: 2.0.5 + specifier: 2.0.6 + version: 2.0.6 jsonc-parser: specifier: 3.3.1 version: 3.3.1 @@ -4313,8 +4313,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonata@2.0.5: - resolution: {integrity: sha512-wEse9+QLIIU5IaCgtJCPsFi/H4F3qcikWzF4bAELZiRz08ohfx3Q6CjDRf4ZPF5P/92RI3KIHtb7u3jqPaHXdQ==} + jsonata@2.0.6: + resolution: {integrity: sha512-WhQB5tXQ32qjkx2GYHFw2XbL90u+LLzjofAYwi+86g6SyZeXHz9F1Q0amy3dWRYczshOC3Haok9J4pOCgHtwyQ==} engines: {node: '>= 8'} jsonc-parser@3.3.1: @@ -11344,7 +11344,7 @@ snapshots: json5@2.2.3: {} - jsonata@2.0.5: {} + jsonata@2.0.6: {} jsonc-parser@3.3.1: {} From 2f805f4b7d746ffbe0c6509be592ae0df24979f4 Mon Sep 17 00:00:00 2001 From: Janus Troelsen Date: Fri, 6 Dec 2024 04:21:07 -0600 Subject: [PATCH 11/73] feat(versioning): add PVP versioning scheme (#32298) Co-authored-by: Sebastian Poxhofer Co-authored-by: Michael Kriese --- lib/modules/versioning/api.ts | 2 + lib/modules/versioning/pvp/index.spec.ts | 265 +++++++++++++++++++++++ lib/modules/versioning/pvp/index.ts | 257 ++++++++++++++++++++++ lib/modules/versioning/pvp/range.spec.ts | 12 + lib/modules/versioning/pvp/range.ts | 21 ++ lib/modules/versioning/pvp/readme.md | 18 ++ lib/modules/versioning/pvp/types.ts | 9 + lib/modules/versioning/pvp/util.spec.ts | 23 ++ lib/modules/versioning/pvp/util.ts | 54 +++++ 9 files changed, 661 insertions(+) create mode 100644 lib/modules/versioning/pvp/index.spec.ts create mode 100644 lib/modules/versioning/pvp/index.ts create mode 100644 lib/modules/versioning/pvp/range.spec.ts create mode 100644 lib/modules/versioning/pvp/range.ts create mode 100644 lib/modules/versioning/pvp/readme.md create mode 100644 lib/modules/versioning/pvp/types.ts create mode 100644 lib/modules/versioning/pvp/util.spec.ts create mode 100644 lib/modules/versioning/pvp/util.ts diff --git a/lib/modules/versioning/api.ts b/lib/modules/versioning/api.ts index 764529bf40c69f..211c3f8740fe29 100644 --- a/lib/modules/versioning/api.ts +++ b/lib/modules/versioning/api.ts @@ -26,6 +26,7 @@ import * as nuget from './nuget'; import * as pep440 from './pep440'; import * as perl from './perl'; import * as poetry from './poetry'; +import * as pvp from './pvp'; import * as python from './python'; import * as redhat from './redhat'; import * as regex from './regex'; @@ -71,6 +72,7 @@ api.set(nuget.id, nuget.api); api.set(pep440.id, pep440.api); api.set(perl.id, perl.api); api.set(poetry.id, poetry.api); +api.set(pvp.id, pvp.api); api.set(python.id, python.api); api.set(redhat.id, redhat.api); api.set(regex.id, regex.api); diff --git a/lib/modules/versioning/pvp/index.spec.ts b/lib/modules/versioning/pvp/index.spec.ts new file mode 100644 index 00000000000000..900baa3ae7ef8e --- /dev/null +++ b/lib/modules/versioning/pvp/index.spec.ts @@ -0,0 +1,265 @@ +import pvp from '.'; + +describe('modules/versioning/pvp/index', () => { + describe('.isGreaterThan(version, other)', () => { + it.each` + first | second | expected + ${'1.23.1'} | ${'1.9.6'} | ${true} + ${'4.0.0'} | ${'3.0.0'} | ${true} + ${'3.0.1'} | ${'3.0.0'} | ${true} + ${'4.10'} | ${'4.1'} | ${true} + ${'1.0.0'} | ${'1.0'} | ${true} + ${'2.0.2'} | ${'3.1.0'} | ${false} + ${'3.0.0'} | ${'3.0.0'} | ${false} + ${'4.1'} | ${'4.10'} | ${false} + ${'1.0'} | ${'1.0.0'} | ${false} + ${''} | ${'1.0'} | ${false} + ${'1.0'} | ${''} | ${false} + `('pvp.isGreaterThan($first, $second)', ({ first, second, expected }) => { + expect(pvp.isGreaterThan(first, second)).toBe(expected); + }); + }); + + describe('.getMajor(version)', () => { + it.each` + version | expected + ${'1.0.0'} | ${1.0} + ${'1.0.1'} | ${1.0} + ${'1.1.1'} | ${1.1} + ${''} | ${null} + `('pvp.getMajor("$version") === $expected', ({ version, expected }) => { + expect(pvp.getMajor(version)).toBe(expected); + }); + }); + + describe('.getMinor(version)', () => { + it.each` + version | expected + ${'1.0'} | ${null} + ${'1.0.0'} | ${0} + ${'1.0.1'} | ${1} + ${'1.1.2'} | ${2} + `('pvp.getMinor("$version") === $expected', ({ version, expected }) => { + expect(pvp.getMinor(version)).toBe(expected); + }); + }); + + describe('.getPatch(version)', () => { + it.each` + version | expected + ${'1.0.0'} | ${null} + ${'1.0.0.5.1'} | ${5.1} + ${'1.0.1.6'} | ${6} + ${'1.1.2.7'} | ${7} + ${'0.0.0.0.1'} | ${0.1} + ${'0.0.0.0.10'} | ${0.1} + `('pvp.getPatch("$version") === $expected', ({ version, expected }) => { + expect(pvp.getPatch(version)).toBe(expected); + }); + }); + + describe('.matches(version, range)', () => { + it.each` + version | range | expected + ${'1.0.1'} | ${'>=1.0 && <1.1'} | ${true} + ${'4.1'} | ${'>=4.0 && <4.10'} | ${true} + ${'4.1'} | ${'>=4.1 && <4.10'} | ${true} + ${'4.1.0'} | ${'>=4.1 && <4.10'} | ${true} + ${'4.1.0'} | ${'<4.10 && >=4.1'} | ${true} + ${'4.10'} | ${'>=4.1 && <4.10.0'} | ${true} + ${'4.10'} | ${'>=4.0 && <4.10.1'} | ${true} + ${'1.0.0'} | ${'>=2.0 && <2.1'} | ${false} + ${'4'} | ${'>=4.0 && <4.10'} | ${false} + ${'4.10'} | ${'>=4.1 && <4.10'} | ${false} + ${'4'} | ${'gibberish'} | ${false} + ${''} | ${'>=1.0 && <1.1'} | ${false} + `( + 'pvp.matches("$version", "$range") === $expected', + ({ version, range, expected }) => { + expect(pvp.matches(version, range)).toBe(expected); + }, + ); + }); + + describe('.getSatisfyingVersion(versions, range)', () => { + it.each` + versions | range | expected + ${['1.0.0', '1.0.4', '1.3.0', '2.0.0']} | ${'>=1.0 && <1.1'} | ${'1.0.4'} + ${['2.0.0', '1.0.0', '1.0.4', '1.3.0']} | ${'>=1.0 && <1.1'} | ${'1.0.4'} + ${['1.0.0', '1.0.4', '1.3.0', '2.0.0']} | ${'>=3.0 && <4.0'} | ${null} + `( + 'pvp.getSatisfyingVersion($versions, "$range") === $expected', + ({ versions, range, expected }) => { + expect(pvp.getSatisfyingVersion(versions, range)).toBe(expected); + }, + ); + }); + + describe('.minSatisfyingVersion(versions, range)', () => { + it('should return min satisfying version in range', () => { + expect( + pvp.minSatisfyingVersion( + ['0.9', '1.0.0', '1.0.4', '1.3.0', '2.0.0'], + '>=1.0 && <1.1', + ), + ).toBe('1.0.0'); + }); + }); + + describe('.isLessThanRange(version, range)', () => { + it.each` + version | range | expected + ${'2.0.2'} | ${'>=3.0 && <3.1'} | ${true} + ${'3'} | ${'>=3.0 && <3.1'} | ${true} + ${'3'} | ${'>=3 && <3.1'} | ${false} + ${'3.0'} | ${'>=3.0 && <3.1'} | ${false} + ${'3.0.0'} | ${'>=3.0 && <3.1'} | ${false} + ${'4.0.0'} | ${'>=3.0 && <3.1'} | ${false} + ${'3.1.0'} | ${'>=3.0 && <3.1'} | ${false} + ${'3'} | ${'gibberish'} | ${false} + ${''} | ${'>=3.0 && <3.1'} | ${false} + `( + 'pvp.isLessThanRange?.("$version", "$range") === $expected', + ({ version, range, expected }) => { + expect(pvp.isLessThanRange?.(version, range)).toBe(expected); + }, + ); + }); + + describe('.isValid(version)', () => { + it.each` + version | expected + ${''} | ${false} + ${'1.0.0.0'} | ${true} + ${'1.0'} | ${true} + ${'>=1.0 && <1.1'} | ${true} + `('pvp.isValid("$version") === $expected', ({ version, expected }) => { + expect(pvp.isValid(version)).toBe(expected); + }); + }); + + describe('.getNewValue(newValueConfig)', () => { + it.each` + currentValue | newVersion | rangeStrategy | expected + ${'>=1.0 && <1.1'} | ${'1.1'} | ${'auto'} | ${'>=1.0 && <1.2'} + ${'>=1.2 && <1.3'} | ${'1.2.3'} | ${'auto'} | ${null} + ${'>=1.0 && <1.1'} | ${'1.2.3'} | ${'update-lockfile'} | ${null} + ${'gibberish'} | ${'1.2.3'} | ${'auto'} | ${null} + ${'>=1.0 && <1.1'} | ${'0.9'} | ${'auto'} | ${null} + ${'>=1.0 && <1.1'} | ${''} | ${'auto'} | ${null} + `( + 'pvp.getNewValue({currentValue: "$currentValue", newVersion: "$newVersion", rangeStrategy: "$rangeStrategy"}) === $expected', + ({ currentValue, newVersion, rangeStrategy, expected }) => { + expect( + pvp.getNewValue({ currentValue, newVersion, rangeStrategy }), + ).toBe(expected); + }, + ); + }); + + describe('.isSame(...)', () => { + it.each` + type | a | b | expected + ${'major'} | ${'4.10'} | ${'4.1'} | ${false} + ${'major'} | ${'4.1.0'} | ${'5.1.0'} | ${false} + ${'major'} | ${'4.1'} | ${'5.1'} | ${false} + ${'major'} | ${'0'} | ${'1'} | ${false} + ${'major'} | ${'4.1'} | ${'4.1.0'} | ${true} + ${'major'} | ${'4.1.1'} | ${'4.1.2'} | ${true} + ${'major'} | ${'0'} | ${'0'} | ${true} + ${'minor'} | ${'4.1.0'} | ${'5.1.0'} | ${true} + ${'minor'} | ${'4.1'} | ${'4.1'} | ${true} + ${'minor'} | ${'4.1'} | ${'5.1'} | ${true} + ${'minor'} | ${'4.1.0'} | ${'4.1.1'} | ${false} + ${'minor'} | ${''} | ${'0'} | ${false} + ${'patch'} | ${'1.0.0.0'} | ${'1.0.0.0'} | ${true} + ${'patch'} | ${'1.0.0.0'} | ${'2.0.0.0'} | ${true} + ${'patch'} | ${'1.0.0.0'} | ${'1.0.0.1'} | ${false} + ${'patch'} | ${'0.0.0.0.1'} | ${'0.0.0.0.10'} | ${false} + `( + 'pvp.isSame("$type", "$a", "$b") === $expected', + ({ type, a, b, expected }) => { + expect(pvp.isSame?.(type, a, b)).toBe(expected); + }, + ); + }); + + describe('.isVersion(maybeRange)', () => { + it.each` + version | expected + ${'1.0'} | ${true} + ${'>=1.0 && <1.1'} | ${false} + `('pvp.isVersion("$version") === $expected', ({ version, expected }) => { + expect(pvp.isVersion(version)).toBe(expected); + }); + }); + + describe('.equals(a, b)', () => { + it.each` + a | b | expected + ${'1.01'} | ${'1.1'} | ${true} + ${'1.01'} | ${'1.0'} | ${false} + ${''} | ${'1.0'} | ${false} + ${'1.0'} | ${''} | ${false} + `('pvp.equals("$a", "$b") === $expected', ({ a, b, expected }) => { + expect(pvp.equals(a, b)).toBe(expected); + }); + }); + + describe('.isSingleVersion(range)', () => { + it.each` + version | expected + ${'==1.0'} | ${true} + ${'>=1.0 && <1.1'} | ${false} + `( + 'pvp.isSingleVersion("$version") === $expected', + ({ version, expected }) => { + expect(pvp.isSingleVersion(version)).toBe(expected); + }, + ); + }); + + describe('.subset(subRange, superRange)', () => { + it.each` + subRange | superRange | expected + ${'>=1.0 && <1.1'} | ${'>=1.0 && <2.0'} | ${true} + ${'>=1.0 && <2.0'} | ${'>=1.0 && <2.0'} | ${true} + ${'>=1.0 && <2.1'} | ${'>=1.0 && <2.0'} | ${false} + ${'>=0.9 && <2.1'} | ${'>=1.0 && <2.0'} | ${false} + ${'gibberish'} | ${''} | ${undefined} + ${'>=. && <.'} | ${'>=. && <.'} | ${undefined} + `( + 'pvp.subbet("$subRange", "$superRange") === $expected', + ({ subRange, superRange, expected }) => { + expect(pvp.subset?.(subRange, superRange)).toBe(expected); + }, + ); + }); + + describe('.sortVersions()', () => { + it.each` + a | b | expected + ${'1.0'} | ${'1.1'} | ${-1} + ${'1.1'} | ${'1.0'} | ${1} + ${'1.0'} | ${'1.0'} | ${0} + `('pvp.sortVersions("$a", "$b") === $expected', ({ a, b, expected }) => { + expect(pvp.sortVersions(a, b)).toBe(expected); + }); + }); + + describe('.isStable()', () => { + it('should consider 0.0.0 stable', () => { + // in PVP, stability is not conveyed in the version number + // so we consider all versions stable + expect(pvp.isStable('0.0.0')).toBeTrue(); + }); + }); + + describe('.isCompatible()', () => { + it('should consider 0.0.0 compatible', () => { + // in PVP, there is no extra information besides the numbers + // so we consider all versions compatible + expect(pvp.isCompatible('0.0.0')).toBeTrue(); + }); + }); +}); diff --git a/lib/modules/versioning/pvp/index.ts b/lib/modules/versioning/pvp/index.ts new file mode 100644 index 00000000000000..59e8b3026ab91c --- /dev/null +++ b/lib/modules/versioning/pvp/index.ts @@ -0,0 +1,257 @@ +import { logger } from '../../../logger'; +import type { RangeStrategy } from '../../../types/versioning'; +import { regEx } from '../../../util/regex'; +import type { NewValueConfig, VersioningApi } from '../types'; +import { parseRange } from './range'; +import { compareIntArray, extractAllParts, getParts, plusOne } from './util'; + +export const id = 'pvp'; +export const displayName = 'Package Versioning Policy (Haskell)'; +export const urls = ['https://pvp.haskell.org']; +export const supportsRanges = true; +export const supportedRangeStrategies: RangeStrategy[] = ['auto']; + +const digitsAndDots = regEx(/^[\d.]+$/); + +function isGreaterThan(version: string, other: string): boolean { + const versionIntMajor = extractAllParts(version); + const otherIntMajor = extractAllParts(other); + if (versionIntMajor === null || otherIntMajor === null) { + return false; + } + return compareIntArray(versionIntMajor, otherIntMajor) === 'gt'; +} + +function getMajor(version: string): number | null { + // This basically can't be implemented correctly, since + // 1.1 and 1.10 become equal when converted to float. + // Consumers should use isSame instead. + const parts = getParts(version); + if (parts === null) { + return null; + } + return Number(parts.major.join('.')); +} + +function getMinor(version: string): number | null { + const parts = getParts(version); + if (parts === null || parts.minor.length === 0) { + return null; + } + return Number(parts.minor.join('.')); +} + +function getPatch(version: string): number | null { + const parts = getParts(version); + if (parts === null || parts.patch.length === 0) { + return null; + } + return Number(parts.patch[0] + '.' + parts.patch.slice(1).join('')); +} + +function matches(version: string, range: string): boolean { + const parsed = parseRange(range); + if (parsed === null) { + return false; + } + const ver = extractAllParts(version); + const lower = extractAllParts(parsed.lower); + const upper = extractAllParts(parsed.upper); + if (ver === null || lower === null || upper === null) { + return false; + } + return ( + 'gt' === compareIntArray(upper, ver) && + ['eq', 'lt'].includes(compareIntArray(lower, ver)) + ); +} + +function satisfyingVersion( + versions: string[], + range: string, + reverse: boolean, +): string | null { + const copy = versions.slice(0); + copy.sort((a, b) => { + const multiplier = reverse ? 1 : -1; + return sortVersions(a, b) * multiplier; + }); + const result = copy.find((v) => matches(v, range)); + return result ?? null; +} + +function getSatisfyingVersion( + versions: string[], + range: string, +): string | null { + return satisfyingVersion(versions, range, false); +} + +function minSatisfyingVersion( + versions: string[], + range: string, +): string | null { + return satisfyingVersion(versions, range, true); +} + +function isLessThanRange(version: string, range: string): boolean { + const parsed = parseRange(range); + if (parsed === null) { + return false; + } + const compos = extractAllParts(version); + const lower = extractAllParts(parsed.lower); + if (compos === null || lower === null) { + return false; + } + return 'lt' === compareIntArray(compos, lower); +} + +function getNewValue({ + currentValue, + newVersion, + rangeStrategy, +}: NewValueConfig): string | null { + if (rangeStrategy !== 'auto') { + logger.info( + { rangeStrategy, currentValue, newVersion }, + `PVP can't handle this range strategy.`, + ); + return null; + } + const parsed = parseRange(currentValue); + if (parsed === null) { + logger.info( + { currentValue, newVersion }, + 'could not parse PVP version range', + ); + return null; + } + if (isLessThanRange(newVersion, currentValue)) { + // ignore new releases in old release series + return null; + } + if (matches(newVersion, currentValue)) { + // the upper bound is already high enough + return null; + } + const compos = getParts(newVersion); + if (compos === null) { + return null; + } + const majorPlusOne = plusOne(compos.major); + // istanbul ignore next: since all versions that can be parsed, can also be bumped, this can never happen + if (!matches(newVersion, `>=${parsed.lower} && <${majorPlusOne}`)) { + logger.warn( + { newVersion }, + "Even though the major bound was bumped, the newVersion still isn't accepted.", + ); + return null; + } + return `>=${parsed.lower} && <${majorPlusOne}`; +} + +function isSame( + type: 'major' | 'minor' | 'patch', + a: string, + b: string, +): boolean { + const aParts = getParts(a); + const bParts = getParts(b); + if (aParts === null || bParts === null) { + return false; + } + if (type === 'major') { + return 'eq' === compareIntArray(aParts.major, bParts.major); + } else if (type === 'minor') { + return 'eq' === compareIntArray(aParts.minor, bParts.minor); + } else { + return 'eq' === compareIntArray(aParts.patch, bParts.patch); + } +} + +function subset(subRange: string, superRange: string): boolean | undefined { + const sub = parseRange(subRange); + const sup = parseRange(superRange); + if (sub === null || sup === null) { + return undefined; + } + const subLower = extractAllParts(sub.lower); + const subUpper = extractAllParts(sub.upper); + const supLower = extractAllParts(sup.lower); + const supUpper = extractAllParts(sup.upper); + if ( + subLower === null || + subUpper === null || + supLower === null || + supUpper === null + ) { + return undefined; + } + if ('lt' === compareIntArray(subLower, supLower)) { + return false; + } + if ('gt' === compareIntArray(subUpper, supUpper)) { + return false; + } + return true; +} + +function isVersion(maybeRange: string | undefined | null): boolean { + return typeof maybeRange === 'string' && parseRange(maybeRange) === null; +} + +function isValid(ver: string): boolean { + return extractAllParts(ver) !== null || parseRange(ver) !== null; +} + +function isSingleVersion(range: string): boolean { + const noSpaces = range.trim(); + return noSpaces.startsWith('==') && digitsAndDots.test(noSpaces.slice(2)); +} + +function equals(a: string, b: string): boolean { + const aParts = extractAllParts(a); + const bParts = extractAllParts(b); + if (aParts === null || bParts === null) { + return false; + } + return 'eq' === compareIntArray(aParts, bParts); +} + +function sortVersions(a: string, b: string): number { + if (equals(a, b)) { + return 0; + } + return isGreaterThan(a, b) ? 1 : -1; +} + +function isStable(version: string): boolean { + return true; +} + +function isCompatible(version: string): boolean { + return true; +} + +export const api: VersioningApi = { + isValid, + isVersion, + isStable, + isCompatible, + getMajor, + getMinor, + getPatch, + isSingleVersion, + sortVersions, + equals, + matches, + getSatisfyingVersion, + minSatisfyingVersion, + isLessThanRange, + isGreaterThan, + getNewValue, + isSame, + subset, +}; +export default api; diff --git a/lib/modules/versioning/pvp/range.spec.ts b/lib/modules/versioning/pvp/range.spec.ts new file mode 100644 index 00000000000000..52b9128d8843cf --- /dev/null +++ b/lib/modules/versioning/pvp/range.spec.ts @@ -0,0 +1,12 @@ +import { parseRange } from './range'; + +describe('modules/versioning/pvp/range', () => { + describe('.parseRange(range)', () => { + it('should parse >=1.0 && <1.1', () => { + const parsed = parseRange('>=1.0 && <1.1'); + expect(parsed).not.toBeNull(); + expect(parsed!.lower).toBe('1.0'); + expect(parsed!.upper).toBe('1.1'); + }); + }); +}); diff --git a/lib/modules/versioning/pvp/range.ts b/lib/modules/versioning/pvp/range.ts new file mode 100644 index 00000000000000..7bf77b2c43758f --- /dev/null +++ b/lib/modules/versioning/pvp/range.ts @@ -0,0 +1,21 @@ +import { regEx } from '../../../util/regex'; +import type { Range } from './types'; + +// This range format was chosen because it is common in the ecosystem +const gteAndLtRange = regEx(/>=(?[\d.]+)&&<(?[\d.]+)/); +const ltAndGteRange = regEx(/<(?[\d.]+)&&>=(?[\d.]+)/); + +export function parseRange(input: string): Range | null { + const noSpaces = input.replaceAll(' ', ''); + let m = gteAndLtRange.exec(noSpaces); + if (!m?.groups) { + m = ltAndGteRange.exec(noSpaces); + if (!m?.groups) { + return null; + } + } + return { + lower: m.groups['lower'], + upper: m.groups['upper'], + }; +} diff --git a/lib/modules/versioning/pvp/readme.md b/lib/modules/versioning/pvp/readme.md new file mode 100644 index 00000000000000..c542f9c7d64414 --- /dev/null +++ b/lib/modules/versioning/pvp/readme.md @@ -0,0 +1,18 @@ +[Package Versioning Policy](https://pvp.haskell.org/) is used with Haskell. +It's like semver, except that the first _two_ parts are of the major +version. That is, in `A.B.C`: + +- `A.B`: major version +- `C`: minor + +The remaining parts are all considered of the patch version, and +they will be concatenated to form a `number`, i.e. IEEE 754 double. This means +that both `0.0.0.0.1` and `0.0.0.0.10` have patch version `0.1`. + +The range syntax comes from Cabal, specifically the [build-depends +section](https://cabal.readthedocs.io/en/3.10/cabal-package.html). + +This module is considered experimental since it only supports ranges of forms: + +- `>=W.X && =W.X` diff --git a/lib/modules/versioning/pvp/types.ts b/lib/modules/versioning/pvp/types.ts new file mode 100644 index 00000000000000..d2ab5e550debb4 --- /dev/null +++ b/lib/modules/versioning/pvp/types.ts @@ -0,0 +1,9 @@ +export interface Range { + lower: string; + upper: string; +} +export interface Parts { + major: number[]; + minor: number[]; + patch: number[]; +} diff --git a/lib/modules/versioning/pvp/util.spec.ts b/lib/modules/versioning/pvp/util.spec.ts new file mode 100644 index 00000000000000..c8f46e91e599bc --- /dev/null +++ b/lib/modules/versioning/pvp/util.spec.ts @@ -0,0 +1,23 @@ +import { extractAllParts, getParts } from './util'; + +describe('modules/versioning/pvp/util', () => { + describe('.extractAllParts(version)', () => { + it('should return null when there are no numbers', () => { + expect(extractAllParts('')).toBeNull(); + }); + + it('should parse 3.0', () => { + expect(extractAllParts('3.0')).toEqual([3, 0]); + }); + }); + + describe('.getParts(...)', () => { + it('"0" is valid major version', () => { + expect(getParts('0')?.major).toEqual([0]); + }); + + it('returns null when no parts could be extracted', () => { + expect(getParts('')).toBeNull(); + }); + }); +}); diff --git a/lib/modules/versioning/pvp/util.ts b/lib/modules/versioning/pvp/util.ts new file mode 100644 index 00000000000000..d4e4cfe8ac6ad3 --- /dev/null +++ b/lib/modules/versioning/pvp/util.ts @@ -0,0 +1,54 @@ +import type { Parts } from './types'; + +export function extractAllParts(version: string): number[] | null { + const parts = version.split('.').map((x) => parseInt(x, 10)); + const ret: number[] = []; + for (const l of parts) { + if (l < 0 || !isFinite(l)) { + return null; + } + ret.push(l); + } + return ret; +} + +export function getParts(splitOne: string): Parts | null { + const c = extractAllParts(splitOne); + if (c === null) { + return null; + } + return { + major: c.slice(0, 2), + minor: c.slice(2, 3), + patch: c.slice(3), + }; +} + +export function plusOne(majorOne: number[]): string { + return `${majorOne[0]}.${majorOne[1] + 1}`; +} + +export function compareIntArray( + versionPartsInt: number[], + otherPartsInt: number[], +): 'lt' | 'eq' | 'gt' { + for ( + let i = 0; + i < Math.min(versionPartsInt.length, otherPartsInt.length); + i++ + ) { + if (versionPartsInt[i] > otherPartsInt[i]) { + return 'gt'; + } + if (versionPartsInt[i] < otherPartsInt[i]) { + return 'lt'; + } + } + if (versionPartsInt.length === otherPartsInt.length) { + return 'eq'; + } + if (versionPartsInt.length > otherPartsInt.length) { + return 'gt'; + } + return 'lt'; +} From f4edef83d51771166314ff4a2b71118c678ded05 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:53:12 +0000 Subject: [PATCH 12/73] chore(deps): update pnpm to v9.14.4 (#32942) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6f5adc0d59eb99..e04b042f03bb71 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ }, "volta": { "node": "22.11.0", - "pnpm": "9.14.3" + "pnpm": "9.14.4" }, "dependencies": { "@aws-sdk/client-codecommit": "3.699.0", @@ -351,7 +351,7 @@ "typescript": "5.7.2", "unified": "9.2.2" }, - "packageManager": "pnpm@9.14.3", + "packageManager": "pnpm@9.14.4", "files": [ "dist", "renovate-schema.json" From 446fc69749f02f5b42e563134f24df912f9f9888 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:53:13 +0000 Subject: [PATCH 13/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.2.0 (#32943) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2ece90c3718472..50a841ed43f8ae 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.1.0 +FROM ghcr.io/containerbase/devcontainer:13.2.0 From 68113cf70fdaaf1f82b4893a83de0f011c2cb6df Mon Sep 17 00:00:00 2001 From: Jade Ferreira Date: Fri, 6 Dec 2024 13:57:44 -0300 Subject: [PATCH 14/73] feat(preset): Add logback monorepo group (#32927) --- lib/data/monorepo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index 50acc763b7c1da..583d823b009fff 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -358,6 +358,7 @@ "lexical": "https://github.com/facebook/lexical", "linguijs": "https://github.com/lingui/js-lingui", "log4j2": "https://github.com/apache/logging-log4j2", + "logback": "https://github.com/qos-ch/logback", "loopback": [ "https://github.com/strongloop/loopback-next", "https://github.com/loopbackio/loopback-next" From cddd950f98ff998b41b9fdb0a46d3ea7df3b9163 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:11:00 +0000 Subject: [PATCH 15/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.2.0 (#32950) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 9bf231ae529b60..75cfe648952aa8 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.1.0', + default: 'ghcr.io/containerbase/sidecar:13.2.0', globalOnly: true, }, { From ed9c026140a45d38369089f9e9521979542f43ce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:11:02 +0000 Subject: [PATCH 16/73] fix(deps): update ghcr.io/renovatebot/base-image docker tag (#32949) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 275a22192afe0a..e5ecf36e5b67cf 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.15.0@sha256:12891c6b442e0a45e4bdf119c2122bb4d11d8755af96394dfc13785bfbfd4544 AS slim-base +FROM ghcr.io/renovatebot/base-image:9.15.2@sha256:9b4476b3af6409593eb1d9e6b57628fb12ba4cd68e6db79f9b414b24bdf1aec0 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.15.0-full@sha256:c7c8712b552fca3a140098fe1f515914bda1ffc15a9693da717d57d02a10b5f7 AS full-base +FROM ghcr.io/renovatebot/base-image:9.15.1-full@sha256:fa3be293fa0dd6d85110687f2906cb05bae125f8c3fe4a5b5905326c2e15e6e4 AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.15.0@sha256:12891c6b442e0a45e4bdf119c2122bb4d11d8755af96394dfc13785bfbfd4544 AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.15.2@sha256:9b4476b3af6409593eb1d9e6b57628fb12ba4cd68e6db79f9b414b24bdf1aec0 AS build # We want a specific node version here # renovate: datasource=node-version From 5cb9980a2a9cf740b1975ed11327fd25a512bbc2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:55:51 +0000 Subject: [PATCH 17/73] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v9.16.1 (#32951) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index e5ecf36e5b67cf..86a0e9e6efbf60 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.15.2@sha256:9b4476b3af6409593eb1d9e6b57628fb12ba4cd68e6db79f9b414b24bdf1aec0 AS slim-base +FROM ghcr.io/renovatebot/base-image:9.16.1@sha256:45e4eacccde19797e2c9dbc39da851c30d347f09e88a47776b07a3f78c1076ef AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.15.1-full@sha256:fa3be293fa0dd6d85110687f2906cb05bae125f8c3fe4a5b5905326c2e15e6e4 AS full-base +FROM ghcr.io/renovatebot/base-image:9.16.1-full@sha256:b962ec1606cc009b05c4d0011cd9566532d0502acb1fe8d71969fc0231c1cb56 AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.15.2@sha256:9b4476b3af6409593eb1d9e6b57628fb12ba4cd68e6db79f9b414b24bdf1aec0 AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.1@sha256:45e4eacccde19797e2c9dbc39da851c30d347f09e88a47776b07a3f78c1076ef AS build # We want a specific node version here # renovate: datasource=node-version From 9f600d14457b3d99b08b255420c56cfda7dd2bf2 Mon Sep 17 00:00:00 2001 From: Johannes Feichtner <343448+Churro@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:30:13 +0100 Subject: [PATCH 18/73] fix(pep621): handle dependency-groups (PEP 735) in pdm lockfile updates (#32952) --- lib/modules/manager/pep621/processors/pdm.spec.ts | 14 +++++++++++++- lib/modules/manager/pep621/processors/pdm.ts | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/pep621/processors/pdm.spec.ts b/lib/modules/manager/pep621/processors/pdm.spec.ts index 7d7f23252ad9c9..0a2da7d7fc54b9 100644 --- a/lib/modules/manager/pep621/processors/pdm.spec.ts +++ b/lib/modules/manager/pep621/processors/pdm.spec.ts @@ -173,6 +173,11 @@ describe('modules/manager/pep621/processors/pdm', () => { managerData: { depGroup: 'group3' }, }, { packageName: 'dep9', depType: depTypes.buildSystemRequires }, + { + packageName: 'dep10', + depType: depTypes.dependencyGroups, + managerData: { depGroup: 'dev' }, + }, ]; const result = await processor.updateArtifacts( { @@ -205,6 +210,9 @@ describe('modules/manager/pep621/processors/pdm', () => { { cmd: 'pdm update --no-sync --update-eager -dG group3 dep7 dep8', }, + { + cmd: 'pdm update --no-sync --update-eager -dG dev dep10', + }, ]); }); @@ -232,6 +240,10 @@ describe('modules/manager/pep621/processors/pdm', () => { packageName: 'dep5', depType: depTypes.pdmDevDependencies, }, + { + packageName: 'dep10', + depType: depTypes.dependencyGroups, + }, ]; const result = await processor.updateArtifacts( { @@ -244,7 +256,7 @@ describe('modules/manager/pep621/processors/pdm', () => { ); expect(result).toBeNull(); expect(execSnapshots).toEqual([]); - expect(logger.once.warn).toHaveBeenCalledTimes(2); + expect(logger.once.warn).toHaveBeenCalledTimes(3); }); it('return update on lockfileMaintenance', async () => { diff --git a/lib/modules/manager/pep621/processors/pdm.ts b/lib/modules/manager/pep621/processors/pdm.ts index 047be99f16b9c1..3a1f7d944ec523 100644 --- a/lib/modules/manager/pep621/processors/pdm.ts +++ b/lib/modules/manager/pep621/processors/pdm.ts @@ -193,6 +193,7 @@ function generateCMDs(updatedDeps: Upgrade[]): string[] { ); break; } + case depTypes.dependencyGroups: case depTypes.pdmDevDependencies: { if (is.nullOrUndefined(dep.managerData?.depGroup)) { logger.once.warn( From 4546a59eb31f6d5ca626029d468542be730446c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 22:30:51 +0000 Subject: [PATCH 19/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.2.1 (#32955) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 50a841ed43f8ae..d3f78111d60372 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.2.0 +FROM ghcr.io/containerbase/devcontainer:13.2.1 From c0f9d567bc3a04999f90600a609a2342f8d31a19 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 22:30:58 +0000 Subject: [PATCH 20/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.2.1 (#32956) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 75cfe648952aa8..3a3f91c0be73d8 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.2.0', + default: 'ghcr.io/containerbase/sidecar:13.2.1', globalOnly: true, }, { From 7056b1d59a66986db94b0c7f4849dc95d73b144e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 01:12:32 +0000 Subject: [PATCH 21/73] chore(deps): update jaegertracing/all-in-one docker tag to v1.64.0 (#32958) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/usage/examples/opentelemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/examples/opentelemetry.md b/docs/usage/examples/opentelemetry.md index f60d4230f98379..67cb4f7001bc2d 100644 --- a/docs/usage/examples/opentelemetry.md +++ b/docs/usage/examples/opentelemetry.md @@ -13,7 +13,7 @@ version: '3' services: # Jaeger jaeger: - image: jaegertracing/all-in-one:1.63.0 + image: jaegertracing/all-in-one:1.64.0 ports: - '16686:16686' - '4317' From ddd8d33efa2a3d4dc35e0701507bacb883bb796e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 01:12:33 +0000 Subject: [PATCH 22/73] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v9.16.2 (#32957) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 86a0e9e6efbf60..3541a81f9cdd55 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.1@sha256:45e4eacccde19797e2c9dbc39da851c30d347f09e88a47776b07a3f78c1076ef AS slim-base +FROM ghcr.io/renovatebot/base-image:9.16.2@sha256:1d4a35fa7839ed657e1d7eddd4140defd6e223e27d15eed1770ced4d33346e8b AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.1-full@sha256:b962ec1606cc009b05c4d0011cd9566532d0502acb1fe8d71969fc0231c1cb56 AS full-base +FROM ghcr.io/renovatebot/base-image:9.16.2-full@sha256:7e06337032623260bee2f308cb251d9630162b668484915b87d37e7fdbe6c75a AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.1@sha256:45e4eacccde19797e2c9dbc39da851c30d347f09e88a47776b07a3f78c1076ef AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.2@sha256:1d4a35fa7839ed657e1d7eddd4140defd6e223e27d15eed1770ced4d33346e8b AS build # We want a specific node version here # renovate: datasource=node-version From 6e1d6d13e7156239f360f4c3d4d285baac217de1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 03:24:52 +0000 Subject: [PATCH 23/73] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v9.16.3 (#32961) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 3541a81f9cdd55..905f84ccedb593 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.2@sha256:1d4a35fa7839ed657e1d7eddd4140defd6e223e27d15eed1770ced4d33346e8b AS slim-base +FROM ghcr.io/renovatebot/base-image:9.16.3@sha256:75ad28e758c69aed7acc3059edd10115a89e81064abb18d9d56192142243286d AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.2-full@sha256:7e06337032623260bee2f308cb251d9630162b668484915b87d37e7fdbe6c75a AS full-base +FROM ghcr.io/renovatebot/base-image:9.16.3-full@sha256:b89c2c982d2bbb75aac330c570fbac4f67d72578a0d19c72680632f95e63603b AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.2@sha256:1d4a35fa7839ed657e1d7eddd4140defd6e223e27d15eed1770ced4d33346e8b AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.3@sha256:75ad28e758c69aed7acc3059edd10115a89e81064abb18d9d56192142243286d AS build # We want a specific node version here # renovate: datasource=node-version From bad3cb550ef1168aab3dbfb31eca4e449db71ec4 Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Sat, 7 Dec 2024 15:50:59 +0900 Subject: [PATCH 24/73] feat(manager): add missing mise core toolings (#32954) --- .../manager/mise/upgradeable-tooling.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/modules/manager/mise/upgradeable-tooling.ts b/lib/modules/manager/mise/upgradeable-tooling.ts index 5664b2ee67d980..ad57d4914fe0d1 100644 --- a/lib/modules/manager/mise/upgradeable-tooling.ts +++ b/lib/modules/manager/mise/upgradeable-tooling.ts @@ -146,4 +146,26 @@ export const miseTooling: Record = { versioning: semverVersioning.id, }, }, + rust: { + misePluginUrl: 'https://mise.jdx.dev/lang/rust.html', + config: { + packageName: 'rust-lang/rust', + datasource: GithubTagsDatasource.id, + }, + }, + swift: { + misePluginUrl: 'https://mise.jdx.dev/lang/swift.html', + config: { + packageName: 'swift-lang/swift', + datasource: GithubReleasesDatasource.id, + extractVersion: '^swift-(?\\S+)', + }, + }, + zig: { + misePluginUrl: 'https://mise.jdx.dev/lang/zig.html', + config: { + packageName: 'ziglang/zig', + datasource: GithubTagsDatasource.id, + }, + }, }; From 5421c729b91bb760604d7f2c3319d603e45a795e Mon Sep 17 00:00:00 2001 From: Jason Sipula Date: Fri, 6 Dec 2024 22:51:44 -0800 Subject: [PATCH 25/73] fix(manager/gleam): apply suggested change from #31002 (#32962) --- lib/modules/manager/gleam/artifacts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/gleam/artifacts.ts b/lib/modules/manager/gleam/artifacts.ts index ccd1b37f807c79..b7b288cc3d67a3 100644 --- a/lib/modules/manager/gleam/artifacts.ts +++ b/lib/modules/manager/gleam/artifacts.ts @@ -52,7 +52,7 @@ export async function updateArtifacts( // `gleam deps update` with no packages rebuilds the lock file const packagesToUpdate = isLockFileMaintenance ? [] - : updatedDeps.map((dep) => dep.depName).filter(Boolean); + : updatedDeps.map((dep) => dep.depName).filter(is.string); const updateCommand = ['gleam deps update', ...packagesToUpdate].join(' '); await exec(updateCommand, execOptions); From f40c0351adde4552c3c0f41eddb523391a99f7ee Mon Sep 17 00:00:00 2001 From: Julien Tanay Date: Sat, 7 Dec 2024 10:20:09 +0100 Subject: [PATCH 26/73] fix(bundler): fix inline source variable parsing (#32946) --- lib/modules/manager/bundler/extract.spec.ts | 5 +++++ lib/modules/manager/bundler/extract.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/bundler/extract.spec.ts b/lib/modules/manager/bundler/extract.spec.ts index 549ddf57e1bdfa..8a4f7acb24f514 100644 --- a/lib/modules/manager/bundler/extract.spec.ts +++ b/lib/modules/manager/bundler/extract.spec.ts @@ -175,6 +175,7 @@ describe('modules/manager/bundler/extract', () => { gem "inline_source_gem", source: 'https://gems.foo.com' gem 'inline_source_gem_with_version', "~> 1", source: 'https://gems.bar.com' gem 'inline_source_gem_with_variable_source', source: baz + gem 'inline_source_gem_with_variable_source_and_require_after', source: baz, require: %w[inline_source_gem] gem "inline_source_gem_with_require_after", source: 'https://gems.foo.com', require: %w[inline_source_gem] gem "inline_source_gem_with_require_before", require: %w[inline_source_gem], source: 'https://gems.foo.com' gem "inline_source_gem_with_group_before", group: :production, source: 'https://gems.foo.com' @@ -199,6 +200,10 @@ describe('modules/manager/bundler/extract', () => { depName: 'inline_source_gem_with_variable_source', registryUrls: ['https://gems.baz.com'], }, + { + depName: 'inline_source_gem_with_variable_source_and_require_after', + registryUrls: ['https://gems.baz.com'], + }, { depName: 'inline_source_gem_with_require_after', registryUrls: ['https://gems.foo.com'], diff --git a/lib/modules/manager/bundler/extract.ts b/lib/modules/manager/bundler/extract.ts index c235052bd33df5..640bdab2f13ded 100644 --- a/lib/modules/manager/bundler/extract.ts +++ b/lib/modules/manager/bundler/extract.ts @@ -20,7 +20,7 @@ const gemMatchRegex = regEx( `^\\s*gem\\s+(['"])(?[^'"]+)(['"])(\\s*,\\s*(?(['"])[^'"]+['"](\\s*,\\s*['"][^'"]+['"])?))?`, ); const sourceMatchRegex = regEx( - `source:\\s*(['"](?[^'"]+)['"]|(?[^'"]+))?`, + `source:\\s*((?:['"](?[^'"]+)['"])|(?\\w+))?`, ); const gitRefsMatchRegex = regEx( `((git:\\s*['"](?[^'"]+)['"])|(\\s*,\\s*github:\\s*['"](?[^'"]+)['"]))(\\s*,\\s*branch:\\s*['"](?[^'"]+)['"])?(\\s*,\\s*ref:\\s*['"](?[^'"]+)['"])?(\\s*,\\s*tag:\\s*['"](?[^'"]+)['"])?`, From 8a52e50b3f1f05fa05cc12449fd887423b6e6eb0 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Sun, 8 Dec 2024 12:54:49 +0530 Subject: [PATCH 27/73] test(gitlab): fix cache mock (#32969) --- lib/modules/platform/bitbucket/index.spec.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/modules/platform/bitbucket/index.spec.ts b/lib/modules/platform/bitbucket/index.spec.ts index 92ca09c7817f29..86b482f09851da 100644 --- a/lib/modules/platform/bitbucket/index.spec.ts +++ b/lib/modules/platform/bitbucket/index.spec.ts @@ -1,6 +1,5 @@ import * as httpMock from '../../../../test/http-mock'; import type { logger as _logger } from '../../../logger'; -import { reset as memCacheReset } from '../../../util/cache/memory'; import type * as _git from '../../../util/git'; import { setBaseUrl } from '../../../util/http/bitbucket'; import type { Platform, PlatformResult, RepoParams } from '../types'; @@ -26,10 +25,12 @@ describe('modules/platform/bitbucket/index', () => { let hostRules: jest.Mocked; let git: jest.Mocked; let logger: jest.Mocked; + let memCache: typeof import('../../../util/cache/memory'); beforeEach(async () => { // reset module jest.resetModules(); + memCache = await import('../../../util/cache/memory'); hostRules = jest.requireMock('../../../util/host-rules'); bitbucket = await import('.'); logger = (await import('../../../logger')).logger as any; @@ -44,7 +45,7 @@ describe('modules/platform/bitbucket/index', () => { }); setBaseUrl(baseUrl); - memCacheReset(); + memCache.init(); }); async function initRepoMock( @@ -499,7 +500,6 @@ describe('modules/platform/bitbucket/index', () => { const scope = await initRepoMock(); scope .get('/2.0/repositories/some/repo/refs/branches/branch') - .twice() .reply(200, { name: 'branch', target: { @@ -1612,7 +1612,6 @@ describe('modules/platform/bitbucket/index', () => { created_on: '2018-07-02T07:02:25.275030+00:00', }) .get('/2.0/repositories/some/repo/pullrequests/5') - .twice() .reply(200, pr); expect(await bitbucket.getPr(3)).toMatchSnapshot(); From ab09e25e9cefe8327cd852dc3193c09f2f74ab1a Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 8 Dec 2024 04:33:31 -0300 Subject: [PATCH 28/73] refactor: Simplify lookup function (#32968) --- .../process/__snapshots__/fetch.spec.ts.snap | 56 -------------- lib/workers/repository/process/fetch.spec.ts | 45 ++++++++++- lib/workers/repository/process/fetch.ts | 77 ++++++++++++------- 3 files changed, 92 insertions(+), 86 deletions(-) delete mode 100644 lib/workers/repository/process/__snapshots__/fetch.spec.ts.snap diff --git a/lib/workers/repository/process/__snapshots__/fetch.spec.ts.snap b/lib/workers/repository/process/__snapshots__/fetch.spec.ts.snap deleted file mode 100644 index 8352aa00baf95e..00000000000000 --- a/lib/workers/repository/process/__snapshots__/fetch.spec.ts.snap +++ /dev/null @@ -1,56 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/process/fetch fetchUpdates() fetches updates 1`] = ` -{ - "maven": [ - { - "deps": [ - { - "datasource": "maven", - "depName": "bbb", - "packageName": "bbb", - "updates": [ - "a", - "b", - ], - }, - ], - "extractedConstraints": { - "other": "constraint", - "some": "constraint", - }, - "packageFile": "pom.xml", - }, - ], -} -`; - -exports[`workers/repository/process/fetch fetchUpdates() handles ignored, skipped and disabled 1`] = ` -{ - "npm": [ - { - "deps": [ - { - "depName": "abcd", - "packageName": "abcd", - "skipReason": "ignored", - "updates": [], - }, - { - "depName": "foo", - "packageName": "foo", - "skipReason": "disabled", - "updates": [], - }, - { - "depName": "skipped", - "packageName": "skipped", - "skipReason": "some-reason", - "updates": [], - }, - ], - "packageFile": "package.json", - }, - ], -} -`; diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts index 172a6cb4566d83..0ad23785fe6c00 100644 --- a/lib/workers/repository/process/fetch.spec.ts +++ b/lib/workers/repository/process/fetch.spec.ts @@ -50,7 +50,33 @@ describe('workers/repository/process/fetch', () => { ], }; await fetchUpdates(config, packageFiles); - expect(packageFiles).toMatchSnapshot(); + expect(packageFiles).toEqual({ + npm: [ + { + deps: [ + { + depName: 'abcd', + packageName: 'abcd', + skipReason: 'ignored', + updates: [], + }, + { + depName: 'foo', + packageName: 'foo', + skipReason: 'disabled', + updates: [], + }, + { + depName: 'skipped', + packageName: 'skipped', + skipReason: 'some-reason', + updates: [], + }, + ], + packageFile: 'package.json', + }, + ], + }); expect(packageFiles.npm[0].deps[0].skipReason).toBe('ignored'); expect(packageFiles.npm[0].deps[0].updates).toHaveLength(0); expect(packageFiles.npm[0].deps[1].skipReason).toBe('disabled'); @@ -71,7 +97,22 @@ describe('workers/repository/process/fetch', () => { }; lookupUpdates.mockResolvedValue({ updates: ['a', 'b'] } as never); await fetchUpdates(config, packageFiles); - expect(packageFiles).toMatchSnapshot(); + expect(packageFiles).toEqual({ + maven: [ + { + deps: [ + { + datasource: 'maven', + depName: 'bbb', + packageName: 'bbb', + updates: ['a', 'b'], + }, + ], + extractedConstraints: { other: 'constraint', some: 'constraint' }, + packageFile: 'pom.xml', + }, + ], + }); }); it('skips deps with empty names', async () => { diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 4a4aed2c310174..6b3fcb3860b0e4 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -17,27 +17,38 @@ import { Result } from '../../../util/result'; import { LookupStats } from '../../../util/stats'; import { PackageFiles } from '../package-files'; import { lookupUpdates } from './lookup'; -import type { LookupUpdateConfig } from './lookup/types'; +import type { LookupUpdateConfig, UpdateResult } from './lookup/types'; -async function fetchDepUpdates( +type LookupResult = Result; + +async function lookup( packageFileConfig: RenovateConfig & PackageFile, indep: PackageDependency, -): Promise> { +): Promise { const dep = clone(indep); + dep.updates = []; + if (is.string(dep.depName)) { dep.depName = dep.depName.trim(); } + dep.packageName ??= dep.depName; + + if (dep.skipReason) { + return Result.ok(dep); + } + if (!is.nonEmptyString(dep.packageName)) { dep.skipReason = 'invalid-name'; + return Result.ok(dep); } + if (dep.isInternal && !packageFileConfig.updateInternalDeps) { dep.skipReason = 'internal-package'; - } - if (dep.skipReason) { return Result.ok(dep); } + const { depName } = dep; // TODO: fix types let depConfig = mergeChildConfig(packageFileConfig, dep); @@ -46,24 +57,33 @@ async function fetchDepUpdates( depConfig.versioning ??= getDefaultVersioning(depConfig.datasource); depConfig = await applyPackageRules(depConfig, 'pre-lookup'); depConfig.packageName ??= depConfig.depName; + if (depConfig.ignoreDeps!.includes(depName!)) { // TODO: fix types (#22198) logger.debug(`Dependency: ${depName!}, is ignored`); dep.skipReason = 'ignored'; - } else if (depConfig.enabled === false) { + return Result.ok(dep); + } + + if (depConfig.enabled === false) { logger.debug(`Dependency: ${depName!}, is disabled`); dep.skipReason = 'disabled'; - } else { - if (depConfig.datasource) { - const { val: updateResult, err } = await LookupStats.wrap( - depConfig.datasource, - () => - Result.wrap(lookupUpdates(depConfig as LookupUpdateConfig)).unwrap(), - ); - - if (updateResult) { - Object.assign(dep, updateResult); - } else { + return Result.ok(dep); + } + + if (!depConfig.datasource) { + return Result.ok(dep); + } + + return LookupStats.wrap(depConfig.datasource, async () => { + return await Result.wrap(lookupUpdates(depConfig as LookupUpdateConfig)) + .onValue((dep) => { + logger.trace({ dep }, 'Dependency lookup success'); + }) + .onError((err) => { + logger.trace({ err, depName }, 'Dependency lookup error'); + }) + .catch((err): Result => { if ( packageFileConfig.repoIsOnboarded === true || !(err instanceof ExternalHostError) @@ -72,17 +92,18 @@ async function fetchDepUpdates( } const cause = err.err; - dep.warnings ??= []; - dep.warnings.push({ - topic: 'Lookup Error', - // TODO: types (#22198) - message: `${depName!}: ${cause.message}`, + return Result.ok({ + updates: [], + warnings: [ + { + topic: 'Lookup Error', + message: `${depName}: ${cause.message}`, + }, + ], }); - } - } - dep.updates ??= []; - } - return Result.ok(dep); + }) + .transform((upd): PackageDependency => Object.assign(dep, upd)); + }); } async function fetchManagerPackagerFileUpdates( @@ -101,7 +122,7 @@ async function fetchManagerPackagerFileUpdates( const { manager } = packageFileConfig; const queue = pFile.deps.map( (dep) => async (): Promise => { - const updates = await fetchDepUpdates(packageFileConfig, dep); + const updates = await lookup(packageFileConfig, dep); return updates.unwrapOrThrow(); }, ); From aabf1638d1a39fa675d2eecc7a23076b378c1f28 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Sun, 8 Dec 2024 13:37:53 +0530 Subject: [PATCH 29/73] fix(schedule): use and logic to handle dow+dom (#32903) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/configuration-options.md | 5 +++++ .../repository/update/branch/schedule.spec.ts | 22 ++++++++++++------- .../repository/update/branch/schedule.ts | 1 + 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 5fa92c7fafccda..003eb194595c10 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3853,6 +3853,11 @@ You could then configure a schedule like this at the repository level: This would mean that Renovate can run for 7 hours each night, plus all the time on weekends. Note how the above example makes use of the "OR" logic of combining multiple schedules in the array. + +!!! note + If both the day of the week _and_ the day of the month are restricted in the schedule, then Renovate only runs when both the day of the month _and_ day of the week match! + For example: `* * 1-7 * 4` means Renovate only runs on the _first_ Thursday of the month. + It's common to use `schedule` in combination with [`timezone`](#timezone). You should configure [`updateNotScheduled=false`](#updatenotscheduled) if you want the schedule more strictly enforced so that _updates_ to existing branches aren't pushed out of schedule. You can also configure [`automergeSchedule`](#automergeschedule) to limit the hours in which branches/PRs are _automerged_ (if [`automerge`](#automerge) is configured). diff --git a/lib/workers/repository/update/branch/schedule.spec.ts b/lib/workers/repository/update/branch/schedule.spec.ts index d310c4090b1b13..4dacb99da885dd 100644 --- a/lib/workers/repository/update/branch/schedule.spec.ts +++ b/lib/workers/repository/update/branch/schedule.spec.ts @@ -299,15 +299,17 @@ describe('workers/repository/update/branch/schedule', () => { }); }); - describe('complex cron schedules', () => { + describe('handles schedule with Day Of Month and Day Of Week using AND logic', () => { it.each` - sched | datetime | expected - ${'* * 1-7 * 0'} | ${'2024-10-04T10:50:00.000+0900'} | ${true} - ${'* * 1-7 * 0'} | ${'2024-10-13T10:50:00.000+0900'} | ${true} - ${'* * 1-7 * 0'} | ${'2024-10-16T10:50:00.000+0900'} | ${false} - `('$sched, $tz, $datetime', ({ sched, tz, datetime, expected }) => { - config.schedule = [sched]; - config.timezone = 'Asia/Tokyo'; + datetime | expected + ${'2017-06-01T01:00:00.000'} | ${true} + ${'2017-06-15T01:01:00.000'} | ${true} + ${'2017-06-16T03:00:00.000'} | ${false} + ${'2017-06-04T04:01:00.000'} | ${false} + ${'2017-06-08T04:01:00.000'} | ${false} + ${'2017-06-29T04:01:00.000'} | ${false} + `('$sched, $tz, $datetime', ({ datetime, expected }) => { + config.schedule = ['* 0-5 1-7,15-22 * 4']; jest.setSystemTime(new Date(datetime)); expect(schedule.isScheduledNow(config)).toBe(expected); }); @@ -320,6 +322,10 @@ describe('workers/repository/update/branch/schedule', () => { ${'after 4pm'} | ${'Asia/Singapore'} | ${'2017-06-30T16:01:00.000+0800'} | ${true} ${'before 4am on Monday'} | ${'Asia/Tokyo'} | ${'2017-06-26T03:59:00.000+0900'} | ${true} ${'before 4am on Monday'} | ${'Asia/Tokyo'} | ${'2017-06-26T04:01:00.000+0900'} | ${false} + ${'* 16-23 * * *'} | ${'Asia/Singapore'} | ${'2017-06-30T15:59:00.000+0800'} | ${false} + ${'* 16-23 * * *'} | ${'Asia/Singapore'} | ${'2017-06-30T16:01:00.000+0800'} | ${true} + ${'* 0-3 * * 1'} | ${'Asia/Tokyo'} | ${'2017-06-26T03:58:00.000+0900'} | ${true} + ${'* 0-3 * * 1'} | ${'Asia/Tokyo'} | ${'2017-06-26T04:01:00.000+0900'} | ${false} `('$sched, $tz, $datetime', ({ sched, tz, datetime, expected }) => { config.schedule = [sched]; config.timezone = tz; diff --git a/lib/workers/repository/update/branch/schedule.ts b/lib/workers/repository/update/branch/schedule.ts index 73c68b278b3579..7789ebcc4c0e66 100644 --- a/lib/workers/repository/update/branch/schedule.ts +++ b/lib/workers/repository/update/branch/schedule.ts @@ -96,6 +96,7 @@ export function cronMatches( ): boolean { const parsedCron: Cron = new Cron(cron, { ...(timezone && { timezone }), + legacyMode: false, }); // it will always parse because it is checked beforehand // istanbul ignore if From 9c29755756a24383e5937c0fc1ef9a34aac6c0b9 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Sun, 8 Dec 2024 17:28:11 +0530 Subject: [PATCH 30/73] refactor(config/massage): remove irrelevant code (#32971) --- lib/config/massage.spec.ts | 9 --------- lib/config/massage.ts | 3 --- 2 files changed, 12 deletions(-) diff --git a/lib/config/massage.spec.ts b/lib/config/massage.spec.ts index 117b3e5a7627bc..e4bccdb76c8b05 100644 --- a/lib/config/massage.spec.ts +++ b/lib/config/massage.spec.ts @@ -17,15 +17,6 @@ describe('config/massage', () => { expect(Array.isArray(res.schedule)).toBeTrue(); }); - it('massages npmToken', () => { - const config: RenovateConfig = { - npmToken: 'some-token', - }; - expect(massage.massageConfig(config)).toEqual({ - npmrc: '//registry.npmjs.org/:_authToken=some-token\n', - }); - }); - it('massages packageRules matchUpdateTypes', () => { const config: RenovateConfig = { packageRules: [ diff --git a/lib/config/massage.ts b/lib/config/massage.ts index c989fecf0723f9..eb109d8f991326 100644 --- a/lib/config/massage.ts +++ b/lib/config/massage.ts @@ -21,9 +21,6 @@ export function massageConfig(config: RenovateConfig): RenovateConfig { for (const [key, val] of Object.entries(config)) { if (allowedStrings.includes(key) && is.string(val)) { massagedConfig[key] = [val]; - } else if (key === 'npmToken' && is.string(val) && val.length < 50) { - massagedConfig.npmrc = `//registry.npmjs.org/:_authToken=${val}\n`; - delete massagedConfig.npmToken; } else if (is.array(val)) { massagedConfig[key] = []; val.forEach((item) => { From 464dcc3b76f0df75c91264df073f308963949a95 Mon Sep 17 00:00:00 2001 From: Bernardo <37117272+bernardo-martinez@users.noreply.github.com> Date: Sun, 8 Dec 2024 17:35:11 +0100 Subject: [PATCH 31/73] fix(hex): Relax case in typing of schema (#32963) Co-authored-by: Sergei Zharinov --- .../hex/__fixtures__/private_package.json | 4 +++- .../hex/__snapshots__/index.spec.ts.snap | 1 + lib/modules/datasource/hex/index.spec.ts | 1 + lib/modules/datasource/hex/schema.ts | 22 ++++++++++++++----- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/modules/datasource/hex/__fixtures__/private_package.json b/lib/modules/datasource/hex/__fixtures__/private_package.json index 7ae091e20e2a49..b03d1e49edbda2 100644 --- a/lib/modules/datasource/hex/__fixtures__/private_package.json +++ b/lib/modules/datasource/hex/__fixtures__/private_package.json @@ -19,7 +19,9 @@ "licenses": [ "MIT" ], - "links": {}, + "links": { + "GitHub": "https://github.com/renovate_test/private_package" + }, "maintainers": [] }, "name": "private_package", diff --git a/lib/modules/datasource/hex/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/hex/__snapshots__/index.spec.ts.snap index 08679d5bffbb36..c03ac339be668f 100644 --- a/lib/modules/datasource/hex/__snapshots__/index.spec.ts.snap +++ b/lib/modules/datasource/hex/__snapshots__/index.spec.ts.snap @@ -104,6 +104,7 @@ exports[`modules/datasource/hex/index getReleases processes a private repo with "version": "0.1.1", }, ], + "sourceUrl": "https://github.com/renovate_test/private_package", } `; diff --git a/lib/modules/datasource/hex/index.spec.ts b/lib/modules/datasource/hex/index.spec.ts index 6b762cd862d44f..49e01abacd41d9 100644 --- a/lib/modules/datasource/hex/index.spec.ts +++ b/lib/modules/datasource/hex/index.spec.ts @@ -168,6 +168,7 @@ describe('modules/datasource/hex/index', () => { expect(result).toEqual({ homepage: 'https://hex.pm/packages/renovate_test/private_package', + sourceUrl: 'https://github.com/renovate_test/private_package', registryUrl: 'https://hex.pm', releases: [ { releaseTimestamp: '2021-08-04T15:26:26.500Z', version: '0.1.0' }, diff --git a/lib/modules/datasource/hex/schema.ts b/lib/modules/datasource/hex/schema.ts index 6f5bd14b6d192b..a04aa81a49f399 100644 --- a/lib/modules/datasource/hex/schema.ts +++ b/lib/modules/datasource/hex/schema.ts @@ -8,9 +8,21 @@ export const HexRelease = z html_url: z.string().optional(), meta: z .object({ - links: z.object({ - Github: z.string(), - }), + links: z + .record(z.string()) + .transform((links) => + Object.fromEntries( + Object.entries(links).map(([key, value]) => [ + key.toLowerCase(), + value, + ]), + ), + ) + .pipe( + z.object({ + github: z.string(), + }), + ), }) .nullable() .catch(null), @@ -53,8 +65,8 @@ export const HexRelease = z releaseResult.homepage = hexResponse.html_url; } - if (hexResponse.meta?.links?.Github) { - releaseResult.sourceUrl = hexResponse.meta.links.Github; + if (hexResponse.meta?.links?.github) { + releaseResult.sourceUrl = hexResponse.meta.links.github; } return releaseResult; From 1d3b8579b2aafa4d222401bab6d23fff04b72a9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 8 Dec 2024 16:49:46 +0000 Subject: [PATCH 32/73] fix(deps): update dependency mkdocs-material to v9.5.48 (#32975) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pdm.lock | 16 ++++++++-------- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pdm.lock b/pdm.lock index 9db8285a101b5a..b2764c2e90dacf 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:82b73453c2cfc112cc6624da42e3557c5984aa7f6b3642dcabd734386f797cff" +content_hash = "sha256:7db5b5fe986b377f2cf123236671d2a57eb5cd72e0dc67f5abeea24910468f37" [[metadata.targets]] requires_python = ">=3.11" @@ -303,7 +303,7 @@ files = [ [[package]] name = "mkdocs-material" -version = "9.5.47" +version = "9.5.48" requires_python = ">=3.8" summary = "Documentation that simply works" groups = ["default"] @@ -321,8 +321,8 @@ dependencies = [ "requests~=2.26", ] files = [ - {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, - {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, + {file = "mkdocs_material-9.5.48-py3-none-any.whl", hash = "sha256:b695c998f4b939ce748adbc0d3bff73fa886a670ece948cf27818fa115dc16f8"}, + {file = "mkdocs_material-9.5.48.tar.gz", hash = "sha256:a582531e8b34f4c7ed38c29d5c44763053832cf2a32f7409567e0c74749a47db"}, ] [[package]] @@ -555,13 +555,13 @@ files = [ [[package]] name = "six" -version = "1.16.0" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.17.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" summary = "Python 2 and 3 compatibility utilities" groups = ["default"] files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 3320c681f291d0..07b3354964d318 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] dependencies = [ - "mkdocs-material==9.5.47", + "mkdocs-material==9.5.48", "mkdocs-awesome-pages-plugin==2.9.3", ] requires-python = ">=3.11" From 283a7dc1187fd3d26af1cdabf7ac9952b4d6647b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 8 Dec 2024 14:18:13 -0300 Subject: [PATCH 33/73] refactor: Rearrange const in the `lookupUpdates` function (#32974) --- lib/workers/repository/process/lookup/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index ea4b77b968e5c2..e481f6b3acbc0d 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -59,8 +59,6 @@ export async function lookupUpdates( config.versioning ??= getDefaultVersioning(config.datasource); const versioningApi = allVersioning.get(config.versioning); - const unconstrainedValue = - !!config.lockedVersion && is.undefined(config.currentValue); let dependency: ReleaseResult | null = null; const res: UpdateResult = { @@ -124,10 +122,14 @@ export async function lookupUpdates( ); } } + const isValid = is.string(compareValue) && versioningApi.isValid(compareValue); - if (unconstrainedValue || isValid) { + const unconstrainedValue = + !!config.lockedVersion && is.undefined(config.currentValue); + + if (isValid || unconstrainedValue) { if ( !config.updatePinnedDependencies && // TODO #22198 @@ -752,7 +754,6 @@ export async function lookupUpdates( rollbackPrs: config.rollbackPrs, isVulnerabilityAlert: config.isVulnerabilityAlert, updatePinnedDependencies: config.updatePinnedDependencies, - unconstrainedValue, err, }, 'lookupUpdates error', From b90840283aee71d74063bc18a6a9dfdb4cd3a706 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 8 Dec 2024 18:44:07 -0300 Subject: [PATCH 34/73] refactor(maven): Unified result type for s3 fetch (#32814) --- lib/modules/datasource/maven/s3.spec.ts | 33 ++++-- lib/modules/datasource/maven/types.ts | 28 +++++ lib/modules/datasource/maven/util.spec.ts | 8 +- lib/modules/datasource/maven/util.ts | 123 +++++++++++++++------- 4 files changed, 142 insertions(+), 50 deletions(-) diff --git a/lib/modules/datasource/maven/s3.spec.ts b/lib/modules/datasource/maven/s3.spec.ts index 8ec6e5a316463e..5030b0d21db780 100644 --- a/lib/modules/datasource/maven/s3.spec.ts +++ b/lib/modules/datasource/maven/s3.spec.ts @@ -46,7 +46,10 @@ describe('modules/datasource/maven/s3', () => { Bucket: 'repobucket', Key: 'org/example/package/maven-metadata.xml', }) - .resolvesOnce({ Body: meta as never }); + .resolvesOnce({ + Body: meta as never, + LastModified: new Date('2020-01-01T00:00Z'), + }); const res = await get('org.example:package', baseUrlS3); @@ -89,7 +92,7 @@ describe('modules/datasource/maven/s3', () => { { failedUrl: 's3://repobucket/org/example/package/maven-metadata.xml', }, - 'Dependency lookup authorization failed. Please correct AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env vars', + 'Maven S3 lookup error: credentials provider error, check "AWS_ACCESS_KEY_ID" and "AWS_SECRET_ACCESS_KEY" variables', ); }); @@ -108,7 +111,7 @@ describe('modules/datasource/maven/s3', () => { { failedUrl: 's3://repobucket/org/example/package/maven-metadata.xml', }, - 'Dependency lookup failed. Please a correct AWS_REGION env var', + 'Maven S3 lookup error: missing region, check "AWS_REGION" variable', ); }); @@ -127,7 +130,7 @@ describe('modules/datasource/maven/s3', () => { { failedUrl: 's3://repobucket/org/example/package/maven-metadata.xml', }, - 'S3 url not found', + 'Maven S3 lookup error: object not found', ); }); @@ -146,10 +149,23 @@ describe('modules/datasource/maven/s3', () => { { failedUrl: 's3://repobucket/org/example/package/maven-metadata.xml', }, - 'S3 url not found', + 'Maven S3 lookup error: object not found', ); }); + it('returns null for Deleted marker', async () => { + s3mock + .on(GetObjectCommand, { + Bucket: 'repobucket', + Key: 'org/example/package/maven-metadata.xml', + }) + .resolvesOnce({ DeleteMarker: true }); + + const res = await get('org.example:package', baseUrlS3); + + expect(res).toBeNull(); + }); + it('returns null for unknown error', async () => { s3mock .on(GetObjectCommand, { @@ -163,10 +179,10 @@ describe('modules/datasource/maven/s3', () => { expect(res).toBeNull(); expect(logger.debug).toHaveBeenCalledWith( { + err: expect.objectContaining({ message: 'Unknown error' }), failedUrl: 's3://repobucket/org/example/package/maven-metadata.xml', - message: 'Unknown error', }, - 'Unknown S3 download error', + 'Maven S3 lookup error: unknown error', ); }); @@ -178,9 +194,6 @@ describe('modules/datasource/maven/s3', () => { }) .resolvesOnce({}); expect(await get('org.example:package', baseUrlS3)).toBeNull(); - expect(logger.debug).toHaveBeenCalledWith( - "Expecting Readable response type got 'undefined' type instead", - ); }); }); }); diff --git a/lib/modules/datasource/maven/types.ts b/lib/modules/datasource/maven/types.ts index 7698e49fbc6663..853326887eaadc 100644 --- a/lib/modules/datasource/maven/types.ts +++ b/lib/modules/datasource/maven/types.ts @@ -1,4 +1,5 @@ import type { XmlDocument } from 'xmldoc'; +import type { Result } from '../../../util/result'; import type { ReleaseResult } from '../types'; export interface MavenDependency { @@ -19,3 +20,30 @@ export type DependencyInfo = Pick< ReleaseResult, 'homepage' | 'sourceUrl' | 'packageScope' >; + +export interface MavenFetchSuccess { + isCacheable?: boolean; + lastModified?: string; + data: T; +} + +export type MavenFetchError = + | { type: 'invalid-url' } + | { type: 'host-disabled' } + | { type: 'not-found' } + | { type: 'host-error' } + | { type: 'permission-issue' } + | { type: 'temporary-error' } + | { type: 'maven-central-temporary-error'; err: Error } + | { type: 'connection-error' } + | { type: 'unsupported-host' } + | { type: 'unsupported-format' } + | { type: 'unsupported-protocol' } + | { type: 'credentials-error' } + | { type: 'missing-aws-region' } + | { type: 'unknown'; err: Error }; + +export type MavenFetchResult = Result< + MavenFetchSuccess, + MavenFetchError +>; diff --git a/lib/modules/datasource/maven/util.spec.ts b/lib/modules/datasource/maven/util.spec.ts index fc42f24610b2b7..0921b7de58be6b 100644 --- a/lib/modules/datasource/maven/util.spec.ts +++ b/lib/modules/datasource/maven/util.spec.ts @@ -2,6 +2,7 @@ import type Request from 'got/dist/source/core'; import { partial } from '../../../../test/util'; import { HOST_DISABLED } from '../../../constants/error-messages'; import { Http, HttpError } from '../../../util/http'; +import type { MavenFetchError } from './types'; import { checkResource, downloadHttpProtocol, @@ -55,9 +56,12 @@ describe('modules/datasource/maven/util', () => { }); describe('downloadS3Protocol', () => { - it('returns null for non-S3 URLs', async () => { + it('fails for non-S3 URLs', async () => { const res = await downloadS3Protocol(new URL('http://not-s3.com/')); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'invalid-url' } satisfies MavenFetchError, + }); }); }); diff --git a/lib/modules/datasource/maven/util.ts b/lib/modules/datasource/maven/util.ts index b8db9f298c0836..3a6d85956b4c2c 100644 --- a/lib/modules/datasource/maven/util.ts +++ b/lib/modules/datasource/maven/util.ts @@ -20,6 +20,8 @@ import type { DependencyInfo, HttpResourceCheckResult, MavenDependency, + MavenFetchResult, + MavenFetchSuccess, MavenXml, } from './types'; @@ -142,42 +144,85 @@ function isS3NotFound(err: Error): boolean { return err.message === 'NotFound' || err.message === 'NoSuchKey'; } -export async function downloadS3Protocol(pkgUrl: URL): Promise { +export async function downloadS3Protocol( + pkgUrl: URL, +): Promise { logger.trace({ url: pkgUrl.toString() }, `Attempting to load S3 dependency`); - try { - const s3Url = parseS3Url(pkgUrl); - if (s3Url === null) { - return null; - } - const { Body: res } = await getS3Client().send(new GetObjectCommand(s3Url)); - if (res instanceof Readable) { - return streamToString(res); - } - logger.debug( - `Expecting Readable response type got '${typeof res}' type instead`, - ); - } catch (err) { - const failedUrl = pkgUrl.toString(); - if (err.name === 'CredentialsProviderError') { - logger.debug( - { failedUrl }, - 'Dependency lookup authorization failed. Please correct AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env vars', - ); - } else if (err.message === 'Region is missing') { - logger.debug( - { failedUrl }, - 'Dependency lookup failed. Please a correct AWS_REGION env var', - ); - } else if (isS3NotFound(err)) { - logger.trace({ failedUrl }, `S3 url not found`); - } else { - logger.debug( - { failedUrl, message: err.message }, - 'Unknown S3 download error', - ); - } + + const s3Url = parseS3Url(pkgUrl); + if (!s3Url) { + return Result.err({ type: 'invalid-url' }); } - return null; + + return await Result.wrap(() => { + const command = new GetObjectCommand(s3Url); + const client = getS3Client(); + return client.send(command); + }) + .transform( + async ({ + Body, + LastModified, + DeleteMarker, + }): Promise => { + if (DeleteMarker) { + logger.trace( + { failedUrl: pkgUrl.toString() }, + 'Maven S3 lookup error: DeleteMarker encountered', + ); + return Result.err({ type: 'not-found' }); + } + + if (!(Body instanceof Readable)) { + logger.debug( + { failedUrl: pkgUrl.toString() }, + 'Maven S3 lookup error: unsupported Body type', + ); + return Result.err({ type: 'unsupported-format' }); + } + + const data = await streamToString(Body); + const result: MavenFetchSuccess = { data }; + + const lastModified = normalizeDate(LastModified); + if (lastModified) { + result.lastModified = lastModified; + } + + return Result.ok(result); + }, + ) + .catch((err): MavenFetchResult => { + if (!(err instanceof Error)) { + return Result.err(err); + } + + const failedUrl = pkgUrl.toString(); + + if (err.name === 'CredentialsProviderError') { + logger.debug( + { failedUrl }, + 'Maven S3 lookup error: credentials provider error, check "AWS_ACCESS_KEY_ID" and "AWS_SECRET_ACCESS_KEY" variables', + ); + return Result.err({ type: 'credentials-error' }); + } + + if (err.message === 'Region is missing') { + logger.debug( + { failedUrl }, + 'Maven S3 lookup error: missing region, check "AWS_REGION" variable', + ); + return Result.err({ type: 'missing-aws-region' }); + } + + if (isS3NotFound(err)) { + logger.trace({ failedUrl }, 'Maven S3 lookup error: object not found'); + return Result.err({ type: 'not-found' }); + } + + logger.debug({ failedUrl, err }, 'Maven S3 lookup error: unknown error'); + return Result.err({ type: 'unknown', err }); + }); } export async function downloadArtifactRegistryProtocol( @@ -334,10 +379,12 @@ export async function downloadMavenXml( } if (protocol === 's3:') { - const res = await downloadS3Protocol(pkgUrl); - if (res) { - return { xml: new XmlDocument(res) }; - } + const rawResult = await downloadS3Protocol(pkgUrl); + const xmlResult = rawResult.transform(({ isCacheable, data }): MavenXml => { + const xml = new XmlDocument(data); + return { xml }; + }); + return xmlResult.unwrapOr({}); } logger.debug( From 61284157bffdcb0f21ba61565c7141bae52909f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 01:55:05 +0000 Subject: [PATCH 35/73] chore(deps): update containerbase/internal-tools action to v3.5.6 (#32978) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5934f74ce83dc2..5a3babd3c56890 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -684,7 +684,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@fa96b70003f221771f8c015cd3f598818ebf4d78 # v3.5.4 + uses: containerbase/internal-tools@16a59ac6156118c10fd17d3cfd3fc746e7069809 # v3.5.6 with: command: docker-config From 2ebc8ad667285ec04f9d4e7cafabb402de6a2f3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 01:57:21 +0000 Subject: [PATCH 36/73] chore(deps): update dependency memfs to v4.14.1 (#32979) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e04b042f03bb71..53436214cc1bbf 100644 --- a/package.json +++ b/package.json @@ -336,7 +336,7 @@ "jest-mock-extended": "3.0.7", "jest-snapshot": "29.7.0", "markdownlint-cli2": "0.15.0", - "memfs": "4.14.0", + "memfs": "4.14.1", "nock": "13.5.6", "npm-run-all2": "7.0.1", "nyc": "17.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4db5c9580a8c24..b54d4905ba0e20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -581,8 +581,8 @@ importers: specifier: 0.15.0 version: 0.15.0 memfs: - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.14.1 + version: 4.14.1 nock: specifier: 13.5.6 version: 13.5.6 @@ -4534,8 +4534,8 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - memfs@4.14.0: - resolution: {integrity: sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==} + memfs@4.14.1: + resolution: {integrity: sha512-Fq5CMEth+2iprLJ5mNizRcWuiwRZYjNkUD0zKk224jZunE9CRacTRDK8QLALbMBlNX2y3nY6lKZbesCwDwacig==} engines: {node: '>= 4.0.0'} memorystream@0.3.1: @@ -11587,7 +11587,7 @@ snapshots: mdurl@2.0.0: {} - memfs@4.14.0: + memfs@4.14.1: dependencies: '@jsonjoy.com/json-pack': 1.1.0(tslib@2.8.1) '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) From 5c7c7caa6a5962dcaae63f8c4c82cd6864888918 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 02:11:06 +0000 Subject: [PATCH 37/73] chore(deps): update dependency type-fest to v4.29.1 (#32980) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 53436214cc1bbf..19c9ecdf29318e 100644 --- a/package.json +++ b/package.json @@ -347,7 +347,7 @@ "tmp-promise": "3.0.3", "ts-jest": "29.2.5", "ts-node": "10.9.2", - "type-fest": "4.29.0", + "type-fest": "4.29.1", "typescript": "5.7.2", "unified": "9.2.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b54d4905ba0e20..a42c134c82c25f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -614,8 +614,8 @@ importers: specifier: 10.9.2 version: 10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2) type-fest: - specifier: 4.29.0 - version: 4.29.0 + specifier: 4.29.1 + version: 4.29.1 typescript: specifier: 5.7.2 version: 5.7.2 @@ -5952,8 +5952,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.29.0: - resolution: {integrity: sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==} + type-fest@4.29.1: + resolution: {integrity: sha512-Y1zUveI92UYM/vo1EFlQSsNf74+hfKH+7saZJslF0Fw92FRaiTAnHPIvo9d7SLxXt/gAYqA4RXyDTioMQCCp0A==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -12097,7 +12097,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.29.0 + type-fest: 4.29.1 parse-link-header@2.0.0: dependencies: @@ -12301,7 +12301,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.29.0 + type-fest: 4.29.1 read-pkg-up@7.0.1: dependencies: @@ -12321,7 +12321,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.29.0 + type-fest: 4.29.1 unicorn-magic: 0.1.0 read-yaml-file@2.1.0: @@ -13059,7 +13059,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.29.0: {} + type-fest@4.29.1: {} typed-array-buffer@1.0.2: dependencies: From b432a61eb6316c482b565f0e421eb589ddd6f1bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 02:19:20 +0000 Subject: [PATCH 38/73] docs: update references to renovate/renovate (#32981) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/usage/docker.md | 2 +- docs/usage/examples/self-hosting.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 6bfa5a0a52b0d2..34d3cff859767d 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -478,7 +478,7 @@ Make sure to install the Google Cloud SDK into the custom image, as you need the For example: ```Dockerfile -FROM renovate/renovate:39.42.4 +FROM renovate/renovate:39.57.4 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... diff --git a/docs/usage/examples/self-hosting.md b/docs/usage/examples/self-hosting.md index 29fd3b6fa73f87..a13695bfba048a 100644 --- a/docs/usage/examples/self-hosting.md +++ b/docs/usage/examples/self-hosting.md @@ -25,8 +25,8 @@ It builds `latest` based on the `main` branch and all SemVer tags are published ```sh title="Example of valid tags" docker run --rm renovate/renovate docker run --rm renovate/renovate:39 -docker run --rm renovate/renovate:39.42 -docker run --rm renovate/renovate:39.42.4 +docker run --rm renovate/renovate:39.57 +docker run --rm renovate/renovate:39.57.4 ``` @@ -62,7 +62,7 @@ spec: - name: renovate # Update this to the latest available and then enable Renovate on # the manifest - image: renovate/renovate:39.42.4 + image: renovate/renovate:39.57.4 args: - user/repo # Environment Variables @@ -121,7 +121,7 @@ spec: template: spec: containers: - - image: renovate/renovate:39.42.4 + - image: renovate/renovate:39.57.4 name: renovate-bot env: # For illustration purposes, please use secrets. - name: RENOVATE_PLATFORM @@ -367,7 +367,7 @@ spec: containers: - name: renovate # Update this to the latest available and then enable Renovate on the manifest - image: renovate/renovate:39.42.4 + image: renovate/renovate:39.57.4 volumeMounts: - name: ssh-key-volume readOnly: true From 1d363923fe97cda864ff07f3c7477308b504539e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 04:00:07 +0000 Subject: [PATCH 39/73] chore(deps): lock file maintenance (#32982) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 710 +++++++++++++++++++++++++------------------------ 1 file changed, 369 insertions(+), 341 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a42c134c82c25f..bd744a3a1bf857 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -839,16 +839,16 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.9': @@ -885,8 +885,8 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true @@ -989,12 +989,12 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1167,8 +1167,8 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/json-pack@1.1.0': - resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} + '@jsonjoy.com/json-pack@1.1.1': + resolution: {integrity: sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -2226,8 +2226,8 @@ packages: resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.15.0': - resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==} + '@typescript-eslint/scope-manager@8.17.0': + resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@8.11.0': @@ -2247,8 +2247,8 @@ packages: resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.15.0': - resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==} + '@typescript-eslint/types@8.17.0': + resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -2269,8 +2269,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.15.0': - resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==} + '@typescript-eslint/typescript-estree@8.17.0': + resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2290,8 +2290,8 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.15.0': - resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==} + '@typescript-eslint/utils@8.17.0': + resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2308,12 +2308,12 @@ packages: resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.15.0': - resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==} + '@typescript-eslint/visitor-keys@8.17.0': + resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} '@yarnpkg/core@4.1.6': resolution: {integrity: sha512-iF8LOSd4K0RVSB56c4IMYcXp6aiCT3wyWfMmiYSAiLm8tepwEtBOcrL9gzTzrT09NnDRz1CV/YB7iwfnUOMsAg==} @@ -2365,8 +2365,8 @@ packages: resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} engines: {node: '>=12.0'} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} agentkeepalive@4.5.0: @@ -2633,8 +2633,12 @@ packages: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.0: + resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} callsite@1.0.0: @@ -2656,8 +2660,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001683: - resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==} + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -2906,8 +2910,8 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3032,10 +3036,14 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} @@ -3055,8 +3063,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.64: - resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==} + electron-to-chromium@1.5.71: + resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -3124,8 +3132,8 @@ packages: resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: @@ -3143,8 +3151,8 @@ packages: es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} es6-error@4.1.1: @@ -3318,8 +3326,8 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.5.1: - resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} engines: {node: ^18.19.0 || >=20.5.0} exit@0.1.2: @@ -3511,8 +3519,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.5: + resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} engines: {node: '>= 0.4'} get-package-type@0.1.0: @@ -3619,8 +3627,9 @@ packages: resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} engines: {node: '>=14'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -3672,12 +3681,12 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: @@ -3732,8 +3741,8 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} human-signals@2.1.0: @@ -3801,8 +3810,8 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} - import-in-the-middle@1.11.2: - resolution: {integrity: sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==} + import-in-the-middle@1.11.3: + resolution: {integrity: sha512-tNpKEb4AjZrCyrxi+Eyu43h5ig0O8ZRFSXPHh/00/o+4P4pKzVEW/m5lsVtsAT7fCIgmQOAPjdqecGDsBXRxsw==} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} @@ -3879,19 +3888,20 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.0: + resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} engines: {node: '>= 0.4'} is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} - is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -3916,8 +3926,9 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.0: + resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -3949,8 +3960,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-number-object@1.1.0: + resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -3977,8 +3988,8 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-regex@1.2.0: + resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} engines: {node: '>= 0.4'} is-set@2.0.3: @@ -4004,12 +4015,12 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + is-string@1.1.0: + resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-symbol@1.1.0: + resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} engines: {node: '>= 0.4'} is-typed-array@1.1.13: @@ -4733,8 +4744,8 @@ packages: resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} engines: {node: '>=10'} - node-emoji@2.1.3: - resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} node-fetch@2.7.0: @@ -4746,8 +4757,8 @@ packages: encoding: optional: true - node-gyp@10.2.0: - resolution: {integrity: sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==} + node-gyp@10.3.1: + resolution: {integrity: sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==} engines: {node: ^16.14.0 || >=18.0.0} hasBin: true @@ -4813,8 +4824,8 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.9.1: - resolution: {integrity: sha512-yJUw03xLqjiv1D52oHeoS5qmOEC5hkJlhP1cWlSrCgshuxWVyFEEK3M3hLC0NwbTaklLTYrhoIanYsuNP5WUKg==} + npm@10.9.2: + resolution: {integrity: sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -5006,8 +5017,8 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-map@7.0.2: - resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} p-queue@6.6.2: @@ -5304,8 +5315,8 @@ packages: redis@4.7.0: resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + reflect.getprototypeof@1.0.8: + resolution: {integrity: sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==} engines: {node: '>= 0.4'} regenerator-runtime@0.14.1: @@ -5315,8 +5326,8 @@ packages: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + registry-auth-token@5.0.3: + resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} engines: {node: '>=14'} release-zalgo@1.0.0: @@ -5368,8 +5379,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} resolve@1.22.8: @@ -5491,8 +5502,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -5550,8 +5562,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.4: - resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} socks@2.8.3: @@ -5825,8 +5837,8 @@ packages: trough@1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -6127,11 +6139,12 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.0: + resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} + engines: {node: '>= 0.4'} - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + which-builtin-type@1.2.0: + resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} engines: {node: '>= 0.4'} which-collection@1.0.2: @@ -6141,8 +6154,8 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} which@2.0.2: @@ -7101,39 +7114,39 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} + '@babel/compat-data@7.26.3': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 + '@babel/generator': 7.26.3 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.2': + '@babel/generator@7.26.3': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.3 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.2 lru-cache: 5.1.1 @@ -7141,8 +7154,8 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -7151,7 +7164,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -7166,11 +7179,11 @@ snapshots: '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 - '@babel/parser@7.26.2': + '@babel/parser@7.26.3': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: @@ -7265,22 +7278,22 @@ snapshots: '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 - '@babel/traverse@7.25.9': + '@babel/traverse@7.26.4': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - debug: 4.3.7 + '@babel/types': 7.26.3 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.0': + '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -7310,7 +7323,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -7328,7 +7341,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7554,7 +7567,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/json-pack@1.1.0(tslib@2.8.1)': + '@jsonjoy.com/json-pack@1.1.1(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) @@ -7568,7 +7581,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -7592,11 +7605,11 @@ snapshots: '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.1 + agent-base: 7.1.3 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 lru-cache: 10.4.3 - socks-proxy-agent: 8.0.4 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color optional: true @@ -7780,7 +7793,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.55.0 '@types/shimmer': 1.2.0 - import-in-the-middle: 1.11.2 + import-in-the-middle: 1.11.3 require-in-the-middle: 7.4.0 semver: 7.6.3 shimmer: 1.2.1 @@ -8026,7 +8039,7 @@ snapshots: conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.7 + debug: 4.4.0 import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -8042,7 +8055,7 @@ snapshots: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7 + debug: 4.4.0 execa: 5.1.1 lodash: 4.17.21 parse-json: 5.2.0 @@ -8058,11 +8071,11 @@ snapshots: '@octokit/plugin-throttling': 9.3.2(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.3.7 + debug: 4.4.0 dir-glob: 3.0.1 globby: 14.0.2 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 issue-parser: 7.0.1 lodash-es: 4.17.21 mime: 4.0.4 @@ -8076,15 +8089,15 @@ snapshots: dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - execa: 9.5.1 + execa: 9.5.2 fs-extra: 11.2.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.1 - npm: 10.9.1 + npm: 10.9.2 rc: 1.2.8 read-pkg: 9.0.1 - registry-auth-token: 5.0.2 + registry-auth-token: 5.0.3 semantic-release: 24.2.0(typescript@5.7.2) semver: 7.6.3 tempy: 3.1.0 @@ -8095,7 +8108,7 @@ snapshots: conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.7 + debug: 4.4.0 get-stream: 7.0.1 import-from-esm: 1.3.4 into-stream: 7.0.0 @@ -8577,24 +8590,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@types/better-sqlite3@7.6.12': dependencies: @@ -8794,7 +8807,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -8814,7 +8827,7 @@ snapshots: '@typescript-eslint/types': 8.11.0 '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.7.2) '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7 + debug: 4.4.0 eslint: 8.57.1 optionalDependencies: typescript: 5.7.2 @@ -8831,17 +8844,17 @@ snapshots: '@typescript-eslint/types': 8.11.0 '@typescript-eslint/visitor-keys': 8.11.0 - '@typescript-eslint/scope-manager@8.15.0': + '@typescript-eslint/scope-manager@8.17.0': dependencies: - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/visitor-keys': 8.15.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 '@typescript-eslint/type-utils@8.11.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.7.2) '@typescript-eslint/utils': 8.11.0(eslint@8.57.1)(typescript@5.7.2) - debug: 4.3.7 - ts-api-utils: 1.4.0(typescript@5.7.2) + debug: 4.4.0 + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -8852,13 +8865,13 @@ snapshots: '@typescript-eslint/types@8.11.0': {} - '@typescript-eslint/types@8.15.0': {} + '@typescript-eslint/types@8.17.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -8872,27 +8885,27 @@ snapshots: dependencies: '@typescript-eslint/types': 8.11.0 '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7 + debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.15.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.17.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/visitor-keys': 8.15.0 - debug: 4.3.7 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 + debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -8924,12 +8937,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.15.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/utils@8.17.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.15.0 - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) eslint: 8.57.1 optionalDependencies: typescript: 5.7.2 @@ -8946,12 +8959,12 @@ snapshots: '@typescript-eslint/types': 8.11.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.15.0': + '@typescript-eslint/visitor-keys@8.17.0': dependencies: - '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/types': 8.17.0 eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} '@yarnpkg/core@4.1.6(typanion@3.14.0)': dependencies: @@ -8968,7 +8981,7 @@ snapshots: clipanion: 4.0.0-rc.4(typanion@3.14.0) cross-spawn: 7.0.6 diff: 5.2.0 - dotenv: 16.4.5 + dotenv: 16.4.7 fast-glob: 3.3.2 got: 11.8.6 lodash: 4.17.21 @@ -9031,11 +9044,7 @@ snapshots: adm-zip@0.5.16: {} - agent-base@7.1.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + agent-base@7.1.3: {} agentkeepalive@4.5.0: dependencies: @@ -9107,25 +9116,25 @@ snapshots: array-buffer-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-array-buffer: 3.0.4 array-ify@1.0.0: {} array-includes@3.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + get-intrinsic: 1.2.5 + is-string: 1.1.0 array-union@2.1.0: {} array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-errors: 1.3.0 @@ -9134,14 +9143,14 @@ snapshots: array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 @@ -9149,11 +9158,11 @@ snapshots: arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 @@ -9210,7 +9219,7 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -9296,8 +9305,8 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001683 - electron-to-chromium: 1.5.64 + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.71 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -9351,7 +9360,7 @@ snapshots: minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 - p-map: 7.0.2 + p-map: 7.0.3 ssri: 12.0.0 tar: 7.4.3 unique-filename: 4.0.0 @@ -9375,12 +9384,16 @@ snapshots: package-hash: 4.0.0 write-file-atomic: 3.0.3 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.0: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 + get-intrinsic: 1.2.5 set-function-length: 1.2.2 callsite@1.0.0: {} @@ -9397,7 +9410,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001683: {} + caniuse-lite@1.0.30001687: {} chalk@2.4.2: dependencies: @@ -9620,19 +9633,19 @@ snapshots: data-view-buffer@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 data-view-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 data-view-byte-offset@1.0.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 @@ -9640,7 +9653,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.7: + debug@4.4.0: dependencies: ms: 2.1.3 @@ -9671,9 +9684,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -9741,7 +9754,13 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@16.4.5: {} + dotenv@16.4.7: {} + + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 duplexer2@0.1.4: dependencies: @@ -9764,7 +9783,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.64: {} + electron-to-chromium@1.5.71: {} email-addresses@5.0.0: {} @@ -9823,32 +9842,32 @@ snapshots: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 data-view-buffer: 1.0.1 data-view-byte-length: 1.0.1 data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 + es-to-primitive: 1.3.0 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 get-symbol-description: 1.0.2 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 is-data-view: 1.0.1 is-negative-zero: 2.0.3 - is-regex: 1.1.4 + is-regex: 1.2.0 is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 + is-string: 1.1.0 is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.3 @@ -9865,11 +9884,9 @@ snapshots: typed-array-byte-offset: 1.0.3 typed-array-length: 1.0.7 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -9879,7 +9896,7 @@ snapshots: es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -9887,11 +9904,11 @@ snapshots: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-symbol: 1.1.0 es6-error@4.1.1: {} @@ -9929,13 +9946,13 @@ snapshots: eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.3.7 + debug: 4.4.0 enhanced-resolve: 5.17.1 eslint: 8.57.1 eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 - is-bun-module: 1.2.1 + is-bun-module: 1.3.0 is-glob: 4.0.3 optionalDependencies: eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) @@ -9991,7 +10008,7 @@ snapshots: eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): dependencies: - '@typescript-eslint/utils': 8.15.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 8.17.0(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) @@ -10035,11 +10052,11 @@ snapshots: '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -10117,7 +10134,7 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.5.1: + execa@9.5.2: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -10160,7 +10177,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -10315,7 +10332,7 @@ snapshots: function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 functions-have-names: 1.2.3 @@ -10325,7 +10342,7 @@ snapshots: gaxios@6.7.1(encoding@0.1.13): dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 is-stream: 2.0.1 node-fetch: 2.7.0(encoding@0.1.13) uuid: 9.0.1 @@ -10347,12 +10364,15 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.4: + get-intrinsic@1.2.5: dependencies: + call-bind-apply-helpers: 1.0.0 + dunder-proto: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 get-package-type@0.1.0: {} @@ -10374,9 +10394,9 @@ snapshots: get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 get-tsconfig@4.8.1: dependencies: @@ -10466,7 +10486,7 @@ snapshots: globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: @@ -10505,9 +10525,7 @@ snapshots: - encoding - supports-color - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} got@11.8.6: dependencies: @@ -10562,15 +10580,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.0.3: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.0 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasha@5.2.2: dependencies: @@ -10607,8 +10627,8 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -10617,10 +10637,10 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@7.0.5: + https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -10673,12 +10693,12 @@ snapshots: import-from-esm@1.3.4: dependencies: - debug: 4.3.7 + debug: 4.4.0 import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color - import-in-the-middle@1.11.2: + import-in-the-middle@1.11.3: dependencies: acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) @@ -10740,13 +10760,13 @@ snapshots: is-arguments@1.1.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-tostringtag: 1.0.2 is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 is-arrayish@0.2.1: {} @@ -10754,18 +10774,18 @@ snapshots: dependencies: has-tostringtag: 1.0.2 - is-bigint@1.0.4: + is-bigint@1.1.0: dependencies: has-bigints: 1.0.2 - is-boolean-object@1.1.2: + is-boolean-object@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-tostringtag: 1.0.2 is-buffer@2.0.5: {} - is-bun-module@1.2.1: + is-bun-module@1.3.0: dependencies: semver: 7.6.3 @@ -10787,9 +10807,9 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: + is-finalizationregistry@1.1.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-fullwidth-code-point@3.0.0: {} @@ -10812,8 +10832,9 @@ snapshots: is-negative-zero@2.0.3: {} - is-number-object@1.0.7: + is-number-object@1.1.0: dependencies: + call-bind: 1.0.8 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -10828,16 +10849,18 @@ snapshots: is-plain-obj@4.1.0: {} - is-regex@1.1.4: + is-regex@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 is-set@2.0.3: {} is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-ssh@1.4.0: dependencies: @@ -10849,17 +10872,20 @@ snapshots: is-stream@4.0.1: {} - is-string@1.0.7: + is-string@1.1.0: dependencies: + call-bind: 1.0.8 has-tostringtag: 1.0.2 - is-symbol@1.0.4: + is-symbol@1.1.0: dependencies: - has-symbols: 1.0.3 + call-bind: 1.0.8 + has-symbols: 1.1.0 + safe-regex-test: 1.0.3 is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 is-typedarray@1.0.0: {} @@ -10869,12 +10895,12 @@ snapshots: is-weakref@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-weakset@2.0.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 is-windows@1.0.2: {} @@ -10903,7 +10929,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10913,7 +10939,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -10937,7 +10963,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -11167,7 +11193,7 @@ snapshots: jest-util: 29.7.0 jest-validate: 29.7.0 resolve: 1.22.8 - resolve.exports: 2.0.2 + resolve.exports: 2.0.3 slash: 3.0.0 jest-runner@29.7.0: @@ -11226,10 +11252,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.2 + '@babel/generator': 7.26.3 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -11547,7 +11573,7 @@ snapshots: cli-highlight: 2.1.11 cli-table3: 0.6.5 marked: 12.0.2 - node-emoji: 2.1.3 + node-emoji: 2.2.0 supports-hyperlinks: 3.1.0 marked@12.0.2: {} @@ -11589,7 +11615,7 @@ snapshots: memfs@4.14.1: dependencies: - '@jsonjoy.com/json-pack': 1.1.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) tree-dump: 1.0.2(tslib@2.8.1) tslib: 2.8.1 @@ -11632,7 +11658,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.3.7 + debug: 4.4.0 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -11782,7 +11808,7 @@ snapshots: nock@13.5.6: dependencies: - debug: 4.3.7 + debug: 4.4.0 json-stringify-safe: 5.0.1 propagate: 2.0.1 transitivePeerDependencies: @@ -11793,7 +11819,7 @@ snapshots: semver: 7.6.3 optional: true - node-emoji@2.1.3: + node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 char-regex: 1.0.2 @@ -11806,7 +11832,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-gyp@10.2.0: + node-gyp@10.3.1: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.1 @@ -11876,7 +11902,7 @@ snapshots: minimatch: 9.0.5 pidtree: 0.6.0 read-package-json-fast: 4.0.0 - shell-quote: 1.8.1 + shell-quote: 1.8.2 which: 5.0.0 npm-run-path@4.0.1: @@ -11892,7 +11918,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.9.1: {} + npm@10.9.2: {} nth-check@2.1.1: dependencies: @@ -11938,27 +11964,27 @@ snapshots: object.assign@4.1.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object-keys: 1.1.1 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-object-atoms: 1.0.0 object.groupby@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 object.values@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -12000,7 +12026,7 @@ snapshots: p-filter@4.1.0: dependencies: - p-map: 7.0.2 + p-map: 7.0.3 p-finally@1.0.0: {} @@ -12040,7 +12066,7 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-map@7.0.2: {} + p-map@7.0.3: {} p-queue@6.6.2: dependencies: @@ -12285,7 +12311,7 @@ snapshots: dependencies: install-artifact-from-github: 1.3.5 nan: 2.22.0 - node-gyp: 10.2.0 + node-gyp: 10.3.1 transitivePeerDependencies: - supports-color optional: true @@ -12359,26 +12385,27 @@ snapshots: '@redis/search': 1.2.0(@redis/client@1.6.0) '@redis/time-series': 1.1.0(@redis/client@1.6.0) - reflect.getprototypeof@1.0.6: + reflect.getprototypeof@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 + dunder-proto: 1.0.0 es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 + get-intrinsic: 1.2.5 + gopd: 1.2.0 + which-builtin-type: 1.2.0 regenerator-runtime@0.14.1: {} regexp.prototype.flags@1.5.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - registry-auth-token@5.0.2: + registry-auth-token@5.0.3: dependencies: '@pnpm/npm-conf': 2.3.1 @@ -12416,7 +12443,7 @@ snapshots: require-in-the-middle@7.4.0: dependencies: - debug: 4.3.7 + debug: 4.4.0 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -12436,7 +12463,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} + resolve.exports@2.0.3: {} resolve@1.22.8: dependencies: @@ -12481,9 +12508,9 @@ snapshots: safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.1.2: {} @@ -12492,9 +12519,9 @@ snapshots: safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - is-regex: 1.1.4 + is-regex: 1.2.0 safe-stable-stringify@2.5.0: {} @@ -12512,9 +12539,9 @@ snapshots: '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.2.0(typescript@5.7.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.7.2) - debug: 4.3.7 + debug: 4.4.0 env-ci: 11.1.0 - execa: 9.5.1 + execa: 9.5.2 figures: 6.1.0 find-versions: 6.0.0 get-stream: 6.0.1 @@ -12569,8 +12596,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.5 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -12586,7 +12613,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} + shell-quote@1.8.2: {} shimmer@1.2.1: {} @@ -12594,9 +12621,9 @@ snapshots: side-channel@1.0.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 object-inspect: 1.13.3 signal-exit@3.0.7: {} @@ -12623,7 +12650,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -12651,10 +12678,10 @@ snapshots: smart-buffer@4.2.0: optional: true - socks-proxy-agent@8.0.4: + socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -12756,20 +12783,20 @@ snapshots: string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-object-atoms: 1.0.0 string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -12959,7 +12986,7 @@ snapshots: trough@1.0.5: {} - ts-api-utils@1.4.0(typescript@5.7.2): + ts-api-utils@1.4.3(typescript@5.7.2): dependencies: typescript: 5.7.2 @@ -13063,36 +13090,36 @@ snapshots: typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-typed-array: 1.1.13 typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 + gopd: 1.2.0 + has-proto: 1.2.0 is-typed-array: 1.1.13 typed-array-byte-offset@1.0.3: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 + gopd: 1.2.0 + has-proto: 1.2.0 is-typed-array: 1.1.13 - reflect.getprototypeof: 1.0.6 + reflect.getprototypeof: 1.0.8 typed-array-length@1.0.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.6 + reflect.getprototypeof: 1.0.8 typed-rest-client@2.1.0: dependencies: @@ -13116,10 +13143,10 @@ snapshots: unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.0 underscore@1.13.7: {} @@ -13210,7 +13237,7 @@ snapshots: is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.13 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 uuid@8.3.2: {} @@ -13256,28 +13283,29 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.0.2: + which-boxed-primitive@1.1.0: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-bigint: 1.1.0 + is-boolean-object: 1.2.0 + is-number-object: 1.1.0 + is-string: 1.1.0 + is-symbol: 1.1.0 - which-builtin-type@1.1.4: + which-builtin-type@1.2.0: dependencies: + call-bind: 1.0.8 function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 + is-finalizationregistry: 1.1.0 is-generator-function: 1.0.10 - is-regex: 1.1.4 + is-regex: 1.2.0 is-weakref: 1.0.2 isarray: 2.0.5 - which-boxed-primitive: 1.0.2 + which-boxed-primitive: 1.1.0 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 which-collection@1.0.2: dependencies: @@ -13288,12 +13316,12 @@ snapshots: which-module@2.0.1: {} - which-typed-array@1.1.15: + which-typed-array@1.1.16: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@2.0.2: From 90088cc03e8afb9953a8153159566dbd3878b248 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 9 Dec 2024 03:38:20 -0300 Subject: [PATCH 40/73] refactor: Rename manager result type to `MaybePromise` (#32977) --- lib/modules/manager/custom/regex/index.ts | 4 ++-- lib/modules/manager/index.ts | 4 ++-- lib/modules/manager/setup-cfg/extract.ts | 8 ++++++-- lib/modules/manager/types.ts | 16 ++++++++-------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/modules/manager/custom/regex/index.ts b/lib/modules/manager/custom/regex/index.ts index 10ddca3d0dd5d5..00d9d79b8afcc9 100644 --- a/lib/modules/manager/custom/regex/index.ts +++ b/lib/modules/manager/custom/regex/index.ts @@ -2,9 +2,9 @@ import is from '@sindresorhus/is'; import type { Category } from '../../../../constants'; import type { ExtractConfig, + MaybePromise, PackageDependency, PackageFileContent, - Result, } from '../../types'; import { handleAny, handleCombination, handleRecursive } from './strategies'; import type { RegexManagerConfig, RegexManagerTemplates } from './types'; @@ -22,7 +22,7 @@ export function extractPackageFile( content: string, packageFile: string, config: ExtractConfig, -): Result { +): MaybePromise { let deps: PackageDependency[]; switch (config.matchStringsStrategy) { default: diff --git a/lib/modules/manager/index.ts b/lib/modules/manager/index.ts index 439bac5ec8520d..e4f9eace2969a3 100644 --- a/lib/modules/manager/index.ts +++ b/lib/modules/manager/index.ts @@ -6,10 +6,10 @@ import type { ExtractConfig, GlobalManagerConfig, ManagerApi, + MaybePromise, PackageFile, PackageFileContent, RangeConfig, - Result, } from './types'; export { hashMap } from './fingerprint.generated'; @@ -65,7 +65,7 @@ export function extractPackageFile( content: string, fileName: string, config: ExtractConfig, -): Result { +): MaybePromise { const m = managers.get(manager)! ?? customManagers.get(manager)!; if (!m) { return null; diff --git a/lib/modules/manager/setup-cfg/extract.ts b/lib/modules/manager/setup-cfg/extract.ts index 017f9903ad30da..5e91fd795eb22c 100644 --- a/lib/modules/manager/setup-cfg/extract.ts +++ b/lib/modules/manager/setup-cfg/extract.ts @@ -4,7 +4,11 @@ import { logger } from '../../../logger'; import { newlineRegex, regEx } from '../../../util/regex'; import { PypiDatasource } from '../../datasource/pypi'; import { normalizePythonDepName } from '../../datasource/pypi/common'; -import type { PackageDependency, PackageFileContent, Result } from '../types'; +import type { + MaybePromise, + PackageDependency, + PackageFileContent, +} from '../types'; function getSectionName(str: string): string { const [, sectionName] = regEx(/^\[\s*([^\s]+)\s*]\s*$/).exec(str) ?? []; @@ -89,7 +93,7 @@ function parseDep( export function extractPackageFile( content: string, -): Result { +): MaybePromise { logger.trace('setup-cfg.extractPackageFile()'); let sectionName: string | null = null; diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index a2ccd07d47950d..a1e8ba2824d9df 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -11,7 +11,7 @@ import type { FileChange } from '../../util/git/types'; import type { MergeConfidence } from '../../util/merge-confidence/types'; import type { CustomExtractConfig } from './custom/types'; -export type Result = T | Promise; +export type MaybePromise = T | Promise; export interface ManagerData { managerData?: T; @@ -258,34 +258,34 @@ export interface ManagerApi extends ModuleApi { currentValue: string, bumpVersion: ReleaseType, packageFile: string, - ): Result; + ): MaybePromise; - detectGlobalConfig?(): Result; + detectGlobalConfig?(): MaybePromise; extractAllPackageFiles?( config: ExtractConfig, files: string[], - ): Result; + ): MaybePromise; extractPackageFile?( content: string, packageFile?: string, config?: ExtractConfig, - ): Result; + ): MaybePromise; getRangeStrategy?(config: RangeConfig): RangeStrategy; updateArtifacts?( updateArtifact: UpdateArtifact, - ): Result; + ): MaybePromise; updateDependency?( updateDependencyConfig: UpdateDependencyConfig, - ): Result; + ): MaybePromise; updateLockedDependency?( config: UpdateLockedConfig, - ): Result; + ): MaybePromise; } // TODO: name and properties used by npm manager From 914ab95cb0c52ac5e292b69e10e0f1a5e564ce8f Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Mon, 9 Dec 2024 01:41:12 -0600 Subject: [PATCH 41/73] feat(managers/circleci): add registryAliases support to circleci manager (#32945) Co-authored-by: Michael Kriese --- docs/usage/configuration-options.md | 1 + lib/modules/manager/circleci/extract.spec.ts | 27 ++++++++++++++++++++ lib/modules/manager/circleci/extract.ts | 11 +++++--- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 003eb194595c10..0ce57dc796c43f 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3691,6 +3691,7 @@ This feature works with the following managers: - [`ansible`](modules/manager/ansible/index.md) - [`bitbucket-pipelines`](modules/manager/bitbucket-pipelines/index.md) +- [`circleci`](modules/manager/circleci/index.md) - [`docker-compose`](modules/manager/docker-compose/index.md) - [`dockerfile`](modules/manager/dockerfile/index.md) - [`droneci`](modules/manager/droneci/index.md) diff --git a/lib/modules/manager/circleci/extract.spec.ts b/lib/modules/manager/circleci/extract.spec.ts index 92eb5c145d9c62..7feeb83add7213 100644 --- a/lib/modules/manager/circleci/extract.spec.ts +++ b/lib/modules/manager/circleci/extract.spec.ts @@ -13,6 +13,33 @@ describe('modules/manager/circleci/extract', () => { expect(extractPackageFile('nothing here')).toBeNull(); }); + it('handles registry alias', () => { + const res = extractPackageFile( + 'executors:\n my-executor:\n docker:\n - image: quay.io/myName/myPackage:0.6.2', + '', + { + registryAliases: { + 'quay.io': 'my-quay-mirror.registry.com', + 'index.docker.io': 'my-docker-mirror.registry.com', + }, + }, + ); + expect(res).toEqual({ + deps: [ + { + autoReplaceStringTemplate: + 'quay.io/myName/myPackage:{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '0.6.2', + datasource: 'docker', + depName: 'my-quay-mirror.registry.com/myName/myPackage', + depType: 'docker', + replaceString: 'quay.io/myName/myPackage:0.6.2', + }, + ], + }); + }); + it('extracts multiple image and resolves yaml anchors', () => { const res = extractPackageFile(file1); expect(res?.deps).toEqual([ diff --git a/lib/modules/manager/circleci/extract.ts b/lib/modules/manager/circleci/extract.ts index e56da71ea4b39f..660fb4eb35e620 100644 --- a/lib/modules/manager/circleci/extract.ts +++ b/lib/modules/manager/circleci/extract.ts @@ -4,12 +4,17 @@ import { parseSingleYaml } from '../../../util/yaml'; import { OrbDatasource } from '../../datasource/orb'; import * as npmVersioning from '../../versioning/npm'; import { getDep } from '../dockerfile/extract'; -import type { PackageDependency, PackageFileContent } from '../types'; +import type { + ExtractConfig, + PackageDependency, + PackageFileContent, +} from '../types'; import { CircleCiFile, type CircleCiJob } from './schema'; export function extractPackageFile( content: string, packageFile?: string, + config?: ExtractConfig, ): PackageFileContent | null { const deps: PackageDependency[] = []; try { @@ -38,7 +43,7 @@ export function extractPackageFile( for (const job of environments) { for (const dockerElement of coerceArray(job.docker)) { deps.push({ - ...getDep(dockerElement.image), + ...getDep(dockerElement.image, true, config?.registryAliases), depType: 'docker', }); } @@ -46,7 +51,7 @@ export function extractPackageFile( for (const alias of coerceArray(parsed.aliases)) { deps.push({ - ...getDep(alias.image), + ...getDep(alias.image, true, config?.registryAliases), depType: 'docker', }); } From 4941cd51e241c54fc79713edcb88ea69df474097 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:47:24 +0000 Subject: [PATCH 42/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.2.2 (#32987) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 3a3f91c0be73d8..6f2e462b04905f 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.2.1', + default: 'ghcr.io/containerbase/sidecar:13.2.2', globalOnly: true, }, { From 71ffc625abfa60e994bac14aff5479d2b17adc3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:47:40 +0000 Subject: [PATCH 43/73] chore(deps): update dependency renovatebot/github-action to v41.0.6 (#32986) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/usage/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 34d3cff859767d..13624d4be94632 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -307,7 +307,7 @@ Renovate will get the credentials with the [`google-auth-library`](https://www.n service_account: ${{ env.SERVICE_ACCOUNT }} - name: renovate - uses: renovatebot/github-action@v41.0.5 + uses: renovatebot/github-action@v41.0.6 env: RENOVATE_HOST_RULES: | [ From 0c21d6a5242d8ac210eeed863bf2f1e27ce8d8cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:10:44 +0000 Subject: [PATCH 44/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.2.2 (#32989) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d3f78111d60372..99edd38650e7b0 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.2.1 +FROM ghcr.io/containerbase/devcontainer:13.2.2 From 735ea20f850280905b2fca7c635b867658c879e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:10:50 +0000 Subject: [PATCH 45/73] chore(deps): update dependency pdm to v2.22.0 (#32990) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5a3babd3c56890..ad2b02e2949cd3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ concurrency: env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} NODE_VERSION: 22 - PDM_VERSION: 2.21.0 # renovate: datasource=pypi depName=pdm + PDM_VERSION: 2.22.0 # renovate: datasource=pypi depName=pdm DRY_RUN: true TEST_LEGACY_DECRYPTION: true SPARSE_CHECKOUT: |- From eb37958e2c9f4bb3a77cee0e79d278e0ed9a2fb5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 9 Dec 2024 14:21:21 -0300 Subject: [PATCH 46/73] refactor: Flatten package lookup queue (#32930) --- lib/util/promises.ts | 2 +- lib/workers/repository/process/fetch.spec.ts | 5 +- lib/workers/repository/process/fetch.ts | 126 ++++++++++++------- 3 files changed, 82 insertions(+), 51 deletions(-) diff --git a/lib/util/promises.ts b/lib/util/promises.ts index 736437bc1db835..1b614aa036ab31 100644 --- a/lib/util/promises.ts +++ b/lib/util/promises.ts @@ -10,7 +10,7 @@ function isExternalHostError(err: any): err is ExternalHostError { return err instanceof ExternalHostError; } -function handleMultipleErrors(errors: Error[]): never { +export function handleMultipleErrors(errors: Error[]): never { const hostError = errors.find(isExternalHostError); if (hostError) { throw hostError; diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts index 0ad23785fe6c00..f891c6e81e6fd8 100644 --- a/lib/workers/repository/process/fetch.spec.ts +++ b/lib/workers/repository/process/fetch.spec.ts @@ -4,6 +4,7 @@ import { getConfig } from '../../../config/defaults'; import { MavenDatasource } from '../../../modules/datasource/maven'; import type { PackageFile } from '../../../modules/manager/types'; import { ExternalHostError } from '../../../types/errors/external-host-error'; +import { Result } from '../../../util/result'; import { fetchUpdates } from './fetch'; import * as lookup from './lookup'; @@ -197,7 +198,7 @@ describe('workers/repository/process/fetch', () => { }, ], }; - lookupUpdates.mockRejectedValueOnce(new Error('some error')); + lookupUpdates.mockResolvedValueOnce(Result.err(new Error('some error'))); await expect( fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles), @@ -214,7 +215,7 @@ describe('workers/repository/process/fetch', () => { }, ], }; - lookupUpdates.mockRejectedValueOnce(new Error('some error')); + lookupUpdates.mockResolvedValueOnce(Result.err(new Error('some error'))); await expect( fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles), diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 6b3fcb3860b0e4..e9b17a4470f6bc 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -21,6 +21,13 @@ import type { LookupUpdateConfig, UpdateResult } from './lookup/types'; type LookupResult = Result; +interface LookupTaskResult { + packageFile: PackageFile; + result: LookupResult; +} + +type LookupTask = Promise; + async function lookup( packageFileConfig: RenovateConfig & PackageFile, indep: PackageDependency, @@ -106,63 +113,86 @@ async function lookup( }); } -async function fetchManagerPackagerFileUpdates( +function createLookupTasks( config: RenovateConfig, - managerConfig: RenovateConfig, - pFile: PackageFile, -): Promise { - const { packageFile } = pFile; - const packageFileConfig = mergeChildConfig(managerConfig, pFile); - if (pFile.extractedConstraints) { - packageFileConfig.constraints = { - ...pFile.extractedConstraints, - ...config.constraints, - }; + managerPackageFiles: Record, +): LookupTask[] { + const lookupTasks: LookupTask[] = []; + + for (const [manager, packageFiles] of Object.entries(managerPackageFiles)) { + const managerConfig = getManagerConfig(config, manager); + + for (const packageFile of packageFiles) { + const packageFileConfig = mergeChildConfig(managerConfig, packageFile); + if (packageFile.extractedConstraints) { + packageFileConfig.constraints = { + ...packageFile.extractedConstraints, + ...config.constraints, + }; + } + + for (const dep of packageFile.deps) { + lookupTasks.push( + lookup(packageFileConfig, dep).then((result) => ({ + packageFile, + result, + })), + ); + } + } } - const { manager } = packageFileConfig; - const queue = pFile.deps.map( - (dep) => async (): Promise => { - const updates = await lookup(packageFileConfig, dep); - return updates.unwrapOrThrow(); - }, - ); - logger.trace( - { manager, packageFile, queueLength: queue.length }, - 'fetchManagerPackagerFileUpdates starting with concurrency', - ); - pFile.deps = await p.all(queue); - logger.trace({ packageFile }, 'fetchManagerPackagerFileUpdates finished'); -} - -async function fetchManagerUpdates( - config: RenovateConfig, - packageFiles: Record, - manager: string, -): Promise { - const managerConfig = getManagerConfig(config, manager); - const queue = packageFiles[manager].map( - (pFile) => (): Promise => - fetchManagerPackagerFileUpdates(config, managerConfig, pFile), - ); - logger.trace( - { manager, queueLength: queue.length }, - 'fetchManagerUpdates starting', - ); - await p.all(queue); - logger.trace({ manager }, 'fetchManagerUpdates finished'); + return lookupTasks; } export async function fetchUpdates( config: RenovateConfig, - packageFiles: Record, + managerPackageFiles: Record, ): Promise { - const managers = Object.keys(packageFiles); - const allManagerJobs = managers.map((manager) => - fetchManagerUpdates(config, packageFiles, manager), + logger.debug( + { baseBranch: config.baseBranch }, + 'Starting package releases lookups', ); - await Promise.all(allManagerJobs); - PackageFiles.add(config.baseBranch!, { ...packageFiles }); + + const allTasks = createLookupTasks(config, managerPackageFiles); + + const fetchResults = await Promise.all(allTasks); + + const errors: Error[] = []; + + type PackageDeps = WeakMap; + const packageDeps: PackageDeps = new WeakMap(); + + // Separate good results from errors + for (const { packageFile, result } of fetchResults) { + const { val: dep, err } = result.unwrap(); + if (dep) { + let deps = packageDeps.get(packageFile); + if (!deps) { + deps = []; + packageDeps.set(packageFile, deps); + } + deps.push(dep); + } else { + errors.push(err); + } + } + + if (errors.length) { + p.handleMultipleErrors(errors); + } + + // Assign fetched deps back to packageFiles + for (const packageFiles of Object.values(managerPackageFiles)) { + for (const packageFile of packageFiles) { + const packageFileDeps = packageDeps.get(packageFile); + if (packageFileDeps) { + packageFile.deps = packageFileDeps; + } + } + } + + PackageFiles.add(config.baseBranch!, { ...managerPackageFiles }); logger.debug( { baseBranch: config.baseBranch }, 'Package releases lookups complete', From f1ffc5e53b6e146c7df3dc4d6469a74c8bebfae8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:36:43 +0000 Subject: [PATCH 47/73] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v9.17.0 (#32993) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 905f84ccedb593..fd00e32cc90a75 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.3@sha256:75ad28e758c69aed7acc3059edd10115a89e81064abb18d9d56192142243286d AS slim-base +FROM ghcr.io/renovatebot/base-image:9.17.0@sha256:7020d9fcadee2f20097137f62eb8bc3ef4d3b2d06e0e16262d1931147b41b7a0 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.16.3-full@sha256:b89c2c982d2bbb75aac330c570fbac4f67d72578a0d19c72680632f95e63603b AS full-base +FROM ghcr.io/renovatebot/base-image:9.17.0-full@sha256:ce36fa9b4fb6cd4c3a3b69c450fea6df2380dab9d26690ff6010a520ae26ccf4 AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.16.3@sha256:75ad28e758c69aed7acc3059edd10115a89e81064abb18d9d56192142243286d AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.17.0@sha256:7020d9fcadee2f20097137f62eb8bc3ef4d3b2d06e0e16262d1931147b41b7a0 AS build # We want a specific node version here # renovate: datasource=node-version From 606ab430d1ac897bd4f6eada5cc80ad2a9ddbd90 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 9 Dec 2024 15:58:07 -0300 Subject: [PATCH 48/73] refactor(maven): Unified result type for http fetch (#32813) --- lib/modules/datasource/maven/util.spec.ts | 25 ++++- lib/modules/datasource/maven/util.ts | 103 ++++++++++-------- .../datasource/sbt-package/index.spec.ts | 6 +- lib/modules/datasource/sbt-package/index.ts | 26 +++-- lib/modules/datasource/sbt-plugin/index.ts | 30 +++-- 5 files changed, 110 insertions(+), 80 deletions(-) diff --git a/lib/modules/datasource/maven/util.spec.ts b/lib/modules/datasource/maven/util.spec.ts index 0921b7de58be6b..dd9891abc615fb 100644 --- a/lib/modules/datasource/maven/util.spec.ts +++ b/lib/modules/datasource/maven/util.spec.ts @@ -71,7 +71,10 @@ describe('modules/datasource/maven/util', () => { get: () => Promise.reject(httpError({ message: HOST_DISABLED })), }); const res = await downloadHttpProtocol(http, 'some://'); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'host-disabled' } satisfies MavenFetchError, + }); }); it('returns empty for host error', async () => { @@ -79,7 +82,10 @@ describe('modules/datasource/maven/util', () => { get: () => Promise.reject(httpError({ code: 'ETIMEDOUT' })), }); const res = await downloadHttpProtocol(http, 'some://'); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'host-error' } satisfies MavenFetchError, + }); }); it('returns empty for temporary error', async () => { @@ -87,7 +93,10 @@ describe('modules/datasource/maven/util', () => { get: () => Promise.reject(httpError({ code: 'ECONNRESET' })), }); const res = await downloadHttpProtocol(http, 'some://'); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'temporary-error' } satisfies MavenFetchError, + }); }); it('returns empty for connection error', async () => { @@ -95,7 +104,10 @@ describe('modules/datasource/maven/util', () => { get: () => Promise.reject(httpError({ code: 'ECONNREFUSED' })), }); const res = await downloadHttpProtocol(http, 'some://'); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'connection-error' } satisfies MavenFetchError, + }); }); it('returns empty for unsupported error', async () => { @@ -104,7 +116,10 @@ describe('modules/datasource/maven/util', () => { Promise.reject(httpError({ name: 'UnsupportedProtocolError' })), }); const res = await downloadHttpProtocol(http, 'some://'); - expect(res).toBeNull(); + expect(res.unwrap()).toEqual({ + ok: false, + err: { type: 'unsupported-host' } satisfies MavenFetchError, + }); }); }); diff --git a/lib/modules/datasource/maven/util.ts b/lib/modules/datasource/maven/util.ts index 3a6d85956b4c2c..1edc357068e5cd 100644 --- a/lib/modules/datasource/maven/util.ts +++ b/lib/modules/datasource/maven/util.ts @@ -71,73 +71,92 @@ export async function downloadHttpProtocol( http: Http, pkgUrl: URL | string, opts: HttpOptions = {}, -): Promise { +): Promise { const url = pkgUrl.toString(); - const res = await Result.wrap(http.get(url, opts)) - .onError((err) => { + const fetchResult = await Result.wrap( + http.get(url, opts), + ) + .transform((res): MavenFetchSuccess => { + const result: MavenFetchSuccess = { data: res.body }; + + if (!res.authorization) { + result.isCacheable = true; + } + + const lastModified = normalizeDate(res?.headers?.['last-modified']); + if (lastModified) { + result.lastModified = lastModified; + } + + return result; + }) + .catch((err): MavenFetchResult => { // istanbul ignore next: never happens, needs for type narrowing if (!(err instanceof HttpError)) { - return; + return Result.err({ type: 'unknown', err }); } const failedUrl = url; if (err.message === HOST_DISABLED) { logger.trace({ failedUrl }, 'Host disabled'); - return; + return Result.err({ type: 'host-disabled' }); } if (isNotFoundError(err)) { logger.trace({ failedUrl }, `Url not found`); - return; + return Result.err({ type: 'not-found' }); } if (isHostError(err)) { logger.debug(`Cannot connect to host ${failedUrl}`); - return; + return Result.err({ type: 'host-error' }); } if (isPermissionsIssue(err)) { logger.debug( `Dependency lookup unauthorized. Please add authentication with a hostRule for ${failedUrl}`, ); - return; + return Result.err({ type: 'permission-issue' }); } if (isTemporaryError(err)) { logger.debug({ failedUrl, err }, 'Temporary error'); - return; + if (getHost(url) === getHost(MAVEN_REPO)) { + return Result.err({ type: 'maven-central-temporary-error', err }); + } else { + return Result.err({ type: 'temporary-error' }); + } } if (isConnectionError(err)) { logger.debug(`Connection refused to maven registry ${failedUrl}`); - return; + return Result.err({ type: 'connection-error' }); } if (isUnsupportedHostError(err)) { logger.debug(`Unsupported host ${failedUrl}`); - return; + return Result.err({ type: 'unsupported-host' }); } logger.info({ failedUrl, err }, 'Unknown HTTP download error'); - }) - .catch((err): Result => { - if ( - err instanceof HttpError && - isTemporaryError(err) && - getHost(url) === getHost(MAVEN_REPO) - ) { - return Result.err(new ExternalHostError(err)); - } - - return Result.ok('silent-error'); - }) - .unwrapOrThrow(); + return Result.err({ type: 'unknown', err }); + }); - if (res === 'silent-error') { - return null; + const { err } = fetchResult.unwrap(); + if (err?.type === 'maven-central-temporary-error') { + throw new ExternalHostError(err.err); } - return res; + return fetchResult; +} + +export async function downloadHttpContent( + http: Http, + pkgUrl: URL | string, + opts: HttpOptions = {}, +): Promise { + const fetchResult = await downloadHttpProtocol(http, pkgUrl, opts); + return fetchResult.transform(({ data }) => data).unwrapOrNull(); } function isS3NotFound(err: Error): boolean { @@ -228,7 +247,7 @@ export async function downloadS3Protocol( export async function downloadArtifactRegistryProtocol( http: Http, pkgUrl: URL, -): Promise { +): Promise { const opts: HttpOptions = {}; const host = pkgUrl.host; const path = pkgUrl.pathname; @@ -357,25 +376,21 @@ export async function downloadMavenXml( const protocol = pkgUrl.protocol; if (protocol === 'http:' || protocol === 'https:') { - const res = await downloadHttpProtocol(http, pkgUrl); - const body = res?.body; - if (body) { - return { - xml: new XmlDocument(body), - isCacheable: !res.authorization, - }; - } + const rawResult = await downloadHttpProtocol(http, pkgUrl); + const xmlResult = rawResult.transform(({ isCacheable, data }): MavenXml => { + const xml = new XmlDocument(data); + return { isCacheable, xml }; + }); + return xmlResult.unwrapOr({}); } if (protocol === 'artifactregistry:') { - const res = await downloadArtifactRegistryProtocol(http, pkgUrl); - const body = res?.body; - if (body) { - return { - xml: new XmlDocument(body), - isCacheable: !res.authorization, - }; - } + const rawResult = await downloadArtifactRegistryProtocol(http, pkgUrl); + const xmlResult = rawResult.transform(({ isCacheable, data }): MavenXml => { + const xml = new XmlDocument(data); + return { isCacheable, xml }; + }); + return xmlResult.unwrapOr({}); } if (protocol === 's3:') { diff --git a/lib/modules/datasource/sbt-package/index.spec.ts b/lib/modules/datasource/sbt-package/index.spec.ts index aa86cc3d12b0a5..c3011e563175ad 100644 --- a/lib/modules/datasource/sbt-package/index.spec.ts +++ b/lib/modules/datasource/sbt-package/index.spec.ts @@ -149,9 +149,9 @@ describe('modules/datasource/sbt-package/index', () => { .get('/org/example/example_2.12/') .reply(200, `1.2.3/`) .get('/org/example/example_2.12/1.2.3/example-1.2.3.pom') - .reply(200, ``) + .reply(404) .get('/org/example/example_2.12/1.2.3/example_2.12-1.2.3.pom') - .reply(200, ``); + .reply(404); const res = await getPkgReleases({ versioning: mavenVersioning.id, @@ -267,7 +267,7 @@ describe('modules/datasource/sbt-package/index', () => { `, ) .get('/org/example/example_2.13/1.2.3/example_2.13-1.2.3.pom') - .reply(200); + .reply(404); const res = await getPkgReleases({ versioning: mavenVersioning.id, diff --git a/lib/modules/datasource/sbt-package/index.ts b/lib/modules/datasource/sbt-package/index.ts index 463661b51c7429..c956922097486c 100644 --- a/lib/modules/datasource/sbt-package/index.ts +++ b/lib/modules/datasource/sbt-package/index.ts @@ -10,8 +10,7 @@ import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; import { MavenDatasource } from '../maven'; import { MAVEN_REPO } from '../maven/common'; -import { downloadHttpProtocol } from '../maven/util'; -import { normalizeDate } from '../metadata'; +import { downloadHttpContent, downloadHttpProtocol } from '../maven/util'; import type { GetReleasesConfig, PostprocessReleaseConfig, @@ -88,8 +87,11 @@ export class SbtPackageDatasource extends MavenDatasource { let dependencyUrl: string | undefined; let packageUrls: string[] | undefined; for (const packageRootUrl of packageRootUrls) { - const res = await downloadHttpProtocol(this.http, packageRootUrl); - if (!res) { + const packageRootContent = await downloadHttpContent( + this.http, + packageRootUrl, + ); + if (!packageRootContent) { continue; } @@ -103,7 +105,7 @@ export class SbtPackageDatasource extends MavenDatasource { dependencyUrl = trimTrailingSlash(packageRootUrl); const rootPath = new URL(packageRootUrl).pathname; - const artifactSubdirs = extractPageLinks(res.body, (href) => { + const artifactSubdirs = extractPageLinks(packageRootContent, (href) => { const path = href.replace(rootPath, ''); if ( @@ -149,15 +151,15 @@ export class SbtPackageDatasource extends MavenDatasource { const allVersions = new Set(); for (const pkgUrl of packageUrls) { - const res = await downloadHttpProtocol(this.http, pkgUrl); + const packageContent = await downloadHttpContent(this.http, pkgUrl); // istanbul ignore if - if (!res) { + if (!packageContent) { invalidPackageUrls.add(pkgUrl); continue; } const rootPath = new URL(pkgUrl).pathname; - const versions = extractPageLinks(res.body, (href) => { + const versions = extractPageLinks(packageContent, (href) => { const path = href.replace(rootPath, ''); if (path.startsWith('.')) { return null; @@ -275,20 +277,20 @@ export class SbtPackageDatasource extends MavenDatasource { } const res = await downloadHttpProtocol(this.http, pomUrl); - const content = res?.body; - if (!content) { + const { val } = res.unwrap(); + if (!val) { invalidPomFiles.add(pomUrl); continue; } const result: PomInfo = {}; - const releaseTimestamp = normalizeDate(res.headers['last-modified']); + const releaseTimestamp = val.lastModified; if (releaseTimestamp) { result.releaseTimestamp = releaseTimestamp; } - const pomXml = new XmlDocument(content); + const pomXml = new XmlDocument(val.data); const homepage = pomXml.valueWithPath('url'); if (homepage) { diff --git a/lib/modules/datasource/sbt-plugin/index.ts b/lib/modules/datasource/sbt-plugin/index.ts index fc84d656421be0..e1e49ec3718761 100644 --- a/lib/modules/datasource/sbt-plugin/index.ts +++ b/lib/modules/datasource/sbt-plugin/index.ts @@ -7,7 +7,7 @@ import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; import { Datasource } from '../datasource'; import { MAVEN_REPO } from '../maven/common'; -import { downloadHttpProtocol } from '../maven/util'; +import { downloadHttpContent } from '../maven/util'; import { extractPageLinks, getLatestVersion } from '../sbt-package/util'; import type { GetReleasesConfig, @@ -43,8 +43,7 @@ export class SbtPluginDatasource extends Datasource { scalaVersion: string, ): Promise { const pkgUrl = ensureTrailingSlash(searchRoot); - const res = await downloadHttpProtocol(this.http, pkgUrl); - const indexContent = res?.body; + const indexContent = await downloadHttpContent(this.http, pkgUrl); if (indexContent) { const rootPath = new URL(pkgUrl).pathname; let artifactSubdirs = extractPageLinks(indexContent, (href) => { @@ -84,8 +83,7 @@ export class SbtPluginDatasource extends Datasource { const releases: string[] = []; for (const searchSubdir of artifactSubdirs) { const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`); - const res = await downloadHttpProtocol(this.http, pkgUrl); - const content = res?.body; + const content = await downloadHttpContent(this.http, pkgUrl); if (content) { const rootPath = new URL(pkgUrl).pathname; const subdirReleases = extractPageLinks(content, (href) => { @@ -133,8 +131,7 @@ export class SbtPluginDatasource extends Datasource { for (const pomFileName of pomFileNames) { const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`; - const res = await downloadHttpProtocol(this.http, pomUrl); - const content = res?.body; + const content = await downloadHttpContent(this.http, pomUrl); if (content) { const pomXml = new XmlDocument(content); @@ -173,13 +170,16 @@ export class SbtPluginDatasource extends Datasource { return href; }; - const res = await downloadHttpProtocol( + const searchRootContent = await downloadHttpContent( this.http, ensureTrailingSlash(searchRoot), ); - if (res) { + if (searchRootContent) { const releases: string[] = []; - const scalaVersionItems = extractPageLinks(res.body, hrefFilterMap); + const scalaVersionItems = extractPageLinks( + searchRootContent, + hrefFilterMap, + ); const scalaVersions = scalaVersionItems.map((x) => x.replace(regEx(/^scala_/), ''), ); @@ -188,24 +188,22 @@ export class SbtPluginDatasource extends Datasource { : scalaVersions; for (const searchVersion of searchVersions) { const searchSubRoot = `${searchRoot}/scala_${searchVersion}`; - const subRootRes = await downloadHttpProtocol( + const subRootContent = await downloadHttpContent( this.http, ensureTrailingSlash(searchSubRoot), ); - if (subRootRes) { - const { body: subRootContent } = subRootRes; + if (subRootContent) { const sbtVersionItems = extractPageLinks( subRootContent, hrefFilterMap, ); for (const sbtItem of sbtVersionItems) { const releasesRoot = `${searchSubRoot}/${sbtItem}`; - const releaseIndexRes = await downloadHttpProtocol( + const releasesIndexContent = await downloadHttpContent( this.http, ensureTrailingSlash(releasesRoot), ); - if (releaseIndexRes) { - const { body: releasesIndexContent } = releaseIndexRes; + if (releasesIndexContent) { const releasesParsed = extractPageLinks( releasesIndexContent, hrefFilterMap, From 2e57e6af8d986766cf4cb78e56bed1e83874f8a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:25:14 +0000 Subject: [PATCH 49/73] chore(deps): update dependency type-fest to v4.30.0 (#33001) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 19c9ecdf29318e..555ab0f477ca83 100644 --- a/package.json +++ b/package.json @@ -347,7 +347,7 @@ "tmp-promise": "3.0.3", "ts-jest": "29.2.5", "ts-node": "10.9.2", - "type-fest": "4.29.1", + "type-fest": "4.30.0", "typescript": "5.7.2", "unified": "9.2.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd744a3a1bf857..81ed5962080886 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -614,8 +614,8 @@ importers: specifier: 10.9.2 version: 10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2) type-fest: - specifier: 4.29.1 - version: 4.29.1 + specifier: 4.30.0 + version: 4.30.0 typescript: specifier: 5.7.2 version: 5.7.2 @@ -5964,8 +5964,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.29.1: - resolution: {integrity: sha512-Y1zUveI92UYM/vo1EFlQSsNf74+hfKH+7saZJslF0Fw92FRaiTAnHPIvo9d7SLxXt/gAYqA4RXyDTioMQCCp0A==} + type-fest@4.30.0: + resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -12123,7 +12123,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.29.1 + type-fest: 4.30.0 parse-link-header@2.0.0: dependencies: @@ -12327,7 +12327,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.29.1 + type-fest: 4.30.0 read-pkg-up@7.0.1: dependencies: @@ -12347,7 +12347,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.29.1 + type-fest: 4.30.0 unicorn-magic: 0.1.0 read-yaml-file@2.1.0: @@ -13086,7 +13086,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.29.1: {} + type-fest@4.30.0: {} typed-array-buffer@1.0.2: dependencies: From b05799d9c5079bcfc822c29e83ec0c461e771ef5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:25:25 +0000 Subject: [PATCH 50/73] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v9.18.0 (#33002) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tools/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index fd00e32cc90a75..fd8fe603dd8cff 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.17.0@sha256:7020d9fcadee2f20097137f62eb8bc3ef4d3b2d06e0e16262d1931147b41b7a0 AS slim-base +FROM ghcr.io/renovatebot/base-image:9.18.0@sha256:2ba0de7fc6f001dfb729db15b3f121fb906da0ca720a4397a937d1c56411db46 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.17.0-full@sha256:ce36fa9b4fb6cd4c3a3b69c450fea6df2380dab9d26690ff6010a520ae26ccf4 AS full-base +FROM ghcr.io/renovatebot/base-image:9.18.0-full@sha256:8ce6841770f0b3a62af95593c883cb71e421f54064036a5840d60e493f08db97 AS full-base ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.17.0@sha256:7020d9fcadee2f20097137f62eb8bc3ef4d3b2d06e0e16262d1931147b41b7a0 AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.18.0@sha256:2ba0de7fc6f001dfb729db15b3f121fb906da0ca720a4397a937d1c56411db46 AS build # We want a specific node version here # renovate: datasource=node-version From f7486d6fde18898bee1d58752f8c56e59a43ede8 Mon Sep 17 00:00:00 2001 From: Justin Clareburt <122523970+justo-mend@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:17:13 +0100 Subject: [PATCH 51/73] docs: added Renovate Version info to Mend-hosted Apps config page (#32917) --- docs/usage/faq.md | 31 -------------------- docs/usage/mend-hosted/hosted-apps-config.md | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/docs/usage/faq.md b/docs/usage/faq.md index e3d8287219c884..1901e2f268a68b 100644 --- a/docs/usage/faq.md +++ b/docs/usage/faq.md @@ -29,37 +29,6 @@ The Renovate team only fixes bugs in an older version if: If you're using the Mend Renovate App, you don't need to do anything, as the Renovate maintainers update it regularly. If you're self hosting Renovate, use the latest release if possible. -## When is the Mend Renovate App updated with new Renovate versions? - -The Renovate maintainers manually update the app. -The maintainers don't follow any release schedule or release cadence, but try to update at least once a week. -This means the Mend Renovate App can lag a few hours to a week behind the open source version. - -Major releases of Renovate are held back until the maintainers are reasonably certain it works for most users. - -## How can I see which version the Mend Renovate app is using? - -Follow these steps to see which version the Mend Renovate app is on: - -1. Go to the [Mend Developer Portal](https://developer.mend.io/) -1. Sign in to the Renovate app with your GitHub or Bitbucket account -1. Select your organization -1. Select a installed repository -1. Select a job from the _Recent jobs_ overview -1. Select the _Info_ Log Level from the dropdown menu -1. You should see something like this: - - ``` - INFO: Repository started - { - "renovateVersion": "39.11.5" - } - ``` - - -!!! tip - The PRs that Renovate creates have a link to the "repository job log" in the footer of the PR body text. - ## Renovate core features not supported on all platforms | Feature | Platforms which lack feature | See Renovate issue(s) | diff --git a/docs/usage/mend-hosted/hosted-apps-config.md b/docs/usage/mend-hosted/hosted-apps-config.md index 4d183fab6f1f8b..787ec273bf84f1 100644 --- a/docs/usage/mend-hosted/hosted-apps-config.md +++ b/docs/usage/mend-hosted/hosted-apps-config.md @@ -17,6 +17,36 @@ The Renovate logs for the Mend-hosted apps are on the [Mend Developer Portal](ht Reading the logs can help you understand the configuration that Renovate used. +## Renovate Version + +The Renovate version used by the Mend-hosted apps is updated manually by the maintainers of the app. +The maintainers don't follow any release schedule or release cadence, but try to update at least once a week. +This means the Mend Renovate App can lag a few hours to a week behind the open source version. + +Major releases of Renovate are held back until the maintainers are reasonably certain it works for most users. + +### Which version is the Mend Renovate app using? + +Follow these steps to see which version the Mend Renovate app used for a specific job: + +1. Sign in to the [Mend Developer Portal](https://developer.mend.io/) with your GitHub or Bitbucket account +1. Select your organization +1. Select a installed repository +1. Select a job from the _Recent jobs_ overview +1. Select the _Info_ Log Level from the dropdown menu +1. You should see something like this: + + ``` + INFO: Repository started + { + "renovateVersion": "39.11.5" + } + ``` + + +!!! tip + The PRs that Renovate creates have a link to the "repository job log" in the footer of the PR body text. + ## Onboarding behavior ### Installing Renovate into all repositories leads to silent mode From c9521dbc4400331b9aa06d281ddc55aa1b90599d Mon Sep 17 00:00:00 2001 From: Justin Clareburt <122523970+justo-mend@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:20:41 +0100 Subject: [PATCH 52/73] docs: remove app secrets deprecation date (#33010) --- docs/usage/mend-hosted/credentials.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/usage/mend-hosted/credentials.md b/docs/usage/mend-hosted/credentials.md index b0fdab984b1cf8..ca33840593c046 100644 --- a/docs/usage/mend-hosted/credentials.md +++ b/docs/usage/mend-hosted/credentials.md @@ -4,12 +4,13 @@ The information on this page is for the Mend-hosted cloud apps: - Renovate App on GitHub - Mend App on Bitbucket +- Mend App on Azure DevOps If you self-host, you can skip reading this page. ## :warning: Migrate secrets in your Renovate config file :warning: -The Mend-hosted cloud app will stop reading secrets from the Renovate config file in your repository on 01-Oct-2024. +Use of encrypted secrets in the Mend Renovate cloud apps has been deprecated and soon the apps will stop reading secrets from the Renovate config file in your repository. You must migrate any secrets you currently keep in the Renovate config file, and put them in the app settings page on [developer.mend.io](https://developer.mend.io). To add secrets you must have admin-level rights. From 3bd8e68006578bc9d9444a8df66070c133bf62bc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:36:01 +0000 Subject: [PATCH 53/73] chore(deps): update github/codeql-action action to v3.27.7 (#33018) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecard.yml | 2 +- .github/workflows/trivy.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3a15a3d4b3bfed..21a87761e58cdf 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -41,7 +41,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 with: languages: javascript @@ -51,7 +51,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/autobuild@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -65,4 +65,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8bf7658a3e6daf..a1ff96abf20226 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -51,6 +51,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 with: sarif_file: results.sarif diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 52cf1a53290b1d..827760089e89e8 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@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + - uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 with: sarif_file: trivy-results.sarif category: 'docker-image-${{ matrix.tag }}' From 825d2666cd88993304cb35bec8971425ce79e3a3 Mon Sep 17 00:00:00 2001 From: Konrad Malik Date: Tue, 10 Dec 2024 17:35:38 +0100 Subject: [PATCH 54/73] docs(nuget): add info about nested nuget ignorePaths (#33020) --- docs/usage/nuget.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/usage/nuget.md b/docs/usage/nuget.md index 67c8409dcd4b62..ef827088a82272 100644 --- a/docs/usage/nuget.md +++ b/docs/usage/nuget.md @@ -130,6 +130,23 @@ If you use Azure DevOps: The username of the PAT must match the username of the _user of the PAT_. The generated `nuget.config` forces the basic authentication, which cannot be overridden externally! +## Ignoring package files when using presets + +Because `nuget` manager has a dedicated `ignorePaths` entry in the `:ignoreModulesAndTests` preset, if you're using any presets that extend it (like `config:recommended`), you need to put your `ignorePaths` inside the `nuget` section for it to be merged. +For example: + +```json +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:recommended"], + "nuget": { + "ignorePaths": ["IgnoreThisPackage/**"] + } +} +``` + +Otherwise, all `nuget.ignorePaths` values in `:ignoreModulesAndTests` will override values you put inside `ignorePaths` at the top-level config. + ## Future work We welcome contributions or feature requests to support more patterns or use cases. From df8bbff690d505af3219535a769de4c26b089344 Mon Sep 17 00:00:00 2001 From: Jade Ferreira Date: Tue, 10 Dec 2024 14:00:39 -0300 Subject: [PATCH 55/73] feat(preset): Add modules to Jackson monorepo group (#32997) --- lib/data/monorepo.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index 583d823b009fff..aa05c5e04db3a1 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -328,9 +328,12 @@ "istanbuljs": "https://github.com/istanbuljs/istanbuljs", "jackson": [ "https://github.com/FasterXML/jackson", + "https://github.com/FasterXML/jackson-annotations", + "https://github.com/FasterXML/jackson-core", "https://github.com/FasterXML/jackson-databind", "https://github.com/FasterXML/jackson-dataformats-binary", "https://github.com/FasterXML/jackson-dataformats-text", + "https://github.com/FasterXML/jackson-jaxrs-providers", "https://github.com/FasterXML/jackson-module-kotlin" ], "jasmine": "https://github.com/jasmine/jasmine", From 2b7ab400f9d6ee811d56ae71fda569a85f147f95 Mon Sep 17 00:00:00 2001 From: Bernardo <37117272+bernardo-martinez@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:08:35 +0100 Subject: [PATCH 56/73] feat(mix): handle hex package aliases (#32984) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- lib/modules/manager/mix/__fixtures__/mix.exs | 2 ++ lib/modules/manager/mix/__fixtures__/mix.lock | 4 ++- lib/modules/manager/mix/extract.spec.ts | 26 +++++++++++++++++++ lib/modules/manager/mix/extract.ts | 11 +++++++- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/mix/__fixtures__/mix.exs b/lib/modules/manager/mix/__fixtures__/mix.exs index a6c88af2983af4..9a20acf18cdbc2 100644 --- a/lib/modules/manager/mix/__fixtures__/mix.exs +++ b/lib/modules/manager/mix/__fixtures__/mix.exs @@ -32,6 +32,8 @@ defmodule MyProject.MixProject do optional: true}, {:hammer_backend_redis, "~> 6.1"}, {:public, "== 1.6.14"}, + {:gun, "~> 2.0.0", hex: "grpc_gun"}, + {:another_gun, "~> 1.0.0", hex: :gun_atom}, ] end end diff --git a/lib/modules/manager/mix/__fixtures__/mix.lock b/lib/modules/manager/mix/__fixtures__/mix.lock index c1b5eacc423a5e..050f556d971cce 100644 --- a/lib/modules/manager/mix/__fixtures__/mix.lock +++ b/lib/modules/manager/mix/__fixtures__/mix.lock @@ -12,5 +12,7 @@ "mason": {:hex, :mason, "1.1.0", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}, "hammer_backend_redis": {:hex, :hammer_backend_redis, "6.1.5", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}, "public": {:hex, :public, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}, - "a_transient_dependency": {:hex, :a_transient_dependency, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"} + "a_transient_dependency": {:hex, :a_transient_dependency, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}, + "gun": {:hex, :grpc_gun, "2.0.0", "f99678a2ab975e74372a756c86ec30a8384d3ac8a8b86c7ed6243ef4e61d2729", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "03dbbca1a9c604a0267a40ea1d69986225091acb822de0b2dbea21d5815e410b"}, + "another_gun": {:hex, :gun_atom, "1.0.0", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"} } diff --git a/lib/modules/manager/mix/extract.spec.ts b/lib/modules/manager/mix/extract.spec.ts index da6ffc1fbb14f4..128ba680e3b970 100644 --- a/lib/modules/manager/mix/extract.spec.ts +++ b/lib/modules/manager/mix/extract.spec.ts @@ -92,6 +92,18 @@ describe('modules/manager/mix/extract', () => { depName: 'public', packageName: 'public', }, + { + currentValue: '~> 2.0.0', + datasource: 'hex', + depName: 'gun', + packageName: 'grpc_gun', + }, + { + currentValue: '~> 1.0.0', + datasource: 'hex', + depName: 'another_gun', + packageName: 'gun_atom', + }, ]); }); @@ -188,6 +200,20 @@ describe('modules/manager/mix/extract', () => { packageName: 'public', lockedVersion: '1.6.14', }, + { + currentValue: '~> 2.0.0', + datasource: 'hex', + depName: 'gun', + packageName: 'grpc_gun', + lockedVersion: '2.0.0', + }, + { + currentValue: '~> 1.0.0', + datasource: 'hex', + depName: 'another_gun', + packageName: 'gun_atom', + lockedVersion: '1.0.0', + }, ]); }); }); diff --git a/lib/modules/manager/mix/extract.ts b/lib/modules/manager/mix/extract.ts index e8cc5eb8ff677b..3d9c45e00d74f4 100644 --- a/lib/modules/manager/mix/extract.ts +++ b/lib/modules/manager/mix/extract.ts @@ -19,6 +19,7 @@ const commentMatchRegExp = regEx(/#.*$/); const lockedVersionRegExp = regEx( /^\s+"(?\w+)".*?"(?\d+\.\d+\.\d+)"/, ); +const hexRegexp = regEx(/hex:\s*(?:"(?[^"]+)"|:(?\w+))/); export async function extractPackageFile( content: string, @@ -44,6 +45,8 @@ export async function extractPackageFile( const ref = refRegexp.exec(opts)?.groups?.value; const branchOrTag = branchOrTagRegexp.exec(opts)?.groups?.value; const organization = organizationRegexp.exec(opts)?.groups?.value; + const hexGroups = hexRegexp.exec(opts)?.groups; + const hex = hexGroups?.strValue ?? hexGroups?.atomValue; let dep: PackageDependency; @@ -60,8 +63,14 @@ export async function extractPackageFile( depName: app, currentValue: requirement, datasource: HexDatasource.id, - packageName: organization ? `${app}:${organization}` : app, }; + if (organization) { + dep.packageName = `${app}:${organization}`; + } else if (hex) { + dep.packageName = hex; + } else { + dep.packageName = app; + } if (requirement?.startsWith('==')) { dep.currentVersion = requirement.replace(regEx(/^==\s*/), ''); } From cf4734b872ed722e866555a1cc9ea1aca077ebb7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:17:11 +0000 Subject: [PATCH 57/73] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v9.19.0 (#33023) 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 fd8fe603dd8cff..e943dd42e763a4 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,7 +5,7 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:9.18.0@sha256:2ba0de7fc6f001dfb729db15b3f121fb906da0ca720a4397a937d1c56411db46 AS slim-base +FROM ghcr.io/renovatebot/base-image:9.19.0@sha256:663b623ccff07805626df172ec2b70d4b31425e25491d2f1fd4a758222c175a3 AS slim-base # -------------------------------------- # full image @@ -17,7 +17,7 @@ ENV RENOVATE_BINARY_SOURCE=global # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.18.0@sha256:2ba0de7fc6f001dfb729db15b3f121fb906da0ca720a4397a937d1c56411db46 AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.19.0@sha256:663b623ccff07805626df172ec2b70d4b31425e25491d2f1fd4a758222c175a3 AS build # We want a specific node version here # renovate: datasource=node-version From 318f97f367cced1f5cf4404a764737a15e1f793a Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Tue, 10 Dec 2024 20:35:11 +0100 Subject: [PATCH 58/73] fix(presets/packages): include @types/react-dom in react preset (#32995) --- lib/config/presets/internal/packages.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/internal/packages.ts b/lib/config/presets/internal/packages.ts index 461f48302b91d2..4c5c1867a99e85 100644 --- a/lib/config/presets/internal/packages.ts +++ b/lib/config/presets/internal/packages.ts @@ -135,7 +135,8 @@ export const presets: Record = { }, react: { description: 'All React packages.', - matchPackageNames: ['@types/react', 'react**'], + matchDatasources: ['npm'], + matchPackageNames: ['@types/react**', 'react**'], }, stylelint: { description: 'All Stylelint packages.', From 165ffabb1c376aa7961bd745995759beefa25879 Mon Sep 17 00:00:00 2001 From: sandr01d <88739791+sandr01d@users.noreply.github.com> Date: Tue, 10 Dec 2024 23:49:14 +0100 Subject: [PATCH 59/73] feat(presets): add utoipa monorepo (#33028) --- lib/data/monorepo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index aa05c5e04db3a1..9102067b8566da 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -546,6 +546,7 @@ "unhead": "https://github.com/unjs/unhead", "unocss": "https://github.com/unocss/unocss", "uppy": "https://github.com/transloadit/uppy", + "utopia": "https://github.com/juhaku/utoipa", "vaadin-hilla": "https://github.com/vaadin/hilla", "vaadinWebComponents": "https://github.com/vaadin/web-components", "visx": "https://github.com/airbnb/visx", From 9ed20121b3c618639312f6efb220ed9eaee626c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 02:00:26 +0000 Subject: [PATCH 60/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.2.3 (#33030) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 99edd38650e7b0..7285d0327a4e0d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.2.2 +FROM ghcr.io/containerbase/devcontainer:13.2.3 From 41fe6b94ed287a17b09ad19f64354a8ec149823b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:21:30 +0000 Subject: [PATCH 61/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.2.3 (#33031) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 6f2e462b04905f..a2f63af78adcda 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.2.2', + default: 'ghcr.io/containerbase/sidecar:13.2.3', globalOnly: true, }, { From 05c13eb7a1cf8276daa94ce1b9c4b3bdf1759f78 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:23:17 +0000 Subject: [PATCH 62/73] chore(deps): update dependency @swc/core to v1.10.0 (#33032) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 148 ++++++++++++++++++++++++------------------------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index 555ab0f477ca83..2a2beb8dc39bc0 100644 --- a/package.json +++ b/package.json @@ -269,7 +269,7 @@ "@openpgp/web-stream-tools": "0.1.3", "@renovate/eslint-plugin": "file:tools/eslint", "@semantic-release/exec": "6.0.3", - "@swc/core": "1.9.3", + "@swc/core": "1.10.0", "@types/auth-header": "1.0.6", "@types/aws4": "1.11.6", "@types/better-sqlite3": "7.6.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81ed5962080886..242accef1abed9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -380,8 +380,8 @@ importers: specifier: 6.0.3 version: 6.0.3(semantic-release@24.2.0(typescript@5.7.2)) '@swc/core': - specifier: 1.9.3 - version: 1.9.3 + specifier: 1.10.0 + version: 1.10.0 '@types/auth-header': specifier: 1.0.6 version: 1.0.6 @@ -540,7 +540,7 @@ importers: version: 2.31.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jest: specifier: 28.8.3 - version: 28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) + version: 28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.1) @@ -564,16 +564,16 @@ importers: version: 9.1.7 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + version: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2))) + version: 4.0.2(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2))) jest-mock: specifier: 29.7.0 version: 29.7.0 jest-mock-extended: specifier: 3.0.7 - version: 3.0.7(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) + version: 3.0.7(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -609,10 +609,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2) + version: 10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2) type-fest: specifier: 4.30.0 version: 4.30.0 @@ -1851,68 +1851,68 @@ packages: resolution: {integrity: sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==} engines: {node: '>=16.0.0'} - '@swc/core-darwin-arm64@1.9.3': - resolution: {integrity: sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==} + '@swc/core-darwin-arm64@1.10.0': + resolution: {integrity: sha512-wCeUpanqZyzvgqWRtXIyhcFK3CqukAlYyP+fJpY2gWc/+ekdrenNIfZMwY7tyTFDkXDYEKzvn3BN/zDYNJFowQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.9.3': - resolution: {integrity: sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ==} + '@swc/core-darwin-x64@1.10.0': + resolution: {integrity: sha512-0CZPzqTynUBO+SHEl/qKsFSahp2Jv/P2ZRjFG0gwZY5qIcr1+B/v+o74/GyNMBGz9rft+F2WpU31gz2sJwyF4A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.9.3': - resolution: {integrity: sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ==} + '@swc/core-linux-arm-gnueabihf@1.10.0': + resolution: {integrity: sha512-oq+DdMu5uJOFPtRkeiITc4kxmd+QSmK+v+OBzlhdGkSgoH3yRWZP+H2ao0cBXo93ZgCr2LfjiER0CqSKhjGuNA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.9.3': - resolution: {integrity: sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g==} + '@swc/core-linux-arm64-gnu@1.10.0': + resolution: {integrity: sha512-Y6+PC8knchEViRxiCUj3j8wsGXaIhuvU+WqrFqV834eiItEMEI9+Vh3FovqJMBE3L7d4E4ZQtgImHCXjrHfxbw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.9.3': - resolution: {integrity: sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==} + '@swc/core-linux-arm64-musl@1.10.0': + resolution: {integrity: sha512-EbrX9A5U4cECCQQfky7945AW9GYnTXtCUXElWTkTYmmyQK87yCyFfY8hmZ9qMFIwxPOH6I3I2JwMhzdi8Qoz7g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.9.3': - resolution: {integrity: sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==} + '@swc/core-linux-x64-gnu@1.10.0': + resolution: {integrity: sha512-TaxpO6snTjjfLXFYh5EjZ78se69j2gDcqEM8yB9gguPYwkCHi2Ylfmh7iVaNADnDJFtjoAQp0L41bTV/Pfq9Cg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.9.3': - resolution: {integrity: sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==} + '@swc/core-linux-x64-musl@1.10.0': + resolution: {integrity: sha512-IEGvDd6aEEKEyZFZ8oCKuik05G5BS7qwG5hO5PEMzdGeh8JyFZXxsfFXbfeAqjue4UaUUrhnoX+Ze3M2jBVMHw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.9.3': - resolution: {integrity: sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==} + '@swc/core-win32-arm64-msvc@1.10.0': + resolution: {integrity: sha512-UkQ952GSpY+Z6XONj9GSW8xGSkF53jrCsuLj0nrcuw7Dvr1a816U/9WYZmmcYS8tnG2vHylhpm6csQkyS8lpCw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.9.3': - resolution: {integrity: sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA==} + '@swc/core-win32-ia32-msvc@1.10.0': + resolution: {integrity: sha512-a2QpIZmTiT885u/mUInpeN2W9ClCnqrV2LnMqJR1/Fgx1Afw/hAtiDZPtQ0SqS8yDJ2VR5gfNZo3gpxWMrqdVA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.9.3': - resolution: {integrity: sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ==} + '@swc/core-win32-x64-msvc@1.10.0': + resolution: {integrity: sha512-tZcCmMwf483nwsEBfUk5w9e046kMa1iSik4bP9Kwi2FGtOfHuDfIcwW4jek3hdcgF5SaBW1ktnK/lgQLDi5AtA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.9.3': - resolution: {integrity: sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg==} + '@swc/core@1.10.0': + resolution: {integrity: sha512-+CuuTCmQFfzaNGg1JmcZvdUVITQXJk9sMnl1C2TiDLzOSVOJRwVD4dNo5dljX/qxpMAN+2BIYlwjlSkoGi6grg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -7384,7 +7384,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -7398,7 +7398,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8481,51 +8481,51 @@ snapshots: '@smithy/types': 3.7.1 tslib: 2.8.1 - '@swc/core-darwin-arm64@1.9.3': + '@swc/core-darwin-arm64@1.10.0': optional: true - '@swc/core-darwin-x64@1.9.3': + '@swc/core-darwin-x64@1.10.0': optional: true - '@swc/core-linux-arm-gnueabihf@1.9.3': + '@swc/core-linux-arm-gnueabihf@1.10.0': optional: true - '@swc/core-linux-arm64-gnu@1.9.3': + '@swc/core-linux-arm64-gnu@1.10.0': optional: true - '@swc/core-linux-arm64-musl@1.9.3': + '@swc/core-linux-arm64-musl@1.10.0': optional: true - '@swc/core-linux-x64-gnu@1.9.3': + '@swc/core-linux-x64-gnu@1.10.0': optional: true - '@swc/core-linux-x64-musl@1.9.3': + '@swc/core-linux-x64-musl@1.10.0': optional: true - '@swc/core-win32-arm64-msvc@1.9.3': + '@swc/core-win32-arm64-msvc@1.10.0': optional: true - '@swc/core-win32-ia32-msvc@1.9.3': + '@swc/core-win32-ia32-msvc@1.10.0': optional: true - '@swc/core-win32-x64-msvc@1.9.3': + '@swc/core-win32-x64-msvc@1.10.0': optional: true - '@swc/core@1.9.3': + '@swc/core@1.10.0': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.9.3 - '@swc/core-darwin-x64': 1.9.3 - '@swc/core-linux-arm-gnueabihf': 1.9.3 - '@swc/core-linux-arm64-gnu': 1.9.3 - '@swc/core-linux-arm64-musl': 1.9.3 - '@swc/core-linux-x64-gnu': 1.9.3 - '@swc/core-linux-x64-musl': 1.9.3 - '@swc/core-win32-arm64-msvc': 1.9.3 - '@swc/core-win32-ia32-msvc': 1.9.3 - '@swc/core-win32-x64-msvc': 1.9.3 + '@swc/core-darwin-arm64': 1.10.0 + '@swc/core-darwin-x64': 1.10.0 + '@swc/core-linux-arm-gnueabihf': 1.10.0 + '@swc/core-linux-arm64-gnu': 1.10.0 + '@swc/core-linux-arm64-musl': 1.10.0 + '@swc/core-linux-x64-gnu': 1.10.0 + '@swc/core-linux-x64-musl': 1.10.0 + '@swc/core-win32-arm64-msvc': 1.10.0 + '@swc/core-win32-ia32-msvc': 1.10.0 + '@swc/core-win32-x64-msvc': 1.10.0 '@swc/counter@0.1.3': {} @@ -9588,13 +9588,13 @@ snapshots: optionalDependencies: typescript: 5.7.2 - create-jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)): + create-jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10006,13 +10006,13 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): + eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): dependencies: '@typescript-eslint/utils': 8.17.0(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) - jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) transitivePeerDependencies: - supports-color - typescript @@ -11025,16 +11025,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)): + jest-cli@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + create-jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11044,7 +11044,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -11070,7 +11070,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.17.9 - ts-node: 10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11103,12 +11103,12 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2))): + jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-get-type@29.6.3: {} @@ -11159,9 +11159,9 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): dependencies: - jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) ts-essentials: 10.0.3(typescript@5.7.2) typescript: 5.7.2 @@ -11310,12 +11310,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)): + jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest-cli: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12994,12 +12994,12 @@ snapshots: optionalDependencies: typescript: 5.7.2 - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)))(typescript@5.7.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2)) + jest: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -13013,7 +13013,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) - ts-node@10.9.2(@swc/core@1.9.3)(@types/node@20.17.9)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.10.0)(@types/node@20.17.9)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -13031,7 +13031,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.9.3 + '@swc/core': 1.10.0 tsconfig-paths@3.15.0: dependencies: From 0679f469508269966c314f8f9c935056c235d964 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 07:14:56 +0000 Subject: [PATCH 63/73] build(deps): update dependency prettier to v3.4.2 (#33034) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2a2beb8dc39bc0..a9c90c9430cc40 100644 --- a/package.json +++ b/package.json @@ -229,7 +229,7 @@ "p-queue": "6.6.2", "p-throttle": "4.1.1", "parse-link-header": "2.0.0", - "prettier": "3.4.1", + "prettier": "3.4.2", "protobufjs": "7.4.0", "punycode": "2.3.1", "redis": "4.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 242accef1abed9..a16b2ee8e0fd5a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -270,8 +270,8 @@ importers: specifier: 2.0.0 version: 2.0.0 prettier: - specifier: 3.4.1 - version: 3.4.1 + specifier: 3.4.2 + version: 3.4.2 protobufjs: specifier: 7.4.0 version: 7.4.0 @@ -5184,8 +5184,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.4.1: - resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true @@ -12222,7 +12222,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.4.1: {} + prettier@3.4.2: {} pretty-format@29.7.0: dependencies: From c5f89b3bbc41e20a3f4d21c988c615f13dacf6e8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:48:47 +0000 Subject: [PATCH 64/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.2.5 (#33038) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7285d0327a4e0d..18267b4ef9fd7e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.2.3 +FROM ghcr.io/containerbase/devcontainer:13.2.5 From 098c3e2cc204e7e53ac946eb7b43b654184e10bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:49:00 +0000 Subject: [PATCH 65/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.2.4 (#33039) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index a2f63af78adcda..f8a1f3adaca510 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.2.3', + default: 'ghcr.io/containerbase/sidecar:13.2.4', globalOnly: true, }, { From cac8d6cb6379d2d15d0a1d84f4b4b18fa94dc7f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:32:24 +0000 Subject: [PATCH 66/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.3.0 (#33040) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 18267b4ef9fd7e..412efac2ee10fa 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.2.5 +FROM ghcr.io/containerbase/devcontainer:13.3.0 From 609600c3268c33eaab56392dd67dac809d2b5101 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:32:31 +0000 Subject: [PATCH 67/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.3.0 (#33041) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index f8a1f3adaca510..9a0307571abe94 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.2.4', + default: 'ghcr.io/containerbase/sidecar:13.3.0', globalOnly: true, }, { From b0946602ad2aec491adb91c9f3df78532d75d1ca Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Thu, 12 Dec 2024 01:38:21 +0900 Subject: [PATCH 68/73] refactor(config/presets): move parsePreset to avoid a circular dependency (#33036) --- lib/config/presets/index.spec.ts | 479 ------------------------------- lib/config/presets/index.ts | 124 +------- lib/config/presets/parse.spec.ts | 462 +++++++++++++++++++++++++++++ lib/config/presets/parse.ts | 125 ++++++++ 4 files changed, 589 insertions(+), 601 deletions(-) create mode 100644 lib/config/presets/parse.spec.ts create mode 100644 lib/config/presets/parse.ts diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index ccfd5dd8169102..2cc78c86dc5ebb 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -513,485 +513,6 @@ describe('config/presets/index', () => { }); }); - describe('parsePreset', () => { - // default namespace - it('returns default package name', () => { - expect(presets.parsePreset(':base')).toEqual({ - repo: 'default', - params: undefined, - presetName: 'base', - presetPath: undefined, - presetSource: 'internal', - }); - }); - - it('parses github', () => { - expect(presets.parsePreset('github>some/repo')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('handles special chars', () => { - expect(presets.parsePreset('github>some/repo:foo+bar')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'foo+bar', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('parses github subfiles', () => { - expect(presets.parsePreset('github>some/repo:somefile')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('parses github subfiles with preset name', () => { - expect( - presets.parsePreset('github>some/repo:somefile/somepreset'), - ).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile/somepreset', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('parses github file with preset name with .json extension', () => { - expect(presets.parsePreset('github>some/repo:somefile.json')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile.json', - presetPath: undefined, - presetSource: 'github', - tag: undefined, - }); - }); - - it('parses github file with preset name with .json5 extension', () => { - expect(presets.parsePreset('github>some/repo:somefile.json5')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile.json5', - presetPath: undefined, - presetSource: 'github', - tag: undefined, - }); - }); - - it('parses github subfiles with preset name with .json extension', () => { - expect( - presets.parsePreset('github>some/repo:somefile.json/somepreset'), - ).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile.json/somepreset', - presetPath: undefined, - presetSource: 'github', - tag: undefined, - }); - }); - - it('parses github subfiles with preset name with .json5 extension', () => { - expect( - presets.parsePreset('github>some/repo:somefile.json5/somepreset'), - ).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile.json5/somepreset', - presetPath: undefined, - presetSource: 'github', - tag: undefined, - }); - }); - - it('parses github subfiles with preset and sub-preset name', () => { - expect( - presets.parsePreset( - 'github>some/repo:somefile/somepreset/somesubpreset', - ), - ).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile/somepreset/somesubpreset', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('parses github subdirectories', () => { - expect( - presets.parsePreset('github>some/repo//somepath/somesubpath/somefile'), - ).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile', - presetPath: 'somepath/somesubpath', - presetSource: 'github', - }); - }); - - it('parses github toplevel file using subdirectory syntax', () => { - expect(presets.parsePreset('github>some/repo//somefile')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'somefile', - presetPath: undefined, - presetSource: 'github', - }); - }); - - it('parses gitlab', () => { - expect(presets.parsePreset('gitlab>some/repo')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'gitlab', - }); - }); - - it('parses gitea', () => { - expect(presets.parsePreset('gitea>some/repo')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'gitea', - }); - }); - - it('parses local', () => { - expect(presets.parsePreset('local>some/repo')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'local', - }); - }); - - it('parses local with spaces', () => { - expect(presets.parsePreset('local>A2B CD/A2B_Renovate')).toEqual({ - repo: 'A2B CD/A2B_Renovate', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'local', - }); - }); - - it('parses local with subdirectory', () => { - expect( - presets.parsePreset('local>some-group/some-repo//some-dir/some-file'), - ).toEqual({ - repo: 'some-group/some-repo', - params: undefined, - presetName: 'some-file', - presetPath: 'some-dir', - presetSource: 'local', - }); - }); - - it('parses local with spaces and subdirectory', () => { - expect( - presets.parsePreset('local>A2B CD/A2B_Renovate//some-dir/some-file'), - ).toEqual({ - repo: 'A2B CD/A2B_Renovate', - params: undefined, - presetName: 'some-file', - presetPath: 'some-dir', - presetSource: 'local', - }); - }); - - it('parses local with sub preset and tag', () => { - expect( - presets.parsePreset( - 'local>some-group/some-repo:some-file/subpreset#1.2.3', - ), - ).toEqual({ - repo: 'some-group/some-repo', - params: undefined, - presetName: 'some-file/subpreset', - presetPath: undefined, - presetSource: 'local', - tag: '1.2.3', - }); - }); - - it('parses local with subdirectory and tag', () => { - expect( - presets.parsePreset( - 'local>some-group/some-repo//some-dir/some-file#1.2.3', - ), - ).toEqual({ - repo: 'some-group/some-repo', - params: undefined, - presetName: 'some-file', - presetPath: 'some-dir', - presetSource: 'local', - tag: '1.2.3', - }); - }); - - it('parses local with subdirectory and branch/tag with a slash', () => { - expect( - presets.parsePreset( - 'local>PROJECT/repository//path/to/preset#feature/branch', - ), - ).toEqual({ - repo: 'PROJECT/repository', - params: undefined, - presetName: 'preset', - presetPath: 'path/to', - presetSource: 'local', - tag: 'feature/branch', - }); - }); - - it('parses local with sub preset and branch/tag with a slash', () => { - expect( - presets.parsePreset( - 'local>PROJECT/repository:preset/subpreset#feature/branch', - ), - ).toEqual({ - repo: 'PROJECT/repository', - params: undefined, - presetName: 'preset/subpreset', - presetPath: undefined, - presetSource: 'local', - tag: 'feature/branch', - }); - }); - - it('parses no prefix as local', () => { - expect(presets.parsePreset('some/repo')).toEqual({ - repo: 'some/repo', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'local', - }); - }); - - it('parses local Bitbucket user repo with preset name', () => { - expect(presets.parsePreset('local>~john_doe/repo//somefile')).toEqual({ - repo: '~john_doe/repo', - params: undefined, - presetName: 'somefile', - presetPath: undefined, - presetSource: 'local', - }); - }); - - it('parses local Bitbucket user repo', () => { - expect(presets.parsePreset('local>~john_doe/renovate-config')).toEqual({ - repo: '~john_doe/renovate-config', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'local', - }); - }); - - it('returns default package name with params', () => { - expect(presets.parsePreset(':group(packages/eslint, eslint)')).toEqual({ - repo: 'default', - params: ['packages/eslint', 'eslint'], - presetName: 'group', - presetPath: undefined, - presetSource: 'internal', - }); - }); - - // scoped namespace - it('returns simple scope', () => { - expect(presets.parsePreset('@somescope')).toEqual({ - repo: '@somescope/renovate-config', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns simple scope and params', () => { - expect(presets.parsePreset('@somescope(param1)')).toEqual({ - repo: '@somescope/renovate-config', - params: ['param1'], - presetName: 'default', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with repo and default', () => { - expect(presets.parsePreset('@somescope/somepackagename')).toEqual({ - repo: '@somescope/somepackagename', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with repo and params and default', () => { - expect( - presets.parsePreset( - '@somescope/somepackagename(param1, param2, param3)', - ), - ).toEqual({ - repo: '@somescope/somepackagename', - params: ['param1', 'param2', 'param3'], - presetName: 'default', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with presetName', () => { - expect(presets.parsePreset('@somescope:somePresetName')).toEqual({ - repo: '@somescope/renovate-config', - params: undefined, - presetName: 'somePresetName', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with presetName and params', () => { - expect(presets.parsePreset('@somescope:somePresetName(param1)')).toEqual({ - repo: '@somescope/renovate-config', - params: ['param1'], - presetName: 'somePresetName', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with repo and presetName', () => { - expect( - presets.parsePreset('@somescope/somepackagename:somePresetName'), - ).toEqual({ - repo: '@somescope/somepackagename', - params: undefined, - presetName: 'somePresetName', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns scope with repo and presetName and params', () => { - expect( - presets.parsePreset( - '@somescope/somepackagename:somePresetName(param1, param2)', - ), - ).toEqual({ - repo: '@somescope/somepackagename', - params: ['param1', 'param2'], - presetName: 'somePresetName', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - // non-scoped namespace - it('returns non-scoped default', () => { - expect(presets.parsePreset('somepackage')).toEqual({ - repo: 'renovate-config-somepackage', - params: undefined, - presetName: 'default', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns non-scoped package name', () => { - expect(presets.parsePreset('somepackage:webapp')).toEqual({ - repo: 'renovate-config-somepackage', - params: undefined, - presetName: 'webapp', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('returns non-scoped package name full', () => { - expect(presets.parsePreset('renovate-config-somepackage:webapp')).toEqual( - { - repo: 'renovate-config-somepackage', - params: undefined, - presetName: 'webapp', - presetPath: undefined, - presetSource: 'npm', - }, - ); - }); - - it('returns non-scoped package name with params', () => { - expect(presets.parsePreset('somepackage:webapp(param1)')).toEqual({ - repo: 'renovate-config-somepackage', - params: ['param1'], - presetName: 'webapp', - presetPath: undefined, - presetSource: 'npm', - }); - }); - - it('parses HTTPS URLs', () => { - expect( - presets.parsePreset( - 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', - ), - ).toEqual({ - repo: 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', - params: undefined, - presetName: '', - presetPath: undefined, - presetSource: 'http', - }); - }); - - it('parses HTTP URLs', () => { - expect( - presets.parsePreset( - 'http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain', - ), - ).toEqual({ - repo: 'http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain', - params: undefined, - presetName: '', - presetPath: undefined, - presetSource: 'http', - }); - }); - - it('parses HTTPS URLs with parameters', () => { - expect( - presets.parsePreset( - 'https://my.server/gitea/renovate-config/raw/branch/main/default.json(param1)', - ), - ).toEqual({ - repo: 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', - params: ['param1'], - presetName: '', - presetPath: undefined, - presetSource: 'http', - }); - }); - }); - describe('getPreset', () => { it('handles removed presets with a migration', async () => { const res = await presets.getPreset(':base', {}); diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 9a96ed1f6f5aab..349db47089fe75 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -24,7 +24,8 @@ import * as http from './http'; import * as internal from './internal'; import * as local from './local'; import * as npm from './npm'; -import type { ParsedPreset, Preset, PresetApi } from './types'; +import { parsePreset } from './parse'; +import type { Preset, PresetApi } from './types'; import { PRESET_DEP_NOT_FOUND, PRESET_INVALID, @@ -46,13 +47,6 @@ const presetSources: Record = { const presetCacheNamespace = 'preset'; -const nonScopedPresetWithSubdirRegex = regEx( - /^(?~?[\w\-. /]+?)\/\/(?:(?[\w\-./]+)\/)?(?[\w\-.]+)(?:#(?[\w\-./]+?))?$/, -); -const gitPresetRegex = regEx( - /^(?~?[\w\-. /]+)(?::(?[\w\-.+/]+))?(?:#(?[\w\-./]+?))?$/, -); - export function replaceArgs( obj: string, argMapping: Record, @@ -105,120 +99,6 @@ export function replaceArgs( return obj; } -export function parsePreset(input: string): ParsedPreset { - let str = input; - let presetSource: string | undefined; - let presetPath: string | undefined; - let repo: string; - let presetName: string; - let tag: string | undefined; - let params: string[] | undefined; - if (str.startsWith('github>')) { - presetSource = 'github'; - str = str.substring('github>'.length); - } else if (str.startsWith('gitlab>')) { - presetSource = 'gitlab'; - str = str.substring('gitlab>'.length); - } else if (str.startsWith('gitea>')) { - presetSource = 'gitea'; - str = str.substring('gitea>'.length); - } else if (str.startsWith('local>')) { - presetSource = 'local'; - str = str.substring('local>'.length); - } else if (str.startsWith('http://') || str.startsWith('https://')) { - presetSource = 'http'; - } else if ( - !str.startsWith('@') && - !str.startsWith(':') && - str.includes('/') - ) { - presetSource = 'local'; - } - str = str.replace(regEx(/^npm>/), ''); - presetSource = presetSource ?? 'npm'; - if (str.includes('(')) { - params = str - .slice(str.indexOf('(') + 1, -1) - .split(',') - .map((elem) => elem.trim()); - str = str.slice(0, str.indexOf('(')); - } - if (presetSource === 'http') { - return { presetSource, repo: str, presetName: '', params }; - } - const presetsPackages = [ - 'compatibility', - 'config', - 'customManagers', - 'default', - 'docker', - 'group', - 'helpers', - 'mergeConfidence', - 'monorepo', - 'npm', - 'packages', - 'preview', - 'replacements', - 'schedule', - 'security', - 'workarounds', - ]; - if ( - presetsPackages.some((presetPackage) => str.startsWith(`${presetPackage}:`)) - ) { - presetSource = 'internal'; - [repo, presetName] = str.split(':'); - } else if (str.startsWith(':')) { - // default namespace - presetSource = 'internal'; - repo = 'default'; - presetName = str.slice(1); - } else if (str.startsWith('@')) { - // scoped namespace - [, repo] = regEx(/(@.*?)(:|$)/).exec(str)!; - str = str.slice(repo.length); - if (!repo.includes('/')) { - repo += '/renovate-config'; - } - if (str === '') { - presetName = 'default'; - } else { - presetName = str.slice(1); - } - } else if (str.includes('//')) { - // non-scoped namespace with a subdirectory preset - - // Validation - if (str.includes(':')) { - throw new Error(PRESET_PROHIBITED_SUBPRESET); - } - if (!nonScopedPresetWithSubdirRegex.test(str)) { - throw new Error(PRESET_INVALID); - } - ({ repo, presetPath, presetName, tag } = - nonScopedPresetWithSubdirRegex.exec(str)!.groups!); - } else { - ({ repo, presetName, tag } = gitPresetRegex.exec(str)!.groups!); - - if (presetSource === 'npm' && !repo.startsWith('renovate-config-')) { - repo = `renovate-config-${repo}`; - } - if (!is.nonEmptyString(presetName)) { - presetName = 'default'; - } - } - - return { - presetSource, - presetPath, - repo, - presetName, - tag, - params, - }; -} - export async function getPreset( preset: string, baseConfig?: RenovateConfig, diff --git a/lib/config/presets/parse.spec.ts b/lib/config/presets/parse.spec.ts new file mode 100644 index 00000000000000..76cd8ddcee47c0 --- /dev/null +++ b/lib/config/presets/parse.spec.ts @@ -0,0 +1,462 @@ +import { parsePreset } from './parse'; + +describe('config/presets/parse', () => { + describe('parsePreset', () => { + // default namespace + it('returns default package name', () => { + expect(parsePreset(':base')).toEqual({ + repo: 'default', + params: undefined, + presetName: 'base', + presetPath: undefined, + presetSource: 'internal', + }); + }); + + it('parses github', () => { + expect(parsePreset('github>some/repo')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('handles special chars', () => { + expect(parsePreset('github>some/repo:foo+bar')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'foo+bar', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('parses github subfiles', () => { + expect(parsePreset('github>some/repo:somefile')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('parses github subfiles with preset name', () => { + expect(parsePreset('github>some/repo:somefile/somepreset')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile/somepreset', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('parses github file with preset name with .json extension', () => { + expect(parsePreset('github>some/repo:somefile.json')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile.json', + presetPath: undefined, + presetSource: 'github', + tag: undefined, + }); + }); + + it('parses github file with preset name with .json5 extension', () => { + expect(parsePreset('github>some/repo:somefile.json5')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile.json5', + presetPath: undefined, + presetSource: 'github', + tag: undefined, + }); + }); + + it('parses github subfiles with preset name with .json extension', () => { + expect(parsePreset('github>some/repo:somefile.json/somepreset')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile.json/somepreset', + presetPath: undefined, + presetSource: 'github', + tag: undefined, + }); + }); + + it('parses github subfiles with preset name with .json5 extension', () => { + expect(parsePreset('github>some/repo:somefile.json5/somepreset')).toEqual( + { + repo: 'some/repo', + params: undefined, + presetName: 'somefile.json5/somepreset', + presetPath: undefined, + presetSource: 'github', + tag: undefined, + }, + ); + }); + + it('parses github subfiles with preset and sub-preset name', () => { + expect( + parsePreset('github>some/repo:somefile/somepreset/somesubpreset'), + ).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile/somepreset/somesubpreset', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('parses github subdirectories', () => { + expect( + parsePreset('github>some/repo//somepath/somesubpath/somefile'), + ).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile', + presetPath: 'somepath/somesubpath', + presetSource: 'github', + }); + }); + + it('parses github toplevel file using subdirectory syntax', () => { + expect(parsePreset('github>some/repo//somefile')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'somefile', + presetPath: undefined, + presetSource: 'github', + }); + }); + + it('parses gitlab', () => { + expect(parsePreset('gitlab>some/repo')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'gitlab', + }); + }); + + it('parses gitea', () => { + expect(parsePreset('gitea>some/repo')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'gitea', + }); + }); + + it('parses local', () => { + expect(parsePreset('local>some/repo')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'local', + }); + }); + + it('parses local with spaces', () => { + expect(parsePreset('local>A2B CD/A2B_Renovate')).toEqual({ + repo: 'A2B CD/A2B_Renovate', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'local', + }); + }); + + it('parses local with subdirectory', () => { + expect( + parsePreset('local>some-group/some-repo//some-dir/some-file'), + ).toEqual({ + repo: 'some-group/some-repo', + params: undefined, + presetName: 'some-file', + presetPath: 'some-dir', + presetSource: 'local', + }); + }); + + it('parses local with spaces and subdirectory', () => { + expect( + parsePreset('local>A2B CD/A2B_Renovate//some-dir/some-file'), + ).toEqual({ + repo: 'A2B CD/A2B_Renovate', + params: undefined, + presetName: 'some-file', + presetPath: 'some-dir', + presetSource: 'local', + }); + }); + + it('parses local with sub preset and tag', () => { + expect( + parsePreset('local>some-group/some-repo:some-file/subpreset#1.2.3'), + ).toEqual({ + repo: 'some-group/some-repo', + params: undefined, + presetName: 'some-file/subpreset', + presetPath: undefined, + presetSource: 'local', + tag: '1.2.3', + }); + }); + + it('parses local with subdirectory and tag', () => { + expect( + parsePreset('local>some-group/some-repo//some-dir/some-file#1.2.3'), + ).toEqual({ + repo: 'some-group/some-repo', + params: undefined, + presetName: 'some-file', + presetPath: 'some-dir', + presetSource: 'local', + tag: '1.2.3', + }); + }); + + it('parses local with subdirectory and branch/tag with a slash', () => { + expect( + parsePreset('local>PROJECT/repository//path/to/preset#feature/branch'), + ).toEqual({ + repo: 'PROJECT/repository', + params: undefined, + presetName: 'preset', + presetPath: 'path/to', + presetSource: 'local', + tag: 'feature/branch', + }); + }); + + it('parses local with sub preset and branch/tag with a slash', () => { + expect( + parsePreset('local>PROJECT/repository:preset/subpreset#feature/branch'), + ).toEqual({ + repo: 'PROJECT/repository', + params: undefined, + presetName: 'preset/subpreset', + presetPath: undefined, + presetSource: 'local', + tag: 'feature/branch', + }); + }); + + it('parses no prefix as local', () => { + expect(parsePreset('some/repo')).toEqual({ + repo: 'some/repo', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'local', + }); + }); + + it('parses local Bitbucket user repo with preset name', () => { + expect(parsePreset('local>~john_doe/repo//somefile')).toEqual({ + repo: '~john_doe/repo', + params: undefined, + presetName: 'somefile', + presetPath: undefined, + presetSource: 'local', + }); + }); + + it('parses local Bitbucket user repo', () => { + expect(parsePreset('local>~john_doe/renovate-config')).toEqual({ + repo: '~john_doe/renovate-config', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'local', + }); + }); + + it('returns default package name with params', () => { + expect(parsePreset(':group(packages/eslint, eslint)')).toEqual({ + repo: 'default', + params: ['packages/eslint', 'eslint'], + presetName: 'group', + presetPath: undefined, + presetSource: 'internal', + }); + }); + + // scoped namespace + it('returns simple scope', () => { + expect(parsePreset('@somescope')).toEqual({ + repo: '@somescope/renovate-config', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns simple scope and params', () => { + expect(parsePreset('@somescope(param1)')).toEqual({ + repo: '@somescope/renovate-config', + params: ['param1'], + presetName: 'default', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with repo and default', () => { + expect(parsePreset('@somescope/somepackagename')).toEqual({ + repo: '@somescope/somepackagename', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with repo and params and default', () => { + expect( + parsePreset('@somescope/somepackagename(param1, param2, param3)'), + ).toEqual({ + repo: '@somescope/somepackagename', + params: ['param1', 'param2', 'param3'], + presetName: 'default', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with presetName', () => { + expect(parsePreset('@somescope:somePresetName')).toEqual({ + repo: '@somescope/renovate-config', + params: undefined, + presetName: 'somePresetName', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with presetName and params', () => { + expect(parsePreset('@somescope:somePresetName(param1)')).toEqual({ + repo: '@somescope/renovate-config', + params: ['param1'], + presetName: 'somePresetName', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with repo and presetName', () => { + expect(parsePreset('@somescope/somepackagename:somePresetName')).toEqual({ + repo: '@somescope/somepackagename', + params: undefined, + presetName: 'somePresetName', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns scope with repo and presetName and params', () => { + expect( + parsePreset( + '@somescope/somepackagename:somePresetName(param1, param2)', + ), + ).toEqual({ + repo: '@somescope/somepackagename', + params: ['param1', 'param2'], + presetName: 'somePresetName', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + // non-scoped namespace + it('returns non-scoped default', () => { + expect(parsePreset('somepackage')).toEqual({ + repo: 'renovate-config-somepackage', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns non-scoped package name', () => { + expect(parsePreset('somepackage:webapp')).toEqual({ + repo: 'renovate-config-somepackage', + params: undefined, + presetName: 'webapp', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns non-scoped package name full', () => { + expect(parsePreset('renovate-config-somepackage:webapp')).toEqual({ + repo: 'renovate-config-somepackage', + params: undefined, + presetName: 'webapp', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('returns non-scoped package name with params', () => { + expect(parsePreset('somepackage:webapp(param1)')).toEqual({ + repo: 'renovate-config-somepackage', + params: ['param1'], + presetName: 'webapp', + presetPath: undefined, + presetSource: 'npm', + }); + }); + + it('parses HTTPS URLs', () => { + expect( + parsePreset( + 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', + ), + ).toEqual({ + repo: 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', + params: undefined, + presetName: '', + presetPath: undefined, + presetSource: 'http', + }); + }); + + it('parses HTTP URLs', () => { + expect( + parsePreset( + 'http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain', + ), + ).toEqual({ + repo: 'http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain', + params: undefined, + presetName: '', + presetPath: undefined, + presetSource: 'http', + }); + }); + + it('parses HTTPS URLs with parameters', () => { + expect( + parsePreset( + 'https://my.server/gitea/renovate-config/raw/branch/main/default.json(param1)', + ), + ).toEqual({ + repo: 'https://my.server/gitea/renovate-config/raw/branch/main/default.json', + params: ['param1'], + presetName: '', + presetPath: undefined, + presetSource: 'http', + }); + }); + }); +}); diff --git a/lib/config/presets/parse.ts b/lib/config/presets/parse.ts new file mode 100644 index 00000000000000..09ac031b26ce9e --- /dev/null +++ b/lib/config/presets/parse.ts @@ -0,0 +1,125 @@ +import is from '@sindresorhus/is'; +import { regEx } from '../../util/regex'; +import type { ParsedPreset } from './types'; +import { PRESET_INVALID, PRESET_PROHIBITED_SUBPRESET } from './util'; + +const nonScopedPresetWithSubdirRegex = regEx( + /^(?~?[\w\-. /]+?)\/\/(?:(?[\w\-./]+)\/)?(?[\w\-.]+)(?:#(?[\w\-./]+?))?$/, +); +const gitPresetRegex = regEx( + /^(?~?[\w\-. /]+)(?::(?[\w\-.+/]+))?(?:#(?[\w\-./]+?))?$/, +); + +export function parsePreset(input: string): ParsedPreset { + let str = input; + let presetSource: string | undefined; + let presetPath: string | undefined; + let repo: string; + let presetName: string; + let tag: string | undefined; + let params: string[] | undefined; + if (str.startsWith('github>')) { + presetSource = 'github'; + str = str.substring('github>'.length); + } else if (str.startsWith('gitlab>')) { + presetSource = 'gitlab'; + str = str.substring('gitlab>'.length); + } else if (str.startsWith('gitea>')) { + presetSource = 'gitea'; + str = str.substring('gitea>'.length); + } else if (str.startsWith('local>')) { + presetSource = 'local'; + str = str.substring('local>'.length); + } else if (str.startsWith('http://') || str.startsWith('https://')) { + presetSource = 'http'; + } else if ( + !str.startsWith('@') && + !str.startsWith(':') && + str.includes('/') + ) { + presetSource = 'local'; + } + str = str.replace(regEx(/^npm>/), ''); + presetSource = presetSource ?? 'npm'; + if (str.includes('(')) { + params = str + .slice(str.indexOf('(') + 1, -1) + .split(',') + .map((elem) => elem.trim()); + str = str.slice(0, str.indexOf('(')); + } + if (presetSource === 'http') { + return { presetSource, repo: str, presetName: '', params }; + } + const presetsPackages = [ + 'compatibility', + 'config', + 'customManagers', + 'default', + 'docker', + 'group', + 'helpers', + 'mergeConfidence', + 'monorepo', + 'npm', + 'packages', + 'preview', + 'replacements', + 'schedule', + 'security', + 'workarounds', + ]; + if ( + presetsPackages.some((presetPackage) => str.startsWith(`${presetPackage}:`)) + ) { + presetSource = 'internal'; + [repo, presetName] = str.split(':'); + } else if (str.startsWith(':')) { + // default namespace + presetSource = 'internal'; + repo = 'default'; + presetName = str.slice(1); + } else if (str.startsWith('@')) { + // scoped namespace + [, repo] = regEx(/(@.*?)(:|$)/).exec(str)!; + str = str.slice(repo.length); + if (!repo.includes('/')) { + repo += '/renovate-config'; + } + if (str === '') { + presetName = 'default'; + } else { + presetName = str.slice(1); + } + } else if (str.includes('//')) { + // non-scoped namespace with a subdirectory preset + + // Validation + if (str.includes(':')) { + throw new Error(PRESET_PROHIBITED_SUBPRESET); + } + if (!nonScopedPresetWithSubdirRegex.test(str)) { + throw new Error(PRESET_INVALID); + } + ({ repo, presetPath, presetName, tag } = + nonScopedPresetWithSubdirRegex.exec(str)!.groups!); + } else { + ({ repo, presetName, tag } = gitPresetRegex.exec(str)!.groups!); + + if (presetSource === 'npm' && !repo.startsWith('renovate-config-')) { + repo = `renovate-config-${repo}`; + } + if (!is.nonEmptyString(presetName)) { + presetName = 'default'; + } + } + + return { + presetSource, + presetPath, + repo, + presetName, + tag, + params, + }; +} From a6863f6f864a32bb03deb2428de926b848502c3e Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 11 Dec 2024 17:39:07 +0100 Subject: [PATCH 69/73] docs: update mend renovate logos (#33042) --- docs/usage/assets/images/logo.png | Bin 5633 -> 15381 bytes docs/usage/index.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/assets/images/logo.png b/docs/usage/assets/images/logo.png index a3a15bb491e4cb8421cbee9ff274f2f5cc34cbd7..2fdfe9aa25f3af01da649d692d619d290508402c 100644 GIT binary patch literal 15381 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 literal 5633 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 Date: Wed, 11 Dec 2024 16:55:01 +0000 Subject: [PATCH 70/73] build(deps): update dependency graph-data-structure to v4.3.0 (#33045) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index a9c90c9430cc40..9cf6ce4663a374 100644 --- a/package.json +++ b/package.json @@ -205,7 +205,7 @@ "good-enough-parser": "1.1.23", "google-auth-library": "9.15.0", "got": "11.8.6", - "graph-data-structure": "4.2.0", + "graph-data-structure": "4.3.0", "handlebars": "4.7.8", "ignore": "6.0.2", "ini": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a16b2ee8e0fd5a..cad4467a48c0ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -198,8 +198,8 @@ importers: specifier: 11.8.6 version: 11.8.6 graph-data-structure: - specifier: 4.2.0 - version: 4.2.0 + specifier: 4.3.0 + version: 4.3.0 handlebars: specifier: 4.7.8 version: 4.7.8 @@ -3641,8 +3641,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graph-data-structure@4.2.0: - resolution: {integrity: sha512-DFGyFROTYJAXwLjBPvj6LYihF2zIUDKt6Rzgo18E+FFKtHm7dJnE/bMHVp6fji5IchykUg3ctS9gwS0L5azwDw==} + graph-data-structure@4.3.0: + resolution: {integrity: sha512-rj0SZL3BLXHGZ/K6+Mw0PNrPu+x0uvHukr5dN/10u4Z77ROz5D+D66R+a3X9yZqJKVDcg/fN1FM5NfMX18ErAQ==} grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -10545,7 +10545,7 @@ snapshots: graceful-fs@4.2.11: {} - graph-data-structure@4.2.0: {} + graph-data-structure@4.3.0: {} grapheme-splitter@1.0.4: {} From 3d88c97b55760bfe7e6299ec3b5a81880e1b1a28 Mon Sep 17 00:00:00 2001 From: sandr01d <88739791+sandr01d@users.noreply.github.com> Date: Wed, 11 Dec 2024 20:05:04 +0100 Subject: [PATCH 71/73] fix(presets): typo in utoipa monorepo (#33047) --- lib/data/monorepo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index 9102067b8566da..0d038bbafa237f 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -546,7 +546,7 @@ "unhead": "https://github.com/unjs/unhead", "unocss": "https://github.com/unocss/unocss", "uppy": "https://github.com/transloadit/uppy", - "utopia": "https://github.com/juhaku/utoipa", + "utoipa": "https://github.com/juhaku/utoipa", "vaadin-hilla": "https://github.com/vaadin/hilla", "vaadinWebComponents": "https://github.com/vaadin/web-components", "visx": "https://github.com/airbnb/visx", From 73ad9627e7ee59b1f56743221bd953e5066c28d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 21:14:07 +0000 Subject: [PATCH 72/73] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v13.4.0 (#33048) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 412efac2ee10fa..3c2f85da2579fa 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:13.3.0 +FROM ghcr.io/containerbase/devcontainer:13.4.0 From 55e9703f1f395ab7243c5c9da2f897c59263458c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 21:14:15 +0000 Subject: [PATCH 73/73] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v13.4.0 (#33049) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- lib/config/options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 9a0307571abe94..b74c49d23e9c87 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:13.3.0', + default: 'ghcr.io/containerbase/sidecar:13.4.0', globalOnly: true, }, {