From 27c9384d981b1ef435d19ab2337cd183b1f11c43 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 13:51:09 +0000 Subject: [PATCH 001/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.0 (#28796) 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 d253b36e228941..9d6554b8427ba5 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.5.2 +FROM ghcr.io/containerbase/devcontainer:10.6.0 From 0fb635237dbe7a3ed33c1f90f51361e446f0fb4e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 13:51:15 +0000 Subject: [PATCH 002/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.6.1 (#28795) 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 1b2b0b3e6136c6..885ef21233e432 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.6.0@sha256:dc6b76f9cc43878f68cf484253296b23969b7ea425390b17b9506982960e05dd AS slim-base +FROM ghcr.io/renovatebot/base-image:2.6.1@sha256:96475b81a5496e231bfbb0de771f8d77e6eb41f8f169f6bbb9c923ed2a8891d1 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.6.0-full@sha256:e0926c6ae059dc53551d28f9cf06d457631ac7175ab86ba2cf1288eec504917a AS full-base +FROM ghcr.io/renovatebot/base-image:2.6.1-full@sha256:8bcfa00aca0c985a45bb99207202001baad8ddf7fa49b2348945fc99e3426c98 AS full-base # -------------------------------------- # build image From 9a2015ed20dc77f49779a3280fcc2d3a96132b3f Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 2 May 2024 20:41:12 +0200 Subject: [PATCH 003/172] feat(manager/devcontainer): add `depType` and disable `pinDigests` for features (#28792) --- lib/modules/manager/devcontainer/extract.spec.ts | 10 ++++++++++ lib/modules/manager/devcontainer/extract.ts | 3 +++ 2 files changed, 13 insertions(+) diff --git a/lib/modules/manager/devcontainer/extract.spec.ts b/lib/modules/manager/devcontainer/extract.spec.ts index 1dc7cefbb05089..3cd12745ed673f 100644 --- a/lib/modules/manager/devcontainer/extract.spec.ts +++ b/lib/modules/manager/devcontainer/extract.spec.ts @@ -54,6 +54,8 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '1.2.3', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/features/first', + depType: 'feature', + pinDigests: false, replaceString: 'devcontainer.registry.renovate.com/test/features/first:1.2.3', }, @@ -64,6 +66,8 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '4.5.6', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/features/second', + depType: 'feature', + pinDigests: false, replaceString: 'devcontainer.registry.renovate.com/test/features/second:4.5.6', }, @@ -99,6 +103,7 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '1.2.3', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/image', + depType: 'image', replaceString: 'devcontainer.registry.renovate.com/test/image:1.2.3', }, @@ -109,6 +114,8 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '4.5.6', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/feature', + depType: 'feature', + pinDigests: false, replaceString: 'devcontainer.registry.renovate.com/test/feature:4.5.6', }, @@ -140,6 +147,7 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '1.2.3', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/image', + depType: 'image', replaceString: 'devcontainer.registry.renovate.com/test/image:1.2.3', }, @@ -302,6 +310,8 @@ describe('modules/manager/devcontainer/extract', () => { currentValue: '1.2.3', datasource: 'docker', depName: 'devcontainer.registry.renovate.com/test/feature', + depType: 'feature', + pinDigests: false, replaceString: 'devcontainer.registry.renovate.com/test/feature:1.2.3', }, diff --git a/lib/modules/manager/devcontainer/extract.ts b/lib/modules/manager/devcontainer/extract.ts index 732fe54911d719..489563507a8214 100644 --- a/lib/modules/manager/devcontainer/extract.ts +++ b/lib/modules/manager/devcontainer/extract.ts @@ -21,6 +21,7 @@ export function extractPackageFile( const imageDep = getDep(image, packageFile, extractConfig.registryAliases); if (imageDep) { + imageDep.depType = 'image'; deps.push(imageDep); } else { logger.trace( @@ -39,6 +40,8 @@ export function extractPackageFile( extractConfig.registryAliases, ); if (featureDep) { + featureDep.depType = 'feature'; + featureDep.pinDigests = false; deps.push(featureDep); continue; } From bc44d297519747cbbb84c82575a6b8b14c3e6da9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 18:53:15 +0000 Subject: [PATCH 004/172] build(deps): update dependency lru-cache to v10.2.1 (#28799) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 2579802408658a..7d175dbaa3853b 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "json5": "2.2.3", "jsonata": "2.0.4", "klona": "2.0.6", - "lru-cache": "10.2.0", + "lru-cache": "10.2.1", "luxon": "3.4.4", "markdown-it": "14.1.0", "markdown-table": "2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 777ae5685553ed..97ba8426327dfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,8 +216,8 @@ importers: specifier: 2.0.6 version: 2.0.6 lru-cache: - specifier: 10.2.0 - version: 10.2.0 + specifier: 10.2.1 + version: 10.2.1 luxon: specifier: 3.4.4 version: 3.4.4 @@ -4199,8 +4199,8 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + lru-cache@10.2.1: + resolution: {integrity: sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==} engines: {node: 14 || >=16.14} lru-cache@5.1.1: @@ -7255,7 +7255,7 @@ snapshots: agent-base: 7.1.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 - lru-cache: 10.2.0 + lru-cache: 10.2.1 socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -8883,7 +8883,7 @@ snapshots: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 glob: 10.3.12 - lru-cache: 10.2.0 + lru-cache: 10.2.1 minipass: 7.0.4 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -10108,7 +10108,7 @@ snapshots: hosted-git-info@7.0.1: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.1 html-escaper@2.0.2: {} @@ -10944,7 +10944,7 @@ snapshots: lowercase-keys@2.0.0: {} - lru-cache@10.2.0: {} + lru-cache@10.2.1: {} lru-cache@5.1.1: dependencies: @@ -11602,7 +11602,7 @@ snapshots: path-scurry@1.10.2: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.1 minipass: 7.0.4 path-to-regexp@6.2.2: {} From 4fa890f9142c7306e06ee4b15719b660983f7ba4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 18:54:57 +0000 Subject: [PATCH 005/172] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v2.7.0 (#28802) 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 885ef21233e432..773e272e4c68e1 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.6.1@sha256:96475b81a5496e231bfbb0de771f8d77e6eb41f8f169f6bbb9c923ed2a8891d1 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.7.0@sha256:f3687a9024acb13d4bef5630ce4fbaabb18157f4d01b6419a078758177071b96 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.6.1-full@sha256:8bcfa00aca0c985a45bb99207202001baad8ddf7fa49b2348945fc99e3426c98 AS full-base +FROM ghcr.io/renovatebot/base-image:2.7.0-full@sha256:0bedd9cab10256ea57d1982e059331e4efad1fc257b1e91efc7cf49465c755c6 AS full-base # -------------------------------------- # build image From 6d253bdc0b4c78ddb6489b8aca492bbfff7ec14c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 18:55:05 +0000 Subject: [PATCH 006/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.0 (#28800) 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 c60300da0bc4b4..6360d41d592d5d 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -463,7 +463,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.5.2', + default: 'ghcr.io/containerbase/sidecar:10.6.0', globalOnly: true, }, { From 834ff0396bd36257c99c9d71dd4c682c0d6c6c4c Mon Sep 17 00:00:00 2001 From: Luke Young <91491244+lyoung-confluent@users.noreply.github.com> Date: Thu, 2 May 2024 12:03:25 -0700 Subject: [PATCH 007/172] feat(manager/helm-values): Add support for registryAliases (#28772) --- docs/usage/configuration-options.md | 1 + .../manager/helm-values/extract.spec.ts | 57 +++++++++++++++++-- lib/modules/manager/helm-values/extract.ts | 43 ++++++++------ 3 files changed, 80 insertions(+), 21 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 2397c16316a08e..5dd388664846c0 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3591,6 +3591,7 @@ This feature works with the following managers: - [`droneci`](modules/manager/droneci/index.md) - [`gitlabci`](modules/manager/gitlabci/index.md) - [`helm-requirements`](modules/manager/helm-requirements/index.md) +- [`helm-values`](modules/manager/helm-values/index.md) - [`helmfile`](modules/manager/helmfile/index.md) - [`helmv3`](modules/manager/helmv3/index.md) - [`kubernetes`](modules/manager/kubernetes/index.md) diff --git a/lib/modules/manager/helm-values/extract.spec.ts b/lib/modules/manager/helm-values/extract.spec.ts index d8eb805db86f7a..abab66d76f44e0 100644 --- a/lib/modules/manager/helm-values/extract.spec.ts +++ b/lib/modules/manager/helm-values/extract.spec.ts @@ -1,4 +1,6 @@ import { Fixtures } from '../../../../test/fixtures'; +import { partial } from '../../../../test/util'; +import type { ExtractConfig } from '../types'; import { extractPackageFile } from '.'; const helmDefaultChartInitValues = Fixtures.get( @@ -9,20 +11,34 @@ const helmMultiAndNestedImageValues = Fixtures.get( 'multi_and_nested_image_values.yaml', ); +const config = partial({}); + +const configAliases = partial({ + registryAliases: { + 'quay.io': 'registry.internal/mirror/quay.io', + }, +}); + +const packageFile = 'values.yaml'; + describe('modules/manager/helm-values/extract', () => { describe('extractPackageFile()', () => { it('returns null for invalid yaml file content', () => { - const result = extractPackageFile('nothing here: ['); + const result = extractPackageFile('nothing here: [', packageFile, config); expect(result).toBeNull(); }); it('returns null for empty yaml file content', () => { - const result = extractPackageFile(''); + const result = extractPackageFile('', packageFile, config); expect(result).toBeNull(); }); it('extracts from values.yaml correctly with same structure as "helm create"', () => { - const result = extractPackageFile(helmDefaultChartInitValues); + const result = extractPackageFile( + helmDefaultChartInitValues, + packageFile, + config, + ); expect(result).toMatchSnapshot({ deps: [ { @@ -34,7 +50,11 @@ describe('modules/manager/helm-values/extract', () => { }); it('extracts from complex values file correctly"', () => { - const result = extractPackageFile(helmMultiAndNestedImageValues); + const result = extractPackageFile( + helmMultiAndNestedImageValues, + packageFile, + config, + ); expect(result).toMatchSnapshot(); expect(result?.deps).toHaveLength(5); }); @@ -43,7 +63,7 @@ describe('modules/manager/helm-values/extract', () => { const multiDocumentFile = Fixtures.get( 'single_file_with_multiple_documents.yaml', ); - const result = extractPackageFile(multiDocumentFile); + const result = extractPackageFile(multiDocumentFile, packageFile, config); expect(result).toMatchObject({ deps: [ { @@ -61,5 +81,32 @@ describe('modules/manager/helm-values/extract', () => { ], }); }); + + it('extract data from file with registry aliases', () => { + const multiDocumentFile = Fixtures.get( + 'single_file_with_multiple_documents.yaml', + ); + const result = extractPackageFile( + multiDocumentFile, + packageFile, + configAliases, + ); + expect(result).toMatchObject({ + deps: [ + { + currentValue: 'v0.13.10', + depName: 'registry.internal/mirror/quay.io/metallb/controller', + datasource: 'docker', + versioning: 'docker', + }, + { + currentValue: 'v0.13.10', + depName: 'registry.internal/mirror/quay.io/metallb/speaker', + datasource: 'docker', + versioning: 'docker', + }, + ], + }); + }); }); }); diff --git a/lib/modules/manager/helm-values/extract.ts b/lib/modules/manager/helm-values/extract.ts index 61437fdbb79571..f4041420dd4445 100644 --- a/lib/modules/manager/helm-values/extract.ts +++ b/lib/modules/manager/helm-values/extract.ts @@ -2,23 +2,28 @@ import { logger } from '../../../logger'; import { parseYaml } from '../../../util/yaml'; import { id as dockerVersioning } from '../../versioning/docker'; import { getDep } from '../dockerfile/extract'; -import type { PackageDependency, PackageFileContent } from '../types'; +import type { + ExtractConfig, + PackageDependency, + PackageFileContent, +} from '../types'; import type { HelmDockerImageDependency } from './types'; import { matchesHelmValuesDockerHeuristic, matchesHelmValuesInlineImage, } from './util'; -function getHelmDep({ - registry, - repository, - tag, -}: { - registry: string; - repository: string; - tag: string; -}): PackageDependency { - const dep = getDep(`${registry}${repository}:${tag}`, false); +function getHelmDep( + registry: string, + repository: string, + tag: string, + config: ExtractConfig, +): PackageDependency { + const dep = getDep( + `${registry}${repository}:${tag}`, + false, + config.registryAliases, + ); dep.replaceString = tag; dep.versioning = dockerVersioning; dep.autoReplaceStringTemplate = @@ -34,6 +39,7 @@ function getHelmDep({ function findDependencies( parsedContent: Record | HelmDockerImageDependency, packageDependencies: Array, + config: ExtractConfig, ): Array { if (!parsedContent || typeof parsedContent !== 'object') { return packageDependencies; @@ -47,11 +53,15 @@ function findDependencies( registry = registry ? `${registry}/` : ''; const repository = String(currentItem.repository); const tag = `${currentItem.tag ?? currentItem.version}`; - packageDependencies.push(getHelmDep({ repository, tag, registry })); + packageDependencies.push(getHelmDep(registry, repository, tag, config)); } else if (matchesHelmValuesInlineImage(key, value)) { - packageDependencies.push(getDep(value)); + packageDependencies.push(getDep(value, true, config.registryAliases)); } else { - findDependencies(value as Record, packageDependencies); + findDependencies( + value as Record, + packageDependencies, + config, + ); } }); return packageDependencies; @@ -59,7 +69,8 @@ function findDependencies( export function extractPackageFile( content: string, - packageFile?: string, + packageFile: string, + config: ExtractConfig, ): PackageFileContent | null { let parsedContent: Record[] | HelmDockerImageDependency[]; try { @@ -75,7 +86,7 @@ export function extractPackageFile( const deps: PackageDependency>[] = []; for (const con of parsedContent) { - deps.push(...findDependencies(con, [])); + deps.push(...findDependencies(con, [], config)); } if (deps.length) { From f3f538985eec1daed79629528916023fb1863521 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 19:12:51 +0000 Subject: [PATCH 008/172] build(deps): update dependency lru-cache to v10.2.2 (#28803) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 7d175dbaa3853b..9d15ddfe0dc07e 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "json5": "2.2.3", "jsonata": "2.0.4", "klona": "2.0.6", - "lru-cache": "10.2.1", + "lru-cache": "10.2.2", "luxon": "3.4.4", "markdown-it": "14.1.0", "markdown-table": "2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 97ba8426327dfb..565130eb74d6cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,8 +216,8 @@ importers: specifier: 2.0.6 version: 2.0.6 lru-cache: - specifier: 10.2.1 - version: 10.2.1 + specifier: 10.2.2 + version: 10.2.2 luxon: specifier: 3.4.4 version: 3.4.4 @@ -4199,8 +4199,8 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lru-cache@10.2.1: - resolution: {integrity: sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==} + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} lru-cache@5.1.1: @@ -7255,7 +7255,7 @@ snapshots: agent-base: 7.1.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 - lru-cache: 10.2.1 + lru-cache: 10.2.2 socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -8883,7 +8883,7 @@ snapshots: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 glob: 10.3.12 - lru-cache: 10.2.1 + lru-cache: 10.2.2 minipass: 7.0.4 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -10108,7 +10108,7 @@ snapshots: hosted-git-info@7.0.1: dependencies: - lru-cache: 10.2.1 + lru-cache: 10.2.2 html-escaper@2.0.2: {} @@ -10944,7 +10944,7 @@ snapshots: lowercase-keys@2.0.0: {} - lru-cache@10.2.1: {} + lru-cache@10.2.2: {} lru-cache@5.1.1: dependencies: @@ -11602,7 +11602,7 @@ snapshots: path-scurry@1.10.2: dependencies: - lru-cache: 10.2.1 + lru-cache: 10.2.2 minipass: 7.0.4 path-to-regexp@6.2.2: {} From 23ab584e8d6042a2cd62ae248545fb1f5a59ac49 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 19:12:53 +0000 Subject: [PATCH 009/172] build(deps): update dependency @opentelemetry/instrumentation-bunyan to v0.38.0 (#28804) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 40 +++++++--------------------------------- 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 9d15ddfe0dc07e..d64fa0c47b16d1 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "@opentelemetry/context-async-hooks": "1.24.0", "@opentelemetry/exporter-trace-otlp-http": "0.51.0", "@opentelemetry/instrumentation": "0.51.0", - "@opentelemetry/instrumentation-bunyan": "0.37.0", + "@opentelemetry/instrumentation-bunyan": "0.38.0", "@opentelemetry/instrumentation-http": "0.51.0", "@opentelemetry/resources": "1.24.0", "@opentelemetry/sdk-trace-base": "1.24.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 565130eb74d6cc..37aa9f612b99d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: 0.51.0 version: 0.51.0(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation-bunyan': - specifier: 0.37.0 - version: 0.37.0(@opentelemetry/api@1.8.0) + specifier: 0.38.0 + version: 0.38.0(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation-http': specifier: 0.51.0 version: 0.51.0(@opentelemetry/api@1.8.0) @@ -1275,10 +1275,6 @@ packages: typescript: optional: true - '@opentelemetry/api-logs@0.50.0': - resolution: {integrity: sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==} - engines: {node: '>=14'} - '@opentelemetry/api-logs@0.51.0': resolution: {integrity: sha512-m/jtfBPEIXS1asltl8fPQtO3Sb1qMpuL61unQajUmM8zIxeMF1AlqzWXM3QedcYgTTFiJCew5uJjyhpmqhc0+g==} engines: {node: '>=14'} @@ -1305,8 +1301,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/instrumentation-bunyan@0.37.0': - resolution: {integrity: sha512-NKHuTIn1JrxfKZ8sVZjwT/bD3wyijkipiWzBvvxGj8pJJJNP5shVHWcEJhk5tQsfKQc4LproTAPdklex1o5/ag==} + '@opentelemetry/instrumentation-bunyan@0.38.0': + resolution: {integrity: sha512-ThNcgTE22W7PKzTzz5qfGxb5Gf7rA3EORousYo2nJWHHcF6gqiMNv2+GXY3MdpjLBr8IgCfhtvbQdD6rlIPUpA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -1317,12 +1313,6 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.50.0': - resolution: {integrity: sha512-bhGhbJiZKpuu7wTaSak4hyZcFPlnDeuSF/2vglze8B4w2LubcSbbOnkVTzTs5SXtzh4Xz8eRjaNnAm+u2GYufQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.51.0': resolution: {integrity: sha512-Eg/+Od5bEvzpvZQGhvMyKIkrzB9S7jW+6z9LHEI2VXhl/GrqQ3oBqlzJt4tA6pGtxRmqQWKWGM1wAbwDdW/gUA==} engines: {node: '>=14'} @@ -7353,10 +7343,6 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@opentelemetry/api-logs@0.50.0': - dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs@0.51.0': dependencies: '@opentelemetry/api': 1.8.0 @@ -7381,11 +7367,11 @@ snapshots: '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation-bunyan@0.37.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/instrumentation-bunyan@0.38.0(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.50.0 - '@opentelemetry/instrumentation': 0.50.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api-logs': 0.51.0 + '@opentelemetry/instrumentation': 0.51.0(@opentelemetry/api@1.8.0) '@types/bunyan': 1.8.9 transitivePeerDependencies: - supports-color @@ -7400,18 +7386,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.50.0(@opentelemetry/api@1.8.0)': - dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.50.0 - '@types/shimmer': 1.0.5 - import-in-the-middle: 1.7.1 - require-in-the-middle: 7.3.0 - semver: 7.6.0 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation@0.51.0(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 From 5dab77051240ccd7193f535c71b4dae0b06c3b3d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 03:31:46 +0000 Subject: [PATCH 010/172] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.0 (#28807) 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 773e272e4c68e1..267cd3ee04c4d2 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.7.0@sha256:f3687a9024acb13d4bef5630ce4fbaabb18157f4d01b6419a078758177071b96 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.0@sha256:c9bbc1f402526528d3f4919b24f1ffb18567d65cd66e9b2aeb1fd7bdfc130a26 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.7.0-full@sha256:0bedd9cab10256ea57d1982e059331e4efad1fc257b1e91efc7cf49465c755c6 AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.0-full@sha256:626cc367f81309b9831dfbb5178ecc0892e29d7aa74cf0ebf7a34b11a1928e55 AS full-base # -------------------------------------- # build image From dbd9da01b731a80ec1f655c14c7afd24a5941c48 Mon Sep 17 00:00:00 2001 From: Hikari Hayashi Date: Fri, 3 May 2024 12:57:27 +0800 Subject: [PATCH 011/172] feat(presets): use a more accurate rule for biomeVersions regex manager (#28806) --- lib/config/presets/internal/regex-managers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index 92419b4d243514..809956e1b1658a 100644 --- a/lib/config/presets/internal/regex-managers.ts +++ b/lib/config/presets/internal/regex-managers.ts @@ -9,9 +9,9 @@ export const presets: Record = { customType: 'regex', datasourceTemplate: 'npm', depNameTemplate: '@biomejs/biome', - fileMatch: ['^biome.json$'], + fileMatch: ['(^|/)biome.json$'], matchStrings: [ - 'https://biomejs.dev/schemas/(?.*)/schema.json', + '"https://biomejs.dev/schemas/(?[^"]+)/schema.json"', ], }, ], From fa4b22b588b88f17332882d10b680e8c35d9a766 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 05:10:12 +0000 Subject: [PATCH 012/172] chore(deps): update dependency better-sqlite3 to v9.6.0 (#28809) 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 d64fa0c47b16d1..35e15157a66b81 100644 --- a/package.json +++ b/package.json @@ -248,7 +248,7 @@ "zod": "3.23.4" }, "optionalDependencies": { - "better-sqlite3": "9.5.0", + "better-sqlite3": "9.6.0", "openpgp": "5.11.1", "re2": "1.20.10" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37aa9f612b99d9..f63693d96e202c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -322,8 +322,8 @@ importers: version: 3.23.4 optionalDependencies: better-sqlite3: - specifier: 9.5.0 - version: 9.5.0 + specifier: 9.6.0 + version: 9.6.0 openpgp: specifier: 5.11.1 version: 5.11.1 @@ -2396,8 +2396,8 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - better-sqlite3@9.5.0: - resolution: {integrity: sha512-01qVcM4gPNwE+PX7ARNiHINwzVuD6nx0gdldaAAcu+MrzyIAukQ31ZDKEpzRO/CNA9sHpxoTZ8rdjoyAin4dyg==} + better-sqlite3@9.6.0: + resolution: {integrity: sha512-yR5HATnqeYNVnkaUTf4bOP2dJSnyhP4puJN/QPRyx4YkBEEUxib422n2XzPqDEHjQQqazoYoADdAm5vE15+dAQ==} bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} @@ -8766,7 +8766,7 @@ snapshots: before-after-hook@2.2.3: {} - better-sqlite3@9.5.0: + better-sqlite3@9.6.0: dependencies: bindings: 1.5.0 prebuild-install: 7.1.2 From 290aea38899fa7348ce0f27b7ecdf772dc4d6adf Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Fri, 3 May 2024 09:14:55 +0200 Subject: [PATCH 013/172] feat(presets): add eslint-stylistic monorepo and add to eslint group (#28812) --- lib/config/presets/__snapshots__/index.spec.ts.snap | 3 +++ lib/config/presets/index.spec.ts | 8 +++++--- lib/config/presets/internal/monorepo.ts | 1 + lib/config/presets/internal/packages.ts | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap index 465f4aa032ac36..b3fac71cdca566 100644 --- a/lib/config/presets/__snapshots__/index.spec.ts.snap +++ b/lib/config/presets/__snapshots__/index.spec.ts.snap @@ -123,6 +123,7 @@ exports[`config/presets/index resolvePreset resolves eslint 1`] = ` ], "matchPackagePrefixes": [ "@eslint/", + "@stylistic/eslint-plugin", "@types/eslint__", "@typescript-eslint/", "eslint", @@ -154,6 +155,7 @@ exports[`config/presets/index resolvePreset resolves linters 1`] = ` "matchPackagePrefixes": [ "ember-template-lint", "@eslint/", + "@stylistic/eslint-plugin", "@types/eslint__", "@typescript-eslint/", "eslint", @@ -192,6 +194,7 @@ exports[`config/presets/index resolvePreset resolves nested groups 1`] = ` "matchPackagePrefixes": [ "ember-template-lint", "@eslint/", + "@stylistic/eslint-plugin", "@types/eslint__", "@typescript-eslint/", "eslint", diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 4edd8554de9a65..443cdc5d0a19cd 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -241,6 +241,7 @@ describe('config/presets/index', () => { ], matchPackagePrefixes: [ '@eslint/', + '@stylistic/eslint-plugin', '@types/eslint__', '@typescript-eslint/', 'eslint', @@ -268,6 +269,7 @@ describe('config/presets/index', () => { ], matchPackagePrefixes: [ '@eslint/', + '@stylistic/eslint-plugin', '@types/eslint__', '@typescript-eslint/', 'eslint', @@ -281,7 +283,7 @@ describe('config/presets/index', () => { config.extends = ['packages:eslint']; const res = await presets.resolveConfigPresets(config); expect(res).toMatchSnapshot(); - expect(res.matchPackagePrefixes).toHaveLength(4); + expect(res.matchPackagePrefixes).toHaveLength(5); }); it('resolves linters', async () => { @@ -290,7 +292,7 @@ describe('config/presets/index', () => { expect(res).toMatchSnapshot(); expect(res.matchPackageNames).toHaveLength(11); expect(res.matchPackagePatterns).toHaveLength(1); - expect(res.matchPackagePrefixes).toHaveLength(6); + expect(res.matchPackagePrefixes).toHaveLength(7); }); it('resolves nested groups', async () => { @@ -301,7 +303,7 @@ describe('config/presets/index', () => { expect(rule.automerge).toBeTrue(); expect(rule.matchPackageNames).toHaveLength(11); expect(rule.matchPackagePatterns).toHaveLength(1); - expect(rule.matchPackagePrefixes).toHaveLength(6); + expect(rule.matchPackagePrefixes).toHaveLength(7); }); it('migrates automerge in presets', async () => { diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index ccaadb73e3160f..2c2dbd9412ce79 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -279,6 +279,7 @@ const repoGroups = { emotion: 'https://github.com/emotion-js/emotion', 'eslint-config-globex': 'https://github.com/GlobexDesignsInc/eslint-config-globex', + 'eslint-stylistic': 'https://github.com/eslint-stylistic/eslint-stylistic', expo: 'https://github.com/expo/expo', 'fabric-chaincode-node': 'https://github.com/hyperledger/fabric-chaincode-node', diff --git a/lib/config/presets/internal/packages.ts b/lib/config/presets/internal/packages.ts index 64db951281c1fa..daac49f540fa31 100644 --- a/lib/config/presets/internal/packages.ts +++ b/lib/config/presets/internal/packages.ts @@ -29,6 +29,7 @@ export const presets: Record = { ], matchPackagePrefixes: [ '@eslint/', + '@stylistic/eslint-plugin', '@types/eslint__', '@typescript-eslint/', 'eslint', From 7d41ab34fc0ca403757e1d311b650d3d9d8a75a2 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Fri, 3 May 2024 10:40:25 +0200 Subject: [PATCH 014/172] chore(renovate): use `build` type for `optionalDependencies` (#28814) --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index c6474fec80068a..93bf4840930b37 100644 --- a/renovate.json +++ b/renovate.json @@ -14,7 +14,7 @@ "versioning": "node" }, { - "matchDepTypes": ["dependencies"], + "matchDepTypes": ["dependencies", "optionalDependencies"], "semanticCommitType": "build" }, { From 1976b57b1356a19b646f9ccd375c5de0470256a3 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Fri, 3 May 2024 13:22:04 +0200 Subject: [PATCH 015/172] feat(manager/kubernetes): strip go templates before parsing (#28816) --- lib/modules/manager/kubernetes/__fixtures__/configmap.yaml | 2 ++ lib/modules/manager/kubernetes/extract.ts | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/kubernetes/__fixtures__/configmap.yaml b/lib/modules/manager/kubernetes/__fixtures__/configmap.yaml index bc9ce8ca7c143c..ce016b7fb9db2d 100644 --- a/lib/modules/manager/kubernetes/__fixtures__/configmap.yaml +++ b/lib/modules/manager/kubernetes/__fixtures__/configmap.yaml @@ -1,3 +1,4 @@ +{- if .Values.configMap.enabled | default false } apiVersion: v1 kind: ConfigMap metadata: @@ -5,3 +6,4 @@ metadata: labels: app: nginx data: {} +{- end } diff --git a/lib/modules/manager/kubernetes/extract.ts b/lib/modules/manager/kubernetes/extract.ts index 3ecad886571adc..b596f4f3402662 100644 --- a/lib/modules/manager/kubernetes/extract.ts +++ b/lib/modules/manager/kubernetes/extract.ts @@ -71,7 +71,10 @@ function extractApis( try { // TODO: use schema (#9610) - doc = parseYaml(content); + doc = parseYaml(content, null, { + filename: packageFile, + removeTemplates: true, + }); } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse Kubernetes manifest.'); return []; From 0890617d57fe44ef719a4a555155844f2a024e2c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 11:34:14 +0000 Subject: [PATCH 016/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.1 (#28819) 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 267cd3ee04c4d2..50ee441360c812 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.0@sha256:c9bbc1f402526528d3f4919b24f1ffb18567d65cd66e9b2aeb1fd7bdfc130a26 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.1@sha256:bd5b73d7d4e004bd5c552d33a286684402e41e92c74a626133ca6e8035c29b08 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.0-full@sha256:626cc367f81309b9831dfbb5178ecc0892e29d7aa74cf0ebf7a34b11a1928e55 AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.1-full@sha256:21fba8c861ff06e3918eb2c0ae647667b0fc83a269c41e590efc4a188254a437 AS full-base # -------------------------------------- # build image From 9e34bd725835c4acd85449afd41ab50dbf42a819 Mon Sep 17 00:00:00 2001 From: Hikari Hayashi Date: Fri, 3 May 2024 20:16:51 +0800 Subject: [PATCH 017/172] fix(presets): respect biome.jsonc in the biomeVersions regex manager (#28821) --- lib/config/presets/internal/regex-managers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index 809956e1b1658a..3cfc679042d8a5 100644 --- a/lib/config/presets/internal/regex-managers.ts +++ b/lib/config/presets/internal/regex-managers.ts @@ -9,7 +9,7 @@ export const presets: Record = { customType: 'regex', datasourceTemplate: 'npm', depNameTemplate: '@biomejs/biome', - fileMatch: ['(^|/)biome.json$'], + fileMatch: ['(^|/)biome.jsonc?$'], matchStrings: [ '"https://biomejs.dev/schemas/(?[^"]+)/schema.json"', ], From 8fb6a457db37066642bd9f4f53d23e2dccb82d01 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 May 2024 15:02:07 +0200 Subject: [PATCH 018/172] fix(versioning/swift): support dependencies with v prefix tags (#28822) --- lib/modules/versioning/swift/index.spec.ts | 3 +++ lib/modules/versioning/swift/index.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/modules/versioning/swift/index.spec.ts b/lib/modules/versioning/swift/index.spec.ts index b1282c6a55a874..9052516ec57fba 100644 --- a/lib/modules/versioning/swift/index.spec.ts +++ b/lib/modules/versioning/swift/index.spec.ts @@ -15,6 +15,8 @@ describe('modules/versioning/swift/index', () => { version | expected ${'from: "1.2.3"'} | ${false} ${'1.2.3'} | ${true} + ${'v1.2.3'} | ${true} + ${'a'} | ${false} `('isVersion("$version") === $expected', ({ version, expected }) => { expect(!!isVersion(version)).toBe(expected); }); @@ -99,6 +101,7 @@ describe('modules/versioning/swift/index', () => { it.each` version | range | expected ${'1.2.3'} | ${'1.2.3'} | ${true} + ${'v1.2.3'} | ${'1.2.3'} | ${true} ${'1.2.4'} | ${'..."1.2.4"'} | ${true} ${'v1.2.4'} | ${'..."1.2.4"'} | ${true} ${'1.2.4'} | ${'..."1.2.3"'} | ${false} diff --git a/lib/modules/versioning/swift/index.ts b/lib/modules/versioning/swift/index.ts index a67d5699cc7678..93510c78eaab65 100644 --- a/lib/modules/versioning/swift/index.ts +++ b/lib/modules/versioning/swift/index.ts @@ -63,7 +63,7 @@ function isLessThanRange(version: string, range: string): boolean { function matches(version: string, range: string): boolean { // Check if both are an exact version - if (valid(range) && version === range) { + if (isVersion(range) && equals(version, range)) { return true; } const semverRange = toSemverRange(range); From b7a4bc7b0fcdff8776455925a4323e60204e81e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 15:56:53 +0000 Subject: [PATCH 019/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.2 (#28824) 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 50ee441360c812..564b0612abbb83 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.1@sha256:bd5b73d7d4e004bd5c552d33a286684402e41e92c74a626133ca6e8035c29b08 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.2@sha256:76d8b88b7806f4a8451380e833180d2df278e8f03901f9e36a2d5f882449252d AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.1-full@sha256:21fba8c861ff06e3918eb2c0ae647667b0fc83a269c41e590efc4a188254a437 AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.2-full@sha256:df2c1f9a2eca59c9e5e406cc7fba89e6f3274b499c5b7cc268270f61c7954d44 AS full-base # -------------------------------------- # build image From 6c55092991acb3efeb4333e55cbcad8854035818 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 18:44:34 +0000 Subject: [PATCH 020/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.3 (#28825) 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 564b0612abbb83..3e888d9eabe308 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.2@sha256:76d8b88b7806f4a8451380e833180d2df278e8f03901f9e36a2d5f882449252d AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.3@sha256:7b18182dba91fe1c68331ac0a958a648b181f147dc041adb99218cfb6f1b1319 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.2-full@sha256:df2c1f9a2eca59c9e5e406cc7fba89e6f3274b499c5b7cc268270f61c7954d44 AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.3-full@sha256:02a0637bf34805d8f18cae3f37ff5f1ea28a8fd49c32e6f89725e62846fbda02 AS full-base # -------------------------------------- # build image From 9b514c2da1edf1f934b0aee9d5121a9dee7434a3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 14:23:07 +0200 Subject: [PATCH 021/172] fix(cargo): default auto to update-lockfile (#28826) --- lib/modules/manager/cargo/range.spec.ts | 4 ++-- lib/modules/manager/cargo/range.ts | 2 +- lib/modules/manager/cargo/readme.md | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/modules/manager/cargo/range.spec.ts b/lib/modules/manager/cargo/range.spec.ts index 62c07b1389b2b3..d41d3e6cad3571 100644 --- a/lib/modules/manager/cargo/range.spec.ts +++ b/lib/modules/manager/cargo/range.spec.ts @@ -15,11 +15,11 @@ describe('modules/manager/cargo/range', () => { expect(getRangeStrategy(config)).toBe('widen'); }); - it('defaults to bump', () => { + it('defaults to update-lockfile', () => { const config: RangeConfig = { rangeStrategy: 'auto', currentValue: '1.0.0', }; - expect(getRangeStrategy(config)).toBe('bump'); + expect(getRangeStrategy(config)).toBe('update-lockfile'); }); }); diff --git a/lib/modules/manager/cargo/range.ts b/lib/modules/manager/cargo/range.ts index a04628d55c127d..fbfe99da61a6f7 100644 --- a/lib/modules/manager/cargo/range.ts +++ b/lib/modules/manager/cargo/range.ts @@ -11,5 +11,5 @@ export function getRangeStrategy({ if (currentValue?.includes('<')) { return 'widen'; } - return 'bump'; + return 'update-lockfile'; } diff --git a/lib/modules/manager/cargo/readme.md b/lib/modules/manager/cargo/readme.md index 46195044aebb2a..94baa4638720b7 100644 --- a/lib/modules/manager/cargo/readme.md +++ b/lib/modules/manager/cargo/readme.md @@ -3,7 +3,9 @@ Extracts dependencies from `Cargo.toml` files, and also updates `Cargo.lock` fil When using the default rangeStrategy=auto: - If a "less than" instruction is found (e.g. `<2`) then `rangeStrategy=widen` will be selected, -- Otherwise, `rangeStrategy=bump` will be selected. +- Otherwise, `rangeStrategy=update-lockfile` will be selected. + +The `update-lockfile` default means that most upgrades will update `Cargo.lock` files without the need to change the value in `Cargo.toml`. ### Private Modules Authentication From c0fede74dd6695fd853f59950a4c69eebaf7a29a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 14:24:24 +0200 Subject: [PATCH 022/172] docs: Create CODE_OF_CONDUCT.md (#28633) Co-authored-by: Sebastian Poxhofer Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- .github/contributing.md | 9 ---- .ls-lint.yml | 1 + CODE_OF_CONDUCT.md | 105 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 CODE_OF_CONDUCT.md diff --git a/.github/contributing.md b/.github/contributing.md index d041337e30d2fc..20bdc16f0416ae 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -21,15 +21,6 @@ If you want help with your Renovate configuration, go to the [discussions tab in For **feature requests**: first search for related requests in the issues and discussions, if you don't find anything: create a _discussion_. -## Rate Limiting of Support Requests through Temporary Blocking - -To ensure that the Renovate maintainers don't burn out from dealing with unfriendly behavior, those who display a bad attitude when asking for or receiving support in the repo will be rate limited from further requests through the use of temporary blocking. -The duration of the temporary block depends on how rude or inconsiderate the behavior is perceived to be, and can be from 1-30 days. - -If you have been blocked temporarily and believe that it is due to a misunderstanding, or you regret your comments and wish to make amends, please reach out to the lead maintainer Rhys Arkins by email with any request for early unblocking. -If/once you are unblocked, you should edit or delete whatever comment lead to the blocking, even if you did not intend it to be rude or inconsiderate. -Long emails or apologies are undesirable - the maintainers are busy and want to be able to help as many users as possible with the time they have available. - ## Code If you would like to fix a bug or work on a feature, please fork the repository and create a Pull Request. diff --git a/.ls-lint.yml b/.ls-lint.yml index bfa1b8661035a2..f6771f74f0e55f 100644 --- a/.ls-lint.yml +++ b/.ls-lint.yml @@ -12,6 +12,7 @@ ignore: - .git - .github/ISSUE_TEMPLATE - .github/pull_request_template.md + - CODE_OF_CONDUCT.md - dist - jest.config.ts - node_modules diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000000..c9c383579fbf77 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,105 @@ +# Code of Conduct + +To help us deliver great features and support the Renovate Open Source project we ask that you: + +- are polite +- pay attention to details +- keep in mind that most maintainers are volunteers +- are respectful of the time and effort of the maintainers + +## Our priorities + +We want to keep this project sustainable. +This means we support our maintainers and contributors, who spend their free time to help others. + +Maintainers getting stressed is a big threat to Open Source projects, like ours. +Stressed maintainers quit, or reduce their time spent on the project. +Often a few users behave badly, where most users are nice. + +We want to avoid maintainers getting stressed out by bad behavior from contributors. +That's why we have these rules. + +## Politeness + +Sadly, it's common in Open Source projects for a few users to behave in an aggressive and rude way. +A user might say something like: "You should have fixed this bug already!", or "Why am I still waiting for this feature?". +We do not allow this kind of behavior. + +We expect basic politeness, do not act rude. +For example: it is okay if you ask a question and do not thank us afterwards. +But avoid writing mean comments like: "Pity the documentation didn’t say that." or "Thanks for nothing.". + +## Respect the time of those who help you + +Respect goes both ways, but time is limited. +When you ask for help, please remember that the maintainer's time is valuable. +We get many questions each week and do our best to answer each one. +To get the help you need, please be prepared to give detailed logs or descriptions of your issues. +If you do not want to spend the effort giving us enough information, it's likely you will not get the help you need. + +Remember, most of the support provided by our team, including the Mend.io staff, is _unpaid_. + +## Blocking and unblocking + +We quickly deal with rudeness in the community with: + +- automated comments +- temporary blocks +- permanent bans + +If you keep breaking the rules or challenge our guidelines openly, you will be blocked. +For example: if you keep spamming the maintainers with `@mentions` or challenge our rules openly, you will be blocked. + +We generally do not argue about these decisions, but we are willing to reverse a block if a you show that you understand and respect the rules, or if there was a misunderstanding. +Please reach out to the project's lead maintainer Rhys Arkins by email if so (the shorter the better). + +Simply put: we block and unblock swiftly, what matters is how you follow the rules going forward. + +## How we prioritize work + +Renovate's core contributors and maintainers focus on work that: + +- Helps a lot of users, or +- Fixes regressions (errors introduced by recent changes), or +- Is required by a customer of Mend.io, or +- Is sponsored by third parties after independent validation, or +- We personally need or want to implement + +You may be disappointed when we focus on other work ahead of your feature or bug, but you should understand and accept this. + +## Maintaining Issue and Code quality + +We use GitHub Discussions to start and sort issues. +Only maintainers are allowed to create new issues. +If we confirm a bug or agree with a feature idea, and if it's well-documented, we will turn it into an official issue. +This way most issues are ready to work on, either by us or the community. + +We may reject ideas that are too specialized, or that would make the project too hard to maintain. + +We have strict coding standards and reviews to keep our code in good shape. +A feature or fix must of course work, but it must also be well designed to stay maintainable. +We may ask you to improve your code several times in a row, which can be difficult for you. +We only do this to keep the project sustainable. + +## If you have urgent work + +People working for big companies might push too hard in Open Source projects. +It’s often hard for them to understand that our maintainers cannot spend much time to solve their issues quickly. +Frequent requests for updates like "@rarkins how can we move this forward?" are _not_ helpful. + +Please remember, unless you are a Mend.io customer, this project does not owe you the level of response or support you might expect. +Mend.io customers should use their designated support channels for urgent needs. + +## Getting more help + +If you need more assistance than what this project offers, you have two options: + +1. Become a Mend.io customer, such as by buying Renovate Enterprise, or +1. Hire an experienced Renovate contributor privately for consulting. Mend.io staff do _not_ offer this service, but one of our volunteer maintainers, [`@secustor`](https://github.com/secustor), does + +## Feedback + +We welcome respectful discussions about these rules and accept suggestions that improve this text. +We avoid debates on social media or going off-topic in GitHub Discussions. + +Because we enforce all these rules, we can deliver new features and give excellent support to the community. From dc301be3096e0b4a0c30d812317aa9f698a5dfaf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 12:37:32 +0000 Subject: [PATCH 023/172] chore(deps): update dependency memfs to v4.9.1 (#28828) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 84 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 35e15157a66b81..705540614cc82c 100644 --- a/package.json +++ b/package.json @@ -331,7 +331,7 @@ "jest-mock-extended": "3.0.6", "jest-snapshot": "29.7.0", "markdownlint-cli2": "0.13.0", - "memfs": "4.8.2", + "memfs": "4.9.1", "nock": "13.5.4", "npm-run-all2": "6.1.2", "nyc": "15.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f63693d96e202c..435c5139f381f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -566,8 +566,8 @@ importers: specifier: 0.13.0 version: 0.13.0 memfs: - specifier: 4.8.2 - version: 4.8.2 + specifier: 4.9.1 + version: 4.9.1 nock: specifier: 13.5.4 version: 13.5.4 @@ -1162,6 +1162,24 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jsonjoy.com/base64@1.1.1': + resolution: {integrity: sha512-LnFjVChaGY8cZVMwAIMjvA1XwQjZ/zIXHyh28IyJkyNkzof4Dkm1+KN9UIm3lHhREH4vs7XwZ0NpkZKnwOtEfg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.0.3': + resolution: {integrity: sha512-Q0SPAdmK6s5Fe3e1kcNvwNyk6e2+CxM8XZdGbf4abZG7nUO05KSie3/iX29loTBuY+75uVP6RixDSPVpotfzmQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.1.2': + resolution: {integrity: sha512-HOGa9wtE6LEz2I5mMQ2pMSjth85PmD71kPbsecs02nEUq3/Kw0wRK3gmZn5BCEB8mFLXByqPxjHgApoMwIPMKQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -3543,6 +3561,10 @@ packages: engines: {node: '>=18'} hasBin: true + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + iced-error@0.0.13: resolution: {integrity: sha512-yEEaG8QfyyRL0SsbNNDw3rVgTyqwHFMCuV6jDvD43f/2shmdaFXkqvFLGhDlsYNSolzYHwVLM/CrXt9GygYopA==} @@ -4288,8 +4310,8 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - memfs@4.8.2: - resolution: {integrity: sha512-j4WKth315edViMBGkHW6NTF0QBjsTrcRDmYNcGsPq+ozMEyCCCIlX2d2mJ5wuh6iHvJ3FevUrr48v58YRqVdYg==} + memfs@4.9.1: + resolution: {integrity: sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw==} engines: {node: '>= 4.0.0'} memorystream@0.3.1: @@ -5274,6 +5296,12 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-forest@1.0.2: + resolution: {integrity: sha512-2rICdwIJi5kVlehMUVtJeHn3ohh5YZV4pDv0P0c1M11cRz/gXNViItpM94HQwfvnXuzybpqK0LZJgTa3lEwtAw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + sort-keys@4.2.0: resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} engines: {node: '>=8'} @@ -5463,6 +5491,12 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + through2-concurrent@2.0.0: resolution: {integrity: sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==} @@ -5507,6 +5541,12 @@ packages: resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} engines: {node: '>= 0.4'} + tree-dump@1.0.1: + resolution: {integrity: sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + treeify@1.1.0: resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} engines: {node: '>=0.6'} @@ -7218,6 +7258,22 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jsonjoy.com/base64@1.1.1(tslib@2.6.2)': + dependencies: + tslib: 2.6.2 + + '@jsonjoy.com/json-pack@1.0.3(tslib@2.6.2)': + dependencies: + '@jsonjoy.com/base64': 1.1.1(tslib@2.6.2) + '@jsonjoy.com/util': 1.1.2(tslib@2.6.2) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.6.2) + tslib: 2.6.2 + + '@jsonjoy.com/util@1.1.2(tslib@2.6.2)': + dependencies: + tslib: 2.6.2 + '@kwsites/file-exists@1.1.1': dependencies: debug: 4.3.4 @@ -10117,6 +10173,8 @@ snapshots: husky@9.0.11: {} + hyperdyperid@1.2.0: {} + iced-error@0.0.13: {} iced-lock@1.1.0: @@ -11045,8 +11103,11 @@ snapshots: mdurl@2.0.0: {} - memfs@4.8.2: + memfs@4.9.1: dependencies: + '@jsonjoy.com/json-pack': 1.0.3(tslib@2.6.2) + '@jsonjoy.com/util': 1.1.2(tslib@2.6.2) + sonic-forest: 1.0.2(tslib@2.6.2) tslib: 2.6.2 memorystream@0.3.1: {} @@ -12081,6 +12142,11 @@ snapshots: smart-buffer: 4.2.0 optional: true + sonic-forest@1.0.2(tslib@2.6.2): + dependencies: + tree-dump: 1.0.1(tslib@2.6.2) + tslib: 2.6.2 + sort-keys@4.2.0: dependencies: is-plain-obj: 2.1.0 @@ -12291,6 +12357,10 @@ snapshots: text-table@0.2.0: {} + thingies@1.21.0(tslib@2.6.2): + dependencies: + tslib: 2.6.2 + through2-concurrent@2.0.0: dependencies: through2: 2.0.5 @@ -12334,6 +12404,10 @@ snapshots: typedarray.prototype.slice: 1.0.3 which-typed-array: 1.1.15 + tree-dump@1.0.1(tslib@2.6.2): + dependencies: + tslib: 2.6.2 + treeify@1.1.0: {} trim-newlines@3.0.1: {} From cec37bb214c1be207dbabc05f822829408a8c20a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 14:51:07 +0200 Subject: [PATCH 024/172] fix(pep440): fix exception matching two ranges (#28827) Co-authored-by: Michael Kriese --- lib/modules/versioning/pep440/index.spec.ts | 8 ++++++++ lib/modules/versioning/pep440/index.ts | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/modules/versioning/pep440/index.spec.ts b/lib/modules/versioning/pep440/index.spec.ts index bb2ad28d78b037..8ba12022fb4f46 100644 --- a/lib/modules/versioning/pep440/index.spec.ts +++ b/lib/modules/versioning/pep440/index.spec.ts @@ -37,6 +37,14 @@ describe('modules/versioning/pep440/index', () => { expect(pep440.equals(a, b)).toBe(expected); }); + it.each` + a | b | expected + ${'1.0'} | ${'>=1.0.0'} | ${true} + ${'>=3.8'} | ${'>=3.9'} | ${false} + `('matches($a, $b) === $expected', ({ a, b, expected }) => { + expect(pep440.matches(a, b)).toBe(expected); + }); + it.each` version | isSingle ${'1.2.3'} | ${true} diff --git a/lib/modules/versioning/pep440/index.ts b/lib/modules/versioning/pep440/index.ts index 6de5a74ad4931b..f37b731ab0278e 100644 --- a/lib/modules/versioning/pep440/index.ts +++ b/lib/modules/versioning/pep440/index.ts @@ -16,7 +16,7 @@ export const supportedRangeStrategies: RangeStrategy[] = [ const { compare: sortVersions, - satisfies: matches, + satisfies, valid, validRange, explain, @@ -74,6 +74,10 @@ export { isVersion, matches }; const equals = (version1: string, version2: string): boolean => isVersion(version1) && isVersion(version2) && eq(version1, version2); +function matches(version: string, range: string): boolean { + return isVersion(version) && isValid(range) && satisfies(version, range); +} + export const api: VersioningApi = { equals, getMajor, From 096f1a01d5a8b5512da5bb743fcce70a7c6d7dc9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 12:52:03 +0000 Subject: [PATCH 025/172] chore(deps): update dependency memfs to v4.9.2 (#28829) 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 705540614cc82c..4bd54bf4ac6143 100644 --- a/package.json +++ b/package.json @@ -331,7 +331,7 @@ "jest-mock-extended": "3.0.6", "jest-snapshot": "29.7.0", "markdownlint-cli2": "0.13.0", - "memfs": "4.9.1", + "memfs": "4.9.2", "nock": "13.5.4", "npm-run-all2": "6.1.2", "nyc": "15.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 435c5139f381f7..b2960180e9555e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -566,8 +566,8 @@ importers: specifier: 0.13.0 version: 0.13.0 memfs: - specifier: 4.9.1 - version: 4.9.1 + specifier: 4.9.2 + version: 4.9.2 nock: specifier: 13.5.4 version: 13.5.4 @@ -4310,8 +4310,8 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - memfs@4.9.1: - resolution: {integrity: sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw==} + memfs@4.9.2: + resolution: {integrity: sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==} engines: {node: '>= 4.0.0'} memorystream@0.3.1: @@ -11103,7 +11103,7 @@ snapshots: mdurl@2.0.0: {} - memfs@4.9.1: + memfs@4.9.2: dependencies: '@jsonjoy.com/json-pack': 1.0.3(tslib@2.6.2) '@jsonjoy.com/util': 1.1.2(tslib@2.6.2) From 74d2bfb8dddddf8e0021bad98bc1d2a7f0ad7f99 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 15:08:39 +0200 Subject: [PATCH 026/172] docs: drop advanced use from matchDepNames (#28830) --- docs/usage/configuration-options.md | 2 ++ lib/config/options/index.ts | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 5dd388664846c0..4bcf63816598ba 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2851,6 +2851,8 @@ It is recommended that you avoid using "negative" globs, like `**/!(package.json ### matchDepNames +This field behaves the same as `matchPackageNames` except it matches against `depName` instead of `packageName`. + ### matchDepPatterns ### matchDepPrefixes diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 6360d41d592d5d..540ce247fc4faf 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1342,7 +1342,6 @@ const options: RenovateOptions[] = [ mergeable: true, cli: false, env: false, - advancedUse: true, }, { name: 'excludeDepNames', From 5f1286ff0015823990cac8d9196b65c6545479e8 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 16:41:41 +0200 Subject: [PATCH 027/172] fix: massage depName if missing (#28831) --- .../repository/extract/manager-files.spec.ts | 4 ++-- lib/workers/repository/extract/manager-files.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts index 58d074b7898ae7..0b22e14973f5c9 100644 --- a/lib/workers/repository/extract/manager-files.spec.ts +++ b/lib/workers/repository/extract/manager-files.spec.ts @@ -52,13 +52,13 @@ describe('workers/repository/extract/manager-files', () => { fileMatch.getMatchingFiles.mockReturnValue(['Dockerfile']); fs.readLocalFile.mockResolvedValueOnce('some content'); html.extractPackageFile = jest.fn(() => ({ - deps: [{}, { replaceString: 'abc' }], + deps: [{}, { replaceString: 'abc', packageName: 'p' }], })) as never; const res = await getManagerPackageFiles(managerConfig); expect(res).toEqual([ { packageFile: 'Dockerfile', - deps: [{}, { replaceString: 'abc' }], + deps: [{}, { replaceString: 'abc', packageName: 'p', depName: 'p' }], }, ]); }); diff --git a/lib/workers/repository/extract/manager-files.ts b/lib/workers/repository/extract/manager-files.ts index d247968c8ce72b..abfeaa39a2fe6f 100644 --- a/lib/workers/repository/extract/manager-files.ts +++ b/lib/workers/repository/extract/manager-files.ts @@ -9,6 +9,18 @@ import type { PackageFile } from '../../../modules/manager/types'; import { readLocalFile } from '../../../util/fs'; import type { WorkerExtractConfig } from '../../types'; +function massageDepNames(packageFiles: PackageFile[] | null): void { + if (packageFiles) { + for (const packageFile of packageFiles) { + for (const dep of packageFile.deps) { + if (dep.packageName && !dep.depName) { + dep.depName = dep.packageName; + } + } + } + } +} + export async function getManagerPackageFiles( config: WorkerExtractConfig, ): Promise { @@ -35,6 +47,7 @@ export async function getManagerPackageFiles( config, fileList, ); + massageDepNames(allPackageFiles); return allPackageFiles; } const packageFiles: PackageFile[] = []; @@ -58,5 +71,6 @@ export async function getManagerPackageFiles( logger.debug(`${packageFile} has no content`); } } + massageDepNames(packageFiles); return packageFiles; } From c3b9ef81e64bc3191b371c8487ac396a5c13ffcd Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 16:53:31 +0200 Subject: [PATCH 028/172] refactor: customManager mandatory fields check (#28832) --- lib/config/validation.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/config/validation.ts b/lib/config/validation.ts index e12b7fb67bf816..c1be3de87510e3 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -806,6 +806,19 @@ export async function validateConfig( return { errors, warnings }; } +function hasField( + customManager: Partial, + field: string, +): boolean { + const templateField = `${field}Template` as keyof RegexManagerTemplates; + return !!( + customManager[templateField] ?? + customManager.matchStrings?.some((matchString) => + matchString.includes(`(?<${field}>`), + ) + ); +} + function validateRegexManagerFields( customManager: Partial, currentPath: string, @@ -835,13 +848,7 @@ function validateRegexManagerFields( const mandatoryFields = ['depName', 'currentValue', 'datasource']; for (const field of mandatoryFields) { - const templateField = `${field}Template` as keyof RegexManagerTemplates; - if ( - !customManager[templateField] && - !customManager.matchStrings?.some((matchString) => - matchString.includes(`(?<${field}>`), - ) - ) { + if (!hasField(customManager, field)) { errors.push({ topic: 'Configuration Error', message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`, From ca23445c274fa6802f12ce564e8f7919a0d1a0f3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 May 2024 17:15:42 +0200 Subject: [PATCH 029/172] chore: fix gerrit eslint (#28833) --- lib/modules/platform/gerrit/scm.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/modules/platform/gerrit/scm.ts b/lib/modules/platform/gerrit/scm.ts index 40fc56c88aab2e..f4369fa39e2877 100644 --- a/lib/modules/platform/gerrit/scm.ts +++ b/lib/modules/platform/gerrit/scm.ts @@ -34,7 +34,7 @@ export class GerritScm extends DefaultGitScm { .findChanges(repository, searchConfig, true) .then((res) => res.pop()); if (change) { - return change.current_revision! as LongCommitSha; + return change.current_revision as LongCommitSha; } return git.getBranchCommit(branchName); } @@ -52,7 +52,7 @@ export class GerritScm extends DefaultGitScm { .findChanges(repository, searchConfig, true) .then((res) => res.pop()); if (change) { - const currentGerritPatchset = change.revisions![change.current_revision!]; + const currentGerritPatchset = change.revisions[change.current_revision]; return currentGerritPatchset.actions?.['rebase'].enabled === true; } return true; @@ -85,7 +85,7 @@ export class GerritScm extends DefaultGitScm { .findChanges(repository, searchConfig, true) .then((res) => res.pop()); if (change) { - const currentGerritPatchset = change.revisions![change.current_revision!]; + const currentGerritPatchset = change.revisions[change.current_revision]; return currentGerritPatchset.uploader.username !== username; } return false; @@ -153,9 +153,7 @@ export class GerritScm extends DefaultGitScm { .findChanges(repository, searchConfig, true) .then((res) => res.pop()); if (change) { - return super.mergeToLocal( - change.revisions![change.current_revision!].ref, - ); + return super.mergeToLocal(change.revisions[change.current_revision].ref); } return super.mergeToLocal(branchName); } From c78da0eba8b9e116a99d31f3927df214fbde81d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 00:05:47 +0000 Subject: [PATCH 030/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.4 (#28838) 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 3e888d9eabe308..44d13f3817f12e 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.3@sha256:7b18182dba91fe1c68331ac0a958a648b181f147dc041adb99218cfb6f1b1319 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.4@sha256:466402ea5dd0d3d089491c18344daf2e4a584164e9fe790e914e422cfe3dced1 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.3-full@sha256:02a0637bf34805d8f18cae3f37ff5f1ea28a8fd49c32e6f89725e62846fbda02 AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.4-full@sha256:de0543987d0ea1759fca05f19f1dba00d47c409c21d5688e5874d72284b9d50b AS full-base # -------------------------------------- # build image From 40f4b4ffb3b4db8c0f1483437eeb40a24c734baf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 03:43:34 +0000 Subject: [PATCH 031/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.1 (#28840) 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 9d6554b8427ba5..b7185fc0c12209 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.0 +FROM ghcr.io/containerbase/devcontainer:10.6.1 From 9104a3979d9e3b7db17dff799a17ef8165de7425 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 03:43:57 +0000 Subject: [PATCH 032/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.1 (#28841) 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 540ce247fc4faf..f0c09c13b1f11b 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -463,7 +463,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.0', + default: 'ghcr.io/containerbase/sidecar:10.6.1', globalOnly: true, }, { From a9a1d1a93d7ad6d0fb68c18785c34ead131def09 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 05:18:02 +0000 Subject: [PATCH 033/172] fix(data): automatic update of static data (#28839) Co-authored-by: Renovate Bot Co-authored-by: Rhys Arkins --- data/ubuntu-distro-info.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/data/ubuntu-distro-info.json b/data/ubuntu-distro-info.json index c718afdffe4b71..4337250c53a3fa 100644 --- a/data/ubuntu-distro-info.json +++ b/data/ubuntu-distro-info.json @@ -295,5 +295,12 @@ "eol": "2029-05-31", "eol_server": "2029-05-31", "eol_esm": "2034-04-25" + }, + "v24.10": { + "codename": "Oracular Oriole", + "series": "oracular", + "created": "2024-04-25", + "release": "2024-10-10", + "eol": "2025-07-10" } } From 55e345236f7b081abef6d901997f4c72946023cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 05:19:08 +0000 Subject: [PATCH 034/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.5 (#28842) 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 44d13f3817f12e..f4d336ee0769bd 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.4@sha256:466402ea5dd0d3d089491c18344daf2e4a584164e9fe790e914e422cfe3dced1 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.5@sha256:caa17b1486df8865f204f33f2f0aba9904acc35dd01919eed94fb41f184fb673 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.4-full@sha256:de0543987d0ea1759fca05f19f1dba00d47c409c21d5688e5874d72284b9d50b AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.5-full@sha256:41f04241ae3235f10578326a333e4d951ba271f7de222339b298850c01f6f2dc AS full-base # -------------------------------------- # build image From 2910185d5f38cd6725add8aa9a868b179b0686da Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 5 May 2024 09:39:10 +0200 Subject: [PATCH 035/172] fix(gradle): lower log warning to debug for non-executable bit (#28844) --- lib/modules/manager/gradle-wrapper/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/gradle-wrapper/utils.ts b/lib/modules/manager/gradle-wrapper/utils.ts index 5e75e3c2e14b77..713a6f8b265e3f 100644 --- a/lib/modules/manager/gradle-wrapper/utils.ts +++ b/lib/modules/manager/gradle-wrapper/utils.ts @@ -28,7 +28,7 @@ export async function prepareGradleCommand( if (gradlewStat?.isFile() === true) { // if the file is not executable by others if (os.platform() !== 'win32' && (gradlewStat.mode & 0o1) === 0) { - logger.warn('Gradle wrapper is missing the executable bit'); + logger.debug('Gradle wrapper is missing the executable bit'); // add the execution permission to the owner, group and others await chmodLocalFile(gradlewFile, gradlewStat.mode | 0o111); } From 265e6285c7bbde69f99d2b60f5c77ae7f0f12136 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Sun, 5 May 2024 13:30:58 +0545 Subject: [PATCH 036/172] feat(config/validation): validate options which support regex/glob matching (#28693) Co-authored-by: Sebastian Poxhofer Co-authored-by: Rhys Arkins --- lib/config/options/index.ts | 4 + lib/config/types.ts | 5 ++ .../regex-glob-matchers.spec.ts | 33 +++++++ .../validation-helpers/regex-glob-matchers.ts | 44 ++++++++++ lib/config/validation-helpers/types.ts | 5 ++ lib/config/validation.spec.ts | 68 +++++++++++++++ lib/config/validation.ts | 87 ++++++++++++------- tools/docs/config.ts | 1 + 8 files changed, 218 insertions(+), 29 deletions(-) create mode 100644 lib/config/validation-helpers/regex-glob-matchers.spec.ts create mode 100644 lib/config/validation-helpers/regex-glob-matchers.ts diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index f0c09c13b1f11b..c37672f38ce3c7 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -13,6 +13,7 @@ const options: RenovateOptions[] = [ default: ['X-*'], subType: 'string', globalOnly: true, + patternMatch: true, }, { name: 'allowedEnv', @@ -22,6 +23,7 @@ const options: RenovateOptions[] = [ default: [], subType: 'string', globalOnly: true, + patternMatch: true, }, { name: 'detectGlobalManagerConfig', @@ -957,6 +959,7 @@ const options: RenovateOptions[] = [ default: null, globalOnly: true, supportedPlatforms: ['bitbucket'], + patternMatch: true, }, { name: 'autodiscoverTopics', @@ -1238,6 +1241,7 @@ const options: RenovateOptions[] = [ mergeable: true, cli: false, env: false, + patternMatch: true, }, { name: 'excludeRepositories', diff --git a/lib/config/types.ts b/lib/config/types.ts index ff309df752a66d..f900fae3b80bc6 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -443,6 +443,11 @@ export interface RenovateOptionBase { * This is used to add depreciation message in the docs */ deprecationMsg?: string; + + /** + * For internal use only: add it to any config option that supports regex or glob matching + */ + patternMatch?: boolean; } export interface RenovateArrayOption< diff --git a/lib/config/validation-helpers/regex-glob-matchers.spec.ts b/lib/config/validation-helpers/regex-glob-matchers.spec.ts new file mode 100644 index 00000000000000..570128326ec09c --- /dev/null +++ b/lib/config/validation-helpers/regex-glob-matchers.spec.ts @@ -0,0 +1,33 @@ +import { check } from './regex-glob-matchers'; + +describe('config/validation-helpers/regex-glob-matchers', () => { + it('should error for multiple match alls', () => { + const res = check({ + val: ['*', '**'], + currentPath: 'hostRules[0].allowedHeaders', + }); + expect(res).toHaveLength(1); + }); + + it('should error for invalid regex', () => { + const res = check({ + val: ['[', '/[/', '/.*[/'], + currentPath: 'hostRules[0].allowedHeaders', + }); + expect(res).toHaveLength(2); + }); + + it('should error for non-strings', () => { + const res = check({ + val: ['*', 2], + currentPath: 'hostRules[0].allowedHeaders', + }); + expect(res).toMatchObject([ + { + message: + 'hostRules[0].allowedHeaders: should be an array of strings. You have included object.', + topic: 'Configuration Error', + }, + ]); + }); +}); diff --git a/lib/config/validation-helpers/regex-glob-matchers.ts b/lib/config/validation-helpers/regex-glob-matchers.ts new file mode 100644 index 00000000000000..a1c25cb82f3839 --- /dev/null +++ b/lib/config/validation-helpers/regex-glob-matchers.ts @@ -0,0 +1,44 @@ +import is from '@sindresorhus/is'; +import { getRegexPredicate, isRegexMatch } from '../../util/string-match'; +import type { ValidationMessage } from '../types'; +import type { CheckMatcherArgs } from './types'; + +/** + * Only if type condition or context condition violated then errors array will be mutated to store metadata + */ +export function check({ + val: matchers, + currentPath, +}: CheckMatcherArgs): ValidationMessage[] { + const res: ValidationMessage[] = []; + + if (is.array(matchers, is.string)) { + if ( + (matchers.includes('*') || matchers.includes('**')) && + matchers.length > 1 + ) { + res.push({ + topic: 'Configuration Error', + message: `${currentPath}: Your input contains * or ** along with other patterns. Please remove them, as * or ** matches all patterns.`, + }); + } + for (const matcher of matchers) { + // Validate regex pattern + if (isRegexMatch(matcher)) { + if (!getRegexPredicate(matcher)) { + res.push({ + topic: 'Configuration Error', + message: `Failed to parse regex pattern "${matcher}"`, + }); + } + } + } + } else { + res.push({ + topic: 'Configuration Error', + message: `${currentPath}: should be an array of strings. You have included ${typeof matchers}.`, + }); + } + + return res; +} diff --git a/lib/config/validation-helpers/types.ts b/lib/config/validation-helpers/types.ts index 05f70826cfe420..68e10825820310 100644 --- a/lib/config/validation-helpers/types.ts +++ b/lib/config/validation-helpers/types.ts @@ -4,3 +4,8 @@ export interface CheckManagerArgs { resolvedRule: PackageRule; currentPath: string; } + +export interface CheckMatcherArgs { + val: unknown; + currentPath: string; +} diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index d1ca81e1a876d4..fb517bd0bb65bc 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -1225,6 +1225,34 @@ describe('config/validation', () => { expect(warnings).toHaveLength(0); expect(errors).toHaveLength(2); }); + + it('catches when * or ** is combined with others patterns in a regexOrGlob option', async () => { + const config = { + packageRules: [ + { + matchRepositories: ['groupA/**', 'groupB/**'], // valid + enabled: false, + }, + { + matchRepositories: ['*', 'repo'], // invalid + enabled: true, + }, + ], + }; + const { errors, warnings } = await configValidation.validateConfig( + 'repo', + config, + ); + expect(errors).toMatchObject([ + { + message: + 'packageRules[1].matchRepositories: Your input contains * or ** along with other patterns. Please remove them, as * or ** matches all patterns.', + topic: 'Configuration Error', + }, + ]); + expect(errors).toHaveLength(1); + expect(warnings).toHaveLength(0); + }); }); describe('validateConfig() -> globaOnly options', () => { @@ -1706,5 +1734,45 @@ describe('config/validation', () => { expect(warnings).toHaveLength(0); expect(errors).toHaveLength(0); }); + + it('catches when * or ** is combined with others patterns in a regexOrGlob option', async () => { + const config = { + packageRules: [ + { + matchRepositories: ['*', 'repo'], // invalid + enabled: false, + }, + ], + allowedHeaders: ['*', '**'], // invalid + autodiscoverProjects: ['**', 'project'], // invalid + allowedEnv: ['env_var'], // valid + }; + const { errors, warnings } = await configValidation.validateConfig( + 'global', + config, + ); + expect(warnings).toMatchObject([ + { + message: + 'allowedHeaders: Your input contains * or ** along with other patterns. Please remove them, as * or ** matches all patterns.', + topic: 'Configuration Error', + }, + { + message: + 'autodiscoverProjects: Your input contains * or ** along with other patterns. Please remove them, as * or ** matches all patterns.', + topic: 'Configuration Error', + }, + ]); + + expect(errors).toMatchObject([ + { + message: + 'packageRules[0].matchRepositories: Your input contains * or ** along with other patterns. Please remove them, as * or ** matches all patterns.', + topic: 'Configuration Error', + }, + ]); + expect(warnings).toHaveLength(2); + expect(errors).toHaveLength(1); + }); }); }); diff --git a/lib/config/validation.ts b/lib/config/validation.ts index c1be3de87510e3..d76b33b9e13426 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -34,13 +34,16 @@ import { allowedStatusCheckStrings, } from './types'; import * as managerValidator from './validation-helpers/managers'; +import * as regexOrGlobValidator from './validation-helpers/regex-glob-matchers'; const options = getOptions(); +let optionsInitialized = false; let optionTypes: Record; let optionParents: Record; let optionGlobals: Set; let optionInherits: Set; +let optionRegexOrGlob: Set; const managerList = getManagerList(); @@ -100,27 +103,49 @@ function getDeprecationMessage(option: string): string | undefined { } function isInhertConfigOption(key: string): boolean { - if (!optionInherits) { - optionInherits = new Set(); - for (const option of options) { - if (option.inheritConfigSupport) { - optionInherits.add(option.name); - } - } - } return optionInherits.has(key); } +function isRegexOrGlobOption(key: string): boolean { + return optionRegexOrGlob.has(key); +} + function isGlobalOption(key: string): boolean { - if (!optionGlobals) { - optionGlobals = new Set(); - for (const option of options) { - if (option.globalOnly) { - optionGlobals.add(option.name); - } + return optionGlobals.has(key); +} + +function initOptions(): void { + if (optionsInitialized) { + return; + } + + optionParents = {}; + optionInherits = new Set(); + optionTypes = {}; + optionRegexOrGlob = new Set(); + optionGlobals = new Set(); + + for (const option of options) { + optionTypes[option.name] = option.type; + + if (option.parents) { + optionParents[option.name] = option.parents; + } + + if (option.inheritConfigSupport) { + optionInherits.add(option.name); + } + + if (option.patternMatch) { + optionRegexOrGlob.add(option.name); + } + + if (option.globalOnly) { + optionGlobals.add(option.name); } } - return optionGlobals.has(key); + + optionsInitialized = true; } export function getParentName(parentPath: string | undefined): string { @@ -139,20 +164,8 @@ export async function validateConfig( isPreset?: boolean, parentPath?: string, ): Promise { - if (!optionTypes) { - optionTypes = {}; - options.forEach((option) => { - optionTypes[option.name] = option.type; - }); - } - if (!optionParents) { - optionParents = {}; - options.forEach((option) => { - if (option.parents) { - optionParents[option.name] = option.parents; - } - }); - } + initOptions(); + let errors: ValidationMessage[] = []; let warnings: ValidationMessage[] = []; @@ -354,6 +367,14 @@ export async function validateConfig( errors = errors.concat(subValidation.errors); } } + if (isRegexOrGlobOption(key)) { + errors.push( + ...regexOrGlobValidator.check({ + val, + currentPath, + }), + ); + } if (key === 'extends') { for (const subval of val) { if (is.string(subval)) { @@ -958,6 +979,14 @@ async function validateGlobalConfig( } } else if (type === 'array') { if (is.array(val)) { + if (isRegexOrGlobOption(key)) { + warnings.push( + ...regexOrGlobValidator.check({ + val, + currentPath: currentPath!, + }), + ); + } if (key === 'gitNoVerify') { const allowedValues = ['commit', 'push']; for (const value of val as string[]) { diff --git a/tools/docs/config.ts b/tools/docs/config.ts index ad573f39fff1df..cac650c7101e8e 100644 --- a/tools/docs/config.ts +++ b/tools/docs/config.ts @@ -94,6 +94,7 @@ function genTable(obj: [string, string][], type: string, def: any): string { 'experimentalIssues', 'advancedUse', 'deprecationMsg', + 'patternMatch', ]; obj.forEach(([key, val]) => { const el = [key, val]; From 9d0c425e100ac53acb43e9d430afd068f9d6bcd4 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 5 May 2024 09:47:40 +0200 Subject: [PATCH 037/172] docs: clarify preset file name recommendations (#28443) Co-authored-by: Michael Kriese --- docs/usage/config-presets.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index 9e05cd2f3aaece..53ebfc0a77ee28 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -10,15 +10,6 @@ Read the [Key concepts, presets](./key-concepts/presets.md) page to learn more a Shareable config presets must use the JSON or JSON5 formats, other formats are not supported. - -!!! warning - Only use `default.json` for your presets. - - -!!! warning - We've deprecated using a `renovate.json` file for presets, as this causes issues if the repository configuration _also_ uses a `renovate.json` file. - If you're using a `renovate.json` file to share your presets, rename it to `default.json`. - !!! tip Describe what your preset does in the `"description"` field. @@ -42,6 +33,17 @@ Alternatively, Renovate can fetch preset files from an HTTP server. You can set a Git tag (like a SemVer) to use a specific release of your shared config. +### Preset File Naming + +Presets are repo-hosted, and you can have one or more presets hosted per repository. +If you omit a file name from your preset (e.g. `github>abc/foo`) then Renovate will look for a `default.json` file in the repo. +If you wish to have an alternative file name, you need to specify it (e.g. `github>abc/foo//alternative-name.json5`). + + +!!! warning + We've deprecated using a `renovate.json` file for the default _preset_ file name in a repository. + If you're using a `renovate.json` file to share your presets, rename it to `default.json`. + ### GitHub | name | example use | preset | resolves as | filename | Git tag | From cf724cf69982bfeb7633311a388dac2e5b15cd3f Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 5 May 2024 14:14:55 +0200 Subject: [PATCH 038/172] feat(manager/custom): allow packageName instead of depName (#28834) Co-authored-by: Sebastian Poxhofer --- docs/usage/configuration-options.md | 2 +- lib/config/validation.spec.ts | 10 +++++++ lib/config/validation.ts | 10 ++++++- .../regex/__snapshots__/index.spec.ts.snap | 4 +-- .../manager/custom/regex/index.spec.ts | 6 ++-- lib/modules/manager/custom/regex/readme.md | 30 +++++++------------ lib/modules/manager/custom/regex/utils.ts | 4 ++- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 4bcf63816598ba..650433f09028e9 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -689,7 +689,7 @@ The `regex` manager which is based on using Regular Expression named capture gro You must have a named capture group matching (e.g. `(?.*)`) _or_ configure its corresponding template (e.g. `depNameTemplate`) for these fields: - `datasource` -- `depName` +- `depName` and / or `packageName` - `currentValue` Use named capture group matching _or_ set a corresponding template. diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index fb517bd0bb65bc..bdd5c1d2a6c16a 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -746,6 +746,16 @@ describe('config/validation', () => { extractVersionTemplate: '^(?v\\d+\\.\\d+)', depTypeTemplate: 'apple', }, + { + customType: 'regex', + fileMatch: ['Dockerfile'], + matchStrings: ['ENV (?.*?)\\s'], + packageNameTemplate: 'foo', + datasourceTemplate: 'bar', + registryUrlTemplate: 'foobar', + extractVersionTemplate: '^(?v\\d+\\.\\d+)', + depTypeTemplate: 'apple', + }, ], }; const { warnings, errors } = await configValidation.validateConfig( diff --git a/lib/config/validation.ts b/lib/config/validation.ts index d76b33b9e13426..80f007f20a224a 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -867,7 +867,7 @@ function validateRegexManagerFields( }); } - const mandatoryFields = ['depName', 'currentValue', 'datasource']; + const mandatoryFields = ['currentValue', 'datasource']; for (const field of mandatoryFields) { if (!hasField(customManager, field)) { errors.push({ @@ -876,6 +876,14 @@ function validateRegexManagerFields( }); } } + + const nameFields = ['depName', 'packageName']; + if (!nameFields.some((field) => hasField(customManager, field))) { + errors.push({ + topic: 'Configuration Error', + message: `Regex Managers must contain depName or packageName regex groups or templates`, + }); + } } /** diff --git a/lib/modules/manager/custom/regex/__snapshots__/index.spec.ts.snap b/lib/modules/manager/custom/regex/__snapshots__/index.spec.ts.snap index 5132942cd4da4f..25dd3663151b9f 100644 --- a/lib/modules/manager/custom/regex/__snapshots__/index.spec.ts.snap +++ b/lib/modules/manager/custom/regex/__snapshots__/index.spec.ts.snap @@ -198,7 +198,7 @@ exports[`modules/manager/custom/regex/index extracts registryUrl 1`] = ` { "currentValue": "8.12.13", "datasource": "helm", - "depName": "prometheus-operator", + "packageName": "prometheus-operator", "registryUrls": [ "https://charts.helm.sh/stable", ], @@ -212,7 +212,7 @@ exports[`modules/manager/custom/regex/index extracts registryUrl 1`] = ` "matchStrings": [ "chart: *repository: (?.*?) - *name: (?.*?) + *name: (?.*?) *version: (?.*) ", ], diff --git a/lib/modules/manager/custom/regex/index.spec.ts b/lib/modules/manager/custom/regex/index.spec.ts index f0a47dba3d3e79..671883e1c6d820 100644 --- a/lib/modules/manager/custom/regex/index.spec.ts +++ b/lib/modules/manager/custom/regex/index.spec.ts @@ -48,7 +48,7 @@ describe('modules/manager/custom/regex/index', () => { it('returns null if no dependencies found', async () => { const config = { matchStrings: [ - 'ENV .*?_VERSION=(?.*) # (?.*?)/(?[^&]*?)(\\&versioning=(?[^&]*?))?\\s', + 'ENV .*?_VERSION=(?.*) # (?.*?)/(?[^&]*?)(\\&versioning=(?[^&]*?))?\\s', ], versioningTemplate: '{{#if versioning}}{{versioning}}{{else}}semver{{/if}}', @@ -95,7 +95,7 @@ describe('modules/manager/custom/regex/index', () => { it('extracts registryUrl', async () => { const config = { matchStrings: [ - 'chart:\n *repository: (?.*?)\n *name: (?.*?)\n *version: (?.*)\n', + 'chart:\n *repository: (?.*?)\n *name: (?.*?)\n *version: (?.*)\n', ], datasourceTemplate: 'helm', }; @@ -121,7 +121,7 @@ describe('modules/manager/custom/regex/index', () => { { currentValue: '8.12.13', datasource: 'helm', - depName: 'prometheus-operator', + packageName: 'prometheus-operator', registryUrls: ['https://charts.helm.sh/stable'], }, ], diff --git a/lib/modules/manager/custom/regex/readme.md b/lib/modules/manager/custom/regex/readme.md index bc9c96dc64fc68..add7b7d1142aff 100644 --- a/lib/modules/manager/custom/regex/readme.md +++ b/lib/modules/manager/custom/regex/readme.md @@ -29,8 +29,7 @@ Before Renovate can look up a dependency and decide about updates, it needs this Configuration-wise, it works like this: - You must capture the `currentValue` of the dependency in a named capture group -- You must have either a `depName` capture group or a `depNameTemplate` config field -- You can optionally have a `packageName` capture group or a `packageNameTemplate` if it differs from `depName` +- You must have either a `depName` or `packageName` capture group, or use on of the respective template fields ( `depNameTemplate` and `packageNameTemplate` ) - You must have either a `datasource` capture group or a `datasourceTemplate` config field - You can optionally have a `depType` capture group or a `depTypeTemplate` config field - You can optionally have a `versioning` capture group or a `versioningTemplate` config field. If neither are present, Renovate will use `semver-coerced` as the default @@ -88,15 +87,13 @@ But you don't want to write a regex custom manager rule for _each_ variable. Instead you enhance your `Dockerfile` like this: ```Dockerfile -ARG IMAGE=node:12@sha256:6e5264cd4cfaefd7174b2bc10c7f9a1c2b99d98d127fc57a802d264da9fb43bd -FROM ${IMAGE} -# renovate: datasource=github-tags depName=nodejs/node versioning=node -ENV NODE_VERSION=10.19.0 -# renovate: datasource=github-releases depName=composer/composer +# renovate: datasource=github-tags depName=node packageName=nodejs/node versioning=node +ENV NODE_VERSION=20.10.0 +# renovate: datasource=github-releases depName=composer packageName=composer/composer ENV COMPOSER_VERSION=1.9.3 -# renovate: datasource=docker depName=docker versioning=docker +# renovate: datasource=docker packageName=docker versioning=docker ENV DOCKER_VERSION=19.03.1 -# renovate: datasource=npm depName=yarn +# renovate: datasource=npm packageName=yarn ENV YARN_VERSION=1.19.1 ``` @@ -109,18 +106,11 @@ You could configure Renovate to update the `Dockerfile` like this: "customManagers": [ { "customType": "regex", - "fileMatch": ["^Dockerfile$"], + "description": "Update _VERSION variables in Dockerfiles", + "fileMatch": ["(^|/|\\.)Dockerfile$", "(^|/)Dockerfile\\.[^/]*$"], "matchStrings": [ - "datasource=(?.*?) depName=(?.*?)( versioning=(?.*?))?\\sENV .*?_VERSION=(?.*)\\s" - ], - "versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}" - }, - { - "fileMatch": ["^Dockerfile$"], - "matchStrings": [ - "ARG IMAGE=(?.*?):(?.*?)@(?sha256:[a-f0-9]+)\\s" - ], - "datasourceTemplate": "docker" + "# renovate: datasource=(?[a-z-]+?)(?: depName=(?.+?))? packageName=(?.+?)(?: versioning=(?[a-z-]+?))?\\s(?:ENV|ARG) .+?_VERSION=(?.+?)\\s" + ] } ] } diff --git a/lib/modules/manager/custom/regex/utils.ts b/lib/modules/manager/custom/regex/utils.ts index 48a0dbfe82a7c3..b1ddc709b89d01 100644 --- a/lib/modules/manager/custom/regex/utils.ts +++ b/lib/modules/manager/custom/regex/utils.ts @@ -124,10 +124,12 @@ export function isValidDependency({ depName, currentValue, currentDigest, + packageName, }: PackageDependency): boolean { // check if all the fields are set return ( - is.nonEmptyStringAndNotWhitespace(depName) && + (is.nonEmptyStringAndNotWhitespace(depName) || + is.nonEmptyStringAndNotWhitespace(packageName)) && (is.nonEmptyStringAndNotWhitespace(currentDigest) || is.nonEmptyStringAndNotWhitespace(currentValue)) ); From ea4469a298d0bcbd902766f7f2a40cb1e3c45b11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 12:26:35 +0000 Subject: [PATCH 039/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.8.6 (#28846) 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 f4d336ee0769bd..ca8082c2c36a2d 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.5@sha256:caa17b1486df8865f204f33f2f0aba9904acc35dd01919eed94fb41f184fb673 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.8.6@sha256:4dc0ae952db7fc41ed26b6d3db6946ee08d4410f486957cbadbecf6c79dd1d4a AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.5-full@sha256:41f04241ae3235f10578326a333e4d951ba271f7de222339b298850c01f6f2dc AS full-base +FROM ghcr.io/renovatebot/base-image:2.8.6-full@sha256:cbeca7ed03a9d591c40bfca1ee25894fbd74e298a2a9ed2d853655664ba6bfe9 AS full-base # -------------------------------------- # build image From 706175029d99b3d34f696dda05e1379ddb9dc8e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 00:14:38 +0000 Subject: [PATCH 040/172] docs: update references to renovate/renovate to v37.342.1 (#28853) 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 028d5d81ee0b0a..b92c499e5365f2 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -384,7 +384,7 @@ To get access to the token a custom Renovate Docker image is needed that include The Dockerfile to create such an image can look like this: ```Dockerfile -FROM renovate/renovate:37.326.3 +FROM renovate/renovate:37.342.1 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 2da29f7fd62c5fde5beb3acd4f062a1bb11d5348 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 03:22:24 +0000 Subject: [PATCH 041/172] chore(deps): update containerbase/internal-tools action to v3.0.82 (#28855) 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 d9bae4d6e90ebf..00db47ccbe8432 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -632,7 +632,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@955ceac764c7b5d3bdf644591152412dd97e3dc9 # v3.0.80 + uses: containerbase/internal-tools@dbc381e7a824b3777dceafc226804644311ab9a1 # v3.0.82 with: command: docker-config From df1c9c89720ebfc27040c59cb7b6057f0acd0993 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 08:46:27 +0000 Subject: [PATCH 042/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.3 (#28858) 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 b7185fc0c12209..4d0a4fb4d6365c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.1 +FROM ghcr.io/containerbase/devcontainer:10.6.3 From 39964ccf6d40c93b8a611682fe55430e0ce22f51 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 08:46:47 +0000 Subject: [PATCH 043/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.3 (#28859) 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 c37672f38ce3c7..5a2aa34c339fd4 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -465,7 +465,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.1', + default: 'ghcr.io/containerbase/sidecar:10.6.3', globalOnly: true, }, { From 3afab2ab4a6bb2783716e517d571979f7651e316 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:04:59 +0000 Subject: [PATCH 044/172] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v2.9.0 (#28863) 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 ca8082c2c36a2d..73c9eb0c1df23e 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.6@sha256:4dc0ae952db7fc41ed26b6d3db6946ee08d4410f486957cbadbecf6c79dd1d4a AS slim-base +FROM ghcr.io/renovatebot/base-image:2.9.0@sha256:bdc80c83a98b9b3f1caaeeec3ad29e425fff6035d479e32a97e081080eef61c3 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.8.6-full@sha256:cbeca7ed03a9d591c40bfca1ee25894fbd74e298a2a9ed2d853655664ba6bfe9 AS full-base +FROM ghcr.io/renovatebot/base-image:2.9.0-full@sha256:bdabc3c573c1e842eab77e2928c29c57c151ab04f98772cd2aeb756e19c42ca4 AS full-base # -------------------------------------- # build image From abc61d644f8c407bef42d4bee66d33781f7eb9c2 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 May 2024 13:31:06 +0200 Subject: [PATCH 045/172] fix(pypi): filter string only and deduplicate (#28865) --- .../datasource/pypi/__snapshots__/index.spec.ts.snap | 3 --- lib/modules/datasource/pypi/index.ts | 7 +++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/modules/datasource/pypi/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/pypi/__snapshots__/index.spec.ts.snap index 42dc4dcea02587..1af50f1d6d055b 100644 --- a/lib/modules/datasource/pypi/__snapshots__/index.spec.ts.snap +++ b/lib/modules/datasource/pypi/__snapshots__/index.spec.ts.snap @@ -265,9 +265,6 @@ exports[`modules/datasource/pypi/index getReleases respects constraints 1`] = ` { "registryUrl": "https://pypi.org/pypi", "releases": [ - { - "version": "0.4.0", - }, { "version": "0.4.1", }, diff --git a/lib/modules/datasource/pypi/index.ts b/lib/modules/datasource/pypi/index.ts index 57356aae4cd3f8..dd87ed2f23490d 100644 --- a/lib/modules/datasource/pypi/index.ts +++ b/lib/modules/datasource/pypi/index.ts @@ -1,4 +1,5 @@ import url from 'node:url'; +import is from '@sindresorhus/is'; import changelogFilenameRegex from 'changelog-filename-regex'; import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; @@ -156,9 +157,11 @@ export class PypiDatasource extends Datasource { result.isDeprecated = isDeprecated; } // There may be multiple releases with different requires_python, so we return all in an array + const pythonConstraints = releases + .map(({ requires_python }) => requires_python) + .filter(is.string); result.constraints = { - // TODO: string[] isn't allowed here - python: releases.map(({ requires_python }) => requires_python) as any, + python: Array.from(new Set(pythonConstraints)), }; return result; }); From 654c447e6e14e12495c4fa7a8e49c3c7059df726 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 May 2024 13:40:54 +0200 Subject: [PATCH 046/172] feat: mode=silent (#28396) --- docs/usage/configuration-options.md | 18 ++++++++++ lib/config/options/index.ts | 7 ++++ .../repository/config-migration/index.spec.ts | 7 ++++ .../repository/config-migration/index.ts | 7 ++++ .../repository/dependency-dashboard.spec.ts | 11 ++++++ .../repository/dependency-dashboard.ts | 6 ++++ lib/workers/repository/error-config.spec.ts | 14 ++++++++ lib/workers/repository/error-config.ts | 6 ++++ lib/workers/repository/init/index.spec.ts | 2 +- lib/workers/repository/init/index.ts | 5 +++ lib/workers/repository/init/merge.spec.ts | 12 +++++++ lib/workers/repository/init/merge.ts | 15 +++++++- .../onboarding/branch/check.spec.ts | 5 +++ .../repository/onboarding/branch/check.ts | 6 ++++ .../repository/onboarding/branch/create.ts | 19 ++++++---- .../repository/process/deprecated.spec.ts | 9 +++++ lib/workers/repository/process/deprecated.ts | 6 ++++ .../repository/update/branch/index.spec.ts | 36 +++++++++++++++++++ lib/workers/repository/update/branch/index.ts | 21 +++++++---- 19 files changed, 197 insertions(+), 15 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 650433f09028e9..17799486a4475b 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2323,6 +2323,24 @@ This works because Renovate will add a "renovate/stability-days" pending status Add to this object if you wish to define rules that apply only to minor updates. +## mode + +This configuration option was created primarily for use with Mend's hosted app, but can also be useful for some self-hosted use cases. + +It enables a new `silent` mode to allow repos to be scanned for updates _and_ for users to be able to request such updates be opened in PRs _on demand_ through the Mend UI, without needing the Dependency Dashboard issue in the repo. + +Although similar, the options `mode=silent` and `dryRun` can be used together. +When both are configured, `dryRun` takes precedence, so for example PRs won't be created. + +Configuring `silent` mode is quite similar to `dryRun=lookup` except: + +- It will bypass onboarding checks (unlike when performing a dry run on a non-onboarded repo) similar to `requireConfig=optional` +- It can create branches/PRs if `checkedBranches` is set +- It will keep any existing branches up-to-date (e.g. ones created previously using `checkedBranches`) + +When in `silent` mode, Renovate does not create issues (such as Dependency Dashboard, or due to config errors) or Config Migration PRs, even if enabled. +It also does not prune/close any which already exist. + ## npmToken See [Private npm module support](./getting-started/private-packages.md) for details on how this is used. diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 5a2aa34c339fd4..af3688da7dd107 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -5,6 +5,13 @@ import { getVersioningList } from '../../modules/versioning'; import type { RenovateOptions } from '../types'; const options: RenovateOptions[] = [ + { + name: 'mode', + description: 'Mode of operation.', + type: 'string', + default: 'full', + allowedValues: ['full', 'silent'], + }, { name: 'allowedHeaders', description: diff --git a/lib/workers/repository/config-migration/index.spec.ts b/lib/workers/repository/config-migration/index.spec.ts index 9f107189397a1a..3067573bedbeb8 100644 --- a/lib/workers/repository/config-migration/index.spec.ts +++ b/lib/workers/repository/config-migration/index.spec.ts @@ -28,6 +28,13 @@ describe('workers/repository/config-migration/index', () => { }); }); + it('does nothing when in silent mode', async () => { + await configMigration({ ...config, mode: 'silent' }, []); + expect(MigratedDataFactory.getAsync).toHaveBeenCalledTimes(0); + expect(checkConfigMigrationBranch).toHaveBeenCalledTimes(0); + expect(ensureConfigMigrationPr).toHaveBeenCalledTimes(0); + }); + it('does nothing when config migration is disabled', async () => { await configMigration({ ...config, configMigration: false }, []); expect(MigratedDataFactory.getAsync).toHaveBeenCalledTimes(0); diff --git a/lib/workers/repository/config-migration/index.ts b/lib/workers/repository/config-migration/index.ts index 0746ccdf8d77be..856b0ceb277268 100644 --- a/lib/workers/repository/config-migration/index.ts +++ b/lib/workers/repository/config-migration/index.ts @@ -1,4 +1,5 @@ import type { RenovateConfig } from '../../../config/types'; +import { logger } from '../../../logger'; import { checkConfigMigrationBranch } from './branch'; import { MigratedDataFactory } from './branch/migrated-data'; import { ensureConfigMigrationPr } from './pr'; @@ -8,6 +9,12 @@ export async function configMigration( branchList: string[], ): Promise { if (config.configMigration) { + if (config.mode === 'silent') { + logger.debug( + 'Config migration issues are not created, updated or closed when mode=silent', + ); + return; + } const migratedConfigData = await MigratedDataFactory.getAsync(); const migrationBranch = await checkConfigMigrationBranch( config, diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index 8b12cbfba9e73d..54be5280260931 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -241,6 +241,17 @@ describe('workers/repository/dependency-dashboard', () => { logger.getProblems.mockReturnValue([]); }); + it('does nothing if mode=silent', async () => { + const branches: BranchConfig[] = []; + config.mode = 'silent'; + await dependencyDashboard.ensureDependencyDashboard(config, branches); + expect(platform.ensureIssueClosing).toHaveBeenCalledTimes(0); + expect(platform.ensureIssue).toHaveBeenCalledTimes(0); + + // same with dry run + await dryRun(branches, platform, 0, 0); + }); + it('do nothing if dependencyDashboard is disabled', async () => { const branches: BranchConfig[] = []; await dependencyDashboard.ensureDependencyDashboard(config, branches); diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index 92a9bbf6dc4aca..17d895c35b22ad 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -181,6 +181,12 @@ export async function ensureDependencyDashboard( packageFiles: Record = {}, ): Promise { logger.debug('ensureDependencyDashboard()'); + if (config.mode === 'silent') { + logger.debug( + 'Dependency Dashboard issue is not created, updated or closed when mode=silent', + ); + return; + } // legacy/migrated issue const reuseTitle = 'Update Dependencies (Renovate Bot)'; const branches = allBranches.filter( diff --git a/lib/workers/repository/error-config.spec.ts b/lib/workers/repository/error-config.spec.ts index f08d0fad23d6e3..f3dc7fb6f05dfd 100644 --- a/lib/workers/repository/error-config.spec.ts +++ b/lib/workers/repository/error-config.spec.ts @@ -29,6 +29,20 @@ describe('workers/repository/error-config', () => { GlobalConfig.reset(); }); + it('returns if mode is silent', async () => { + config.mode = 'silent'; + + const res = await raiseConfigWarningIssue( + config, + new Error(CONFIG_VALIDATION), + ); + + expect(res).toBeUndefined(); + expect(logger.debug).toHaveBeenCalledWith( + 'Config warning issues are not created, updated or closed when mode=silent', + ); + }); + it('creates issues', async () => { const expectedBody = `There are missing credentials for the authentication-required feature. As a precaution, Renovate will pause PRs until it is resolved. diff --git a/lib/workers/repository/error-config.ts b/lib/workers/repository/error-config.ts index 3654ef90db65bb..fb5c735bde65a4 100644 --- a/lib/workers/repository/error-config.ts +++ b/lib/workers/repository/error-config.ts @@ -33,6 +33,12 @@ async function raiseWarningIssue( initialBody: string, error: Error, ): Promise { + if (config.mode === 'silent') { + logger.debug( + `Config warning issues are not created, updated or closed when mode=silent`, + ); + return; + } let body = initialBody; if (error.validationSource) { body += `Location: \`${error.validationSource}\`\n`; diff --git a/lib/workers/repository/init/index.spec.ts b/lib/workers/repository/init/index.spec.ts index 1927900bcd683f..4f96f018118905 100644 --- a/lib/workers/repository/init/index.spec.ts +++ b/lib/workers/repository/init/index.spec.ts @@ -38,7 +38,7 @@ describe('workers/repository/init/index', () => { it('runs', async () => { apis.initApis.mockResolvedValue(partial<_apis.WorkerPlatformConfig>()); onboarding.checkOnboardingBranch.mockResolvedValueOnce({}); - config.getRepoConfig.mockResolvedValueOnce({}); + config.getRepoConfig.mockResolvedValueOnce({ mode: 'silent' }); merge.mergeRenovateConfig.mockResolvedValueOnce({}); secrets.applySecretsToConfig.mockReturnValueOnce( partial(), diff --git a/lib/workers/repository/init/index.ts b/lib/workers/repository/init/index.ts index f4d3ac84dbeab0..8f21f936db2e40 100644 --- a/lib/workers/repository/init/index.ts +++ b/lib/workers/repository/init/index.ts @@ -54,6 +54,11 @@ export async function initRepo( await initializeCaches(config as WorkerPlatformConfig); config = await getRepoConfig(config); setRepositoryLogLevelRemaps(config.logLevelRemap); + if (config.mode === 'silent') { + logger.info( + 'Repository is running with mode=silent and will not make Issues or PRs by default', + ); + } checkIfConfigured(config); warnOnUnsupportedOptions(config); config = applySecretsToConfig(config); diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts index 51fb01fe249936..7cc7a92a057cec 100644 --- a/lib/workers/repository/init/merge.spec.ts +++ b/lib/workers/repository/init/merge.spec.ts @@ -280,6 +280,18 @@ describe('workers/repository/init/merge', () => { }); }); + it('uses onboarding config if silent', async () => { + scm.getFileList.mockResolvedValue([]); + migrateAndValidate.migrateAndValidate.mockResolvedValue({ + warnings: [], + errors: [], + }); + config.mode = 'silent'; + config.repository = 'some-org/some-repo'; + const res = await mergeRenovateConfig(config); + expect(res).toBeDefined(); + }); + it('throws error if misconfigured', async () => { scm.getFileList.mockResolvedValue(['package.json', '.renovaterc.json']); fs.readLocalFile.mockResolvedValue('{}'); diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts index c8ced5681b9e3a..dff41b852fafe7 100644 --- a/lib/workers/repository/init/merge.ts +++ b/lib/workers/repository/init/merge.ts @@ -23,6 +23,8 @@ import { readLocalFile } from '../../../util/fs'; import * as hostRules from '../../../util/host-rules'; import * as queue from '../../../util/http/queue'; import * as throttle from '../../../util/http/throttle'; +import { getOnboardingConfig } from '../onboarding/branch/config'; +import { getDefaultConfigFileName } from '../onboarding/branch/create'; import { getOnboardingConfigFromCache, getOnboardingFileNameFromCache, @@ -58,7 +60,7 @@ export async function detectConfigFile(): Promise { export async function detectRepoFileConfig(): Promise { const cache = getCache(); let { configFileName } = cache; - if (configFileName) { + if (is.nonEmptyString(configFileName)) { let configFileRaw: string | null; try { configFileRaw = await platform.getRawFile(configFileName); @@ -89,6 +91,7 @@ export async function detectRepoFileConfig(): Promise { if (!configFileName) { logger.debug('No renovate config file found'); + cache.configFileName = ''; return {}; } cache.configFileName = configFileName; @@ -171,6 +174,16 @@ export async function mergeRenovateConfig( if (config.requireConfig !== 'ignored') { repoConfig = await detectRepoFileConfig(); } + if (!repoConfig.configFileParsed && config.mode === 'silent') { + logger.debug( + 'When mode=silent and repo has no config file, we use the onboarding config as repo config', + ); + const configFileName = getDefaultConfigFileName(config); + repoConfig = { + configFileName, + configFileParsed: await getOnboardingConfig(config), + }; + } const configFileParsed = repoConfig?.configFileParsed || {}; if (is.nonEmptyArray(returnConfig.extends)) { configFileParsed.extends = [ diff --git a/lib/workers/repository/onboarding/branch/check.spec.ts b/lib/workers/repository/onboarding/branch/check.spec.ts index d4130c9a1db812..1761e95932037c 100644 --- a/lib/workers/repository/onboarding/branch/check.spec.ts +++ b/lib/workers/repository/onboarding/branch/check.spec.ts @@ -25,6 +25,11 @@ describe('workers/repository/onboarding/branch/check', () => { onboarding: true, }); + it('returns true if in silent mode', async () => { + const res = await isOnboarded({ ...config, mode: 'silent' }); + expect(res).toBeTrue(); + }); + it('skips normal onboarding check if onboardingCache is valid', async () => { cache.getCache.mockReturnValueOnce({ onboardingBranchCache: { diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts index c3773f789b9dbb..e4699ac03cb181 100644 --- a/lib/workers/repository/onboarding/branch/check.ts +++ b/lib/workers/repository/onboarding/branch/check.ts @@ -63,6 +63,12 @@ export async function isOnboarded(config: RenovateConfig): Promise { logger.debug('isOnboarded()'); const title = `Action required: Add a Renovate config`; + // Repo is onboarded if in silent mode + if (config.mode === 'silent') { + logger.debug('Silent mode enabled so repo is considered onboarded'); + return true; + } + // Repo is onboarded if global config is bypassing onboarding and does not require a // configuration file. // The repo is considered "not onboarded" if: diff --git a/lib/workers/repository/onboarding/branch/create.ts b/lib/workers/repository/onboarding/branch/create.ts index 708d82cc33f167..8070cfed2a5831 100644 --- a/lib/workers/repository/onboarding/branch/create.ts +++ b/lib/workers/repository/onboarding/branch/create.ts @@ -9,22 +9,27 @@ import { getOnboardingConfigContents } from './config'; const defaultConfigFile = configFileNames[0]; -export async function createOnboardingBranch( +export function getDefaultConfigFileName( config: Partial, -): Promise { +): string { // TODO #22198 - const configFile = configFileNames.includes(config.onboardingConfigFileName!) - ? config.onboardingConfigFileName + return configFileNames.includes(config.onboardingConfigFileName!) + ? config.onboardingConfigFileName! : defaultConfigFile; +} +export async function createOnboardingBranch( + config: Partial, +): Promise { logger.debug('createOnboardingBranch()'); + const configFile = getDefaultConfigFileName(config); // TODO #22198 - const contents = await getOnboardingConfigContents(config, configFile!); + const contents = await getOnboardingConfigContents(config, configFile); logger.debug('Creating onboarding branch'); const commitMessageFactory = new OnboardingCommitMessageFactory( config, - configFile!, + configFile, ); let commitMessage = commitMessageFactory.create().toString(); @@ -51,7 +56,7 @@ export async function createOnboardingBranch( { type: 'addition', // TODO #22198 - path: configFile!, + path: configFile, contents, }, ], diff --git a/lib/workers/repository/process/deprecated.spec.ts b/lib/workers/repository/process/deprecated.spec.ts index a0981c7177202e..1f15b73f6db1fe 100644 --- a/lib/workers/repository/process/deprecated.spec.ts +++ b/lib/workers/repository/process/deprecated.spec.ts @@ -16,6 +16,15 @@ describe('workers/repository/process/deprecated', () => { await expect(raiseDeprecationWarnings(config, {})).resolves.not.toThrow(); }); + it('returns if in silent mode', async () => { + const config: RenovateConfig = { + repoIsOnboarded: true, + suppressNotifications: [], + mode: 'silent', + }; + await expect(raiseDeprecationWarnings(config, {})).resolves.not.toThrow(); + }); + it('raises deprecation warnings', async () => { const config: RenovateConfig = { repoIsOnboarded: true, diff --git a/lib/workers/repository/process/deprecated.ts b/lib/workers/repository/process/deprecated.ts index 43c699cbf43386..0a27d71b531572 100644 --- a/lib/workers/repository/process/deprecated.ts +++ b/lib/workers/repository/process/deprecated.ts @@ -15,6 +15,12 @@ export async function raiseDeprecationWarnings( if (config.suppressNotifications?.includes('deprecationWarningIssues')) { return; } + if (config.mode === 'silent') { + logger.debug( + `Deprecation warning issues are not created, updated or closed when mode=silent`, + ); + return; + } for (const [manager, files] of Object.entries(packageFiles)) { const deprecatedPackages: Record< string, diff --git a/lib/workers/repository/update/branch/index.spec.ts b/lib/workers/repository/update/branch/index.spec.ts index e5f17516c6bb98..e71f943e5f7249 100644 --- a/lib/workers/repository/update/branch/index.spec.ts +++ b/lib/workers/repository/update/branch/index.spec.ts @@ -543,6 +543,42 @@ describe('workers/repository/update/branch/index', () => { }); }); + it('returns if branch does not exist and in silent mode', async () => { + getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({ + ...updatedPackageFiles, + }); + npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({ + artifactErrors: [], + updatedArtifacts: [], + }); + scm.branchExists.mockResolvedValue(false); + GlobalConfig.set({ ...adminConfig }); + config.mode = 'silent'; + expect(await branchWorker.processBranch(config)).toEqual({ + branchExists: false, + prNo: undefined, + result: 'needs-approval', + }); + }); + + it('returns if branch needs dependencyDashboardApproval', async () => { + getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({ + ...updatedPackageFiles, + }); + npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({ + artifactErrors: [], + updatedArtifacts: [], + }); + scm.branchExists.mockResolvedValue(false); + GlobalConfig.set({ ...adminConfig }); + config.dependencyDashboardApproval = true; + expect(await branchWorker.processBranch(config)).toEqual({ + branchExists: false, + prNo: undefined, + result: 'needs-approval', + }); + }); + it('returns if pr creation limit exceeded and branch exists', async () => { getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({ ...updatedPackageFiles, diff --git a/lib/workers/repository/update/branch/index.ts b/lib/workers/repository/update/branch/index.ts index 762d55622c86d4..08a1fabd2bea27 100644 --- a/lib/workers/repository/update/branch/index.ts +++ b/lib/workers/repository/update/branch/index.ts @@ -183,12 +183,21 @@ export async function processBranch( result: 'pending', }; } - // istanbul ignore if - if (!branchExists && config.dependencyDashboardApproval) { - if (dependencyDashboardCheck) { - logger.debug(`Branch ${config.branchName} is approved for creation`); - } else { - logger.debug(`Branch ${config.branchName} needs approval`); + if (!branchExists) { + if (config.mode === 'silent' && !dependencyDashboardCheck) { + logger.debug( + `Branch ${config.branchName} creation is disabled because mode=silent`, + ); + return { + branchExists, + prNo: branchPr?.number, + result: 'needs-approval', + }; + } + if (config.dependencyDashboardApproval && !dependencyDashboardCheck) { + logger.debug( + `Branch ${config.branchName} creation is disabled because dependencyDashboardApproval=true`, + ); return { branchExists, prNo: branchPr?.number, From 8012a4e1bc7294457e96ef4caaa8e8b209df5e52 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 11:42:43 +0000 Subject: [PATCH 047/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.4 (#28866) 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 4d0a4fb4d6365c..73e53dd595edcd 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.3 +FROM ghcr.io/containerbase/devcontainer:10.6.4 From e34248b070b1e0706e3210ec06f7dffe6b44b34b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 11:42:43 +0000 Subject: [PATCH 048/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.4 (#28867) 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 af3688da7dd107..949db96e066042 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -472,7 +472,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.3', + default: 'ghcr.io/containerbase/sidecar:10.6.4', globalOnly: true, }, { From 14628971b5c9ad3c93623039ddcf3ace5fc9b315 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 May 2024 15:06:53 +0200 Subject: [PATCH 049/172] fix(constraintsFiltering): match exact string (#28868) --- lib/modules/datasource/common.spec.ts | 19 +++++++++++++++++++ lib/modules/datasource/common.ts | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/lib/modules/datasource/common.spec.ts b/lib/modules/datasource/common.spec.ts index 703283f9c0e4a7..a86c6a2d3f43de 100644 --- a/lib/modules/datasource/common.spec.ts +++ b/lib/modules/datasource/common.spec.ts @@ -226,6 +226,25 @@ describe('modules/datasource/common', () => { releases: [{ version: '1.0.0' }, { version: '2.0.0' }], }); }); + + it('should match exact constraints', () => { + const config = { + datasource: 'pypi', + packageName: 'bar', + versioning: 'pep440', + constraintsFiltering: 'strict' as const, + constraints: { python: '>=3.8' }, + }; + const releaseResult = { + releases: [ + { version: '1.0.0', constraints: { python: ['^1.0.0'] } }, + { version: '2.0.0', constraints: { python: ['>=3.8'] } }, + ], + }; + expect(applyConstraintsFiltering(releaseResult, config)).toEqual({ + releases: [{ version: '2.0.0' }], + }); + }); }); describe('applyVersionCompatibility', () => { diff --git a/lib/modules/datasource/common.ts b/lib/modules/datasource/common.ts index 6b952da4f49ac7..efda4b39c46799 100644 --- a/lib/modules/datasource/common.ts +++ b/lib/modules/datasource/common.ts @@ -208,6 +208,11 @@ export function applyConstraintsFiltering< break; } + if (configConstraint === releaseConstraint) { + satisfiesConstraints = true; + break; + } + if (versioning.subset?.(configConstraint, releaseConstraint)) { satisfiesConstraints = true; break; From 37b316f337e8f8d291af3c865f1146df5911f9a4 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Mon, 6 May 2024 22:32:05 +0900 Subject: [PATCH 050/172] chore(asdf): update plugins owner for cargo-make and yamlfmt (#28870) --- lib/modules/manager/asdf/upgradeable-tooling.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/asdf/upgradeable-tooling.ts b/lib/modules/manager/asdf/upgradeable-tooling.ts index 45051832b7053a..35e4b163ec682c 100644 --- a/lib/modules/manager/asdf/upgradeable-tooling.ts +++ b/lib/modules/manager/asdf/upgradeable-tooling.ts @@ -86,7 +86,7 @@ export const upgradeableTooling: Record = { }, }, 'cargo-make': { - asdfPluginUrl: 'https://github.com/kachick/asdf-cargo-make', + asdfPluginUrl: 'https://github.com/mise-plugins/asdf-cargo-make', config: { datasource: GithubReleasesDatasource.id, packageName: 'sagiegurari/cargo-make', @@ -654,7 +654,7 @@ export const upgradeableTooling: Record = { }, }, yamlfmt: { - asdfPluginUrl: 'https://github.com/kachick/asdf-yamlfmt', + asdfPluginUrl: 'https://github.com/mise-plugins/asdf-yamlfmt', config: { datasource: GithubReleasesDatasource.id, packageName: 'google/yamlfmt', From 1a3910adc980d98bdafcabf88e6fb3fadca48827 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 13:45:10 +0000 Subject: [PATCH 051/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.9.1 (#28871) 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 73c9eb0c1df23e..6d66dce296e452 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.0@sha256:bdc80c83a98b9b3f1caaeeec3ad29e425fff6035d479e32a97e081080eef61c3 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.9.1@sha256:9e396eee98bfa2fb2146213a1e8c48a871863153c124ab7375028493b584ace5 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.0-full@sha256:bdabc3c573c1e842eab77e2928c29c57c151ab04f98772cd2aeb756e19c42ca4 AS full-base +FROM ghcr.io/renovatebot/base-image:2.9.1-full@sha256:565311338b0feb47cf6a3c7c3616b3af95c8af6baf1a9ea7604bce2b50ede355 AS full-base # -------------------------------------- # build image From 04692b688b25676b71e1e305a03399b83abeb59b Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 May 2024 16:00:21 +0200 Subject: [PATCH 052/172] docs: Language Constraints and Upgrading (#28856) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/.pages | 1 + .../language-constraints-and-upgrading.md | 106 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 docs/usage/language-constraints-and-upgrading.md diff --git a/docs/usage/.pages b/docs/usage/.pages index 4646a4f32b9154..992b2198e2eb93 100644 --- a/docs/usage/.pages +++ b/docs/usage/.pages @@ -50,6 +50,7 @@ nav: - ... | user-stories - 'Security and Permissions': 'security-and-permissions.md' - 'Merge Confidence': 'merge-confidence.md' + - 'Language constraints and upgrading': 'language-constraints-and-upgrading.md' - 'Templates': 'templates.md' - 'String Pattern Matching': 'string-pattern-matching.md' - 'Frequently Asked Questions': 'faq.md' diff --git a/docs/usage/language-constraints-and-upgrading.md b/docs/usage/language-constraints-and-upgrading.md new file mode 100644 index 00000000000000..3f1e4501451904 --- /dev/null +++ b/docs/usage/language-constraints-and-upgrading.md @@ -0,0 +1,106 @@ +# Language constraints and upgrading + +## Package releases have language constraints + +Many ecosystems have the concept where each release of a package has its own language "constraint". +For example, a npm package may support Node.js 18 and 20 in its `v1` releases and Node.js 20 and 22 from `v2.0.0` onwards. + +In an ideal scenario: + +- Package files allow a project to show its supported language constraints, and +- Package registries allow packages to show the supported language constraints per release + +## Restricting upgrades to compatible releases + +By default Renovate _does not_ apply language constraints to upgrades. +This means Renovate will propose "any" stable upgrade. +Renovate will _not_ check if the language version you're using actually supports that upgrade. +In certain ecosystems, changes to language constraints are made with a major release, and are documented in the release notes. +So Renovate's default behavior may be okay in those ecosystems. +For other ecosystems Renovate's default behavior may seem _wrong_. + +As a Renovate user, you can opt into strict compatibility filtering by setting `constraintsFiltering=strict`. +Before you set `constraintsFiltering=strict`, you should: + +- understand the limitations of this setting +- understand why `constraintsFiltering=strict` is _not_ the default behavior + +Please keep reading to learn more. + +## Language constraint updating + +The first challenge is that Renovate may not yet support the ability to update your language constraints in an automated manner, and even when it does, users may not understand how many updates are depending on it. + +For example: a Node.js project has set its `engines` field to `"node": "^18.0.0 || ^20.0.0"`. + +Should Renovate _skip_ Node.js `v21` because it is a non-LTS release? +When Node.js `v22` releases, should Renovate add it to your `engines`, or wait until `v22` becomes the LTS version? +When Node.js `v18` is EOL, should Renovate drop it from the `engines` field? + +Renovate can not guess what users want. +Users have strong and different opinions on what Renovate should do for each example listed above. + +Also, even _if_ Renovate guesses right or adds advanced capabilities to allow this to be configurable: users might still wait on any of these "major" upgrades for months. +If a project waits to create or merge the update to drop Node.js `v18` from `engines`, then they can _not_ upgrade to any new versions of library dependencies. +Those library dependencies may have dropped support for Node.js `v18` already. + +## Strict filtering limitations + +Let's go back to the Node.js project which has its `engines` field set to `"node": "^18.0.0 || ^20.0.0"`. + +Now also consider a library which sets its `engines` field to `"node": "^18.12.0 || ^20.9.0"` because the library only supports "LTS releases" of Node.js. +Strictly speaking, this library is _not_ compatible with the project above, because the project has _wider requirements_ for their Node versions. +This means Renovate holds back any upgrades for it. +Should Renovate somehow "think" and _assume_ that this narrower `engines` support is actually OK? +What if the project _already_ used a current version of this library "in a way that's not officially supported"? + +A second problem is that if: + +- Renovate can _not_ update the language constraints, or +- a user _ignores_ or does not see the language upgrade + +Then the user may not know that many dependencies are out of date, because Renovate is not creating PRs. +For example: a project may have 10 dependencies, and 8 of those have updates. +But all 8 dependencies need the project to update its language constraints _first_. +The project administrator thinks they are up to date, because Renovate is not creating PRs, but 80% of their dependencies are outdated. + +In short, users who set `constraintsFiltering=strict` often do not understand how _strict_ that setting is and how many releases it will _filter out_. + +## Transitive constraint limitations + +Often a library sets language constraints (like the `engines` examples above), and then depend on libraries with _narrower_ contraints, like `"node": "^20.0.0"`. +In cases like these, Renovate "trusts" the declaration of the library and may create a update, even _with_ strict constraints filtering. + +For some package managers, like `npm`, this incompatibility will _not_ be detected or warned about (even during lock file generation), but this may not be a problem for your application. +Other package managers, like Poetry, may detect and warn about incompatible language constraints during lock file generation, which Renovate reports as an "Artifacts update error". + +## Applying constraints through config + +You can set language constraints in the Renovate config. +For example: + +```json title="Renovate config with Node.js constraints" +{ + "constraints": { + "node": "^18.0.0 || >=20.0.0" + } +} +``` + +You may need to set constraints in the Renovate config when: + +- The package manager of the project does not support constraints declarations, or +- The project has not declared any constraints, or +- You want Renovate to use _different_ constraints to what's declared in the _project_ + +Renovate will _not_ create "update" PRs to update any of these versions once they become outdated, so you must update those by hand. +For this reason, setting constraints manually in the Renovate config is _undesirable_. +We prefer to fix problems in Renovate itself, instead of you setting constraints. + +## Future Work + +Please start, or join, a GitHub Discussion if you are interested in this topic. +Subtopics include: + +- Improving language constraints update automation in package files +- Improving versioning calculations of "subset" (is range A a subset of range B) From e8b1beba81e7cd77703e2d9d9172dacf2ecd8ec6 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 6 May 2024 11:56:31 -0300 Subject: [PATCH 053/172] test(gomod): Use "codeBlock" helper (#28874) --- lib/modules/manager/gomod/extract.spec.ts | 71 ++++++++++++----------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/lib/modules/manager/gomod/extract.spec.ts b/lib/modules/manager/gomod/extract.spec.ts index 86ed6321a6ce43..67b7f2c88a4b3f 100644 --- a/lib/modules/manager/gomod/extract.spec.ts +++ b/lib/modules/manager/gomod/extract.spec.ts @@ -1,3 +1,4 @@ +import { codeBlock } from 'common-tags'; import { Fixtures } from '../../../../test/fixtures'; import { extractPackageFile } from '.'; @@ -29,38 +30,39 @@ describe('modules/manager/gomod/extract', () => { }); it('ignores empty spaces in multi-line requires', () => { - const goMod = ` -module github.com/renovate-tests/gomod -go 1.19 -require ( - cloud.google.com/go v0.45.1 + const goMod = codeBlock` + module github.com/renovate-tests/gomod + go 1.19 + require ( + cloud.google.com/go v0.45.1 - github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 // indirect -) -`; + github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 // indirect + ) + `; const res = extractPackageFile(goMod)?.deps; expect(res).toHaveLength(3); }); it('extracts replace directives from multi-line and single line', () => { - const goMod = ` -module github.com/renovate-tests/gomod -go 1.18 -replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 -replace ( - k8s.io/client-go => k8s.io/client-go v0.21.9 - ) -replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.3 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.3 // indirect - k8s.io/code-generator => k8s.io/code-generator v0.17.3 -)`; + const goMod = codeBlock` + module github.com/renovate-tests/gomod + go 1.18 + replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 + replace ( + k8s.io/client-go => k8s.io/client-go v0.21.9 + ) + replace ( + k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.3 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.3 // indirect + k8s.io/code-generator => k8s.io/code-generator v0.17.3 + ) + `; const res = extractPackageFile(goMod); expect(res).toEqual({ deps: [ { managerData: { - lineNumber: 2, + lineNumber: 1, }, depName: 'go', depType: 'golang', @@ -70,7 +72,7 @@ replace ( }, { managerData: { - lineNumber: 3, + lineNumber: 2, }, depName: 'github.com/pravesht/gocql', depType: 'replace', @@ -79,7 +81,7 @@ replace ( }, { managerData: { - lineNumber: 5, + lineNumber: 4, multiLine: true, }, depName: 'k8s.io/client-go', @@ -89,7 +91,7 @@ replace ( }, { managerData: { - lineNumber: 8, + lineNumber: 7, multiLine: true, }, depName: 'k8s.io/cloud-provider', @@ -99,7 +101,7 @@ replace ( }, { managerData: { - lineNumber: 9, + lineNumber: 8, multiLine: true, }, depName: 'k8s.io/cluster-bootstrap', @@ -110,7 +112,7 @@ replace ( }, { managerData: { - lineNumber: 10, + lineNumber: 9, multiLine: true, }, depName: 'k8s.io/code-generator', @@ -123,17 +125,18 @@ replace ( }); it('extracts the toolchain directive', () => { - const goMod = ` -module github.com/renovate-tests/gomod -go 1.21 -toolchain go1.21.7 -replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0`; + const goMod = codeBlock` + module github.com/renovate-tests/gomod + go 1.21 + toolchain go1.21.7 + replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 + `; const res = extractPackageFile(goMod); expect(res).toEqual({ deps: [ { managerData: { - lineNumber: 2, + lineNumber: 1, }, depName: 'go', depType: 'golang', @@ -143,7 +146,7 @@ replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0`; }, { managerData: { - lineNumber: 3, + lineNumber: 2, }, depName: 'go', depType: 'toolchain', @@ -152,7 +155,7 @@ replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0`; }, { managerData: { - lineNumber: 4, + lineNumber: 3, }, depName: 'github.com/pravesht/gocql', depType: 'replace', From b5b0a740aee69f9bd345d6d5ad5e7f17f441f8cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 15:08:16 +0000 Subject: [PATCH 054/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.9.2 (#28875) 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 6d66dce296e452..5acf0801413b6e 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.1@sha256:9e396eee98bfa2fb2146213a1e8c48a871863153c124ab7375028493b584ace5 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.9.2@sha256:47dbf2b5d27305563910bf618a31ebe8bde175a8c73c95910a5af47a819f05a8 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.1-full@sha256:565311338b0feb47cf6a3c7c3616b3af95c8af6baf1a9ea7604bce2b50ede355 AS full-base +FROM ghcr.io/renovatebot/base-image:2.9.2-full@sha256:f19e6dfbe80d9688c6b5511d3175ebe831a018f3967dee41cb59a1ed6a0d6954 AS full-base # -------------------------------------- # build image From 88122ec77d9a879be8cb671a24f4d5eeef352c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Reegn?= Date: Mon, 6 May 2024 17:23:01 +0200 Subject: [PATCH 055/172] feat(asdf): Add gomplate and cosign to asdf manager (#28876) --- lib/modules/manager/asdf/extract.spec.ts | 16 ++++++++++++++++ lib/modules/manager/asdf/upgradeable-tooling.ts | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lib/modules/manager/asdf/extract.spec.ts b/lib/modules/manager/asdf/extract.spec.ts index ec528331a5a37e..78c56a6bd350b6 100644 --- a/lib/modules/manager/asdf/extract.spec.ts +++ b/lib/modules/manager/asdf/extract.spec.ts @@ -53,6 +53,7 @@ bun 0.2.2 cargo-make 0.36.2 checkov 2.3.3 clojure 1.11.1.1182 +cosign 2.2.4 crystal 1.6.1 dart 2.19.3 deno 1.26.2 @@ -69,6 +70,7 @@ github-cli 2.32.1 gohugo extended_0.104.3 golang 1.19.2 golangci-lint 1.52.2 +gomplate 3.11.7 hadolint 2.12.0 haskell 9.4.2 helm 3.10.1 @@ -182,6 +184,13 @@ dummy 1.2.3 'regex:^(?\\d+?)\\.(?\\d+?)\\.(?\\d+)\\.(?\\d+)$', depName: 'clojure', }, + { + currentValue: '2.2.4', + datasource: 'github-releases', + packageName: 'sigstore/cosign', + depName: 'cosign', + extractVersion: '^v(?\\S+)', + }, { currentValue: '1.6.1', datasource: 'github-releases', @@ -286,6 +295,13 @@ dummy 1.2.3 depName: 'golangci-lint', extractVersion: '^v(?.+)', }, + { + currentValue: '3.11.7', + datasource: 'github-releases', + packageName: 'hairyhenderson/gomplate', + depName: 'gomplate', + extractVersion: '^v(?.+)', + }, { currentValue: '2.12.0', datasource: 'github-tags', diff --git a/lib/modules/manager/asdf/upgradeable-tooling.ts b/lib/modules/manager/asdf/upgradeable-tooling.ts index 35e4b163ec682c..72bdb607db7723 100644 --- a/lib/modules/manager/asdf/upgradeable-tooling.ts +++ b/lib/modules/manager/asdf/upgradeable-tooling.ts @@ -107,6 +107,14 @@ export const upgradeableTooling: Record = { versioning: `${regexVersioning.id}:^(?\\d+?)\\.(?\\d+?)\\.(?\\d+)\\.(?\\d+)$`, }, }, + cosign: { + asdfPluginUrl: 'https://gitlab.com/wt0f/asdf-cosign', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'sigstore/cosign', + extractVersion: '^v(?\\S+)', + }, + }, crystal: { asdfPluginUrl: 'https://github.com/asdf-community/asdf-crystal', config: { @@ -221,6 +229,14 @@ export const upgradeableTooling: Record = { extractVersion: '^v(?.+)', }, }, + gomplate: { + asdfPluginUrl: 'https://github.com/sneakybeaky/asdf-gomplate', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'hairyhenderson/gomplate', + extractVersion: '^v(?.+)', + }, + }, hadolint: { asdfPluginUrl: 'https://github.com/looztra/asdf-hadolint.git', config: { From f550acb5636681cf274b9a68f3af3641511402a3 Mon Sep 17 00:00:00 2001 From: ST-DDT Date: Mon, 6 May 2024 17:42:36 +0200 Subject: [PATCH 056/172] feat(replacements): standard-version to commit-and-tag-version (#28862) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Co-authored-by: Michael Kriese --- lib/config/presets/internal/replacements.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/config/presets/internal/replacements.ts b/lib/config/presets/internal/replacements.ts index 7d65e76b5c3c61..ca6abebf478b81 100644 --- a/lib/config/presets/internal/replacements.ts +++ b/lib/config/presets/internal/replacements.ts @@ -43,6 +43,7 @@ export const presets: Record = { 'replacements:rome-to-biome', 'replacements:semantic-release-replace-plugin-to-unscoped', 'replacements:spectre-cli-to-spectre-console-cli', + 'replacements:standard-version-to-commit-and-tag', 'replacements:vso-task-lib-to-azure-pipelines-task-lib', 'replacements:vsts-task-lib-to-azure-pipelines-task-lib', 'replacements:xmldom-to-scoped', @@ -901,6 +902,19 @@ export const presets: Record = { }, ], }, + 'standard-version-to-commit-and-tag': { + description: + '`standard-version` is now maintained as `commit-and-tag-version`.', + packageRules: [ + { + matchCurrentVersion: '^9.0.0', + matchDatasources: ['npm'], + matchPackageNames: ['standard-version'], + replacementName: 'commit-and-tag-version', + replacementVersion: '9.5.0', + }, + ], + }, 'vso-task-lib-to-azure-pipelines-task-lib': { description: 'The `vso-task-lib` package is now published as `azure-pipelines-task-lib`.', From 5aa2ebfbcb333b7bc5f01fc3de768a78e2abe433 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 6 May 2024 14:17:07 -0300 Subject: [PATCH 057/172] refactor(gomod): Simplify dependency extraction (#28852) --- .../gomod/__snapshots__/extract.spec.ts.snap | 12 +- lib/modules/manager/gomod/extract.spec.ts | 6 +- lib/modules/manager/gomod/extract.ts | 172 ++--------- lib/modules/manager/gomod/line-parser.spec.ts | 280 ++++++++++++++++++ lib/modules/manager/gomod/line-parser.ts | 154 ++++++++++ 5 files changed, 465 insertions(+), 159 deletions(-) create mode 100644 lib/modules/manager/gomod/line-parser.spec.ts create mode 100644 lib/modules/manager/gomod/line-parser.ts diff --git a/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap index f089350ae9da1d..93e19c1eafdfd8 100644 --- a/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap @@ -721,12 +721,13 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts single-line }, { "currentValue": "abcdef1", + "datasource": "go", "depName": "github.com/rarkins/foo", "depType": "require", "managerData": { "lineNumber": 6, }, - "skipReason": "unsupported-version", + "skipReason": "invalid-version", }, { "currentValue": "v1.0.0", @@ -746,6 +747,15 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts single-line "lineNumber": 8, }, }, + { + "datasource": "go", + "depName": "../errors", + "depType": "replace", + "managerData": { + "lineNumber": 10, + }, + "skipReason": "local-dependency", + }, { "currentValue": "v0.0.0", "datasource": "go", diff --git a/lib/modules/manager/gomod/extract.spec.ts b/lib/modules/manager/gomod/extract.spec.ts index 67b7f2c88a4b3f..97d093d62b4ac6 100644 --- a/lib/modules/manager/gomod/extract.spec.ts +++ b/lib/modules/manager/gomod/extract.spec.ts @@ -14,11 +14,11 @@ describe('modules/manager/gomod/extract', () => { it('extracts single-line requires', () => { const res = extractPackageFile(gomod1)?.deps; expect(res).toMatchSnapshot(); - expect(res).toHaveLength(9); + expect(res).toHaveLength(10); expect(res?.filter((e) => e.depType === 'require')).toHaveLength(7); expect(res?.filter((e) => e.depType === 'indirect')).toHaveLength(1); - expect(res?.filter((e) => e.skipReason)).toHaveLength(1); - expect(res?.filter((e) => e.depType === 'replace')).toHaveLength(1); + expect(res?.filter((e) => e.skipReason)).toHaveLength(2); + expect(res?.filter((e) => e.depType === 'replace')).toHaveLength(2); }); it('extracts multi-line requires', () => { diff --git a/lib/modules/manager/gomod/extract.ts b/lib/modules/manager/gomod/extract.ts index 524158f1d260db..731bd2b7c3687f 100644 --- a/lib/modules/manager/gomod/extract.ts +++ b/lib/modules/manager/gomod/extract.ts @@ -1,165 +1,27 @@ -import semver from 'semver'; -import { logger } from '../../../logger'; -import { newlineRegex, regEx } from '../../../util/regex'; -import { GoDatasource } from '../../datasource/go'; -import { GolangVersionDatasource } from '../../datasource/golang-version'; -import { isVersion } from '../../versioning/semver'; +import { newlineRegex } from '../../../util/regex'; import type { PackageDependency, PackageFileContent } from '../types'; -import type { MultiLineParseResult } from './types'; +import { parseLine } from './line-parser'; -function getDep( - lineNumber: number, - match: RegExpMatchArray, - type: string, -): PackageDependency { - const [, , currentValue] = match; - let [, depName] = match; - depName = depName.replace(regEx(/"/g), ''); - const dep: PackageDependency = { - managerData: { - lineNumber, - }, - depName, - depType: type, - currentValue, - }; - if (isVersion(currentValue)) { - dep.datasource = GoDatasource.id; - } else { - dep.skipReason = 'unsupported-version'; - } - const digestMatch = regEx(GoDatasource.pversionRegexp).exec(currentValue); - if (digestMatch?.groups?.digest) { - dep.currentDigest = digestMatch.groups.digest; - dep.digestOneAndOnly = true; - dep.versioning = 'loose'; - } - return dep; -} - -function getGoDep( - lineNumber: number, - goVer: string, - versioning: string | undefined = undefined, - depType: string = 'golang', -): PackageDependency { - return { - managerData: { - lineNumber, - }, - depName: 'go', - depType, - currentValue: goVer, - datasource: GolangVersionDatasource.id, - ...(versioning && { versioning }), - }; -} - -export function extractPackageFile( - content: string, - packageFile?: string, -): PackageFileContent | null { - logger.trace({ content }, 'gomod.extractPackageFile()'); +export function extractPackageFile(content: string): PackageFileContent | null { const deps: PackageDependency[] = []; - try { - const lines = content.split(newlineRegex); - for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { - const line = lines[lineNumber]; - const goVer = line.startsWith('go ') ? line.replace('go ', '') : null; - if (goVer && semver.validRange(goVer)) { - const dep = getGoDep(lineNumber, goVer, 'go-mod-directive'); - deps.push(dep); - continue; - } - const goToolVer = line.startsWith('toolchain go') - ? line.replace('toolchain go', '') - : null; - if (goToolVer && semver.valid(goToolVer)) { - const dep = getGoDep(lineNumber, goToolVer, undefined, 'toolchain'); - deps.push(dep); - continue; - } - const replaceMatch = regEx( - /^replace\s+[^\s]+[\s]+[=][>]\s+([^\s]+)\s+([^\s]+)/, - ).exec(line); - if (replaceMatch) { - const dep = getDep(lineNumber, replaceMatch, 'replace'); - deps.push(dep); - } - const requireMatch = regEx(/^require\s+([^\s]+)\s+([^\s]+)/).exec(line); - if (requireMatch) { - if (line.endsWith('// indirect')) { - logger.trace({ lineNumber }, `indirect line: "${line}"`); - const dep = getDep(lineNumber, requireMatch, 'indirect'); - dep.enabled = false; - deps.push(dep); - } else { - logger.trace({ lineNumber }, `require line: "${line}"`); - const dep = getDep(lineNumber, requireMatch, 'require'); - deps.push(dep); - } - } - if (line.trim() === 'require (') { - logger.trace(`Matched multi-line require on line ${lineNumber}`); - const matcher = regEx(/^\s+([^\s]+)\s+([^\s]+)/); - const { reachedLine, detectedDeps } = parseMultiLine( - lineNumber, - lines, - matcher, - 'require', - ); - lineNumber = reachedLine; - deps.push(...detectedDeps); - } else if (line.trim() === 'replace (') { - logger.trace(`Matched multi-line replace on line ${lineNumber}`); - const matcher = regEx(/^\s+[^\s]+[\s]+[=][>]\s+([^\s]+)\s+([^\s]+)/); - const { reachedLine, detectedDeps } = parseMultiLine( - lineNumber, - lines, - matcher, - 'replace', - ); - lineNumber = reachedLine; - deps.push(...detectedDeps); - } + + const lines = content.split(newlineRegex); + for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { + const line = lines[lineNumber]; + const dep = parseLine(line); + if (!dep) { + continue; } - } catch (err) /* istanbul ignore next */ { - logger.warn({ err, packageFile }, 'Error extracting go modules'); + + dep.managerData ??= {}; + dep.managerData.lineNumber = lineNumber; + + deps.push(dep); } + if (!deps.length) { return null; } - return { deps }; -} -function parseMultiLine( - startingLine: number, - lines: string[], - matchRegex: RegExp, - blockType: 'require' | 'replace', -): MultiLineParseResult { - const deps: PackageDependency[] = []; - let lineNumber = startingLine; - let line = ''; - do { - lineNumber += 1; - line = lines[lineNumber]; - const multiMatch = matchRegex.exec(line); - logger.trace(`${blockType}: "${line}"`); - if (multiMatch && !line.endsWith('// indirect')) { - logger.trace({ lineNumber }, `${blockType} line: "${line}"`); - const dep = getDep(lineNumber, multiMatch, blockType); - dep.managerData!.multiLine = true; - deps.push(dep); - } else if (multiMatch && line.endsWith('// indirect')) { - logger.trace({ lineNumber }, `${blockType} indirect line: "${line}"`); - const dep = getDep(lineNumber, multiMatch, 'indirect'); - dep.managerData!.multiLine = true; - dep.enabled = false; - deps.push(dep); - } else if (line.trim() !== ')') { - logger.trace(`No multi-line match: ${line}`); - } - } while (line.trim() !== ')'); - return { reachedLine: lineNumber, detectedDeps: deps }; + return { deps }; } diff --git a/lib/modules/manager/gomod/line-parser.spec.ts b/lib/modules/manager/gomod/line-parser.spec.ts new file mode 100644 index 00000000000000..deef02e43f98bf --- /dev/null +++ b/lib/modules/manager/gomod/line-parser.spec.ts @@ -0,0 +1,280 @@ +import { parseLine } from './line-parser'; + +describe('modules/manager/gomod/line-parser', () => { + it('should return null for invalid input', () => { + expect(parseLine('invalid')).toBeNull(); + }); + + it('should parse go version', () => { + const line = 'go 1.16'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: '1.16', + datasource: 'golang-version', + depName: 'go', + depType: 'golang', + versioning: 'go-mod-directive', + }); + }); + + it('should skip invalid go version', () => { + const line = 'go invalid'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'invalid', + datasource: 'golang-version', + depName: 'go', + depType: 'golang', + skipReason: 'invalid-version', + versioning: 'go-mod-directive', + }); + }); + + it('should parse toolchain version', () => { + const line = 'toolchain go1.16'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: '1.16', + datasource: 'golang-version', + depName: 'go', + depType: 'toolchain', + skipReason: 'invalid-version', + }); + }); + + it('should skip invalid toolchain version', () => { + const line = 'toolchain go-invalid'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: '-invalid', + datasource: 'golang-version', + depName: 'go', + depType: 'toolchain', + skipReason: 'invalid-version', + }); + }); + + it('should parse require definition', () => { + const line = 'require foo/foo v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'require', + skipReason: 'invalid-version', + }); + }); + + it('should parse require definition with pseudo-version', () => { + const line = 'require foo/foo v0.0.0-20210101000000-000000000000'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentDigest: '000000000000', + currentValue: 'v0.0.0-20210101000000-000000000000', + datasource: 'go', + depName: 'foo/foo', + depType: 'require', + digestOneAndOnly: true, + versioning: 'loose', + }); + }); + + it('should parse require multi-line', () => { + const line = ' foo/foo v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'require', + managerData: { + multiLine: true, + }, + skipReason: 'invalid-version', + }); + }); + + it('should parse require definition with quotes', () => { + const line = 'require "foo/foo" v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'require', + skipReason: 'invalid-version', + }); + }); + + it('should parse require multi-line definition with quotes', () => { + const line = ' "foo/foo" v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'require', + managerData: { + multiLine: true, + }, + skipReason: 'invalid-version', + }); + }); + + it('should parse require definition with indirect dependency', () => { + const line = 'require foo/foo v1.2 // indirect'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'indirect', + enabled: false, + skipReason: 'invalid-version', + }); + }); + + it('should parse require multi-line definition with indirect dependency', () => { + const line = ' foo/foo v1.2 // indirect'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'foo/foo', + depType: 'indirect', + enabled: false, + managerData: { + multiLine: true, + }, + skipReason: 'invalid-version', + }); + }); + + it('should parse replace definition', () => { + const line = 'replace foo/foo => bar/bar'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + skipReason: 'unspecified-version', + }); + }); + + it('should parse replace multi-line definition', () => { + const line = ' foo/foo => bar/bar'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + managerData: { + multiLine: true, + }, + skipReason: 'unspecified-version', + }); + }); + + it('should parse replace definition with quotes', () => { + const line = 'replace "foo/foo" => "bar/bar"'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + skipReason: 'unspecified-version', + }); + }); + + it('should parse replace multi-line definition with quotes', () => { + const line = ' "foo/foo" => "bar/bar"'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + managerData: { + multiLine: true, + }, + skipReason: 'unspecified-version', + }); + }); + + it('should parse replace definition with version', () => { + const line = 'replace foo/foo => bar/bar v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + skipReason: 'invalid-version', + }); + }); + + it('should parse replace definition with pseudo-version', () => { + const line = + 'replace foo/foo => bar/bar v0.0.0-20210101000000-000000000000'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentDigest: '000000000000', + currentValue: 'v0.0.0-20210101000000-000000000000', + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + digestOneAndOnly: true, + versioning: 'loose', + }); + }); + + it('should parse replace indirect definition', () => { + const line = 'replace foo/foo => bar/bar v1.2 // indirect'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'bar/bar', + depType: 'indirect', + enabled: false, + skipReason: 'invalid-version', + }); + }); + + it('should parse replace multi-line definition with version', () => { + const line = ' foo/foo => bar/bar v1.2'; + const res = parseLine(line); + expect(res).toStrictEqual({ + currentValue: 'v1.2', + datasource: 'go', + depName: 'bar/bar', + depType: 'replace', + managerData: { + multiLine: true, + }, + skipReason: 'invalid-version', + }); + }); + + it('should parse replace definition pointing to relative local path', () => { + const line = 'replace foo/foo => ../bar'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: '../bar', + depType: 'replace', + skipReason: 'local-dependency', + }); + }); + + it('should parse replace definition pointing to absolute local path', () => { + const line = 'replace foo/foo => /bar'; + const res = parseLine(line); + expect(res).toStrictEqual({ + datasource: 'go', + depName: '/bar', + depType: 'replace', + skipReason: 'local-dependency', + }); + }); +}); diff --git a/lib/modules/manager/gomod/line-parser.ts b/lib/modules/manager/gomod/line-parser.ts new file mode 100644 index 00000000000000..58591c7c502cef --- /dev/null +++ b/lib/modules/manager/gomod/line-parser.ts @@ -0,0 +1,154 @@ +import semver from 'semver'; +import { regEx } from '../../../util/regex'; +import { GoDatasource } from '../../datasource/go'; +import { GolangVersionDatasource } from '../../datasource/golang-version'; +import { isVersion } from '../../versioning/semver'; +import type { PackageDependency } from '../types'; + +function trimQuotes(str: string): string { + return str.replace(regEx(/^"(.*)"$/), '$1'); +} + +const requireRegex = regEx( + /^(?require)?\s+(?[^\s]+\/[^\s]+)\s+(?[^\s]+)(?:\s*\/\/\s*(?[^\s]+)\s*)?$/, +); + +const replaceRegex = regEx( + /^(?replace)?\s+(?[^\s]+\/[^\s]+)\s*=>\s*(?[^\s]+)(?:\s+(?[^\s]+))?(?:\s*\/\/\s*(?[^\s]+)\s*)?$/, +); + +const goVersionRegex = regEx(/^\s*go\s+(?[^\s]+)\s*$/); + +const toolchainVersionRegex = regEx(/^\s*toolchain\s+go(?[^\s]+)\s*$/); + +const pseudoVersionRegex = regEx(GoDatasource.pversionRegexp); + +function extractDigest(input: string): string | undefined { + const match = pseudoVersionRegex.exec(input); + return match?.groups?.digest; +} + +export function parseLine(input: string): PackageDependency | null { + const goVersionMatches = goVersionRegex.exec(input)?.groups; + if (goVersionMatches) { + const { version: currentValue } = goVersionMatches; + + const dep: PackageDependency = { + datasource: GolangVersionDatasource.id, + versioning: 'go-mod-directive', + depType: 'golang', + depName: 'go', + currentValue, + }; + + if (!semver.validRange(currentValue)) { + dep.skipReason = 'invalid-version'; + } + + return dep; + } + + const toolchainMatches = toolchainVersionRegex.exec(input)?.groups; + if (toolchainMatches) { + const { version: currentValue } = toolchainMatches; + + const dep: PackageDependency = { + datasource: GolangVersionDatasource.id, + depType: 'toolchain', + depName: 'go', + currentValue, + }; + + if (!semver.valid(currentValue)) { + dep.skipReason = 'invalid-version'; + } + + return dep; + } + + const requireMatches = requireRegex.exec(input)?.groups; + if (requireMatches) { + const { keyword, module, version: currentValue, comment } = requireMatches; + + const depName = trimQuotes(module); + + const dep: PackageDependency = { + datasource: GoDatasource.id, + depType: 'require', + depName, + currentValue, + }; + + if (isVersion(currentValue)) { + const digest = extractDigest(currentValue); + if (digest) { + dep.currentDigest = digest; + dep.digestOneAndOnly = true; + dep.versioning = 'loose'; + } + } else { + dep.skipReason = 'invalid-version'; + } + + if (comment === 'indirect') { + dep.depType = 'indirect'; + dep.enabled = false; + } + + if (!keyword) { + dep.managerData = { multiLine: true }; + } + + return dep; + } + + const replaceMatches = replaceRegex.exec(input)?.groups; + if (replaceMatches) { + const { + keyword, + replacement, + version: currentValue, + comment, + } = replaceMatches; + + const depName = trimQuotes(replacement); + + const dep: PackageDependency = { + datasource: GoDatasource.id, + depType: 'replace', + depName, + currentValue, + }; + + if (isVersion(currentValue)) { + const digest = extractDigest(currentValue); + if (digest) { + dep.currentDigest = digest; + dep.digestOneAndOnly = true; + dep.versioning = 'loose'; + } + } else if (currentValue) { + dep.skipReason = 'invalid-version'; + } else { + dep.skipReason = 'unspecified-version'; + delete dep.currentValue; + } + + if (comment === 'indirect') { + dep.depType = 'indirect'; + dep.enabled = false; + } + + if (!keyword) { + dep.managerData = { multiLine: true }; + } + + if (depName.startsWith('/') || depName.startsWith('.')) { + dep.skipReason = 'local-dependency'; + } + + return dep; + } + + return null; +} From 3de9ac7e1018ecf42ff337c872cc82838ae0e087 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 17:30:30 +0000 Subject: [PATCH 058/172] chore(deps): update linters to v7.8.0 (#28877) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +- pnpm-lock.yaml | 122 ++++++++++++++++++++++++------------------------- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 4bd54bf4ac6143..2f7d5beb47da8f 100644 --- a/package.json +++ b/package.json @@ -305,8 +305,8 @@ "@types/url-join": "4.0.3", "@types/validate-npm-package-name": "4.0.2", "@types/xmldoc": "1.1.9", - "@typescript-eslint/eslint-plugin": "7.7.1", - "@typescript-eslint/parser": "7.7.1", + "@typescript-eslint/eslint-plugin": "7.8.0", + "@typescript-eslint/parser": "7.8.0", "aws-sdk-client-mock": "4.0.0", "callsite": "1.0.0", "common-tags": "1.8.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b2960180e9555e..0ef1fbfc93817c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -488,11 +488,11 @@ importers: specifier: 1.1.9 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 7.7.1 - version: 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + specifier: 7.8.0 + version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: 7.7.1 - version: 7.7.1(eslint@8.57.0)(typescript@5.4.5) + specifier: 7.8.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) aws-sdk-client-mock: specifier: 4.0.0 version: 4.0.0 @@ -519,13 +519,13 @@ importers: version: 1.4.3 eslint-import-resolver-typescript: specifier: 3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -2095,8 +2095,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@7.7.1': - resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} + '@typescript-eslint/eslint-plugin@7.8.0': + resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -2112,8 +2112,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/parser@7.7.1': - resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} + '@typescript-eslint/parser@7.8.0': + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2126,12 +2126,12 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@7.7.1': - resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} + '@typescript-eslint/scope-manager@7.8.0': + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.7.1': - resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} + '@typescript-eslint/type-utils@7.8.0': + resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2144,8 +2144,8 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.7.1': - resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + '@typescript-eslint/types@7.8.0': + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -2157,8 +2157,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.7.1': - resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} + '@typescript-eslint/typescript-estree@7.8.0': + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -2172,8 +2172,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@7.7.1': - resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} + '@typescript-eslint/utils@7.8.0': + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2182,8 +2182,8 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@7.7.1': - resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} + '@typescript-eslint/visitor-keys@7.8.0': + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -8389,14 +8389,14 @@ snapshots: '@types/node': 18.19.31 optional: true - '@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.1 + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 @@ -8417,12 +8417,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.1 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 eslint: 8.57.0 optionalDependencies: @@ -8435,15 +8435,15 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@7.7.1': + '@typescript-eslint/scope-manager@7.8.0': dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 - '@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -8454,7 +8454,7 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@7.7.1': {} + '@typescript-eslint/types@7.8.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5)': dependencies: @@ -8470,10 +8470,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -8500,14 +8500,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -8519,9 +8519,9 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.7.1': + '@typescript-eslint/visitor-keys@7.8.0': dependencies: - '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -9508,13 +9508,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4 enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -9525,18 +9525,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -9546,7 +9546,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -9557,7 +9557,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -9567,12 +9567,12 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) transitivePeerDependencies: - supports-color From 10a4a8bb26caa4753bc0ab5a1f599338a852e31b Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Tue, 7 May 2024 00:01:01 +0545 Subject: [PATCH 059/172] feat(self-hosted): `autodiscoverRepoSort` and `autodiscoverRepoOrder` (#28738) Co-authored-by: Rhys Arkins --- docs/usage/self-hosted-configuration.md | 12 +++++++ docs/usage/self-hosted-experimental.md | 37 ------------------- lib/config/global.ts | 2 ++ lib/config/options/index.ts | 20 +++++++++++ lib/config/types.ts | 3 ++ lib/modules/platform/gitea/index.spec.ts | 10 +++--- lib/modules/platform/gitea/index.ts | 40 ++++++++++++++++----- lib/modules/platform/gitea/readme.md | 2 +- lib/modules/platform/gitea/types.ts | 6 +--- lib/modules/platform/types.ts | 11 ++++++ lib/workers/global/autodiscover.ts | 2 ++ lib/workers/global/config/parse/env.spec.ts | 12 +++++++ lib/workers/global/config/parse/env.ts | 25 +++++++++++++ 13 files changed, 124 insertions(+), 58 deletions(-) diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index ffead1ce362a4e..b96039d95cb794 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -233,6 +233,18 @@ This feature is useful for users who want Renovate to only work on repositories The `autodiscoverProjects` config option takes an array of minimatch-compatible globs or RE2-compatible regex strings. For more details on this syntax see Renovate's [string pattern matching documentation](./string-pattern-matching.md). +## autodiscoverRepoOrder + +The order method for autodiscover server side repository search. + +> If multiple `autodiscoverTopics` are used resulting order will be per topic not global. + +## autodiscoverRepoSort + +The sort method for autodiscover server side repository search. + +> If multiple `autodiscoverTopics` are used resulting order will be per topic not global. + ## autodiscoverTopics Some platforms allow you to add tags, or topics, to repositories and retrieve repository lists by specifying those diff --git a/docs/usage/self-hosted-experimental.md b/docs/usage/self-hosted-experimental.md index 2e59653983c624..f6118f1f15659e 100644 --- a/docs/usage/self-hosted-experimental.md +++ b/docs/usage/self-hosted-experimental.md @@ -32,43 +32,6 @@ Skipping the check will speed things up, but may result in versions being return If set to any value, Renovate will always paginate requests to GitHub fully, instead of stopping after 10 pages. -## `RENOVATE_X_AUTODISCOVER_REPO_ORDER` - - -!!! note - For the Forgejo and Gitea platform only. - -The order method for autodiscover server side repository search. - -> If multiple `autodiscoverTopics` are used resulting order will be per topic not global. - -Allowed values: - -- `asc` -- `desc` - -Default value: `asc`. - -## `RENOVATE_X_AUTODISCOVER_REPO_SORT` - - -!!! note - For the Forgejo and Gitea platform only. - -The sort method for autodiscover server side repository search. - -> If multiple `autodiscoverTopics` are used resulting order will be per topic not global. - -Allowed values: - -- `alpha` -- `created` -- `updated` -- `size` -- `id` - -Default value: `alpha`. - ## `RENOVATE_X_DELETE_CONFIG_FILE` If `true` Renovate tries to delete the self-hosted config file after reading it. diff --git a/lib/config/global.ts b/lib/config/global.ts index c713f8635fd0ba..01bd31a965f646 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -33,6 +33,8 @@ export class GlobalConfig { 'platform', 'endpoint', 'httpCacheTtlDays', + 'autodiscoverRepoSort', + 'autodiscoverRepoOrder', 'userAgent', ]; diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 949db96e066042..08ae23725f5af9 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -22,6 +22,26 @@ const options: RenovateOptions[] = [ globalOnly: true, patternMatch: true, }, + { + name: 'autodiscoverRepoOrder', + description: + 'The order method for autodiscover server side repository search.', + type: 'string', + default: null, + globalOnly: true, + allowedValues: ['asc', 'desc'], + supportedPlatforms: ['gitea'], + }, + { + name: 'autodiscoverRepoSort', + description: + 'The sort method for autodiscover server side repository search.', + type: 'string', + default: null, + globalOnly: true, + allowedValues: ['alpha', 'created', 'updated', 'size', 'id'], + supportedPlatforms: ['gitea'], + }, { name: 'allowedEnv', description: diff --git a/lib/config/types.ts b/lib/config/types.ts index f900fae3b80bc6..2aa2cd155230eb 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -2,6 +2,7 @@ import type { LogLevel } from 'bunyan'; import type { PlatformId } from '../constants'; import type { LogLevelRemap } from '../logger/types'; import type { CustomManager } from '../modules/manager/custom/types'; +import type { RepoSortMethod, SortMethod } from '../modules/platform/types'; import type { HostRule } from '../types'; import type { GitNoVerifyOption } from '../util/git/types'; import type { MergeConfidence } from '../util/merge-confidence/types'; @@ -159,6 +160,8 @@ export interface RepoGlobalConfig { privateKey?: string; privateKeyOld?: string; httpCacheTtlDays?: number; + autodiscoverRepoSort?: RepoSortMethod; + autodiscoverRepoOrder?: SortMethod; userAgent?: string; } diff --git a/lib/modules/platform/gitea/index.spec.ts b/lib/modules/platform/gitea/index.spec.ts index 77b6cb695af810..f74c4270c15606 100644 --- a/lib/modules/platform/gitea/index.spec.ts +++ b/lib/modules/platform/gitea/index.spec.ts @@ -224,9 +224,6 @@ describe('modules/platform/gitea/index', () => { hostRules.clear(); setBaseUrl('https://gitea.renovatebot.com/'); - - delete process.env.RENOVATE_X_AUTODISCOVER_REPO_SORT; - delete process.env.RENOVATE_X_AUTODISCOVER_REPO_ORDER; }); async function initFakePlatform( @@ -421,8 +418,6 @@ describe('modules/platform/gitea/index', () => { }); it('Sorts repos', async () => { - process.env.RENOVATE_X_AUTODISCOVER_REPO_SORT = 'updated'; - process.env.RENOVATE_X_AUTODISCOVER_REPO_ORDER = 'desc'; const scope = httpMock .scope('https://gitea.com/api/v1') .get('/repos/search') @@ -438,7 +433,10 @@ describe('modules/platform/gitea/index', () => { }); await initFakePlatform(scope); - const repos = await gitea.getRepos(); + const repos = await gitea.getRepos({ + sort: 'updated', + order: 'desc', + }); expect(repos).toEqual(['a/b', 'c/d']); }); }); diff --git a/lib/modules/platform/gitea/index.ts b/lib/modules/platform/gitea/index.ts index 1117fe91cd54e0..b4859dfe99c140 100644 --- a/lib/modules/platform/gitea/index.ts +++ b/lib/modules/platform/gitea/index.ts @@ -34,6 +34,8 @@ import type { Pr, RepoParams, RepoResult, + RepoSortMethod, + SortMethod, UpdatePrConfig, } from '../types'; import { repoFingerprint } from '../util'; @@ -49,8 +51,6 @@ import type { PRMergeMethod, PRUpdateParams, Repo, - RepoSortMethod, - SortMethod, } from './types'; import { DRAFT_PREFIX, @@ -159,7 +159,17 @@ async function lookupLabelByName(name: string): Promise { return labelList.find((l) => l.name === name)?.id ?? null; } -async function fetchRepositories(topic?: string): Promise { +interface FetchRepositoriesArgs { + topic?: string; + sort?: RepoSortMethod; + order?: SortMethod; +} + +async function fetchRepositories({ + topic, + sort, + order, +}: FetchRepositoriesArgs): Promise { const repos = await helper.searchRepos({ uid: botUserID, archived: false, @@ -167,11 +177,11 @@ async function fetchRepositories(topic?: string): Promise { topic: true, q: topic, }), - ...(process.env.RENOVATE_X_AUTODISCOVER_REPO_SORT && { - sort: process.env.RENOVATE_X_AUTODISCOVER_REPO_SORT as RepoSortMethod, + ...(sort && { + sort, }), - ...(process.env.RENOVATE_X_AUTODISCOVER_REPO_ORDER && { - order: process.env.RENOVATE_X_AUTODISCOVER_REPO_ORDER as SortMethod, + ...(order && { + order, }), }); return repos.filter(usableRepo).map((r) => r.full_name); @@ -330,7 +340,16 @@ const platform: Platform = { try { if (config?.topics) { logger.debug({ topics: config.topics }, 'Auto-discovering by topics'); - const repos = await map(config.topics, fetchRepositories); + const fetchRepoArgs: FetchRepositoriesArgs[] = config.topics.map( + (topic) => { + return { + topic, + sort: config.sort, + order: config.order, + }; + }, + ); + const repos = await map(fetchRepoArgs, fetchRepositories); return deduplicateArray(repos.flat()); } else if (config?.namespaces) { logger.debug( @@ -348,7 +367,10 @@ const platform: Platform = { ); return deduplicateArray(repos.flat()); } else { - return await fetchRepositories(); + return await fetchRepositories({ + sort: config?.sort, + order: config?.order, + }); } } catch (err) { logger.error({ err }, 'Gitea getRepos() error'); diff --git a/lib/modules/platform/gitea/readme.md b/lib/modules/platform/gitea/readme.md index 3ce5a31cf167fd..b130a4aa68590c 100644 --- a/lib/modules/platform/gitea/readme.md +++ b/lib/modules/platform/gitea/readme.md @@ -48,5 +48,5 @@ Repositories are ignored when one of the following conditions is met: - Pull requests are disabled for that repository You can change the default server-side sort method and order for autodiscover API. -Set those via [`RENOVATE_X_AUTODISCOVER_REPO_SORT`](../../../self-hosted-experimental.md#renovate_x_autodiscover_repo_sort) and [`RENOVATE_X_AUTODISCOVER_REPO_ORDER`](../../../self-hosted-experimental.md#renovate_x_autodiscover_repo_order). +Set those via [`autodiscoverRepoSort`](../../../self-hosted-configuration.md#autodiscoverRepoSort) and [`autodiscoverRepoOrder`](../../../self-hosted-configuration.md#autodiscoverRepoOrder). Read the [Gitea swagger docs](https://try.gitea.io/api/swagger#/repository/repoSearch) for more details. diff --git a/lib/modules/platform/gitea/types.ts b/lib/modules/platform/gitea/types.ts index 32fa78546950d0..3025a89633ec04 100644 --- a/lib/modules/platform/gitea/types.ts +++ b/lib/modules/platform/gitea/types.ts @@ -1,5 +1,5 @@ import type { LongCommitSha } from '../../../util/git/types'; -import type { Pr } from '../types'; +import type { Pr, RepoSortMethod, SortMethod } from '../types'; export interface PrReviewersParams { reviewers?: string[]; @@ -147,10 +147,6 @@ export interface CombinedCommitStatus { statuses: CommitStatus[]; } -export type RepoSortMethod = 'alpha' | 'created' | 'updated' | 'size' | 'id'; - -export type SortMethod = 'asc' | 'desc'; - export interface RepoSearchParams { uid?: number; archived?: boolean; diff --git a/lib/modules/platform/types.ts b/lib/modules/platform/types.ts index d51e27e1e456be..28f622cd61a33c 100644 --- a/lib/modules/platform/types.ts +++ b/lib/modules/platform/types.ts @@ -201,8 +201,19 @@ export type EnsureCommentRemovalConfig = export type EnsureIssueResult = 'updated' | 'created'; +export type RepoSortMethod = + | 'alpha' + | 'created' + | 'updated' + | 'size' + | 'id' + | null; + +export type SortMethod = 'asc' | 'desc' | null; export interface AutodiscoverConfig { topics?: string[]; + sort?: RepoSortMethod; + order?: SortMethod; includeMirrors?: boolean; namespaces?: string[]; projects?: string[]; diff --git a/lib/workers/global/autodiscover.ts b/lib/workers/global/autodiscover.ts index e6e633df551a9b..e4da1e8c403b5b 100644 --- a/lib/workers/global/autodiscover.ts +++ b/lib/workers/global/autodiscover.ts @@ -38,6 +38,8 @@ export async function autodiscoverRepositories( // Autodiscover list of repositories let discovered = await platform.getRepos({ topics: config.autodiscoverTopics, + sort: config.autodiscoverRepoSort, + order: config.autodiscoverRepoOrder, includeMirrors: config.includeMirrors, namespaces: config.autodiscoverNamespaces, projects: config.autodiscoverProjects, diff --git a/lib/workers/global/config/parse/env.spec.ts b/lib/workers/global/config/parse/env.spec.ts index 664ca142995279..1acaa0b5d5d040 100644 --- a/lib/workers/global/config/parse/env.spec.ts +++ b/lib/workers/global/config/parse/env.spec.ts @@ -267,6 +267,18 @@ describe('workers/global/config/parse/env', () => { expect(config.token).toBe('a'); }); + it('massages converted experimental env vars', async () => { + const envParam: NodeJS.ProcessEnv = { + RENOVATE_X_AUTODISCOVER_REPO_SORT: 'alpha', + RENOVATE_X_DOCKER_MAX_PAGES: '10', + RENOVATE_AUTODISCOVER_REPO_ORDER: 'desc', + }; + const config = await env.getConfig(envParam); + expect(config.autodiscoverRepoSort).toBe('alpha'); + expect(config.autodiscoverRepoOrder).toBe('desc'); + expect(config.dockerMaxPages).toBeUndefined(); + }); + describe('RENOVATE_CONFIG tests', () => { let processExit: jest.SpyInstance; diff --git a/lib/workers/global/config/parse/env.ts b/lib/workers/global/config/parse/env.ts index cc1c4f8fb38405..a37141cff4bba7 100644 --- a/lib/workers/global/config/parse/env.ts +++ b/lib/workers/global/config/parse/env.ts @@ -83,6 +83,30 @@ function massageEnvKeyValues(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv { return result; } +const convertedExperimentalEnvVars = [ + 'RENOVATE_X_AUTODISCOVER_REPO_SORT', + 'RENOVATE_X_AUTODISCOVER_REPO_ORDER', +]; + +/** + * Massages the experimental env vars which have been converted to config options + * + * e.g. RENOVATE_X_AUTODISCOVER_REPO_SORT -> RENOVATE_AUTODISCOVER_REPO_SORT + */ +function massageConvertedExperimentalVars( + env: NodeJS.ProcessEnv, +): NodeJS.ProcessEnv { + const result = { ...env }; + for (const key of convertedExperimentalEnvVars) { + if (env[key] !== undefined) { + const newKey = key.replace('RENOVATE_X_', 'RENOVATE_'); + result[newKey] = env[key]; + delete result[key]; + } + } + return result; +} + export async function getConfig( inputEnv: NodeJS.ProcessEnv, ): Promise { @@ -91,6 +115,7 @@ export async function getConfig( env = renameEnvKeys(env); // massage the values of migrated configuration keys env = massageEnvKeyValues(env); + env = massageConvertedExperimentalVars(env); const options = getOptions(); From 7194f3084bd9c5d496c23b318c285f066f0a34d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 18:28:04 +0000 Subject: [PATCH 060/172] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.0 (#28879) 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 5acf0801413b6e..438e2e28d8db85 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.2@sha256:47dbf2b5d27305563910bf618a31ebe8bde175a8c73c95910a5af47a819f05a8 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.0@sha256:770eba93a606fbcea7337ebc4a491c2322c684d1798a6da86e55ac23f0f02f7f AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.9.2-full@sha256:f19e6dfbe80d9688c6b5511d3175ebe831a018f3967dee41cb59a1ed6a0d6954 AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.0-full@sha256:295d4c6c69f59a2bab61a0002e31f60f1a2a6caf0feb92863c014edc924e233d AS full-base # -------------------------------------- # build image From d8d16647d58dd8bca3dc29c836660d9641af552e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 22:35:53 +0000 Subject: [PATCH 061/172] build(deps): update dependency zod to v3.23.5 (#28885) 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 2f7d5beb47da8f..f17626a2150dff 100644 --- a/package.json +++ b/package.json @@ -245,7 +245,7 @@ "validate-npm-package-name": "5.0.0", "vuln-vects": "1.1.0", "xmldoc": "1.3.0", - "zod": "3.23.4" + "zod": "3.23.5" }, "optionalDependencies": { "better-sqlite3": "9.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ef1fbfc93817c..d793f781a5ac29 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -318,8 +318,8 @@ importers: specifier: 1.3.0 version: 1.3.0 zod: - specifier: 3.23.4 - version: 3.23.4 + specifier: 3.23.5 + version: 3.23.5 optionalDependencies: better-sqlite3: specifier: 9.6.0 @@ -5960,8 +5960,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.23.4: - resolution: {integrity: sha512-/AtWOKbBgjzEYYQRNfoGKHObgfAZag6qUJX1VbHo2PRBgS+wfWagEY2mizjfyAPcGesrJOcx/wcl0L9WnVrHFw==} + zod@3.23.5: + resolution: {integrity: sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -12850,6 +12850,6 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.23.4: {} + zod@3.23.5: {} zwitch@1.0.5: {} From 8191cf8746e5c6a4ca9e80615ac685e7fb28b2d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 22:50:56 +0000 Subject: [PATCH 062/172] build(deps): update dependency zod to v3.23.6 (#28887) 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 f17626a2150dff..dfb8117ed63c81 100644 --- a/package.json +++ b/package.json @@ -245,7 +245,7 @@ "validate-npm-package-name": "5.0.0", "vuln-vects": "1.1.0", "xmldoc": "1.3.0", - "zod": "3.23.5" + "zod": "3.23.6" }, "optionalDependencies": { "better-sqlite3": "9.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d793f781a5ac29..2d80707d4ab91d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -318,8 +318,8 @@ importers: specifier: 1.3.0 version: 1.3.0 zod: - specifier: 3.23.5 - version: 3.23.5 + specifier: 3.23.6 + version: 3.23.6 optionalDependencies: better-sqlite3: specifier: 9.6.0 @@ -5960,8 +5960,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.23.5: - resolution: {integrity: sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==} + zod@3.23.6: + resolution: {integrity: sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -12850,6 +12850,6 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.23.5: {} + zod@3.23.6: {} zwitch@1.0.5: {} From cbbfcd1514056a8c71a2cceb4066819c6e091fce Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Tue, 7 May 2024 06:03:37 +0200 Subject: [PATCH 063/172] fix(manager/terraform/lockfile): use registryURL defined in lockfile (#28886) --- .../manager/terraform/lockfile/index.spec.ts | 6 +++--- lib/modules/manager/terraform/lockfile/index.ts | 8 ++++---- lib/modules/manager/terraform/readme.md | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/lib/modules/manager/terraform/lockfile/index.spec.ts b/lib/modules/manager/terraform/lockfile/index.spec.ts index 7557011905d8e0..c6df3ccf13cb65 100644 --- a/lib/modules/manager/terraform/lockfile/index.spec.ts +++ b/lib/modules/manager/terraform/lockfile/index.spec.ts @@ -76,7 +76,7 @@ describe('modules/manager/terraform/lockfile/index', () => { it('update single dependency with exact constraint and depType provider', async () => { fs.readLocalFile.mockResolvedValueOnce(codeBlock` - provider "registry.terraform.io/hashicorp/aws" { + provider "registry.opentofu.org/hashicorp/aws" { version = "3.0.0" constraints = "3.0.0" hashes = [ @@ -111,7 +111,7 @@ describe('modules/manager/terraform/lockfile/index', () => { { file: { contents: codeBlock` - provider "registry.terraform.io/hashicorp/aws" { + provider "registry.opentofu.org/hashicorp/aws" { version = "3.36.0" constraints = "3.36.0" hashes = [ @@ -126,7 +126,7 @@ describe('modules/manager/terraform/lockfile/index', () => { }, ]); expect(mockHash.mock.calls).toEqual([ - ['https://registry.terraform.io', 'hashicorp/aws', '3.36.0'], + ['https://registry.opentofu.org', 'hashicorp/aws', '3.36.0'], ]); }); diff --git a/lib/modules/manager/terraform/lockfile/index.ts b/lib/modules/manager/terraform/lockfile/index.ts index aca7419f3d78df..c88cb5c7e1e934 100644 --- a/lib/modules/manager/terraform/lockfile/index.ts +++ b/lib/modules/manager/terraform/lockfile/index.ts @@ -3,7 +3,6 @@ import { logger } from '../../../../logger'; import * as p from '../../../../util/promises'; import { escapeRegExp, regEx } from '../../../../util/regex'; import { GetPkgReleasesConfig, getPkgReleases } from '../../../datasource'; -import { TerraformProviderDatasource } from '../../../datasource/terraform-provider'; import { get as getVersioning } from '../../../versioning'; import type { UpdateArtifact, @@ -167,9 +166,6 @@ export async function updateArtifacts({ massageProviderLookupName(dep); const { registryUrls, newVersion, packageName } = dep; - const registryUrl = registryUrls - ? registryUrls[0] - : TerraformProviderDatasource.defaultRegistryUrls[0]; const updateLock = locks.find( (value) => value.packageName === packageName, ); @@ -191,6 +187,10 @@ export async function updateArtifacts({ continue; } } + + // use registryURL defined in the update and fall back to the one defined in the lockfile + const registryUrl = registryUrls?.[0] ?? updateLock.registryUrl; + const newConstraint = getNewConstraint(dep, updateLock.constraints); const update: ProviderLockUpdate = { // TODO #22198 diff --git a/lib/modules/manager/terraform/readme.md b/lib/modules/manager/terraform/readme.md index bb3c4e7e8e4229..ebf59f69447b68 100644 --- a/lib/modules/manager/terraform/readme.md +++ b/lib/modules/manager/terraform/readme.md @@ -1,3 +1,20 @@ +### Terraform vs OpenTofu + +There is no way for Renovate to differentiate, if a user is a Terraform user or has already adopted OpenTofu. +Therefore, Renovate defaults currently to interpret providers without a registry definition to be located at `registry.terraform.io`. +This behaviour can be modified using `packageRules`: + +```json title="Prefer releases from OpenTofu" +{ + "packageRules": [ + { + "matchDatasources": ["terraform-provider"], + "registryUrl": "https://registry.opentofu.org" + } + ] +} +``` + ### Supported dependencies Renovate supports updating the Terraform dependencies listed below. From d8eaf6b03b80036f4891f6c3689180553ce8354b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 7 May 2024 01:04:14 -0300 Subject: [PATCH 064/172] refactor: Make "UpdateArtifactsResult" a union type (#28884) --- lib/modules/manager/types.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 40e4586a5bdd4b..754d68da8a2ef7 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -187,10 +187,15 @@ export interface ArtifactError { stderr?: string; } -export interface UpdateArtifactsResult { - artifactError?: ArtifactError; - file?: FileChange; -} +export type UpdateArtifactsResult = + | { + file?: FileChange; + artifactError?: undefined; + } + | { + file?: undefined; + artifactError?: ArtifactError; + }; export interface UpdateArtifact> { packageFileName: string; From 750230f4d2f0a4fa69aaa84db93e90f2560fb891 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 04:16:49 +0000 Subject: [PATCH 065/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.5 (#28892) 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 08ae23725f5af9..25131c290e21c8 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -492,7 +492,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.4', + default: 'ghcr.io/containerbase/sidecar:10.6.5', globalOnly: true, }, { From 141548ddcadf5cf52fb3eb97846bd4dfbb321d38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 06:17:22 +0200 Subject: [PATCH 066/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.5 (#28891) 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 73e53dd595edcd..f0a71f220f2ca6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.4 +FROM ghcr.io/containerbase/devcontainer:10.6.5 From 3ab00903cbfc4d8a3f2e8ddb209f13ae210d1b68 Mon Sep 17 00:00:00 2001 From: Fuxing Loh <4266087+fuxingloh@users.noreply.github.com> Date: Tue, 7 May 2024 12:56:41 +0800 Subject: [PATCH 067/172] feat(presets): add eslint monorepo (#25876) Co-authored-by: Rhys Arkins --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index 2c2dbd9412ce79..ab3bba14d6982a 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -277,6 +277,7 @@ const repoGroups = { 'ember-decorators': 'https://github.com/ember-decorators/ember-decorators', emojibase: 'https://github.com/milesj/emojibase', emotion: 'https://github.com/emotion-js/emotion', + eslint: 'https://github.com/eslint/eslint', 'eslint-config-globex': 'https://github.com/GlobexDesignsInc/eslint-config-globex', 'eslint-stylistic': 'https://github.com/eslint-stylistic/eslint-stylistic', From 62ebbbc12f7e84b0ac9a7a6c973b9c8949e4492e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 05:08:25 +0000 Subject: [PATCH 068/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.1 (#28894) 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 438e2e28d8db85..a55d0a334cfce0 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.0@sha256:770eba93a606fbcea7337ebc4a491c2322c684d1798a6da86e55ac23f0f02f7f AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.1@sha256:abb88642387d4d4d44e234a15df4b732e368f38e6259a52de48813698df10509 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.0-full@sha256:295d4c6c69f59a2bab61a0002e31f60f1a2a6caf0feb92863c014edc924e233d AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.1-full@sha256:b2734d4ee3a5a45b8c05a19cadc2947bb70664955c021681263e3c72830f6a29 AS full-base # -------------------------------------- # build image From ee5d8741420b86672c6e3a4ba7b1cef31f130702 Mon Sep 17 00:00:00 2001 From: schelv <13403863+schelv@users.noreply.github.com> Date: Tue, 7 May 2024 07:12:38 +0200 Subject: [PATCH 069/172] feat(presets): Add registry url to gitlabPipelineVersions (#26139) --- lib/config/presets/internal/regex-managers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index 3cfc679042d8a5..cf998276711795 100644 --- a/lib/config/presets/internal/regex-managers.ts +++ b/lib/config/presets/internal/regex-managers.ts @@ -55,7 +55,7 @@ export const presets: Record = { customType: 'regex', fileMatch: ['\\.gitlab-ci\\.ya?ml$'], matchStrings: [ - '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (?:packageName)=(?[^\\s]+?))?(?: versioning=(?[^\\s]+?))?(?: extractVersion=(?[^\\s]+?))?\\s+[A-Za-z0-9_]+?_VERSION\\s*:\\s*["\']?(?.+?)["\']?\\s', + '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (?:packageName)=(?[^\\s]+?))?(?: versioning=(?[^\\s]+?))?(?: extractVersion=(?[^\\s]+?))?(?: registryUrl=(?[^\\s]+?))?\\s+[A-Za-z0-9_]+?_VERSION\\s*:\\s*["\']?(?.+?)["\']?\\s', ], }, ], From 420f0c063c36c705ebe503a5c4a72e00ce1a28f6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 08:30:07 +0200 Subject: [PATCH 070/172] chore(deps): lock file maintenance (#28854) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Rhys Arkins --- package.json | 5 +- pnpm-lock.yaml | 1156 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 820 insertions(+), 341 deletions(-) diff --git a/package.json b/package.json index dfb8117ed63c81..4e92c6b893eb3b 100644 --- a/package.json +++ b/package.json @@ -354,6 +354,9 @@ "pnpm": { "neverBuiltDependencies": [ "dtrace-provider" - ] + ], + "overrides": { + "@types/linkify-it": "<5.0.0" + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d80707d4ab91d..cdea0c105610ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,28 +4,31 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@types/linkify-it': <5.0.0 + importers: .: dependencies: '@aws-sdk/client-codecommit': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/client-ec2': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/client-ecr': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/client-rds': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/client-s3': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/credential-providers': specifier: 3.565.0 - version: 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) + version: 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) '@breejs/later': specifier: 4.2.0 version: 4.2.0 @@ -594,7 +597,7 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5) @@ -671,22 +674,34 @@ packages: resolution: {integrity: sha512-e5ioE9XBV6bJTrCClvCpK9vGP+Dp69y/LcC4ENfPcEM+BniQau2StCWcNkFuvVXyuKuk0drS+ZLnP+tefNEJ4A==} engines: {node: '>=14.0.0'} - '@aws-sdk/client-sso-oidc@3.565.0': - resolution: {integrity: sha512-uMdjTRa8cPGo+7JPjEkesh6jNEZG8uJS44cWeskTHTVhHWcdwXvjSwQWmeXlkYVhHQSwG9Ps3pq12Vpw9oFrxg==} - engines: {node: '>=14.0.0'} + '@aws-sdk/client-sso-oidc@3.569.0': + resolution: {integrity: sha512-u5DEjNEvRvlKKh1QLCDuQ8GIrx+OFvJFLfhorsp4oCxDylvORs+KfyKKnJAw4wYEEHyxyz9GzHD7p6a8+HLVHw==} + engines: {node: '>=16.0.0'} '@aws-sdk/client-sso@3.556.0': resolution: {integrity: sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw==} engines: {node: '>=14.0.0'} + '@aws-sdk/client-sso@3.568.0': + resolution: {integrity: sha512-LSD7k0ZBQNWouTN5dYpUkeestoQ+r5u6cp6o+FATKeiFQET85RNA3xJ4WPnOI5rBC1PETKhQXvF44863P3hCaQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.565.0': resolution: {integrity: sha512-c2T20tz+Akn9uBgmZPPK3VLpgzYGVuHxKNisLwGtGL5NdQSoZZ6HNT08PY3KB12Ou8VcZLv8cvUz2Nivqhg4RA==} engines: {node: '>=14.0.0'} + '@aws-sdk/client-sts@3.569.0': + resolution: {integrity: sha512-3AyipQ2zHszkcTr8n1Sp7CiMUi28aMf1vOhEo0KKi0DWGo1Z1qJEpWeRP363KG0n9/8U3p1IkXGz5FRbpXZxIw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.556.0': resolution: {integrity: sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==} engines: {node: '>=14.0.0'} + '@aws-sdk/core@3.567.0': + resolution: {integrity: sha512-zUDEQhC7blOx6sxhHdT75x98+SXQVdUIMu8z8AjqMWiYK2v4WkOS8i6dOS4E5OjL5J1Ac+ruy8op/Bk4AFqSIw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-cognito-identity@3.565.0': resolution: {integrity: sha512-nOI0RYE0aHByaDI8w5Eu855fGOwGuAPEeCUgu8AIhExvDUZ5bmiwMN4TxHJW/+CEgQB8uZcPYCDEUMzqr0yh5w==} engines: {node: '>=14.0.0'} @@ -695,34 +710,66 @@ packages: resolution: {integrity: sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==} engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-env@3.568.0': + resolution: {integrity: sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.552.0': resolution: {integrity: sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==} engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-http@3.568.0': + resolution: {integrity: sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-ini@3.565.0': resolution: {integrity: sha512-H9+etKKjeQot3vKzuE/osTb1xMzYW0UNQZSLSt1T4fZYSMdEgnOFXRwT0kw8yGMtSQuWMYZcXYHv0jMYetho4A==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.565.0 + '@aws-sdk/credential-provider-ini@3.568.0': + resolution: {integrity: sha512-m5DUN9mpto5DhEvo6w3+8SS6q932ja37rTNvpPqWJIaWhj7OorAwVirSaJQAQB/M8+XCUIrUonxytphZB28qGQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.568.0 + '@aws-sdk/credential-provider-node@3.565.0': resolution: {integrity: sha512-d9xlnyd6Ba7DMJNTy0hoAHexFTOx8LWn1XPWbHZqgyRb+0YDIOhPN2ADYxE4Zq+Dc03MLTqq15zWOUhIqAPLuQ==} engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-node@3.569.0': + resolution: {integrity: sha512-7jH4X2qlPU3PszZP1zvHJorhLARbU1tXvp8ngBe8ArXBrkFpl/dQ2Y/IRAICPm/pyC1IEt8L/CvKp+dz7v/eRw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.535.0': resolution: {integrity: sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==} engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-process@3.568.0': + resolution: {integrity: sha512-r01zbXbanP17D+bQUb7mD8Iu2SuayrrYZ0Slgvx32qgz47msocV9EPCSwI4Hkw2ZtEPCeLQR4XCqFJB1D9P50w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.565.0': resolution: {integrity: sha512-MWefgFWt5BvVMlbjS0mxolxJPA8BKSnzfbdgGCoyEImuHa3GzVArYDQru4oWk6lD+naZFVHzPjHzEDYMag2KGw==} engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-sso@3.568.0': + resolution: {integrity: sha512-+TA77NWOEXMUcfLoOuim6xiyXFg1GqHj55ggI1goTKGVvdHYZ+rhxZbwjI29+ewzPt/qcItDJcvhrjOrg9lCag==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-web-identity@3.565.0': resolution: {integrity: sha512-+MWMp3jxn93Ol2E2gjjXjqoZDNMao03OErGmGoDKMIlu322jNHTvYZo5W0WBy+615mnDKahbX55MmVBge/FwDg==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.565.0 + '@aws-sdk/credential-provider-web-identity@3.568.0': + resolution: {integrity: sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.568.0 + '@aws-sdk/credential-providers@3.565.0': resolution: {integrity: sha512-heCRN2Qrje8Nu8TKo+EMM5ToIRECIuCLfHKf2hvkl9iWUs/a7ailNTWUqhE4gqZKGDvFO9dbvqxwKRKi5YXfiA==} engines: {node: '>=14.0.0'} @@ -743,6 +790,10 @@ packages: resolution: {integrity: sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==} engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-host-header@3.567.0': + resolution: {integrity: sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-location-constraint@3.535.0': resolution: {integrity: sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw==} engines: {node: '>=14.0.0'} @@ -751,10 +802,18 @@ packages: resolution: {integrity: sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==} engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-logger@3.568.0': + resolution: {integrity: sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.535.0': resolution: {integrity: sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==} engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-recursion-detection@3.567.0': + resolution: {integrity: sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-sdk-ec2@3.556.0': resolution: {integrity: sha512-577F9J+H65T/xYde6iy0RnArw3VAHlf9UTfSuHlJvpc9e6o2rd43FISVCNTdA+RCbJpmdWsaZSws0EYGJD+Sag==} engines: {node: '>=14.0.0'} @@ -779,10 +838,18 @@ packages: resolution: {integrity: sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==} engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-user-agent@3.567.0': + resolution: {integrity: sha512-a7DBGMRBLWJU3BqrQjOtKS4/RcCh/BhhKqwjCE0FEhhm6A/GGuAs/DcBGOl6Y8Wfsby3vejSlppTLH/qtV1E9w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.535.0': resolution: {integrity: sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==} engines: {node: '>=14.0.0'} + '@aws-sdk/region-config-resolver@3.567.0': + resolution: {integrity: sha512-VMDyYi5Dh2NydDiIARZ19DwMfbyq0llS736cp47qopmO6wzdeul7WRTx8NKfEYN0/AwEaqmTW0ohx58jSB1lYg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/signature-v4-multi-region@3.556.0': resolution: {integrity: sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow==} engines: {node: '>=14.0.0'} @@ -793,10 +860,20 @@ packages: peerDependencies: '@aws-sdk/client-sso-oidc': ^3.565.0 + '@aws-sdk/token-providers@3.568.0': + resolution: {integrity: sha512-mCQElYzY5N2JlXB7LyjOoLvRN/JiSV+E9szLwhYN3dleTUCMbGqWb7RiAR2V3fO+mz8f9kR7DThTExKJbKogKw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.568.0 + '@aws-sdk/types@3.535.0': resolution: {integrity: sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==} engines: {node: '>=14.0.0'} + '@aws-sdk/types@3.567.0': + resolution: {integrity: sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-arn-parser@3.535.0': resolution: {integrity: sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg==} engines: {node: '>=14.0.0'} @@ -805,17 +882,24 @@ packages: resolution: {integrity: sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==} engines: {node: '>=14.0.0'} + '@aws-sdk/util-endpoints@3.567.0': + resolution: {integrity: sha512-WVhot3qmi0BKL9ZKnUqsvCd++4RF2DsJIG32NlRaml1FT9KaqSzNv0RXeA6k/kYwiiNT7y3YWu3Lbzy7c6vG9g==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-format-url@3.535.0': resolution: {integrity: sha512-ElbNkm0bddu53CuW44Iuux1ZbTV50fydbSh/4ypW3LrmUvHx193ogj0HXQ7X26kmmo9rXcsrLdM92yIeTjidVg==} engines: {node: '>=14.0.0'} - '@aws-sdk/util-locate-window@3.535.0': - resolution: {integrity: sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} '@aws-sdk/util-user-agent-browser@3.535.0': resolution: {integrity: sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==} + '@aws-sdk/util-user-agent-browser@3.567.0': + resolution: {integrity: sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA==} + '@aws-sdk/util-user-agent-node@3.535.0': resolution: {integrity: sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==} engines: {node: '>=14.0.0'} @@ -825,6 +909,15 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.568.0': + resolution: {integrity: sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/util-utf8-browser@3.259.0': resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} @@ -840,12 +933,12 @@ packages: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.4': - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + '@babel/core@7.24.5': + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.4': - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + '@babel/generator@7.24.5': + resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.23.6': @@ -868,46 +961,46 @@ packages: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + '@babel/helper-module-transforms@7.24.5': + resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + '@babel/helper-plugin-utils@7.24.5': + resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + '@babel/helper-simple-access@7.24.5': + resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + '@babel/helper-split-export-declaration@7.24.5': + resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.24.1': resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.5': + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.4': - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + '@babel/helpers@7.24.5': + resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/highlight@7.24.5': + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.4': - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + '@babel/parser@7.24.5': + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true @@ -984,20 +1077,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.24.4': - resolution: {integrity: sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==} + '@babel/runtime-corejs3@7.24.5': + resolution: {integrity: sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==} engines: {node: '>=6.9.0'} '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.1': - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + '@babel/traverse@7.24.5': + resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + '@babel/types@7.24.5': + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1231,8 +1324,14 @@ packages: '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@22.1.0': - resolution: {integrity: sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==} + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + + '@octokit/plugin-paginate-rest@11.3.1': + resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' '@octokit/plugin-paginate-rest@9.2.1': resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} @@ -1246,11 +1345,11 @@ packages: peerDependencies: '@octokit/core': '5' - '@octokit/plugin-rest-endpoint-methods@10.4.1': - resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} + '@octokit/plugin-rest-endpoint-methods@13.2.2': + resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': ^5 '@octokit/plugin-retry@6.0.1': resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} @@ -1272,15 +1371,15 @@ packages: resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} - '@octokit/rest@20.1.0': - resolution: {integrity: sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==} + '@octokit/rest@20.1.1': + resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} engines: {node: '>= 18'} '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.4.1': - resolution: {integrity: sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==} + '@octokit/types@13.5.0': + resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -1933,8 +2032,8 @@ packages: '@types/diff@5.2.0': resolution: {integrity: sha512-pjJH+02ukgJRW0mViDUA1cdC+wzSgRu0e4cPuogPLAw0i66y62iMP0ZlXoJAmoXrKRZnF3pMDwyKZsgNVlMX4A==} - '@types/emscripten@1.39.10': - resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} + '@types/emscripten@1.39.11': + resolution: {integrity: sha512-dOeX2BeNA7j6BTEqJQL3ut0bRCfsyQMd5i4FT8JfHfYhAOuJPCGh0dQFbxVJxUyQ+75x6enhDdndGb624/QszA==} '@types/eslint@8.56.10': resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} @@ -2014,8 +2113,8 @@ packages: '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - '@types/mdurl@1.0.5': - resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -2207,8 +2306,12 @@ packages: resolution: {integrity: sha512-jVZa3njBv6tcOUw34nlUdUM/40wwtm/gnVF8rtk0tA6vNcokqYI8CFU1BZjlpFwUSZaXxYkrtuPE/f2MMFlTxQ==} engines: {node: '>=18.12.0'} - '@yarnpkg/shell@4.0.0': - resolution: {integrity: sha512-Yk2gyiQvsoee/jXP9q0jMl412Nx27LYu+P1O4DHuxeutL9qtd6t3Ktuv+zZmOzFc6gMQ7+/6mQFPo3/LlXZM3w==} + '@yarnpkg/parsers@3.0.2': + resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==} + engines: {node: '>=18.12.0'} + + '@yarnpkg/shell@4.0.2': + resolution: {integrity: sha512-DLZSx06OoEbPY1uePt7pKEgpWDk96PldrCdWBPqI5Np5/YAEo6+toVcjz+6fORMOE8PS3Bsep1Nfm2mUrY1Oxg==} engines: {node: '>=18.12.0'} hasBin: true @@ -2528,8 +2631,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001614: - resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} + caniuse-lite@1.0.30001616: + resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} @@ -2903,8 +3006,8 @@ packages: engines: {node: '>=16'} hasBin: true - electron-to-chromium@1.4.750: - resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==} + electron-to-chromium@1.4.756: + resolution: {integrity: sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -3361,8 +3464,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.7.4: + resolution: {integrity: sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ==} git-log-parser@1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} @@ -3415,8 +3518,8 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} globby@11.1.0: @@ -3523,8 +3626,8 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} html-escaper@2.0.2: @@ -3610,8 +3713,8 @@ packages: engines: {node: '>=8'} hasBin: true - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -4066,8 +4169,8 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-parse-even-better-errors@3.0.1: - resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} json-schema-traverse@0.4.1: @@ -4237,8 +4340,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - make-fetch-happen@13.0.0: - resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} + make-fetch-happen@13.0.1: + resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} makeerror@1.0.12: @@ -4394,8 +4497,8 @@ packages: resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} engines: {node: '>=16 || 14 >=14.17'} - minipass-fetch@3.0.4: - resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} + minipass-fetch@3.0.5: + resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} minipass-flush@1.0.5: @@ -4422,8 +4525,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.0: + resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: @@ -4534,8 +4637,8 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true @@ -4546,8 +4649,8 @@ packages: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} - normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} + normalize-package-data@6.0.1: + resolution: {integrity: sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==} engines: {node: ^16.14.0 || >=18.0.0} normalize-path@3.0.0: @@ -4579,8 +4682,8 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm@10.6.0: - resolution: {integrity: sha512-KC70Su2ZnO9v4i2t+M0sQcsRERk++XcYbK9fy4bLWzUCV2nELhSN7UAkoe42P4HQTg2LyQxcfntgYS89OEaOsA==} + npm@10.7.0: + resolution: {integrity: sha512-FXylyYSXNjgXx3l82BT8RSQvCoGIQ3h8YdRFGKNvo3Pv/bKscK4pdWkx/onwTpHDqGw+oeLf4Rxln9WVyxAxlQ==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -4639,7 +4742,6 @@ packages: - pacote - parse-conflict-json - proc-log - - proggy - qrcode-terminal - read - semver @@ -4930,6 +5032,10 @@ packages: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -5351,8 +5457,8 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} stack-utils@2.0.6: @@ -5786,8 +5892,8 @@ packages: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + update-browserslist-db@1.0.15: + resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5966,9 +6072,6 @@ packages: zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} -neverBuiltDependencies: - - dtrace-provider - snapshots: '@actions/core@1.10.1': @@ -5993,13 +6096,13 @@ snapshots: '@aws-crypto/crc32@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 + '@aws-sdk/types': 3.567.0 tslib: 1.14.1 '@aws-crypto/crc32c@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 + '@aws-sdk/types': 3.567.0 tslib: 1.14.1 '@aws-crypto/ie11-detection@3.0.0': @@ -6011,8 +6114,8 @@ snapshots: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-locate-window': 3.535.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-locate-window': 3.568.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -6022,15 +6125,15 @@ snapshots: '@aws-crypto/sha256-js': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-locate-window': 3.535.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-locate-window': 3.568.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 '@aws-crypto/sha256-js@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 + '@aws-sdk/types': 3.567.0 tslib: 1.14.1 '@aws-crypto/supports-web-crypto@3.0.0': @@ -6039,16 +6142,16 @@ snapshots: '@aws-crypto/util@3.0.0': dependencies: - '@aws-sdk/types': 3.535.0 + '@aws-sdk/types': 3.567.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - '@aws-sdk/client-codecommit@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-codecommit@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6090,12 +6193,12 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-cognito-identity@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-cognito-identity@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6136,12 +6239,12 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-ec2@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-ec2@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6185,12 +6288,12 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-ecr@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-ecr@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6232,12 +6335,12 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-rds@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-rds@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6280,13 +6383,13 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-s3@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/client-s3@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-bucket-endpoint': 3.535.0 '@aws-sdk/middleware-expect-continue': 3.535.0 '@aws-sdk/middleware-flexible-checksums': 3.535.0 @@ -6343,21 +6446,67 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)': + '@aws-sdk/client-sso-oidc@3.569.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) - '@aws-sdk/middleware-host-header': 3.535.0 - '@aws-sdk/middleware-logger': 3.535.0 - '@aws-sdk/middleware-recursion-detection': 3.535.0 - '@aws-sdk/middleware-user-agent': 3.540.0 - '@aws-sdk/region-config-resolver': 3.535.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-endpoints': 3.540.0 - '@aws-sdk/util-user-agent-browser': 3.535.0 - '@aws-sdk/util-user-agent-node': 3.535.0 + '@aws-sdk/client-sts': 3.569.0 + '@aws-sdk/core': 3.567.0 + '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/middleware-host-header': 3.567.0 + '@aws-sdk/middleware-logger': 3.568.0 + '@aws-sdk/middleware-recursion-detection': 3.567.0 + '@aws-sdk/middleware-user-agent': 3.567.0 + '@aws-sdk/region-config-resolver': 3.567.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-endpoints': 3.567.0 + '@aws-sdk/util-user-agent-browser': 3.567.0 + '@aws-sdk/util-user-agent-node': 3.568.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.569.0 + '@aws-sdk/core': 3.567.0 + '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/middleware-host-header': 3.567.0 + '@aws-sdk/middleware-logger': 3.568.0 + '@aws-sdk/middleware-recursion-detection': 3.567.0 + '@aws-sdk/middleware-user-agent': 3.567.0 + '@aws-sdk/region-config-resolver': 3.567.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-endpoints': 3.567.0 + '@aws-sdk/util-user-agent-browser': 3.567.0 + '@aws-sdk/util-user-agent-node': 3.568.0 '@smithy/config-resolver': 2.2.0 '@smithy/core': 1.4.2 '@smithy/fetch-http-handler': 2.5.0 @@ -6431,12 +6580,55 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))': + '@aws-sdk/client-sso@3.568.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.567.0 + '@aws-sdk/middleware-host-header': 3.567.0 + '@aws-sdk/middleware-logger': 3.568.0 + '@aws-sdk/middleware-recursion-detection': 3.567.0 + '@aws-sdk/middleware-user-agent': 3.567.0 + '@aws-sdk/region-config-resolver': 3.567.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-endpoints': 3.567.0 + '@aws-sdk/util-user-agent-browser': 3.567.0 + '@aws-sdk/util-user-agent-node': 3.568.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/middleware-host-header': 3.535.0 '@aws-sdk/middleware-logger': 3.535.0 '@aws-sdk/middleware-recursion-detection': 3.535.0 @@ -6476,6 +6668,51 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/client-sts@3.569.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.569.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/core': 3.567.0 + '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/middleware-host-header': 3.567.0 + '@aws-sdk/middleware-logger': 3.568.0 + '@aws-sdk/middleware-recursion-detection': 3.567.0 + '@aws-sdk/middleware-user-agent': 3.567.0 + '@aws-sdk/region-config-resolver': 3.567.0 + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-endpoints': 3.567.0 + '@aws-sdk/util-user-agent-browser': 3.567.0 + '@aws-sdk/util-user-agent-node': 3.568.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/core@3.556.0': dependencies: '@smithy/core': 1.4.2 @@ -6486,9 +6723,19 @@ snapshots: fast-xml-parser: 4.2.5 tslib: 2.6.2 - '@aws-sdk/credential-provider-cognito-identity@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/core@3.567.0': + dependencies: + '@smithy/core': 1.4.2 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-cognito-identity@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: - '@aws-sdk/client-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/client-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 @@ -6505,6 +6752,13 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/credential-provider-env@3.568.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/credential-provider-http@3.552.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6517,13 +6771,25 @@ snapshots: '@smithy/util-stream': 2.2.0 tslib: 2.6.2 - '@aws-sdk/credential-provider-ini@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/credential-provider-http@3.568.0': dependencies: - '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) + '@aws-sdk/types': 3.567.0 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/property-provider': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/util-stream': 2.2.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-ini@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': + dependencies: + '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) '@aws-sdk/credential-provider-env': 3.535.0 '@aws-sdk/credential-provider-process': 3.535.0 - '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) - '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/types': 3.535.0 '@smithy/credential-provider-imds': 2.3.0 '@smithy/property-provider': 2.2.0 @@ -6534,14 +6800,48 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/credential-provider-ini@3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))(@aws-sdk/client-sts@3.569.0)': + dependencies: + '@aws-sdk/client-sts': 3.569.0 + '@aws-sdk/credential-provider-env': 3.568.0 + '@aws-sdk/credential-provider-process': 3.568.0 + '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0)) + '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.568.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)': + dependencies: + '@aws-sdk/client-sts': 3.569.0 + '@aws-sdk/credential-provider-env': 3.568.0 + '@aws-sdk/credential-provider-process': 3.568.0 + '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': dependencies: '@aws-sdk/credential-provider-env': 3.535.0 '@aws-sdk/credential-provider-http': 3.552.0 - '@aws-sdk/credential-provider-ini': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-ini': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/credential-provider-process': 3.535.0 - '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) - '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/types': 3.535.0 '@smithy/credential-provider-imds': 2.3.0 '@smithy/property-provider': 2.2.0 @@ -6553,6 +6853,44 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.569.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))(@aws-sdk/client-sts@3.569.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.568.0 + '@aws-sdk/credential-provider-http': 3.568.0 + '@aws-sdk/credential-provider-ini': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/credential-provider-process': 3.568.0 + '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0)) + '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-node@3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.568.0 + '@aws-sdk/credential-provider-http': 3.568.0 + '@aws-sdk/credential-provider-ini': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/credential-provider-process': 3.568.0 + '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-process@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6561,10 +6899,18 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 - '@aws-sdk/credential-provider-sso@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))': + '@aws-sdk/credential-provider-process@3.568.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-sso@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)': dependencies: '@aws-sdk/client-sso': 3.556.0 - '@aws-sdk/token-providers': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) + '@aws-sdk/token-providers': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 @@ -6574,27 +6920,61 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)))': + '@aws-sdk/credential-provider-sso@3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))': + dependencies: + '@aws-sdk/client-sso': 3.568.0 + '@aws-sdk/token-providers': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0)) + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-sso@3.568.0(@aws-sdk/client-sso-oidc@3.569.0)': dependencies: - '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) + '@aws-sdk/client-sso': 3.568.0 + '@aws-sdk/token-providers': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0))': + dependencies: + '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 tslib: 2.6.2 - '@aws-sdk/credential-providers@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))': + '@aws-sdk/credential-provider-web-identity@3.568.0(@aws-sdk/client-sts@3.569.0)': dependencies: - '@aws-sdk/client-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/client-sts': 3.569.0 + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + + '@aws-sdk/credential-providers@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)': + dependencies: + '@aws-sdk/client-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/client-sso': 3.556.0 - '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) - '@aws-sdk/credential-provider-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/client-sts': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-cognito-identity': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/credential-provider-env': 3.535.0 '@aws-sdk/credential-provider-http': 3.552.0 - '@aws-sdk/credential-provider-ini': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) - '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-ini': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) + '@aws-sdk/credential-provider-node': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/credential-provider-process': 3.535.0 - '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0)) - '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))) + '@aws-sdk/credential-provider-sso': 3.565.0(@aws-sdk/client-sso-oidc@3.569.0) + '@aws-sdk/credential-provider-web-identity': 3.565.0(@aws-sdk/client-sts@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)) '@aws-sdk/types': 3.535.0 '@smithy/credential-provider-imds': 2.3.0 '@smithy/property-provider': 2.2.0 @@ -6639,6 +7019,13 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/middleware-host-header@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/middleware-location-constraint@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6651,6 +7038,12 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/middleware-logger@3.568.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/middleware-recursion-detection@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6658,6 +7051,13 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/middleware-recursion-detection@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/middleware-sdk-ec2@3.556.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6715,6 +7115,14 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/middleware-user-agent@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@aws-sdk/util-endpoints': 3.567.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/region-config-resolver@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6724,6 +7132,15 @@ snapshots: '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 + '@aws-sdk/region-config-resolver@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-config-provider': 2.3.0 + '@smithy/util-middleware': 2.2.0 + tslib: 2.6.2 + '@aws-sdk/signature-v4-multi-region@3.556.0': dependencies: '@aws-sdk/middleware-sdk-s3': 3.556.0 @@ -6733,20 +7150,43 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 - '@aws-sdk/token-providers@3.565.0(@aws-sdk/client-sso-oidc@3.565.0(@aws-sdk/client-sts@3.565.0))': + '@aws-sdk/token-providers@3.565.0(@aws-sdk/client-sso-oidc@3.569.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.565.0(@aws-sdk/client-sts@3.565.0) + '@aws-sdk/client-sso-oidc': 3.569.0 '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/token-providers@3.568.0(@aws-sdk/client-sso-oidc@3.569.0(@aws-sdk/client-sts@3.569.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.569.0(@aws-sdk/client-sts@3.569.0) + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + + '@aws-sdk/token-providers@3.568.0(@aws-sdk/client-sso-oidc@3.569.0)': + dependencies: + '@aws-sdk/client-sso-oidc': 3.569.0 + '@aws-sdk/types': 3.567.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/types@3.535.0': dependencies: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/types@3.567.0': + dependencies: + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/util-arn-parser@3.535.0': dependencies: tslib: 2.6.2 @@ -6758,6 +7198,13 @@ snapshots: '@smithy/util-endpoints': 1.2.0 tslib: 2.6.2 + '@aws-sdk/util-endpoints@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/types': 2.12.0 + '@smithy/util-endpoints': 1.2.0 + tslib: 2.6.2 + '@aws-sdk/util-format-url@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6765,7 +7212,7 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 - '@aws-sdk/util-locate-window@3.535.0': + '@aws-sdk/util-locate-window@3.568.0': dependencies: tslib: 2.6.2 @@ -6776,6 +7223,13 @@ snapshots: bowser: 2.11.0 tslib: 2.6.2 + '@aws-sdk/util-user-agent-browser@3.567.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/types': 2.12.0 + bowser: 2.11.0 + tslib: 2.6.2 + '@aws-sdk/util-user-agent-node@3.535.0': dependencies: '@aws-sdk/types': 3.535.0 @@ -6783,6 +7237,13 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/util-user-agent-node@3.568.0': + dependencies: + '@aws-sdk/types': 3.567.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + '@aws-sdk/util-utf8-browser@3.259.0': dependencies: tslib: 2.6.2 @@ -6794,23 +7255,23 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 '@babel/compat-data@7.24.4': {} - '@babel/core@7.24.4': + '@babel/core@7.24.5': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helpers': 7.24.5 + '@babel/parser': 7.24.5 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -6819,9 +7280,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.24.4': + '@babel/generator@7.24.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -6839,131 +7300,131 @@ snapshots: '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@babel/helper-hoist-variables@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@babel/helper-module-imports@7.24.3': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': + '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-simple-access': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 - '@babel/helper-plugin-utils@7.24.0': {} + '@babel/helper-plugin-utils@7.24.5': {} - '@babel/helper-simple-access@7.22.5': + '@babel/helper-simple-access@7.24.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - '@babel/helper-split-export-declaration@7.22.6': + '@babel/helper-split-export-declaration@7.24.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.5': {} '@babel/helper-validator-option@7.23.5': {} - '@babel/helpers@7.24.4': + '@babel/helpers@7.24.5': dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 transitivePeerDependencies: - supports-color - '@babel/highlight@7.24.2': + '@babel/highlight@7.24.5': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - '@babel/parser@7.24.4': + '@babel/parser@7.24.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - '@babel/runtime-corejs3@7.24.4': + '@babel/runtime-corejs3@7.24.5': dependencies: core-js-pure: 3.37.0 regenerator-runtime: 0.14.1 @@ -6971,28 +7432,28 @@ snapshots: '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 - '@babel/traverse@7.24.1': + '@babel/traverse@7.24.5': dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.0': + '@babel/types@7.24.5': dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 '@bcoe/v8-coverage@0.2.3': {} @@ -7209,7 +7670,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -7319,24 +7780,29 @@ snapshots: '@octokit/graphql': 7.1.0 '@octokit/request': 8.4.0 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 '@octokit/endpoint@9.0.5': dependencies: - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 '@octokit/openapi-types@20.0.0': {} - '@octokit/openapi-types@22.1.0': {} + '@octokit/openapi-types@22.2.0': {} + + '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 13.5.0 '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)': dependencies: @@ -7347,10 +7813,10 @@ snapshots: dependencies: '@octokit/core': 5.2.0 - '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)': + '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 12.6.0 + '@octokit/types': 13.5.0 '@octokit/plugin-retry@6.0.1(@octokit/core@5.2.0)': dependencies: @@ -7367,7 +7833,7 @@ snapshots: '@octokit/request-error@5.1.0': dependencies: - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 deprecation: 2.3.1 once: 1.4.0 @@ -7375,23 +7841,23 @@ snapshots: dependencies: '@octokit/endpoint': 9.0.5 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 - '@octokit/rest@20.1.0': + '@octokit/rest@20.1.1': dependencies: '@octokit/core': 5.2.0 - '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) + '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) - '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) + '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) '@octokit/types@12.6.0': dependencies: '@octokit/openapi-types': 20.0.0 - '@octokit/types@13.4.1': + '@octokit/types@13.5.0': dependencies: - '@octokit/openapi-types': 22.1.0 + '@octokit/openapi-types': 22.2.0 '@one-ini/wasm@0.1.1': {} @@ -7577,7 +8043,7 @@ snapshots: '@qnighy/marshal@0.1.3': dependencies: - '@babel/runtime-corejs3': 7.24.4 + '@babel/runtime-corejs3': 7.24.5 '@redis/bloom@1.2.0(@redis/client@1.5.14)': dependencies: @@ -7629,7 +8095,7 @@ snapshots: '@renovatebot/osv-offline@1.5.4(encoding@0.1.13)': dependencies: - '@octokit/rest': 20.1.0 + '@octokit/rest': 20.1.1 '@renovatebot/osv-offline-db': 1.6.0 adm-zip: 0.5.12 fs-extra: 11.2.0 @@ -7711,7 +8177,7 @@ snapshots: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.1 - npm: 10.6.0 + npm: 10.7.0 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 @@ -8188,24 +8654,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 '@types/babel__traverse@7.20.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@types/better-sqlite3@7.6.10': dependencies: @@ -8244,7 +8710,7 @@ snapshots: '@types/diff@5.2.0': {} - '@types/emscripten@1.39.10': {} + '@types/emscripten@1.39.11': {} '@types/eslint@8.56.10': dependencies: @@ -8309,7 +8775,7 @@ snapshots: '@types/markdown-it@14.0.1': dependencies: '@types/linkify-it': 3.0.5 - '@types/mdurl': 1.0.5 + '@types/mdurl': 2.0.0 '@types/markdown-table@2.0.0': {} @@ -8321,7 +8787,7 @@ snapshots: dependencies: '@types/unist': 2.0.10 - '@types/mdurl@1.0.5': {} + '@types/mdurl@2.0.0': {} '@types/minimist@1.2.5': {} @@ -8534,7 +9000,7 @@ snapshots: '@yarnpkg/fslib': 3.0.2 '@yarnpkg/libzip': 3.0.1(@yarnpkg/fslib@3.0.2) '@yarnpkg/parsers': 3.0.0 - '@yarnpkg/shell': 4.0.0(typanion@3.14.0) + '@yarnpkg/shell': 4.0.2(typanion@3.14.0) camelcase: 5.3.1 chalk: 3.0.0 ci-info: 3.9.0 @@ -8563,7 +9029,7 @@ snapshots: '@yarnpkg/libzip@3.0.1(@yarnpkg/fslib@3.0.2)': dependencies: - '@types/emscripten': 1.39.10 + '@types/emscripten': 1.39.11 '@yarnpkg/fslib': 3.0.2 tslib: 2.6.2 @@ -8572,10 +9038,15 @@ snapshots: js-yaml: 3.14.1 tslib: 2.6.2 - '@yarnpkg/shell@4.0.0(typanion@3.14.0)': + '@yarnpkg/parsers@3.0.2': + dependencies: + js-yaml: 3.14.1 + tslib: 2.6.2 + + '@yarnpkg/shell@4.0.2(typanion@3.14.0)': dependencies: '@yarnpkg/fslib': 3.0.2 - '@yarnpkg/parsers': 3.0.0 + '@yarnpkg/parsers': 3.0.2 chalk: 3.0.0 clipanion: 4.0.0-rc.3(typanion@3.14.0) cross-spawn: 7.0.3 @@ -8760,13 +9231,13 @@ snapshots: tunnel: 0.0.6 typed-rest-client: 1.8.11 - babel-jest@29.7.0(@babel/core@7.24.4): + babel-jest@29.7.0(@babel/core@7.24.5): dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.4) + babel-preset-jest: 29.6.3(@babel/core@7.24.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -8775,7 +9246,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -8786,31 +9257,31 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - - babel-preset-jest@29.6.3(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5): + dependencies: + '@babel/core': 7.24.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + + babel-preset-jest@29.6.3(@babel/core@7.24.5): + dependencies: + '@babel/core': 7.24.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) backslash@0.2.0: {} @@ -8870,10 +9341,10 @@ snapshots: browserslist@4.23.0: dependencies: - caniuse-lite: 1.0.30001614 - electron-to-chromium: 1.4.750 + caniuse-lite: 1.0.30001616 + electron-to-chromium: 1.4.756 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.15(browserslist@4.23.0) bs-logger@0.2.6: dependencies: @@ -8914,12 +9385,12 @@ snapshots: fs-minipass: 3.0.3 glob: 10.3.12 lru-cache: 10.2.2 - minipass: 7.0.4 + minipass: 7.1.0 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 p-map: 4.0.0 - ssri: 10.0.5 + ssri: 10.0.6 tar: 6.2.1 unique-filename: 3.0.0 @@ -8964,7 +9435,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001614: {} + caniuse-lite@1.0.30001616: {} cardinal@2.1.1: dependencies: @@ -9334,7 +9805,7 @@ snapshots: minimatch: 9.0.2 semver: 7.6.0 - electron-to-chromium@1.4.750: {} + electron-to-chromium@1.4.756: {} email-addresses@5.0.0: {} @@ -9404,7 +9875,7 @@ snapshots: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -9516,7 +9987,7 @@ snapshots: eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.3 + get-tsconfig: 4.7.4 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -9856,7 +10327,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.0.4 + minipass: 7.1.0 fs.realpath@1.0.0: {} @@ -9925,7 +10396,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: + get-tsconfig@4.7.4: dependencies: resolve-pkg-maps: 1.0.0 @@ -9973,7 +10444,7 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.0 path-scurry: 1.10.2 glob@6.0.4: @@ -10009,9 +10480,10 @@ snapshots: dependencies: type-fest: 0.20.2 - globalthis@1.0.3: + globalthis@1.0.4: dependencies: define-properties: 1.2.1 + gopd: 1.0.1 globby@11.1.0: dependencies: @@ -10136,7 +10608,7 @@ snapshots: dependencies: lru-cache: 6.0.0 - hosted-git-info@7.0.1: + hosted-git-info@7.0.2: dependencies: lru-cache: 10.2.2 @@ -10209,7 +10681,7 @@ snapshots: import-from-esm@1.3.4: dependencies: debug: 4.3.4 - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color @@ -10225,7 +10697,7 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - import-meta-resolve@4.0.0: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -10426,7 +10898,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10435,8 +10907,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10445,8 +10917,8 @@ snapshots: istanbul-lib-instrument@6.0.2: dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.0 @@ -10542,10 +11014,10 @@ snapshots: jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.4) + babel-jest: 29.7.0(@babel/core@7.24.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -10747,15 +11219,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.24.4 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/types': 7.24.0 + '@babel/core': 7.24.5 + '@babel/generator': 7.24.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/types': 7.24.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -10848,7 +11320,7 @@ snapshots: json-parse-even-better-errors@2.3.1: {} - json-parse-even-better-errors@3.0.1: {} + json-parse-even-better-errors@3.0.2: {} json-schema-traverse@0.4.1: {} @@ -10998,19 +11470,20 @@ snapshots: make-error@1.3.6: {} - make-fetch-happen@13.0.0: + make-fetch-happen@13.0.1: dependencies: '@npmcli/agent': 2.2.2 cacache: 18.0.2 http-cache-semantics: 4.1.1 is-lambda: 1.0.1 - minipass: 7.0.4 - minipass-fetch: 3.0.4 + minipass: 7.1.0 + minipass-fetch: 3.0.5 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 0.6.3 + proc-log: 4.2.0 promise-retry: 2.0.1 - ssri: 10.0.5 + ssri: 10.0.6 transitivePeerDependencies: - supports-color optional: true @@ -11195,11 +11668,11 @@ snapshots: minipass-collect@2.0.1: dependencies: - minipass: 7.0.4 + minipass: 7.1.0 - minipass-fetch@3.0.4: + minipass-fetch@3.0.5: dependencies: - minipass: 7.0.4 + minipass: 7.1.0 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -11227,7 +11700,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.0.4: {} + minipass@7.1.0: {} minizlib@2.1.2: dependencies: @@ -11326,8 +11799,8 @@ snapshots: exponential-backoff: 3.1.1 glob: 10.3.12 graceful-fs: 4.2.11 - make-fetch-happen: 13.0.0 - nopt: 7.2.0 + make-fetch-happen: 13.0.1 + nopt: 7.2.1 proc-log: 3.0.0 semver: 7.6.0 tar: 6.2.1 @@ -11349,7 +11822,7 @@ snapshots: node-releases@2.0.14: {} - nopt@7.2.0: + nopt@7.2.1: dependencies: abbrev: 2.0.0 optional: true @@ -11368,9 +11841,9 @@ snapshots: semver: 7.6.0 validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.0: + normalize-package-data@6.0.1: dependencies: - hosted-git-info: 7.0.1 + hosted-git-info: 7.0.2 is-core-module: 2.13.1 semver: 7.6.0 validate-npm-package-license: 3.0.4 @@ -11401,7 +11874,7 @@ snapshots: dependencies: path-key: 4.0.0 - npm@10.6.0: {} + npm@10.7.0: {} nth-check@2.1.1: dependencies: @@ -11638,7 +12111,7 @@ snapshots: path-scurry@1.10.2: dependencies: lru-cache: 10.2.2 - minipass: 7.0.4 + minipass: 7.1.0 path-to-regexp@6.2.2: {} @@ -11703,6 +12176,9 @@ snapshots: proc-log@3.0.0: optional: true + proc-log@4.2.0: + optional: true + process-nextick-args@2.0.1: {} process-on-spawn@1.0.0: @@ -11771,7 +12247,7 @@ snapshots: read-package-json-fast@3.0.2: dependencies: - json-parse-even-better-errors: 3.0.1 + json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 read-pkg-up@11.0.0: @@ -11796,7 +12272,7 @@ snapshots: read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.0 + normalize-package-data: 6.0.1 parse-json: 8.1.0 type-fest: 4.18.0 unicorn-magic: 0.1.0 @@ -11941,7 +12417,7 @@ snapshots: dependencies: boolean: 3.2.0 detect-node: 2.1.0 - globalthis: 1.0.3 + globalthis: 1.0.4 json-stringify-safe: 5.0.1 semver-compare: 1.0.0 sprintf-js: 1.1.3 @@ -11994,7 +12470,7 @@ snapshots: get-stream: 6.0.1 git-log-parser: 1.2.0 hook-std: 3.0.0 - hosted-git-info: 7.0.1 + hosted-git-info: 7.0.2 import-from-esm: 1.3.4 lodash-es: 4.17.21 marked: 9.1.6 @@ -12202,9 +12678,9 @@ snapshots: sprintf-js@1.1.3: {} - ssri@10.0.5: + ssri@10.0.6: dependencies: - minipass: 7.0.4 + minipass: 7.1.0 stack-utils@2.0.6: dependencies: @@ -12431,7 +12907,7 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -12444,9 +12920,9 @@ snapshots: typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.4) + babel-jest: 29.7.0(@babel/core@7.24.5) ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5): dependencies: @@ -12644,7 +13120,7 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.0.13(browserslist@4.23.0): + update-browserslist-db@1.0.15(browserslist@4.23.0): dependencies: browserslist: 4.23.0 escalade: 3.1.2 From 0c0be8efe51f8c04c647472af9e32c07fefe12b9 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 7 May 2024 08:30:45 +0200 Subject: [PATCH 071/172] chore(label-actions): add auto:inactivity-pr-close (#28896) --- .github/label-actions.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index f9d6b952101ae1..a17ef7795d4998 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -225,6 +225,21 @@ This Issue will now be closed and locked. We may later batch-delete this issue. This way we keep Issues actionable, and free of duplicates or wrong bug reports. + Thanks, the Renovate team + close: true + close-reason: 'not planned' + +'auto:inactivity-pr-close': + comment: > + **This PR has been closed due to inactivity, but resuming work on it in future would be welcome.** + + + We try to avoid having too many PRs open at once, so we close PRs that have been inactive for too long or which don't seem on track to be mergeable. + + + If you want to continue working on this PR, please reopen it and let us know. + + Thanks, the Renovate team close: true close-reason: 'not planned' From 95fda4913469d4ed62f6869c08974595298d63b8 Mon Sep 17 00:00:00 2001 From: Joost van den Brandt <3438285+JoostvdB94@users.noreply.github.com> Date: Tue, 7 May 2024 08:35:59 +0200 Subject: [PATCH 072/172] Fix spelling error in cli option description (#28897) --- 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 25131c290e21c8..2445717902609a 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -654,7 +654,7 @@ const options: RenovateOptions[] = [ { name: 'inheritConfigStrict', description: - 'If `true`, any `inheritedConfig` fetch errror will result in an aborted run.', + 'If `true`, any `inheritedConfig` fetch error will result in an aborted run.', type: 'boolean', default: false, globalOnly: true, From 80484aa7c2dce7a329a8e91782f3ce13da29537f Mon Sep 17 00:00:00 2001 From: wolfy1339 <4595477+wolfy1339@users.noreply.github.com> Date: Tue, 7 May 2024 02:38:41 -0400 Subject: [PATCH 073/172] feat(preset): group pinojs packages together (#28890) --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index ab3bba14d6982a..69e45386bdc6cd 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -545,6 +545,7 @@ const orgGroups = { ngrx: 'https://github.com/ngrx/', nrwl: 'https://github.com/nrwl/', octokit: 'https://github.com/octokit/', + pino: 'https://github.com/pinojs/', 'semantic-release': 'https://github.com/semantic-release/', swc: 'https://github.com/swc-project/', }; From df17e8a144a455a78fa499cefc9026745744d90f Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 7 May 2024 08:57:08 +0200 Subject: [PATCH 074/172] chore(label-actions): improve auto:inactivity-pr-close (#28898) --- .github/label-actions.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index a17ef7795d4998..6f8463a1df654f 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -231,13 +231,13 @@ 'auto:inactivity-pr-close': comment: > - **This PR has been closed due to inactivity, but resuming work on it in future would be welcome.** + **We're closing this PR due to inactivity, but we are happy for you, or others, to finish the PR.** - We try to avoid having too many PRs open at once, so we close PRs that have been inactive for too long or which don't seem on track to be mergeable. + We limit the number of open PRs, so we close stale PRs, or PRs that are not getting ready to merge. - If you want to continue working on this PR, please reopen it and let us know. + If you, or someone else, want to continue working on this PR, then please reopen this PR and let us know. Thanks, the Renovate team From f6c973ee6c767a936a42ee09016be4d961ff68ef Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 7 May 2024 10:23:17 +0200 Subject: [PATCH 075/172] fix(presets): Revert "feat(preset): group pinojs packages together" (#28901) --- lib/config/presets/internal/monorepo.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index 69e45386bdc6cd..ab3bba14d6982a 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -545,7 +545,6 @@ const orgGroups = { ngrx: 'https://github.com/ngrx/', nrwl: 'https://github.com/nrwl/', octokit: 'https://github.com/octokit/', - pino: 'https://github.com/pinojs/', 'semantic-release': 'https://github.com/semantic-release/', swc: 'https://github.com/swc-project/', }; From 7c22044015bbf99b4416147d642df97f4d7c4e20 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 09:59:04 +0000 Subject: [PATCH 076/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.2 (#28902) 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 a55d0a334cfce0..257e766f1d9d9e 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.1@sha256:abb88642387d4d4d44e234a15df4b732e368f38e6259a52de48813698df10509 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.2@sha256:cd98562e79e36229912c51e78d144cdeb6e174e49b4dbf79b13882e093ca80dd AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.1-full@sha256:b2734d4ee3a5a45b8c05a19cadc2947bb70664955c021681263e3c72830f6a29 AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.2-full@sha256:0ac44b9ee252267a64eb0814fbcdfadc4600930e0384857771f29afa2080e273 AS full-base # -------------------------------------- # build image From 2c66a362c182b10f0d4a57e7cd553e44359b5f33 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 7 May 2024 21:10:53 +0200 Subject: [PATCH 077/172] chore(schedule): log current time (#28911) --- lib/workers/repository/update/branch/schedule.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/repository/update/branch/schedule.ts b/lib/workers/repository/update/branch/schedule.ts index 22c12166779e41..ec159ba74d302c 100644 --- a/lib/workers/repository/update/branch/schedule.ts +++ b/lib/workers/repository/update/branch/schedule.ts @@ -144,7 +144,7 @@ export function isScheduledNow( let configSchedule = config[scheduleKey]; logger.debug( // TODO: types (#22198) - `Checking schedule(${String(configSchedule)}, ${config.timezone!})`, + `Checking schedule(schedule=${String(configSchedule)}, tz=${config.timezone!}, now=${new Date().toISOString()})`, ); if ( !configSchedule || From 96f760a36f489c4b1aeb4218a69009d557f0a014 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 23:29:22 +0000 Subject: [PATCH 078/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.3 (#28913) 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 257e766f1d9d9e..f303803cde8d91 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.2@sha256:cd98562e79e36229912c51e78d144cdeb6e174e49b4dbf79b13882e093ca80dd AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.3@sha256:8b53b8b1115a335884674be4c00f748363b721a8b73346baf8b68bc7465bd58c AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.2-full@sha256:0ac44b9ee252267a64eb0814fbcdfadc4600930e0384857771f29afa2080e273 AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.3-full@sha256:091b37f6224062aa62a5abc47b707c1b3f04009028f75a0b7f72b9d42c32f5d7 AS full-base # -------------------------------------- # build image From 468b0d14739c7c0dddc76f37830d0655c330007a Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Wed, 8 May 2024 12:27:55 +0545 Subject: [PATCH 079/172] feat(manager/maven): support `.mvn/extensions.xml` (#28893) --- lib/modules/manager/maven/extract.spec.ts | 63 +++++++++++++++++++++++ lib/modules/manager/maven/extract.ts | 58 +++++++++++++++++++++ lib/modules/manager/maven/index.ts | 6 ++- 3 files changed, 126 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/maven/extract.spec.ts b/lib/modules/manager/maven/extract.spec.ts index 3ff8e84aaec9d0..d6689de4238d70 100644 --- a/lib/modules/manager/maven/extract.spec.ts +++ b/lib/modules/manager/maven/extract.spec.ts @@ -3,6 +3,7 @@ import { Fixtures } from '../../../../test/fixtures'; import { fs } from '../../../../test/util'; import { extractAllPackageFiles, + extractExtensions, extractPackage, extractRegistries, resolveParents, @@ -365,6 +366,27 @@ describe('modules/manager/maven/extract', () => { }); }); + describe('extractExtensions', () => { + it('returns null for invalid xml files', () => { + expect(extractExtensions('', '.mvn/extensions.xml')).toBeNull(); + expect( + extractExtensions('invalid xml content', '.mvn/extensions.xml'), + ).toBeNull(); + expect( + extractExtensions('', '.mvn/extensions.xml'), + ).toBeNull(); + expect( + extractExtensions('', '.mvn/extensions.xml'), + ).toBeNull(); + expect( + extractExtensions( + '', + '.mvn/extensions.xml', + ), + ).toBeNull(); + }); + }); + describe('extractAllPackageFiles', () => { it('should return empty if package has no content', async () => { fs.readLocalFile.mockResolvedValueOnce(''); @@ -706,6 +728,47 @@ describe('modules/manager/maven/extract', () => { ]); }); + it('should extract from .mvn/extensions.xml file', async () => { + fs.readLocalFile.mockResolvedValueOnce(codeBlock` + + + io.jenkins.tools.incrementals + git-changelist-maven-extension + 1.6 + + + `); + const res = await extractAllPackageFiles({}, ['.mvn/extensions.xml']); + expect(res).toMatchObject([ + { + packageFile: '.mvn/extensions.xml', + deps: [ + { + datasource: 'maven', + depName: + 'io.jenkins.tools.incrementals:git-changelist-maven-extension', + currentValue: '1.6', + depType: 'build', + fileReplacePosition: 372, + registryUrls: ['https://repo.maven.apache.org/maven2'], + }, + ], + }, + ]); + }); + + it('should return empty array if extensions file is invalid or empty', async () => { + fs.readLocalFile + .mockResolvedValueOnce('') + .mockResolvedValueOnce('invalid xml content'); + expect( + await extractAllPackageFiles({}, [ + '.mvn/extensions.xml', + 'grp/.mvn/extensions.xml', + ]), + ).toBeEmptyArray(); + }); + describe('root pom handling', () => { it('should skip root pom.xml', async () => { fs.readLocalFile.mockResolvedValueOnce(codeBlock` diff --git a/lib/modules/manager/maven/extract.ts b/lib/modules/manager/maven/extract.ts index 061c28fd92160d..c19b2de1c42df8 100644 --- a/lib/modules/manager/maven/extract.ts +++ b/lib/modules/manager/maven/extract.ts @@ -15,6 +15,12 @@ const supportedNamespaces = [ 'http://maven.apache.org/SETTINGS/1.2.0', ]; +const supportedExtensionsNamespaces = [ + 'http://maven.apache.org/EXTENSIONS/1.0.0', + 'http://maven.apache.org/EXTENSIONS/1.1.0', + 'http://maven.apache.org/EXTENSIONS/1.2.0', +]; + function parsePom(raw: string, packageFile: string): XmlDocument | null { let project: XmlDocument; try { @@ -39,6 +45,27 @@ function parsePom(raw: string, packageFile: string): XmlDocument | null { return null; } +function parseExtensions(raw: string, packageFile: string): XmlDocument | null { + let extensions: XmlDocument; + try { + extensions = new XmlDocument(raw); + } catch (err) { + logger.debug({ packageFile }, `Failed to parse as XML`); + return null; + } + const { name, attr, children } = extensions; + if (name !== 'extensions') { + return null; + } + if (!supportedExtensionsNamespaces.includes(attr.xmlns)) { + return null; + } + if (!is.nonEmptyArray(children)) { + return null; + } + return extensions; +} + function containsPlaceholder(str: string | null | undefined): boolean { return !!str && regEx(/\${[^}]*?}/).test(str); } @@ -476,6 +503,30 @@ function cleanResult(packageFiles: MavenInterimPackageFile[]): PackageFile[] { return packageFiles; } +export function extractExtensions( + rawContent: string, + packageFile: string, +): PackageFile | null { + if (!rawContent) { + return null; + } + + const extensions = parseExtensions(rawContent, packageFile); + if (!extensions) { + return null; + } + + const result: MavenInterimPackageFile = { + datasource: MavenDatasource.id, + packageFile, + deps: [], + }; + + result.deps = deepExtract(extensions); + + return result; +} + export async function extractAllPackageFiles( _config: ExtractConfig, packageFiles: string[], @@ -498,6 +549,13 @@ export async function extractAllPackageFiles( ); additionalRegistryUrls.push(...registries); } + } else if (packageFile.endsWith('.mvn/extensions.xml')) { + const extensions = extractExtensions(content, packageFile); + if (extensions) { + packages.push(extensions); + } else { + logger.trace({ packageFile }, 'can not read extensions'); + } } else { const pkg = extractPackage(content, packageFile); if (pkg) { diff --git a/lib/modules/manager/maven/index.ts b/lib/modules/manager/maven/index.ts index 8d12ca432bb606..bd282a23395db6 100644 --- a/lib/modules/manager/maven/index.ts +++ b/lib/modules/manager/maven/index.ts @@ -6,7 +6,11 @@ export { extractAllPackageFiles } from './extract'; export { bumpPackageVersion, updateDependency } from './update'; export const defaultConfig = { - fileMatch: ['(^|/|\\.)pom\\.xml$', '^(((\\.mvn)|(\\.m2))/)?settings\\.xml$'], + fileMatch: [ + '(^|/|\\.)pom\\.xml$', + '^(((\\.mvn)|(\\.m2))/)?settings\\.xml$', + '(^|/)\\.mvn/extensions\\.xml$', + ], versioning: mavenVersioning.id, }; From bc2e4b38ea7841643c32349ddda2f96d890aa301 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Wed, 8 May 2024 12:42:05 +0545 Subject: [PATCH 080/172] test(pep440): add tests (#28915) --- lib/modules/versioning/pep440/index.spec.ts | 8 +++++--- lib/util/package-rules/current-version.spec.ts | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/modules/versioning/pep440/index.spec.ts b/lib/modules/versioning/pep440/index.spec.ts index 8ba12022fb4f46..c9c024ac259f44 100644 --- a/lib/modules/versioning/pep440/index.spec.ts +++ b/lib/modules/versioning/pep440/index.spec.ts @@ -8,6 +8,7 @@ describe('modules/versioning/pep440/index', () => { ${'1.9'} | ${true} ${'17.04.0'} | ${true} ${'==1.2.3'} | ${true} + ${'==1.2.3.0'} | ${true} ${'==1.2.3rc0'} | ${true} ${'~=1.2.3'} | ${true} ${'==1.2.*'} | ${true} @@ -38,9 +39,10 @@ describe('modules/versioning/pep440/index', () => { }); it.each` - a | b | expected - ${'1.0'} | ${'>=1.0.0'} | ${true} - ${'>=3.8'} | ${'>=3.9'} | ${false} + a | b | expected + ${'1.0'} | ${'>=1.0.0'} | ${true} + ${'1.6.2'} | ${'<2.2.1.0'} | ${true} + ${'>=3.8'} | ${'>=3.9'} | ${false} `('matches($a, $b) === $expected', ({ a, b, expected }) => { expect(pep440.matches(a, b)).toBe(expected); }); diff --git a/lib/util/package-rules/current-version.spec.ts b/lib/util/package-rules/current-version.spec.ts index d8b8ee034df1a4..07a4ba1dfc9229 100644 --- a/lib/util/package-rules/current-version.spec.ts +++ b/lib/util/package-rules/current-version.spec.ts @@ -20,7 +20,7 @@ describe('util/package-rules/current-version', () => { }); it('return false on version exception', () => { - const spy = jest.spyOn(pep440, 'matches').mockImplementationOnce(() => { + const spy = jest.spyOn(pep440, 'isValid').mockImplementationOnce(() => { throw new Error(); }); const result = matcher.matches( @@ -36,6 +36,19 @@ describe('util/package-rules/current-version', () => { expect(spy.mock.calls).toHaveLength(1); }); + it('return true for a valid match', () => { + const result = matcher.matches( + { + versioning: 'pep440', + currentValue: '1.2.3', + }, + { + matchCurrentVersion: '<1.2.3.5', + }, + ); + expect(result).toBeTrue(); + }); + it('return false if no version could be found', () => { const result = matcher.matches( { From ff566cbf5be1233544bbc2b6712ab51dfae1f4a8 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 8 May 2024 09:14:12 +0200 Subject: [PATCH 081/172] docs(gitea): fix anchors (#28919) --- lib/modules/platform/gitea/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/platform/gitea/readme.md b/lib/modules/platform/gitea/readme.md index b130a4aa68590c..8159630fc61343 100644 --- a/lib/modules/platform/gitea/readme.md +++ b/lib/modules/platform/gitea/readme.md @@ -48,5 +48,5 @@ Repositories are ignored when one of the following conditions is met: - Pull requests are disabled for that repository You can change the default server-side sort method and order for autodiscover API. -Set those via [`autodiscoverRepoSort`](../../../self-hosted-configuration.md#autodiscoverRepoSort) and [`autodiscoverRepoOrder`](../../../self-hosted-configuration.md#autodiscoverRepoOrder). +Set those via [`autodiscoverRepoSort`](../../../self-hosted-configuration.md#autodiscoverreposort) and [`autodiscoverRepoOrder`](../../../self-hosted-configuration.md#autodiscoverrepoorder). Read the [Gitea swagger docs](https://try.gitea.io/api/swagger#/repository/repoSearch) for more details. From ed4c2e6b4bd6128d09c3091fb54f5c0174ec6ca6 Mon Sep 17 00:00:00 2001 From: Shunsuke Suzuki Date: Wed, 8 May 2024 16:27:38 +0900 Subject: [PATCH 082/172] fix(manager/devcontainer): parse with JSONC parser (#28914) --- .../manager/devcontainer/extract.spec.ts | 36 ++++++++++ lib/modules/manager/devcontainer/schema.ts | 4 +- lib/util/schema-utils.spec.ts | 67 +++++++++++++++++++ lib/util/schema-utils.ts | 11 +++ package.json | 1 + pnpm-lock.yaml | 3 + 6 files changed, 120 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/devcontainer/extract.spec.ts b/lib/modules/manager/devcontainer/extract.spec.ts index 3cd12745ed673f..76b5b28993f898 100644 --- a/lib/modules/manager/devcontainer/extract.spec.ts +++ b/lib/modules/manager/devcontainer/extract.spec.ts @@ -27,6 +27,42 @@ describe('modules/manager/devcontainer/extract', () => { expect(result).toBeNull(); }); + it('tests if JSONC can be parsed', () => { + // Arrange + const content = codeBlock(` + { + // hello + "features": { + "devcontainer.registry.renovate.com/test/features/first:1.2.3": {} + } + }`); + const extractConfig = {}; + // Act + const result = extractPackageFile( + content, + 'devcontainer.json', + extractConfig, + ); + + // Assert + expect(result).toEqual({ + deps: [ + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '1.2.3', + datasource: 'docker', + depName: 'devcontainer.registry.renovate.com/test/features/first', + depType: 'feature', + pinDigests: false, + replaceString: + 'devcontainer.registry.renovate.com/test/features/first:1.2.3', + }, + ], + }); + }); + it('returns feature image deps when only the features property is defined in dev container JSON file', () => { // Arrange const content = codeBlock(` diff --git a/lib/modules/manager/devcontainer/schema.ts b/lib/modules/manager/devcontainer/schema.ts index b798121ed44d44..38498632044b3e 100644 --- a/lib/modules/manager/devcontainer/schema.ts +++ b/lib/modules/manager/devcontainer/schema.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { Json } from '../../../util/schema-utils'; +import { Jsonc } from '../../../util/schema-utils'; -export const DevContainerFile = Json.pipe( +export const DevContainerFile = Jsonc.pipe( z.object({ image: z.string().optional(), features: z.record(z.unknown()).optional(), diff --git a/lib/util/schema-utils.spec.ts b/lib/util/schema-utils.spec.ts index 390c2ed2bb0832..ccca2f70b9e8e1 100644 --- a/lib/util/schema-utils.spec.ts +++ b/lib/util/schema-utils.spec.ts @@ -3,6 +3,7 @@ import { z } from 'zod'; import { Json, Json5, + Jsonc, LooseArray, LooseRecord, MultidocYaml, @@ -269,6 +270,72 @@ describe('util/schema-utils', () => { }); }); + describe('Jsonc', () => { + it('parses JSONC', () => { + const Schema = Jsonc.pipe(z.object({ foo: z.literal('bar') })); + + expect(Schema.parse('{"foo": "bar"}')).toEqual({ foo: 'bar' }); + + expect(Schema.safeParse(42)).toMatchObject({ + error: { + issues: [ + { + message: 'Expected string, received number', + code: 'invalid_type', + expected: 'string', + received: 'number', + path: [], + }, + ], + }, + success: false, + }); + + expect(Schema.safeParse('{"foo": "foo"}')).toMatchObject({ + error: { + issues: [ + { + message: 'Invalid literal value, expected "bar"', + code: 'invalid_literal', + expected: 'bar', + received: 'foo', + path: ['foo'], + }, + ], + }, + success: false, + }); + + expect(Schema.safeParse('["foo", "bar"]')).toMatchObject({ + error: { + issues: [ + { + message: 'Expected object, received array', + code: 'invalid_type', + expected: 'object', + received: 'array', + path: [], + }, + ], + }, + success: false, + }); + + expect(Schema.safeParse('{')).toMatchObject({ + error: { + issues: [ + { + message: 'Invalid JSONC', + code: 'custom', + path: [], + }, + ], + }, + success: false, + }); + }); + }); + describe('UtcDate', () => { it('parses date', () => { expect(UtcDate.parse('2020-04-04').toString()).toBe( diff --git a/lib/util/schema-utils.ts b/lib/util/schema-utils.ts index b0c32ad60f6ce6..1f7cb3d6da15ad 100644 --- a/lib/util/schema-utils.ts +++ b/lib/util/schema-utils.ts @@ -1,4 +1,5 @@ import JSON5 from 'json5'; +import * as JSONC from 'jsonc-parser'; import { DateTime } from 'luxon'; import type { JsonArray, JsonValue } from 'type-fest'; import { z } from 'zod'; @@ -215,6 +216,16 @@ export const Json5 = z.string().transform((str, ctx): JsonValue => { } }); +export const Jsonc = z.string().transform((str, ctx): JsonValue => { + const errors: JSONC.ParseError[] = []; + const value = JSONC.parse(str, errors); + if (errors.length === 0) { + return value; + } + ctx.addIssue({ code: 'custom', message: 'Invalid JSONC' }); + return z.NEVER; +}); + export const UtcDate = z .string({ description: 'ISO 8601 string' }) .transform((str, ctx): DateTime => { diff --git a/package.json b/package.json index 4e92c6b893eb3b..4d4774fc9479b0 100644 --- a/package.json +++ b/package.json @@ -210,6 +210,7 @@ "json-stringify-pretty-compact": "3.0.0", "json5": "2.2.3", "jsonata": "2.0.4", + "jsonc-parser": "3.2.1", "klona": "2.0.6", "lru-cache": "10.2.2", "luxon": "3.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdea0c105610ce..c49003771c2826 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,6 +215,9 @@ importers: jsonata: specifier: 2.0.4 version: 2.0.4 + jsonc-parser: + specifier: 3.2.1 + version: 3.2.1 klona: specifier: 2.0.6 version: 2.0.6 From 54ba9af75ff7ae6b6e5a3407767b3cd75f3c68a6 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 8 May 2024 10:55:03 +0200 Subject: [PATCH 083/172] docs(bot comparison): add Dependabot as GitHub Action (#28921) --- docs/usage/bot-comparison.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/usage/bot-comparison.md b/docs/usage/bot-comparison.md index 227542e02c7946..f969547c4c0456 100644 --- a/docs/usage/bot-comparison.md +++ b/docs/usage/bot-comparison.md @@ -148,6 +148,14 @@ Available [Renovate distributions](./getting-started/running.md#available-distri You can self-host Dependabot on other platforms than GitHub but none are officially supported. +#### As a GitHub Actions workflow on GitHub + +You can run Dependabot as a GitHub Actions workflow on hosted and self-hosted runners. +Learn more by reading the: + +- [GitHub Blog, Dependabot on GitHub Actions and self-hosted runners is now generally available](https://github.blog/2024-05-02-dependabot-on-github-actions-and-self-hosted-runners-is-now-generally-available/) +- [GitHub Docs, About Dependabot on GitHub Actions runners](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners) + #### `dependabot-core` If you want to customize Dependabot, or self-host on another platform, you can use [`dependabot-core`](https://github.com/dependabot/dependabot-core). From 78e3ea6a5020dfa042b626e6f21e43b112283015 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 8 May 2024 12:23:12 +0200 Subject: [PATCH 084/172] feat(pipenv): better python constraints checking (#28878) --- .../manager/pipenv/__fixtures__/Pipfile1 | 1 + lib/modules/manager/pipenv/artifacts.spec.ts | 133 ++++++++++++++++++ lib/modules/manager/pipenv/artifacts.ts | 79 +++++++++-- 3 files changed, 204 insertions(+), 9 deletions(-) diff --git a/lib/modules/manager/pipenv/__fixtures__/Pipfile1 b/lib/modules/manager/pipenv/__fixtures__/Pipfile1 index 3303c31c5abd8e..45643ed6681b0b 100644 --- a/lib/modules/manager/pipenv/__fixtures__/Pipfile1 +++ b/lib/modules/manager/pipenv/__fixtures__/Pipfile1 @@ -28,3 +28,4 @@ dev-package = "==0.1.0" [requires] python_version = "3.6" +python_full_version = "3.6.2" diff --git a/lib/modules/manager/pipenv/artifacts.spec.ts b/lib/modules/manager/pipenv/artifacts.spec.ts index 6d6d6bf8f3f332..a3975ef6c31603 100644 --- a/lib/modules/manager/pipenv/artifacts.spec.ts +++ b/lib/modules/manager/pipenv/artifacts.spec.ts @@ -78,6 +78,7 @@ describe('modules/manager/pipenv/artifacts', () => { // python datasource.getPkgReleases.mockResolvedValueOnce({ releases: [ + { version: '3.6.2' }, { version: '3.6.5' }, { version: '3.7.6' }, { version: '3.8.5' }, @@ -137,6 +138,138 @@ describe('modules/manager/pipenv/artifacts', () => { ]); }); + it('gets python full version from Pipfile', async () => { + GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); + pipFileLock._meta!.requires!.python_full_version = '3.7.6'; + fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); + fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + expect( + await updateArtifacts({ + packageFileName: 'Pipfile', + updatedDeps: [], + newPackageFileContent: Fixtures.get('Pipfile1'), + config, + }), + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { cmd: 'install-tool python 3.6.2' }, + {}, + { + cmd: 'pipenv lock', + options: { + cwd: '/tmp/github/some/repo', + env: { + PIPENV_CACHE_DIR: pipenvCacheDir, + }, + }, + }, + ]); + }); + + it('gets python version from Pipfile', async () => { + GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); + pipFileLock._meta!.requires!.python_full_version = '3.7.6'; + fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); + fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + expect( + await updateArtifacts({ + packageFileName: 'Pipfile', + updatedDeps: [], + newPackageFileContent: Fixtures.get('Pipfile2'), + config, + }), + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { cmd: 'install-tool python 3.6.5' }, + {}, + { + cmd: 'pipenv lock', + options: { + cwd: '/tmp/github/some/repo', + env: { + PIPENV_CACHE_DIR: pipenvCacheDir, + }, + }, + }, + ]); + }); + + it('gets full python version from .python-version', async () => { + GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); + fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); + fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + const execSnapshots = mockExecAll(); + fs.getSiblingFileName.mockResolvedValueOnce('.python-version' as never); + fs.readLocalFile.mockResolvedValueOnce('3.7.6'); + + expect( + await updateArtifacts({ + packageFileName: 'Pipfile', + updatedDeps: [], + newPackageFileContent: 'some toml', + config, + }), + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { cmd: 'install-tool python 3.7.6' }, + {}, + { + cmd: 'pipenv lock', + options: { + cwd: '/tmp/github/some/repo', + env: { + PIPENV_CACHE_DIR: pipenvCacheDir, + }, + }, + }, + ]); + }); + + it('gets python stream, from .python-version', async () => { + GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); + fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); + fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); + fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + const execSnapshots = mockExecAll(); + fs.getSiblingFileName.mockResolvedValueOnce('.python-version' as never); + fs.readLocalFile.mockResolvedValueOnce('3.8'); + + expect( + await updateArtifacts({ + packageFileName: 'Pipfile', + updatedDeps: [], + newPackageFileContent: 'some toml', + config, + }), + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { cmd: 'install-tool python 3.8.5' }, + {}, + { + cmd: 'pipenv lock', + options: { + cwd: '/tmp/github/some/repo', + env: { + PIPENV_CACHE_DIR: pipenvCacheDir, + }, + }, + }, + ]); + }); + it('handles no constraint', async () => { fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); diff --git a/lib/modules/manager/pipenv/artifacts.ts b/lib/modules/manager/pipenv/artifacts.ts index 5c0e98f5550e7b..6404c2b9c0a827 100644 --- a/lib/modules/manager/pipenv/artifacts.ts +++ b/lib/modules/manager/pipenv/artifacts.ts @@ -8,14 +8,17 @@ import type { ExecOptions, ExtraEnv, Opt } from '../../../util/exec/types'; import { deleteLocalFile, ensureCacheDir, + getSiblingFileName, readLocalFile, writeLocalFile, } from '../../../util/fs'; import { getRepoStatus } from '../../../util/git'; import { find } from '../../../util/host-rules'; import { regEx } from '../../../util/regex'; +import { parse as parseToml } from '../../../util/toml'; import { parseUrl } from '../../../util/url'; import { PypiDatasource } from '../../datasource/pypi'; +import pep440 from '../../versioning/pep440'; import type { UpdateArtifact, UpdateArtifactsConfig, @@ -24,38 +27,91 @@ import type { import { extractPackageFile } from './extract'; import { PipfileLockSchema } from './schema'; -export function getPythonConstraint( +export async function getPythonConstraint( + pipfileName: string, + pipfileContent: string, existingLockFileContent: string, config: UpdateArtifactsConfig, -): string | undefined { +): Promise { const { constraints = {} } = config; const { python } = constraints; if (python) { - logger.debug('Using python constraint from config'); + logger.debug(`Using python constraint ${python} from config`); return python; } + + // Try Pipfile first because it may have had its Python version updated + try { + const pipfile = parseToml(pipfileContent) as any; + const pythonFullVersion = pipfile.requires.python_full_version; + if (pythonFullVersion) { + logger.debug( + `Using python full version ${pythonFullVersion} from Pipfile`, + ); + return `== ${pythonFullVersion}`; + } + const pythonVersion = pipfile.requires.python_version; + if (pythonVersion) { + logger.debug(`Using python version ${pythonVersion} from Pipfile`); + return `== ${pythonVersion}.*`; + } + } catch (err) { + logger.warn({ err }, 'Error parsing Pipfile'); + } + + // Try Pipfile.lock next try { const result = PipfileLockSchema.safeParse(existingLockFileContent); // istanbul ignore if: not easily testable if (!result.success) { - logger.warn({ error: result.error }, 'Invalid Pipfile.lock'); + logger.warn({ err: result.error }, 'Invalid Pipfile.lock'); return undefined; } // Exact python version has been included since 2022.10.9. It is more specific than the major.minor version // https://github.com/pypa/pipenv/blob/main/CHANGELOG.md#2022109-2022-10-09 - if (result.data._meta?.requires?.python_full_version) { - const pythonFullVersion = result.data._meta.requires.python_full_version; + const pythonFullVersion = result.data._meta?.requires?.python_full_version; + if (pythonFullVersion) { + logger.debug( + `Using python full version ${pythonFullVersion} from Pipfile.lock`, + ); return `== ${pythonFullVersion}`; } // Before 2022.10.9, only the major.minor version was included - if (result.data._meta?.requires?.python_version) { - const pythonVersion = result.data._meta.requires.python_version; + const pythonVersion = result.data._meta?.requires?.python_version; + if (pythonVersion) { + logger.debug(`Using python version ${pythonVersion} from Pipfile.lock`); return `== ${pythonVersion}.*`; } } catch (err) { // Do nothing } + + // Try looking for the contents of .python-version + const pythonVersionFileName = getSiblingFileName( + pipfileName, + '.python-version', + ); + try { + const pythonVersion = await readLocalFile(pythonVersionFileName, 'utf8'); + let pythonVersionConstraint; + if (pythonVersion && pep440.isVersion(pythonVersion)) { + if (pythonVersion.split('.').length >= 3) { + pythonVersionConstraint = `== ${pythonVersion}`; + } else { + pythonVersionConstraint = `== ${pythonVersion}.*`; + } + } + if (pythonVersionConstraint) { + logger.debug( + `Using python version ${pythonVersionConstraint} from ${pythonVersionFileName}`, + ); + return pythonVersionConstraint; + } + } catch (err) { + // Do nothing + } + return undefined; } @@ -233,7 +289,12 @@ export async function updateArtifacts({ await deleteLocalFile(lockFileName); } const cmd = 'pipenv lock'; - const tagConstraint = getPythonConstraint(existingLockFileContent, config); + const tagConstraint = await getPythonConstraint( + pipfileName, + newPipfileContent, + existingLockFileContent, + config, + ); const pipenvConstraint = getPipenvConstraint( existingLockFileContent, config, From 97926c06e984502993fead657f4806e873103a64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 10:35:31 +0000 Subject: [PATCH 085/172] chore(deps): update dependency type-fest to v4.18.1 (#28928) 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 4d4774fc9479b0..ca3b32c7fcd1e4 100644 --- a/package.json +++ b/package.json @@ -343,7 +343,7 @@ "tmp-promise": "3.0.3", "ts-jest": "29.1.2", "ts-node": "10.9.2", - "type-fest": "4.18.0", + "type-fest": "4.18.1", "typescript": "5.4.5", "unified": "9.2.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c49003771c2826..229c0760ad617f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -605,8 +605,8 @@ importers: specifier: 10.9.2 version: 10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5) type-fest: - specifier: 4.18.0 - version: 4.18.0 + specifier: 4.18.1 + version: 4.18.1 typescript: specifier: 5.4.5 version: 5.4.5 @@ -5790,8 +5790,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.18.0: - resolution: {integrity: sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==} + type-fest@4.18.1: + resolution: {integrity: sha512-qXhgeNsX15bM63h5aapNFcQid9jRF/l3ojDoDFmekDQEUufZ9U4ErVt6SjDxnHp48Ltrw616R8yNc3giJ3KvVQ==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -12085,7 +12085,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.2 index-to-position: 0.1.2 - type-fest: 4.18.0 + type-fest: 4.18.1 parse-link-header@2.0.0: dependencies: @@ -12257,7 +12257,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.18.0 + type-fest: 4.18.1 read-pkg-up@7.0.1: dependencies: @@ -12277,7 +12277,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.1 parse-json: 8.1.0 - type-fest: 4.18.0 + type-fest: 4.18.1 unicorn-magic: 0.1.0 read-yaml-file@2.1.0: @@ -12998,7 +12998,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.18.0: {} + type-fest@4.18.1: {} typed-array-buffer@1.0.2: dependencies: From 596d743cf7826969f01efdc18d7b1542161e5ab1 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 8 May 2024 12:37:21 +0200 Subject: [PATCH 086/172] docs: improve minimal reproductions guide (#28926) --- docs/development/minimal-reproductions.md | 49 +++++++++++++---------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/docs/development/minimal-reproductions.md b/docs/development/minimal-reproductions.md index 56dbd939796442..8ed9259f1a297e 100644 --- a/docs/development/minimal-reproductions.md +++ b/docs/development/minimal-reproductions.md @@ -2,7 +2,11 @@ We may ask you to create a "minimal reproduction" repository to help us fix bugs or work on a feature. -This document explains why we need a minimal reproduction, why we won't use your production repository to debug, and how to create a good minimal reproduction. +This document explains: + +- why we need a minimal reproduction +- why we will not use your production repository to debug +- how to create a good minimal reproduction ## Help yourself by creating a minimal reproduction @@ -16,37 +20,39 @@ It's fastest if you - as the bug reporter or feature requester - create the repr ## How the Renovate developers use your minimal reproduction -The first benefit of a public reproduction is to prove that the problem is not caused by your environment or by a setting you left out of your description, thinking it wasn't relevant. -If there were any doubts about whether you'd found a genuine problem before, they are usually removed once a reproduction is made. +A reproduction confirms the problem is with Renovate, and _not_ with your environment, or your configuration settings. +A reproduction also helps us see where the bug or missing feature is, and to verify that the new code meets the requirements. -Next, when a reproduction has minimal config, it can often let us narrow down or even identify the root cause, suggest workarounds, etc. -This means we can often help you from code inspection alone. +When a reproduction has minimal config, we can oftern narrow down, or identify the root cause. +This helps us suggest workarounds. +Often we can help you from code inspection alone. -Finally, by making the code/dependencies minimal, it usually makes the problem feasible to step through using a debugger if code inspection wasn't sufficient. -Production repositories or non-minimal reproductions are often very difficult to debug because break points get triggered dozens or hundreds or times. +Finally, with minimal code and dependencies, we can step through with a debugger. +This helps when looking at the code is not enough to find the problem. +Production repositories, or non-minimal reproductions, are hard to debug as break points get triggered often. ## What is a minimal reproduction? -The basic idea of a minimal reproduction is to use the _least_ amount of both code and config to trigger missing or wrong behavior. -A minimal reproduction helps the developers see where the bug or missing feature is, and allows us to verify that the new code meets the requirements. +A minimal reproduction should have the _least_ amount of both code and config to trigger missing or wrong behavior. ## Where to host the minimal reproduction -Unless it's impossible, use a public repository on GitHub.com to host your reproduction. -If the reproduction needs to be on another platform like GitLab or Bitbucket because it's related to functionality only on that platform, then that's okay. +Please put your reproduction in a public repository on GitHub.com, if possible. + +You may put the reproduction on another platform like GitLab or Bitbucket, _if_ the reproduction needs features/behavior of that platform. ## Creating a minimal reproduction There are two ways to create a minimal reproduction: -- Start with an empty repository and copy files from your production repository -- Start with a fork of your production repository and remove files and config +- Start with an empty repository and _copy_ files from your production repository +- Start with a fork of your production repository and _remove_ files and config General steps: -1. Create your minimal reproduction repository on GitHub, only use GitLab or Bitbucket if needed +1. Put your minimal reproduction repository on GitHub, only use GitLab or Bitbucket if needed 1. Use the fewest number of repository files and dependencies -1. Reduce the Renovate config to a minimum +1. Reduce your Renovate config to a minimum 1. Remove private or secret information 1. Create a `readme.md` file that explains the current behavior and expected behavior 1. Set the repository visibility to `public` @@ -66,26 +72,27 @@ A production repository usually has: - many custom rules in the Renovate configuration file - many files that are not relevant -Having lots of "moving parts" makes debugging tricky, because debug break points can be triggered hundreds of times. +Having lots of "moving parts" makes it hard to debug, as debug break points can trigger hundreds of times. -When you have lots of custom config for Renovate, it's hard to find the root cause of the behavior. +When you have lots of custom config for Renovate, it's hard for us to find the root cause of the behavior. Bugs are often caused by multiple features interacting. -Reducing the config to a minimum helps us find out exactly which config elements are required to trigger the bug. +Reducing the config to a minimum helps us find exactly which config elements are needed to trigger the bug. ### "It's too much work to create a minimal reproduction" -If you don't create a minimal reproduction, the Renovate maintainers won't prioritize working on your issue. +If you do not create a minimal reproduction, the Renovate maintainers will not prioritize working on your issue. Discussions without a reproduction will probably go stale unless you, or somebody else, creates a minimal reproduction. ### "I already described what you need in the issue" Thank you for describing your issue in detail. -But we still need a minimal reproduction in a repository, and we'd like you to be the one to make sure it matches both your description as well as expected behavior. +But we still need a minimal reproduction in a repository. +We'd like you to make sure it matches both your description as well as expected behavior. ### Forcing Renovate to create a lot of pending updates Put an old version of a frequently updated dependency in your repository. -Set a high `minimumReleaseAge` for that dependency, for example: +Then set a high `minimumReleaseAge` for that dependency, for example: ```json { From 07111baa16fb622d479851e124a6ce2a1d2b7c5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 10:52:05 +0000 Subject: [PATCH 087/172] chore(deps): update dependency type-fest to v4.18.2 (#28929) 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 ca3b32c7fcd1e4..7e2d6b5a6151d9 100644 --- a/package.json +++ b/package.json @@ -343,7 +343,7 @@ "tmp-promise": "3.0.3", "ts-jest": "29.1.2", "ts-node": "10.9.2", - "type-fest": "4.18.1", + "type-fest": "4.18.2", "typescript": "5.4.5", "unified": "9.2.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 229c0760ad617f..3d4277b0f7c500 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -605,8 +605,8 @@ importers: specifier: 10.9.2 version: 10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5) type-fest: - specifier: 4.18.1 - version: 4.18.1 + specifier: 4.18.2 + version: 4.18.2 typescript: specifier: 5.4.5 version: 5.4.5 @@ -5790,8 +5790,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.18.1: - resolution: {integrity: sha512-qXhgeNsX15bM63h5aapNFcQid9jRF/l3ojDoDFmekDQEUufZ9U4ErVt6SjDxnHp48Ltrw616R8yNc3giJ3KvVQ==} + type-fest@4.18.2: + resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -12085,7 +12085,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.2 index-to-position: 0.1.2 - type-fest: 4.18.1 + type-fest: 4.18.2 parse-link-header@2.0.0: dependencies: @@ -12257,7 +12257,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.18.1 + type-fest: 4.18.2 read-pkg-up@7.0.1: dependencies: @@ -12277,7 +12277,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.1 parse-json: 8.1.0 - type-fest: 4.18.1 + type-fest: 4.18.2 unicorn-magic: 0.1.0 read-yaml-file@2.1.0: @@ -12998,7 +12998,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.18.1: {} + type-fest@4.18.2: {} typed-array-buffer@1.0.2: dependencies: From 51db0d9e387ecd02398f29eb4825b8cabddd20f3 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 8 May 2024 08:57:39 -0300 Subject: [PATCH 088/172] fix(emoji): Use colorful version of warning emoji (#28888) --- lib/modules/platform/github/index.ts | 1 + lib/util/emoji.spec.ts | 33 ++++++++--- lib/util/emoji.ts | 55 +++++++++++++------ .../repository/errors-warnings.spec.ts | 8 +-- 4 files changed, 67 insertions(+), 30 deletions(-) diff --git a/lib/modules/platform/github/index.ts b/lib/modules/platform/github/index.ts index 9357a3adc93844..a0873b7d0c09b6 100644 --- a/lib/modules/platform/github/index.ts +++ b/lib/modules/platform/github/index.ts @@ -1950,6 +1950,7 @@ export function massageMarkdown(input: string): string { .replace(regEx(/]: https:\/\/github\.com\//g), ']: https://togithub.com/') .replace('> ℹ **Note**\n> \n', '> [!NOTE]\n') .replace('> ⚠ **Warning**\n> \n', '> [!WARNING]\n') + .replace('> ⚠️ **Warning**\n> \n', '> [!WARNING]\n') .replace('> ❗ **Important**\n> \n', '> [!IMPORTANT]\n'); return smartTruncate(massagedInput, GitHubMaxPrBodyLen); } diff --git a/lib/util/emoji.spec.ts b/lib/util/emoji.spec.ts index 97e9c9309bc1eb..9dc475a838ae05 100644 --- a/lib/util/emoji.spec.ts +++ b/lib/util/emoji.spec.ts @@ -21,6 +21,11 @@ describe('util/emoji', () => { expect(emojify(':foo: :bar: :bee:')).toBe(':foo: :bar: 🐝'); }); + it('convert warning shortcode to emoji', () => { + const warning = emojify(':warning:'); + expect(warning).toBe('⚠️'); + }); + it('does not encode when config option is disabled', () => { setEmojiConfig({ unicodeEmoji: false }); expect(emojify('Let it :bee:')).toBe('Let it :bee:'); @@ -54,20 +59,30 @@ describe('util/emoji', () => { expect(unemojify(unsupported)).toBe('�'); }); }); - }); - describe('problem characters', () => { - it.each(['🚀', '💎', '🧹', '📦'])('converts %s forth and back', (char) => { + it('converts warning emoji to shortcode', () => { setEmojiConfig({ unicodeEmoji: false }); - const codified = unemojify(char); - expect(codified).not.toEqual(char); - - setEmojiConfig({ unicodeEmoji: true }); - const emojified = emojify(codified); - expect(emojified).toEqual(char); + const emoji = '⚠️'; + const result = unemojify(emoji); + expect(result).toBe(':warning:'); }); }); + describe('problematic characters', () => { + it.each(['🚀', '💎', '🧹', '📦', '⚠️'])( + 'converts %s forth and back', + (char) => { + setEmojiConfig({ unicodeEmoji: false }); + const codified = unemojify(char); + expect(codified).not.toEqual(char); + + setEmojiConfig({ unicodeEmoji: true }); + const emojified = emojify(codified); + expect(emojified).toEqual(char); + }, + ); + }); + describe('stripEmojis', () => { const makeEmoji = (hexCode: string): string => fromCodepointToUnicode(fromHexcodeToCodepoint(hexCode)); diff --git a/lib/util/emoji.ts b/lib/util/emoji.ts index 219392ab98b77d..a5e03a86409cac 100644 --- a/lib/util/emoji.ts +++ b/lib/util/emoji.ts @@ -1,4 +1,3 @@ -import is from '@sindresorhus/is'; import mathiasBynensEmojiRegex from 'emoji-regex'; import { fromCodepointToUnicode, @@ -12,6 +11,7 @@ import type { RenovateConfig } from '../config/types'; import dataFiles from '../data-files.generated'; import { logger } from '../logger'; import { regEx } from './regex'; +import { Result } from './result'; import { Json } from './schema-utils'; let unicodeEmoji = true; @@ -21,27 +21,48 @@ const shortCodesByHex = new Map(); const hexCodesByShort = new Map(); const EmojiShortcodesSchema = Json.pipe( - z.record(z.string(), z.union([z.string(), z.array(z.string())])), + z.record( + z.string(), + z.union([z.string().transform((val) => [val]), z.array(z.string())]), + ), ); +type EmojiShortcodeMapping = z.infer; + +const patchedEmojis: EmojiShortcodeMapping = { + '26A0-FE0F': ['warning'], // Colorful warning (⚠️) instead of black and white (⚠) +}; + +function initMapping(mapping: EmojiShortcodeMapping): void { + for (const [hex, shortcodes] of Object.entries(mapping)) { + const mainShortcode = `:${shortcodes[0]}:`; + + shortCodesByHex.set(hex, mainShortcode); + shortCodesByHex.set(stripHexCode(hex), mainShortcode); + + for (const shortcode of shortcodes) { + hexCodesByShort.set(`:${shortcode}:`, hex); + } + } +} function lazyInitMappings(): void { if (!mappingsInitialized) { - const result = EmojiShortcodesSchema.safeParse( - dataFiles.get('node_modules/emojibase-data/en/shortcodes/github.json')!, + const githubShortcodes = dataFiles.get( + 'node_modules/emojibase-data/en/shortcodes/github.json', ); - // istanbul ignore if: not easily testable - if (!result.success) { - logger.warn({ error: result.error }, 'Unable to parse emoji shortcodes'); - return; - } - for (const [hex, val] of Object.entries(result.data)) { - const shortCodes = is.array(val) ? val : [val]; - shortCodesByHex.set(hex, `:${shortCodes[0]}:`); - shortCodes.forEach((shortCode) => { - hexCodesByShort.set(`:${shortCode}:`, hex); - }); - } - mappingsInitialized = true; + + Result.parse(githubShortcodes, EmojiShortcodesSchema) + .onValue((data) => { + initMapping(data); + initMapping(patchedEmojis); + mappingsInitialized = true; + }) + .onError( + /* istanbul ignore next */ + (error) => { + logger.warn({ error }, 'Unable to parse emoji shortcodes'); + }, + ); } } diff --git a/lib/workers/repository/errors-warnings.spec.ts b/lib/workers/repository/errors-warnings.spec.ts index e93d5564400098..4fee6525739f7e 100644 --- a/lib/workers/repository/errors-warnings.spec.ts +++ b/lib/workers/repository/errors-warnings.spec.ts @@ -85,7 +85,7 @@ describe('workers/repository/errors-warnings', () => { " --- - > ⚠ **Warning** + > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. @@ -133,7 +133,7 @@ describe('workers/repository/errors-warnings', () => { " --- - > ⚠ **Warning** + > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the warning logs for more information. @@ -197,7 +197,7 @@ describe('workers/repository/errors-warnings', () => { " --- - > ⚠ **Warning** + > ⚠️ **Warning** > > Renovate failed to look up the following dependencies: \`dependency-1\`, \`dependency-2\`. > @@ -305,7 +305,7 @@ describe('workers/repository/errors-warnings', () => { " --- > - > ⚠ **Warning** + > ⚠️ **Warning** > > Please correct - or verify that you can safely ignore - these dependency lookup failures before you merge this PR. > From 9094b71fc243c8ed9da45dc08e7d78b191c6a7d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 16:26:14 +0000 Subject: [PATCH 089/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.5 (#28937) 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 f303803cde8d91..30d72f38299294 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.3@sha256:8b53b8b1115a335884674be4c00f748363b721a8b73346baf8b68bc7465bd58c AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.5@sha256:3902b3f0a1cb7931067b744ac4dd8c70799d8b6cbcb2e8f8cbd999b517f02207 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.3-full@sha256:091b37f6224062aa62a5abc47b707c1b3f04009028f75a0b7f72b9d42c32f5d7 AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.5-full@sha256:0030bc249ce62a34fa5b88b8c22b9a7d77683a20dbbc25fa4171d11246125ea4 AS full-base # -------------------------------------- # build image From 0ddc0f5fe9fc38d0739a26fa4a9c2ead72ba8e79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 16:26:15 +0000 Subject: [PATCH 090/172] chore(deps): update github/codeql-action action to v3.25.4 (#28936) 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 e97fbbbef0f877..008e41e8dee0db 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@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 + uses: github/codeql-action/init@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 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@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 + uses: github/codeql-action/autobuild@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 # ℹ️ 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@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 + uses: github/codeql-action/analyze@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 26a2783904ac3f..4805b49f0b3ae4 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@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 + uses: github/codeql-action/upload-sarif@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 with: sarif_file: results.sarif diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index c42b5c5e0f591c..8478f4fbc078f0 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@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 + - uses: github/codeql-action/upload-sarif@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 with: sarif_file: trivy-results.sarif category: 'docker-image-${{ matrix.tag }}' From 4eaa0c5c645a6b27a9bba76fa27dd08818b5d996 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 21:27:19 +0000 Subject: [PATCH 091/172] chore(deps): update actions/checkout action to v4.1.5 (#28940) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 26 ++++++++++++------------- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/devcontainer.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/trivy.yml | 2 +- .github/workflows/update-data.yml | 2 +- .github/workflows/ws_scan.yaml | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00db47ccbe8432..376c4663d60008 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -93,7 +93,7 @@ jobs: run: gh api ${{ env.PR_URL }} | jq -rc '${{ env.JQ_FILTER }}' >> "$GITHUB_OUTPUT" - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -151,7 +151,7 @@ jobs: steps: - name: Checkout code if: needs.setup.outputs.os-matrix-is-full && runner.os != 'Linux' - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -175,7 +175,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -220,7 +220,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -262,7 +262,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -291,7 +291,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -330,7 +330,7 @@ jobs: include: ${{ fromJSON(needs.setup.outputs.test-shard-matrix) }} steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -393,7 +393,7 @@ jobs: if: (success() || failure()) && github.event_name != 'merge_group' && github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: filter: blob:none # we don't need all blobs show-progress: false @@ -421,7 +421,7 @@ jobs: if: (success() || failure()) && github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -511,7 +511,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -545,7 +545,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -576,7 +576,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false @@ -625,7 +625,7 @@ jobs: packages: write steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: fetch-depth: 0 # zero stands for full checkout, which is required for semantic-release filter: blob:none # we don't need all blobs, only the full tree diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 008e41e8dee0db..8a51b93291e93a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 5016ddc17ec352..e9f5a56808f397 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index 301f770c90bc8f..f3e9d9e48a75ba 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -18,7 +18,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4805b49f0b3ae4..21b0f8f567ae4e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -20,7 +20,7 @@ jobs: steps: - name: 'Checkout code' - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: persist-credentials: false show-progress: false diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 8478f4fbc078f0..160520e03dea80 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -21,7 +21,7 @@ jobs: - full steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index de8dd67c124d4e..a356ef554d2afa 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -17,7 +17,7 @@ jobs: contents: write pull-requests: write steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false diff --git a/.github/workflows/ws_scan.yaml b/.github/workflows/ws_scan.yaml index eb533dc6cbba65..ad2a56183f6c6c 100644 --- a/.github/workflows/ws_scan.yaml +++ b/.github/workflows/ws_scan.yaml @@ -11,7 +11,7 @@ jobs: WS_SCAN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: show-progress: false From edf661ff733414d4b9283272a07835d0c5f65ff7 Mon Sep 17 00:00:00 2001 From: Maxime Brunet Date: Thu, 9 May 2024 04:18:32 +0000 Subject: [PATCH 092/172] fix(dockerfile): handle codenames with registries (#28941) --- .../manager/dockerfile/extract.spec.ts | 42 +++++++++++++++++++ lib/modules/manager/dockerfile/extract.ts | 4 +- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/dockerfile/extract.spec.ts b/lib/modules/manager/dockerfile/extract.spec.ts index 787afe2cd3f972..5ea952477dae83 100644 --- a/lib/modules/manager/dockerfile/extract.spec.ts +++ b/lib/modules/manager/dockerfile/extract.spec.ts @@ -669,6 +669,27 @@ describe('modules/manager/dockerfile/extract', () => { ]); }); + it('handles debian with prefixes and registries', () => { + const res = extractPackageFile( + 'FROM docker.io/library/debian:10\n', + '', + {}, + )?.deps; + expect(res).toEqual([ + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '10', + datasource: 'docker', + depName: 'docker.io/library/debian', + depType: 'final', + replaceString: 'docker.io/library/debian:10', + versioning: 'debian', + }, + ]); + }); + it('handles prefixes', () => { const res = extractPackageFile('FROM amd64/ubuntu:18.04\n', '', {})?.deps; expect(res).toEqual([ @@ -687,6 +708,27 @@ describe('modules/manager/dockerfile/extract', () => { ]); }); + it('handles prefixes with registries', () => { + const res = extractPackageFile( + 'FROM public.ecr.aws/ubuntu/ubuntu:18.04\n', + '', + {}, + )?.deps; + expect(res).toEqual([ + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '18.04', + datasource: 'docker', + depName: 'public.ecr.aws/ubuntu/ubuntu', + depType: 'final', + replaceString: 'public.ecr.aws/ubuntu/ubuntu:18.04', + versioning: 'ubuntu', + }, + ]); + }); + it('handles implausible line continuation', () => { const res = extractPackageFile( 'FROM alpine:3.5\n\nRUN something \\', diff --git a/lib/modules/manager/dockerfile/extract.ts b/lib/modules/manager/dockerfile/extract.ts index fdce4db0522315..81e2da71bf4327 100644 --- a/lib/modules/manager/dockerfile/extract.ts +++ b/lib/modules/manager/dockerfile/extract.ts @@ -214,12 +214,12 @@ export function getDep( } } - if (dep.depName === 'ubuntu') { + if (dep.depName === 'ubuntu' || dep.depName?.endsWith('/ubuntu')) { dep.versioning = ubuntuVersioning.id; } if ( - dep.depName === 'debian' && + (dep.depName === 'debian' || dep.depName?.endsWith('/debian')) && debianVersioning.api.isVersion(dep.currentValue) ) { dep.versioning = debianVersioning.id; From 5de7eee2b3f7011397ea273d1289933c343da9cb Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Thu, 9 May 2024 10:36:59 +0545 Subject: [PATCH 093/172] refactor: use `detectPlatform` (#28945) --- .../repository/update/pr/changelog/github/source.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/workers/repository/update/pr/changelog/github/source.ts b/lib/workers/repository/update/pr/changelog/github/source.ts index c8909dad98fcec..496b5547f60460 100644 --- a/lib/workers/repository/update/pr/changelog/github/source.ts +++ b/lib/workers/repository/update/pr/changelog/github/source.ts @@ -1,6 +1,6 @@ -import URL from 'node:url'; import { GlobalConfig } from '../../../../../../config/global'; import { logger } from '../../../../../../logger'; +import { detectPlatform } from '../../../../../../util/common'; import * as hostRules from '../../../../../../util/host-rules'; import type { BranchUpgradeConfig } from '../../../../../types'; import { ChangeLogSource } from '../source'; @@ -42,8 +42,7 @@ export class GitHubChangeLogSource extends ChangeLogSource { error?: ChangeLogError; } { const sourceUrl = config.sourceUrl!; - const parsedUrl = URL.parse(sourceUrl); - const host = parsedUrl.host; + const host = detectPlatform(sourceUrl); const manager = config.manager; const packageName = config.packageName; @@ -57,7 +56,7 @@ export class GitHubChangeLogSource extends ChangeLogSource { }); // istanbul ignore if if (host && !token) { - if (host.endsWith('.github.com') || host === 'github.com') { + if (host === 'github') { if (!GlobalConfig.get('githubTokenWarn')) { logger.debug( { manager, packageName, sourceUrl }, From ad9d2b971eef44603fc84ce5d1452b612862553c Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Thu, 9 May 2024 11:52:39 +0545 Subject: [PATCH 094/172] fix(versioning/pep440): log debug message if `newVersion` is excluded from range (#28950) --- lib/modules/versioning/pep440/range.spec.ts | 47 ++++++++++++++------- lib/modules/versioning/pep440/range.ts | 13 ++++++ 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/lib/modules/versioning/pep440/range.spec.ts b/lib/modules/versioning/pep440/range.spec.ts index 193d558fd6749b..5c913f39dc8971 100644 --- a/lib/modules/versioning/pep440/range.spec.ts +++ b/lib/modules/versioning/pep440/range.spec.ts @@ -1,17 +1,34 @@ -import { checkRangeAndRemoveUnnecessaryRangeLimit } from './range'; +import { logger } from '../../../logger'; +import { checkRangeAndRemoveUnnecessaryRangeLimit, getNewValue } from './range'; -it.each` - rangeInput | newVersion | expected - ${'==4.1.*,>=3.2.2'} | ${'4.1.1'} | ${'==4.1.*'} - ${'==4.0.*,>=3.2.2'} | ${'4.0.0'} | ${'==4.0.*'} - ${'==7.2.*'} | ${'7.2.0'} | ${'==7.2.*'} -`( - 'checkRange("$rangeInput, "$newVersion"") === "$expected"', - ({ rangeInput, newVersion, expected }) => { - const res = checkRangeAndRemoveUnnecessaryRangeLimit( - rangeInput, - newVersion, +describe('modules/versioning/pep440/range', () => { + it.each` + rangeInput | newVersion | expected + ${'==4.1.*,>=3.2.2'} | ${'4.1.1'} | ${'==4.1.*'} + ${'==4.0.*,>=3.2.2'} | ${'4.0.0'} | ${'==4.0.*'} + ${'==7.2.*'} | ${'7.2.0'} | ${'==7.2.*'} + `( + 'checkRange("$rangeInput, "$newVersion"") === "$expected"', + ({ rangeInput, newVersion, expected }) => { + const res = checkRangeAndRemoveUnnecessaryRangeLimit( + rangeInput, + newVersion, + ); + expect(res).toEqual(expected); + }, + ); + + it('returns null without warning if new version is excluded from range', () => { + const res = getNewValue({ + currentValue: '>=1.25.0,<2,!=1.32.0', + rangeStrategy: 'auto', + newVersion: '1.32.0', + currentVersion: '1.25.0', + }); + expect(res).toBeNull(); + expect(logger.debug).toHaveBeenCalledWith( + 'Cannot calculate new value as the newVersion:`1.32.0` is excluded from range: `>=1.25.0,<2,!=1.32.0`', ); - expect(res).toEqual(expected); - }, -); + expect(logger.warn).not.toHaveBeenCalled(); + }); +}); diff --git a/lib/modules/versioning/pep440/range.ts b/lib/modules/versioning/pep440/range.ts index 0c94a3c4c894a8..ea36bb335bfc18 100644 --- a/lib/modules/versioning/pep440/range.ts +++ b/lib/modules/versioning/pep440/range.ts @@ -129,6 +129,18 @@ export function getNewValue({ return null; } + // return early if newVersion is excluded from range + if ( + ranges.some( + (range) => range.operator === '!=' && range.version === newVersion, + ) + ) { + logger.debug( + `Cannot calculate new value as the newVersion:\`${newVersion}\` is excluded from range: \`${currentValue}\``, + ); + return null; + } + switch (rangeStrategy) { case 'auto': case 'replace': @@ -191,6 +203,7 @@ export function getNewValue({ newVersion, ); + // istanbul ignore if if (!satisfies(newVersion, checkedResult)) { // we failed at creating the range logger.warn( From 2056e2d6223ad03c61f446f45befd7809bb74d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Krzemi=C5=84ski?= <3110813+krzema12@users.noreply.github.com> Date: Thu, 9 May 2024 10:21:00 +0200 Subject: [PATCH 095/172] feat(presets): add ktor to monorepos (#28951) --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index ab3bba14d6982a..6e64979e7d2235 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -341,6 +341,7 @@ const repoGroups = { junit5: 'https://github.com/junit-team/junit5', kotlin: 'https://github.com/JetBrains/kotlin', kroki: 'https://github.com/yuzutech/kroki', + ktor: 'https://github.com/ktorio/ktor', lamar: 'https://github.com/JasperFx/lamar', lerna: 'https://github.com/lerna/lerna', lexical: 'https://github.com/facebook/lexical', From bf22e13e907c2bc9345968390a28adfacb355661 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 9 May 2024 12:04:58 +0200 Subject: [PATCH 096/172] feat(packageRules): set skipReason=package-rules (#28952) --- lib/config/types.ts | 4 +++- lib/types/skip-reason.ts | 1 + lib/util/package-rules/index.spec.ts | 28 ++++++++++++++++++++++++++++ lib/util/package-rules/index.ts | 3 +++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/config/types.ts b/lib/config/types.ts index 2aa2cd155230eb..9853144a82dd29 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -3,7 +3,7 @@ import type { PlatformId } from '../constants'; import type { LogLevelRemap } from '../logger/types'; import type { CustomManager } from '../modules/manager/custom/types'; import type { RepoSortMethod, SortMethod } from '../modules/platform/types'; -import type { HostRule } from '../types'; +import type { HostRule, SkipReason } from '../types'; import type { GitNoVerifyOption } from '../util/git/types'; import type { MergeConfidence } from '../util/merge-confidence/types'; @@ -544,6 +544,8 @@ export interface PackageRuleInputConfig extends Record { releaseTimestamp?: string | null; repository?: string; currentVersionTimestamp?: string; + enabled?: boolean; + skipReason?: SkipReason; } export interface ConfigMigration { diff --git a/lib/types/skip-reason.ts b/lib/types/skip-reason.ts index 5517d34c0c8563..2d2ff12a3379a2 100644 --- a/lib/types/skip-reason.ts +++ b/lib/types/skip-reason.ts @@ -26,6 +26,7 @@ export type SkipReason = | 'no-source' | 'non-hex-dep-types' | 'not-a-version' + | 'package-rules' | 'path-dependency' | 'placeholder-url' | 'unknown-engines' diff --git a/lib/util/package-rules/index.spec.ts b/lib/util/package-rules/index.spec.ts index 6a6a7dc01407ba..b47ca9e99b877f 100644 --- a/lib/util/package-rules/index.spec.ts +++ b/lib/util/package-rules/index.spec.ts @@ -210,6 +210,34 @@ describe('util/package-rules/index', () => { expect(res2.automerge).toBeFalse(); }); + it('sets skipReason=package-rules if enabled=false', () => { + const dep: any = { + depName: 'foo', + packageRules: [ + { + enabled: false, + }, + ], + }; + const res = applyPackageRules(dep); + expect(res.enabled).toBeFalse(); + expect(res.skipReason).toBe('package-rules'); + }); + + it('skips skipReason=package-rules if enabled=true', () => { + const dep: any = { + enabled: false, + depName: 'foo', + packageRules: [ + { + enabled: false, + }, + ], + }; + const res = applyPackageRules(dep); + expect(res.skipReason).toBeUndefined(); + }); + it('matches anything if missing inclusive rules', () => { const config: TestConfig = { packageRules: [ diff --git a/lib/util/package-rules/index.ts b/lib/util/package-rules/index.ts index 9fee74a23bd821..f625ea5b24462f 100644 --- a/lib/util/package-rules/index.ts +++ b/lib/util/package-rules/index.ts @@ -80,6 +80,9 @@ export function applyPackageRules( lower: true, }); } + if (toApply.enabled === false && config.enabled !== false) { + config.skipReason = 'package-rules'; + } config = mergeChildConfig(config, toApply); } } From a91abaa54e3cd7d70b24378acef6fa15331909a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 10:18:42 +0000 Subject: [PATCH 097/172] chore(deps): update dependency jest-mock-extended to v3.0.7 (#28953) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 7e2d6b5a6151d9..c1a27300a4872b 100644 --- a/package.json +++ b/package.json @@ -329,7 +329,7 @@ "jest": "29.7.0", "jest-extended": "4.0.2", "jest-mock": "29.7.0", - "jest-mock-extended": "3.0.6", + "jest-mock-extended": "3.0.7", "jest-snapshot": "29.7.0", "markdownlint-cli2": "0.13.0", "memfs": "4.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d4277b0f7c500..b3f9f3b7347dd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -563,8 +563,8 @@ importers: specifier: 29.7.0 version: 29.7.0 jest-mock-extended: - specifier: 3.0.6 - version: 3.0.6(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + specifier: 3.0.7 + version: 3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -4069,8 +4069,8 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock-extended@3.0.6: - resolution: {integrity: sha512-DJuEoFzio0loqdX8NIwkbE9dgIXNzaj//pefOQxGkoivohpxbSQeNHCAiXkDNA/fmM4EIJDoZnSibP4w3dUJ9g==} + jest-mock-extended@3.0.7: + resolution: {integrity: sha512-7lsKdLFcW9B9l5NzZ66S/yTQ9k8rFtnwYdCNuRU/81fqDWicNDVhitTSPnrGmNeNm0xyw0JHexEOShrIKRCIRQ==} peerDependencies: jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 typescript: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -5676,10 +5676,10 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-essentials@9.4.2: - resolution: {integrity: sha512-mB/cDhOvD7pg3YCLk2rOtejHjjdSi9in/IBYE13S+8WA5FBSraYf4V/ws55uvs0IvQ/l0wBOlXy5yBNZ9Bl8ZQ==} + ts-essentials@10.0.0: + resolution: {integrity: sha512-77FHNJEyysF9+1s4G6eejuA1lxw7uMchT3ZPy3CIbh7GIunffpshtM8pTe5G6N5dpOzNevqRHew859ceLWVBfw==} peerDependencies: - typescript: '>=4.1.0' + typescript: '>=4.5.0' peerDependenciesMeta: typescript: optional: true @@ -11130,10 +11130,10 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.6(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) - ts-essentials: 9.4.2(typescript@5.4.5) + ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 jest-mock@29.7.0: @@ -12906,7 +12906,7 @@ snapshots: dependencies: typescript: 5.4.5 - ts-essentials@9.4.2(typescript@5.4.5): + ts-essentials@10.0.0(typescript@5.4.5): optionalDependencies: typescript: 5.4.5 From b5ea61b4350660f32f7dd2989d21eb887ed4c405 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 9 May 2024 15:05:00 +0200 Subject: [PATCH 098/172] refactor: always set currentVersionTimestamp (#28949) --- .../repository/process/lookup/index.spec.ts | 12 ++++-- .../repository/process/lookup/index.ts | 38 ++++++++++++------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 44068084c938d1..89843c3b2f6e85 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -3155,6 +3155,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res).toEqual({ currentVersion: '1.3.0', + currentVersionTimestamp: '2015-04-26T16:42:11.311Z', fixedVersion: '1.3.0', isSingleVersion: true, registryUrl: 'https://registry.npmjs.org', @@ -3195,6 +3196,7 @@ describe('workers/repository/process/lookup/index', () => { ).unwrapOrThrow(); expect(res).toEqual({ currentVersion: '1.3.0', + currentVersionTimestamp: '2015-04-26T16:42:11.311Z', fixedVersion: '1.3.0', isSingleVersion: true, registryUrl: 'https://registry.npmjs.org', @@ -3247,6 +3249,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res).toEqual({ currentVersion: '1.3.0', + currentVersionTimestamp: '2015-04-26T16:42:11.311Z', deprecationMessage: codeBlock` On registry \`https://registry.npmjs.org\`, the "latest" version of dependency \`q3\` has the following deprecation notice: @@ -4039,14 +4042,15 @@ describe('workers/repository/process/lookup/index', () => { allowedVersions: '< 19.0.0', }, ]; + const releaseTimestamp = new Date( + Date.now() - 25 * 60 * 60 * 1000, + ).toISOString(); getDockerReleases.mockResolvedValueOnce({ releases: [ { version: '17.0.0', // a day old release - releaseTimestamp: new Date( - Date.now() - 25 * 60 * 60 * 1000, - ).toISOString(), + releaseTimestamp, }, { version: '18.0.0', @@ -4063,6 +4067,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res).toEqual({ currentVersion: '17.0.0', + currentVersionTimestamp: releaseTimestamp, fixedVersion: '17.0.0', isSingleVersion: true, registryUrl: 'https://index.docker.io', @@ -4078,7 +4083,6 @@ describe('workers/repository/process/lookup/index', () => { ], versioning: 'docker', warnings: [], - currentVersionTimestamp: undefined, }); }); diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index d6c7cc5c739a47..ca9ed8e876afa7 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -36,6 +36,17 @@ import { isReplacementRulesConfigured, } from './utils'; +function getTimestamp( + versions: Release[], + version: string, + versioning: allVersioning.VersioningApi, +): string | null | undefined { + return versions.find( + (v) => + versioning.isValid(v.version) && versioning.equals(v.version, version), + )?.releaseTimestamp; +} + export async function lookupUpdates( inconfig: LookupUpdateConfig, ): Promise> { @@ -287,21 +298,22 @@ export async function lookupUpdates( } res.currentVersion = currentVersion!; - const currentVersionTimestamp = allVersions.find( - (v) => - versioning.isValid(v.version) && - versioning.equals(v.version, currentVersion), - )?.releaseTimestamp; + const currentVersionTimestamp = getTimestamp( + allVersions, + currentVersion, + versioning, + ); - if ( - is.nonEmptyString(currentVersionTimestamp) && - config.packageRules?.some((rules) => - is.nonEmptyString(rules.matchCurrentAge), - ) - ) { + if (is.nonEmptyString(currentVersionTimestamp)) { res.currentVersionTimestamp = currentVersionTimestamp; - // Reapply package rules to check matches for matchCurrentAge - config = applyPackageRules({ ...config, currentVersionTimestamp }); + if ( + config.packageRules?.some((rules) => + is.nonEmptyString(rules.matchCurrentAge), + ) + ) { + // Reapply package rules to check matches for matchCurrentAge + config = applyPackageRules({ ...config, currentVersionTimestamp }); + } } if ( From 7cbb379ffdf074d93b248cde30baffa794c56da4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 19:30:00 +0000 Subject: [PATCH 099/172] build(deps): update yarn monorepo (#28956) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- pnpm-lock.yaml | 25 ++++++++----------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index c1a27300a4872b..e18c4f34c42cd6 100644 --- a/package.json +++ b/package.json @@ -166,8 +166,8 @@ "@renovatebot/pep440": "3.0.20", "@renovatebot/ruby-semver": "3.0.23", "@sindresorhus/is": "4.6.0", - "@yarnpkg/core": "4.0.3", - "@yarnpkg/parsers": "3.0.0", + "@yarnpkg/core": "4.0.5", + "@yarnpkg/parsers": "3.0.2", "agentkeepalive": "4.5.0", "aggregate-error": "3.1.0", "auth-header": "1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3f9f3b7347dd5..a3d49713d8b229 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,11 +84,11 @@ importers: specifier: 4.6.0 version: 4.6.0 '@yarnpkg/core': - specifier: 4.0.3 - version: 4.0.3(typanion@3.14.0) + specifier: 4.0.5 + version: 4.0.5(typanion@3.14.0) '@yarnpkg/parsers': - specifier: 3.0.0 - version: 3.0.0 + specifier: 3.0.2 + version: 3.0.2 agentkeepalive: specifier: 4.5.0 version: 4.5.0 @@ -2291,8 +2291,8 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@yarnpkg/core@4.0.3': - resolution: {integrity: sha512-O+WGCjB9aIBxdRMBxXdsIy08MW4RbxfCS2AfywWb8DPS9H0LICahUJgNAaE0fwCsW7/gNzQbLYlh9DQQwzONrA==} + '@yarnpkg/core@4.0.5': + resolution: {integrity: sha512-6ib9l8P30GxHvxZo3170hr5PCy2qQnI4N4lXwNJxJnV0i46UlgLA4hlGp/kFVttteATGeckfduIDyWZgjn9sPw==} engines: {node: '>=18.12.0'} '@yarnpkg/fslib@3.0.2': @@ -2305,10 +2305,6 @@ packages: peerDependencies: '@yarnpkg/fslib': ^3.0.2 - '@yarnpkg/parsers@3.0.0': - resolution: {integrity: sha512-jVZa3njBv6tcOUw34nlUdUM/40wwtm/gnVF8rtk0tA6vNcokqYI8CFU1BZjlpFwUSZaXxYkrtuPE/f2MMFlTxQ==} - engines: {node: '>=18.12.0'} - '@yarnpkg/parsers@3.0.2': resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==} engines: {node: '>=18.12.0'} @@ -8995,14 +8991,14 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@yarnpkg/core@4.0.3(typanion@3.14.0)': + '@yarnpkg/core@4.0.5(typanion@3.14.0)': dependencies: '@arcanis/slice-ansi': 1.1.1 '@types/semver': 7.5.8 '@types/treeify': 1.0.3 '@yarnpkg/fslib': 3.0.2 '@yarnpkg/libzip': 3.0.1(@yarnpkg/fslib@3.0.2) - '@yarnpkg/parsers': 3.0.0 + '@yarnpkg/parsers': 3.0.2 '@yarnpkg/shell': 4.0.2(typanion@3.14.0) camelcase: 5.3.1 chalk: 3.0.0 @@ -9036,11 +9032,6 @@ snapshots: '@yarnpkg/fslib': 3.0.2 tslib: 2.6.2 - '@yarnpkg/parsers@3.0.0': - dependencies: - js-yaml: 3.14.1 - tslib: 2.6.2 - '@yarnpkg/parsers@3.0.2': dependencies: js-yaml: 3.14.1 From 0d77ddff6405774267a1ebce619316eb96435bc4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 23:32:45 +0000 Subject: [PATCH 100/172] chore(deps): update ossf/scorecard-action action to v2.3.3 (#28967) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 21b0f8f567ae4e..3950fe6b1a1779 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -26,7 +26,7 @@ jobs: show-progress: false - name: 'Run analysis' - uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3 with: results_file: results.sarif results_format: sarif From 949967380bd634e41790db73d29aeb6840d062c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 05:17:53 +0000 Subject: [PATCH 101/172] chore(deps): update containerbase/internal-tools action to v3.0.83 (#28971) 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 376c4663d60008..ffcacb9cc2367e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -632,7 +632,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@dbc381e7a824b3777dceafc226804644311ab9a1 # v3.0.82 + uses: containerbase/internal-tools@2cc75ad534e90770ee88f275701c41e4693929c1 # v3.0.83 with: command: docker-config From 760291c5827ada0311a4b60d64075b0000e2d1a8 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 19:34:55 -1000 Subject: [PATCH 102/172] feat(preset): support _VERSION updates within bitbucket pipelines (#28964) --- .../presets/internal/regex-managers.spec.ts | 121 ++++++++++++++++++ lib/config/presets/internal/regex-managers.ts | 12 ++ 2 files changed, 133 insertions(+) diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts index 2843cdc46bfb01..ed954a1146052a 100644 --- a/lib/config/presets/internal/regex-managers.spec.ts +++ b/lib/config/presets/internal/regex-managers.spec.ts @@ -4,6 +4,127 @@ import { extractPackageFile } from '../../../modules/manager/custom/regex'; import { presets } from './regex-managers'; describe('config/presets/internal/regex-managers', () => { + describe('Update `_VERSION` variables in Bitbucket Pipelines', () => { + const customManager = + presets['bitbucketPipelinesVersions'].customManagers?.[0]; + + it(`find dependencies in file`, async () => { + const fileContent = codeBlock` + script: + # renovate: datasource=docker depName=node versioning=docker + - export NODE_VERSION=18 + + # renovate: datasource=npm depName=pnpm + - export PNPM_VERSION="7.25.1" + + # renovate: datasource=npm depName=yarn + - export YARN_VERSION 3.3.1 + + # renovate: datasource=custom.hashicorp depName=consul + - export CONSUL_VERSION 1.3.1 + + # renovate: datasource=github-releases depName=kubernetes-sigs/kustomize versioning=regex:^(?.+)/v(?\\d+)\\.(?\\d+)\\.(?\\d+)$ extractVersion=^kustomize/(?.+)$ + - export KUSTOMIZE_VERSION v5.2.1 + + - pipe: something/cool:latest + variables: + # renovate: datasource=docker depName=node versioning=docker + NODE_VERSION: 18 + # renovate: datasource=npm depName=pnpm + PNPM_VERSION:"7.25.1" + # renovate: datasource=npm depName=yarn + YARN_VERSION: '3.3.1' + + - echo $NODE_VERSION + `; + + const res = await extractPackageFile( + fileContent, + 'bitbucket-pipelines.yml', + customManager!, + ); + + expect(res?.deps).toMatchObject([ + { + currentValue: '18', + datasource: 'docker', + depName: 'node', + replaceString: + '# renovate: datasource=docker depName=node versioning=docker\n - export NODE_VERSION=18\n', + versioning: 'docker', + }, + { + currentValue: '7.25.1', + datasource: 'npm', + depName: 'pnpm', + replaceString: + '# renovate: datasource=npm depName=pnpm\n - export PNPM_VERSION="7.25.1"\n', + }, + { + currentValue: '3.3.1', + datasource: 'npm', + depName: 'yarn', + replaceString: + '# renovate: datasource=npm depName=yarn\n - export YARN_VERSION 3.3.1\n', + }, + { + currentValue: '1.3.1', + datasource: 'custom.hashicorp', + depName: 'consul', + replaceString: + '# renovate: datasource=custom.hashicorp depName=consul\n - export CONSUL_VERSION 1.3.1\n', + }, + { + currentValue: 'v5.2.1', + datasource: 'github-releases', + depName: 'kubernetes-sigs/kustomize', + replaceString: + '# renovate: datasource=github-releases depName=kubernetes-sigs/kustomize versioning=regex:^(?.+)/v(?\\d+)\\.(?\\d+)\\.(?\\d+)$ extractVersion=^kustomize/(?.+)$\n - export KUSTOMIZE_VERSION v5.2.1\n', + extractVersion: '^kustomize/(?.+)$', + versioning: + 'regex:^(?.+)/v(?\\d+)\\.(?\\d+)\\.(?\\d+)$', + }, + { + currentValue: '18', + datasource: 'docker', + depName: 'node', + replaceString: + '# renovate: datasource=docker depName=node versioning=docker\n NODE_VERSION: 18\n', + versioning: 'docker', + }, + { + currentValue: '7.25.1', + datasource: 'npm', + depName: 'pnpm', + replaceString: + '# renovate: datasource=npm depName=pnpm\n PNPM_VERSION:"7.25.1"\n', + }, + { + currentValue: '3.3.1', + datasource: 'npm', + depName: 'yarn', + replaceString: + "# renovate: datasource=npm depName=yarn\n YARN_VERSION: '3.3.1'\n", + }, + ]); + }); + + describe('matches regexes patterns', () => { + it.each` + path | expected + ${'bitbucket-pipelines.yml'} | ${true} + ${'bitbucket-pipelines.yaml'} | ${true} + ${'foo/bitbucket-pipelines.yml'} | ${true} + ${'foo/bitbucket-pipelines.yaml'} | ${true} + ${'foo/bar/bitbucket-pipelines.yml'} | ${true} + ${'foo/bar/bitbucket-pipelines.yaml'} | ${true} + ${'bitbucket-pipelines'} | ${false} + `('$path', ({ path, expected }) => { + expect(regexMatches(path, customManager!.fileMatch)).toBe(expected); + }); + }); + }); + describe('Update `_VERSION` variables in Dockerfiles', () => { const customManager = presets['dockerfileVersions'].customManagers?.[0]; diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index cf998276711795..26999d940d7938 100644 --- a/lib/config/presets/internal/regex-managers.ts +++ b/lib/config/presets/internal/regex-managers.ts @@ -18,6 +18,18 @@ export const presets: Record = { description: 'Update `$schema` version in `biome.json` configuration files.', }, + bitbucketPipelinesVersions: { + customManagers: [ + { + customType: 'regex', + fileMatch: ['(^|/)bitbucket-pipelines\\.ya?ml$'], + matchStrings: [ + '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (lookupName|packageName)=(?[^\\s]+?))?(?: versioning=(?[^\\s]+?))?(?: extractVersion=(?[^\\s]+?))?(?: registryUrl=(?[^\\s]+?))?\\s+.*\\s+[A-Za-z0-9_]+?_VERSION[ =:]\\s?["\']?(?.+?)["\']?\\s', + ], + }, + ], + description: 'Update `_VERSION` variables in Bitbucket Pipelines', + }, dockerfileVersions: { customManagers: [ { From 74f1833a27fa88a7870b77026c0af73b26c19d6f Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 19:35:16 -1000 Subject: [PATCH 103/172] feat(preset): update dockerfileVersions match string (#28963) --- lib/config/presets/internal/regex-managers.spec.ts | 10 ++++++++++ lib/config/presets/internal/regex-managers.ts | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts index ed954a1146052a..d43fccbf71749c 100644 --- a/lib/config/presets/internal/regex-managers.spec.ts +++ b/lib/config/presets/internal/regex-managers.spec.ts @@ -138,6 +138,9 @@ describe('config/presets/internal/regex-managers', () => { # renovate: datasource=npm depName=pnpm ENV PNPM_VERSION="7.25.1" + # renovate: datasource=npm depName=pnpm + ENV PNPM_VERSION='7.25.1' + # renovate: datasource=npm depName=yarn ENV YARN_VERSION 3.3.1 @@ -172,6 +175,13 @@ describe('config/presets/internal/regex-managers', () => { replaceString: '# renovate: datasource=npm depName=pnpm\nENV PNPM_VERSION="7.25.1"\n', }, + { + currentValue: '7.25.1', + datasource: 'npm', + depName: 'pnpm', + replaceString: + "# renovate: datasource=npm depName=pnpm\nENV PNPM_VERSION='7.25.1'\n", + }, { currentValue: '3.3.1', datasource: 'npm', diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index 26999d940d7938..6d772d39debe06 100644 --- a/lib/config/presets/internal/regex-managers.ts +++ b/lib/config/presets/internal/regex-managers.ts @@ -39,7 +39,7 @@ export const presets: Record = { '(^|/)([Dd]ocker|[Cc]ontainer)file[^/]*$', ], matchStrings: [ - '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (lookupName|packageName)=(?[^\\s]+?))?(?: versioning=(?[^\\s]+?))?(?: extractVersion=(?[^\\s]+?))?(?: registryUrl=(?[^\\s]+?))?\\s(?:ENV|ARG) .+?_VERSION[ =]"?(?.+?)"?\\s', + '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (lookupName|packageName)=(?[^\\s]+?))?(?: versioning=(?[^\\s]+?))?(?: extractVersion=(?[^\\s]+?))?(?: registryUrl=(?[^\\s]+?))?\\s(?:ENV|ARG)\\s+[A-Za-z0-9_]+?_VERSION[ =]["\']?(?.+?)["\']?\\s', ], }, ], From 0b49bf0a3e89f43d20189cf17a7133bcc71aa0fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 08:28:29 +0000 Subject: [PATCH 104/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.6 (#28973) 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 f0a71f220f2ca6..f1a3f4031fd53c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.5 +FROM ghcr.io/containerbase/devcontainer:10.6.6 From 6ad22d5d60b33ffb49201e133ed24e8524153165 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 09:15:55 +0000 Subject: [PATCH 105/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.6 (#28975) 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 2445717902609a..c09a691badaefc 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -492,7 +492,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.5', + default: 'ghcr.io/containerbase/sidecar:10.6.6', globalOnly: true, }, { From 6b0d26c972e0e21462b91b925851a3d1c1aba09c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 10 May 2024 11:17:19 +0200 Subject: [PATCH 106/172] docs: move docs index/homepage file to main repo (#28751) Co-authored-by: Michael Kriese --- docs/usage/index.md | 91 ++++++++++++++++++++++++++++++++++ tools/docs/test/index.test.mjs | 3 -- 2 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 docs/usage/index.md diff --git a/docs/usage/index.md b/docs/usage/index.md new file mode 100644 index 00000000000000..ac420d928a1b30 --- /dev/null +++ b/docs/usage/index.md @@ -0,0 +1,91 @@ +![Renovate banner](https://app.renovatebot.com/images/whitesource_renovate_660_220.jpg){ loading=lazy } + +# Renovate documentation + +Automated dependency updates. +Multi-platform and multi-language. + +## Why use Renovate? + + + + +
+ +- :octicons-git-pull-request-24:{ .lg .middle } __Automatic updates__ + + --- + + Get pull requests to update your dependencies and lock files. + +- :octicons-calendar-24:{ .lg .middle } __On your schedule__ + + --- + + Reduce noise by scheduling when Renovate creates PRs. + +- :octicons-package-24:{ .lg .middle } __Works out of the box__ + + --- + + Renovate finds relevant package files automatically, including in monorepos. + +- :octicons-goal-24:{ .lg .middle } __How you like it__ + + --- + + You can customize the bot's behavior with configuration files. + +- :octicons-share-24:{ .lg .middle } __Share your configuration__ + + --- + + Share your configuration with ESLint-like config presets. + +- :octicons-sync-24:{ .lg .middle } __Out with the old, in with the new__ + + --- + + Get replacement PRs to migrate from a deprecated dependency to the community suggested replacement, works with _most_ managers, see [issue 14149](https://github.com/renovatebot/renovate/issues/14149) for exceptions. + +- :octicons-tools-24:{ .lg .middle } __Open source__ + + --- + + Renovate is licensed under the [GNU Affero General Public License](https://github.com/renovatebot/renovate/blob/main/license). + +
+ + + + +## Supported Platforms + +Renovate works on these platforms: + +- [GitHub (.com and Enterprise Server)](./modules/platform/github/index.md) +- [GitLab (.com and CE/EE)](./modules/platform/gitlab/index.md) +- [Bitbucket Cloud](./modules/platform/bitbucket/index.md) +- [Bitbucket Server](./modules/platform/bitbucket-server/index.md) +- [Azure DevOps](./modules/platform/azure/index.md) +- [AWS CodeCommit](./modules/platform/codecommit/index.md) +- [Gitea and Forgejo](./modules/platform/gitea/index.md) +- [Gerrit (experimental)](./modules/platform/gerrit/index.md) + +## Who Uses Renovate? + +Renovate is used by: + +![Renovate Matrix](https://app.renovatebot.com/images/matrix.png){ loading=lazy } + +## Ways to run Renovate + +You can run Renovate as: + +- an [Open Source npm package](https://www.npmjs.com/package/renovate) +- a [pre-built Open Source image on Docker Hub](https://hub.docker.com/r/renovate/renovate) + +Or you can use [the Mend Renovate App](https://github.com/marketplace/renovate) which is hosted by [Mend](https://www.mend.io/). + +[Install the Mend Renovate app for GitHub](https://github.com/marketplace/renovate){ .md-button .md-button--primary } +[Check out our tutorial](https://github.com/renovatebot/tutorial){ .md-button } diff --git a/tools/docs/test/index.test.mjs b/tools/docs/test/index.test.mjs index 983c8790310c44..ed52a9299c617a 100644 --- a/tools/docs/test/index.test.mjs +++ b/tools/docs/test/index.test.mjs @@ -54,9 +54,6 @@ describe('index', async () => { const todo = await glob('**/*.md', { cwd: 'tmp/docs' }); const files = new Set(todo); - // Files from https://github.com/renovatebot/renovatebot.github.io/tree/main/src - files.add('index.md'); - let c = 0; for (const file of todo) { From 243c265ade75cf1eb51e340f3264db1235103121 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 10 May 2024 01:00:36 -1000 Subject: [PATCH 107/172] test(preset): add tests for biomeVersions (#28965) --- .../presets/internal/regex-managers.spec.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts index d43fccbf71749c..4c9e69cfa25043 100644 --- a/lib/config/presets/internal/regex-managers.spec.ts +++ b/lib/config/presets/internal/regex-managers.spec.ts @@ -4,6 +4,46 @@ import { extractPackageFile } from '../../../modules/manager/custom/regex'; import { presets } from './regex-managers'; describe('config/presets/internal/regex-managers', () => { + describe('Update `$schema` version in biome.json', () => { + const customManager = presets['biomeVersions'].customManagers?.[0]; + + it(`find dependencies in file`, async () => { + const fileContent = codeBlock` + { + "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", + } + `; + + const res = await extractPackageFile( + fileContent, + 'biome.json', + customManager!, + ); + + expect(res?.deps).toMatchObject([ + { + currentValue: '1.7.3', + datasource: 'npm', + depName: '@biomejs/biome', + replaceString: '"https://biomejs.dev/schemas/1.7.3/schema.json"', + }, + ]); + }); + + describe('matches regexes patterns', () => { + it.each` + path | expected + ${'biome.json'} | ${true} + ${'biome.jsonc'} | ${true} + ${'foo/biome.json'} | ${true} + ${'foo/biome.jsonc'} | ${true} + ${'biome.yml'} | ${false} + `('$path', ({ path, expected }) => { + expect(regexMatches(path, customManager!.fileMatch)).toBe(expected); + }); + }); + }); + describe('Update `_VERSION` variables in Bitbucket Pipelines', () => { const customManager = presets['bitbucketPipelinesVersions'].customManagers?.[0]; From 0f7e4c2f7d72527a787849836ccf40ba8bde7213 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:25:39 +0000 Subject: [PATCH 108/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.7 (#28980) 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 f1a3f4031fd53c..6c3856fd57fc5a 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.6 +FROM ghcr.io/containerbase/devcontainer:10.6.7 From aa05c66498b856e68098aabcb92028fb1c14ebec Mon Sep 17 00:00:00 2001 From: "Xuan (Sean) Hu" Date: Fri, 10 May 2024 21:33:17 +0800 Subject: [PATCH 109/172] fix(pdm): ignore build requirements when update lock file (#28946) Co-authored-by: Michael Kriese --- lib/modules/manager/pep621/processors/pdm.spec.ts | 1 + lib/modules/manager/pep621/processors/pdm.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib/modules/manager/pep621/processors/pdm.spec.ts b/lib/modules/manager/pep621/processors/pdm.spec.ts index 3e44d383d6b128..bab8859c79c18b 100644 --- a/lib/modules/manager/pep621/processors/pdm.spec.ts +++ b/lib/modules/manager/pep621/processors/pdm.spec.ts @@ -155,6 +155,7 @@ describe('modules/manager/pep621/processors/pdm', () => { depType: depTypes.pdmDevDependencies, }, { depName: 'group3/dep8', depType: depTypes.pdmDevDependencies }, + { depName: 'dep9', depType: depTypes.buildSystemRequires }, ]; const result = await processor.updateArtifacts( { diff --git a/lib/modules/manager/pep621/processors/pdm.ts b/lib/modules/manager/pep621/processors/pdm.ts index c060e8af23b1a6..c36311540fcd14 100644 --- a/lib/modules/manager/pep621/processors/pdm.ts +++ b/lib/modules/manager/pep621/processors/pdm.ts @@ -187,6 +187,10 @@ function generateCMDs(updatedDeps: Upgrade[]): string[] { ); break; } + case depTypes.buildSystemRequires: + // build requirements are not locked in the lock files, no need to update. + // Reference: https://github.com/pdm-project/pdm/discussions/2869 + break; default: { addPackageToCMDRecord(packagesByCMD, pdmUpdateCMD, dep.packageName!); } From e7bcf3f5b419ff6be28c9d3867abe901e95fa3ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 18:39:11 +0200 Subject: [PATCH 110/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.7 (#28984) 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 c09a691badaefc..01ba7c38acf843 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -492,7 +492,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.6', + default: 'ghcr.io/containerbase/sidecar:10.6.7', globalOnly: true, }, { From d30c696a8a0b3c0afbaced60a3810706f0990bc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 20:21:10 +0000 Subject: [PATCH 111/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.6 (#28985) 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 30d72f38299294..e082e7a4b1c94f 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.5@sha256:3902b3f0a1cb7931067b744ac4dd8c70799d8b6cbcb2e8f8cbd999b517f02207 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.6@sha256:db3a2293ea8d64b27a9e330aafd0f9635508631a7e582f68cdfc8c3857e83a7b AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.5-full@sha256:0030bc249ce62a34fa5b88b8c22b9a7d77683a20dbbc25fa4171d11246125ea4 AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.6-full@sha256:6f81b531038af62e92aa6243efd1fd82798cb3b15deb366ca0ac901c8b0fe93d AS full-base # -------------------------------------- # build image From 5b3c23c3e69329697f0d064d4894f0eaeeb6474b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 20:25:48 +0000 Subject: [PATCH 112/172] build(deps): update dependency @renovatebot/osv-offline to v1.5.5 (#28988) 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 e18c4f34c42cd6..0cece2b96ca8a4 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,7 @@ "@opentelemetry/semantic-conventions": "1.24.0", "@qnighy/marshal": "0.1.3", "@renovatebot/kbpgp": "3.0.1", - "@renovatebot/osv-offline": "1.5.4", + "@renovatebot/osv-offline": "1.5.5", "@renovatebot/pep440": "3.0.20", "@renovatebot/ruby-semver": "3.0.23", "@sindresorhus/is": "4.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3d49713d8b229..82afc24170ac5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,8 +72,8 @@ importers: specifier: 3.0.1 version: 3.0.1 '@renovatebot/osv-offline': - specifier: 1.5.4 - version: 1.5.4(encoding@0.1.13) + specifier: 1.5.5 + version: 1.5.5(encoding@0.1.13) '@renovatebot/pep440': specifier: 3.0.20 version: 3.0.20 @@ -1588,8 +1588,8 @@ packages: '@renovatebot/osv-offline-db@1.6.0': resolution: {integrity: sha512-cEOCTyd3+/7gPDmBn0pyJtF01+f9e/dJ1mOoML+v5AsP8GIPAzhtQUuIB5FiCxS4IsbP0qm34anYUZHGJldNJA==} - '@renovatebot/osv-offline@1.5.4': - resolution: {integrity: sha512-oXOi3kMvIe4Yl2S73iy/iGU7mpB8WhtPEjiLUvFAexbo61Mcs0eN2k3VUL+W+52igmeOR3sIIrD83/vH1mHrZA==} + '@renovatebot/osv-offline@1.5.5': + resolution: {integrity: sha512-jZYVZww5l9+4Xaa+wS/Hc+zsezO229tEoorhBa+buseKMUtYQxNI0RAc/n2AuWYjqWYr4qL5rNg+QcMmwqj/Kg==} '@renovatebot/pep440@3.0.20': resolution: {integrity: sha512-Jw8jzHh2r1LAPTrjQlIwh/+8J3N2MqXZgPuTt6HdNeJIBjJskV8bsEfGs9rBzXi/omeHob3BXnvlECu2rCCUYw==} @@ -8092,7 +8092,7 @@ snapshots: dependencies: '@seald-io/nedb': 4.0.4 - '@renovatebot/osv-offline@1.5.4(encoding@0.1.13)': + '@renovatebot/osv-offline@1.5.5(encoding@0.1.13)': dependencies: '@octokit/rest': 20.1.1 '@renovatebot/osv-offline-db': 1.6.0 From 988d8379a2d6ca7de08dae3a52b3a233ff9f0883 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 20:33:41 +0000 Subject: [PATCH 113/172] chore(deps): update containerbase/internal-tools action to v3.0.85 (#28989) 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 ffcacb9cc2367e..ce514aead6e652 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -632,7 +632,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@2cc75ad534e90770ee88f275701c41e4693929c1 # v3.0.83 + uses: containerbase/internal-tools@92eb14b1949285966195aa5098c06f5ee0912388 # v3.0.85 with: command: docker-config From 3fd42d878f8f74efdcae2eeed0e746a60efe043e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 22:32:42 +0000 Subject: [PATCH 114/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.9 (#28991) 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 01ba7c38acf843..4c9a5a8df3f209 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -492,7 +492,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.7', + default: 'ghcr.io/containerbase/sidecar:10.6.9', globalOnly: true, }, { From f74dcc210db259301b46a99c0071a37f4eb80587 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 22:32:51 +0000 Subject: [PATCH 115/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.9 (#28990) 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 6c3856fd57fc5a..d0bd23af854520 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.7 +FROM ghcr.io/containerbase/devcontainer:10.6.9 From 9018e1ac52dbeb59fd529cbbc0b5163d604373c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 02:43:08 +0000 Subject: [PATCH 116/172] build(deps): update dependency cacache to v18.0.3 (#28994) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0cece2b96ca8a4..64a3135cd364ea 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "aws4": "1.12.0", "azure-devops-node-api": "13.0.0", "bunyan": "1.8.15", - "cacache": "18.0.2", + "cacache": "18.0.3", "cacheable-lookup": "5.0.4", "chalk": "4.1.2", "changelog-filename-regex": "2.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82afc24170ac5e..96ad69a305d8fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: 1.8.15 version: 1.8.15 cacache: - specifier: 18.0.2 - version: 18.0.2 + specifier: 18.0.3 + version: 18.0.3 cacheable-lookup: specifier: 5.0.4 version: 5.0.4 @@ -2591,8 +2591,8 @@ packages: bzip-deflate@1.0.0: resolution: {integrity: sha512-9RMnpiJqMYMJcLdr4pxwowZ8Zh3P+tVswE/bnX6tZ14UGKNcdV5WVK2P+lGp2As+RCjl+i3SFJ117HyCaaHNDA==} - cacache@18.0.2: - resolution: {integrity: sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==} + cacache@18.0.3: + resolution: {integrity: sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==} engines: {node: ^16.14.0 || >=18.0.0} cacheable-lookup@5.0.4: @@ -9373,7 +9373,7 @@ snapshots: bzip-deflate@1.0.0: {} - cacache@18.0.2: + cacache@18.0.3: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 @@ -11467,7 +11467,7 @@ snapshots: make-fetch-happen@13.0.1: dependencies: '@npmcli/agent': 2.2.2 - cacache: 18.0.2 + cacache: 18.0.3 http-cache-semantics: 4.1.1 is-lambda: 1.0.1 minipass: 7.1.0 From 81f10fd139a8aa308671c563561903857bfde75b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 09:41:00 +0000 Subject: [PATCH 117/172] chore(deps): update dependency @types/lodash to v4.17.1 (#29002) 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 64a3135cd364ea..44cbd6a4bb14c2 100644 --- a/package.json +++ b/package.json @@ -286,7 +286,7 @@ "@types/js-yaml": "4.0.9", "@types/json-dup-key-validator": "1.0.2", "@types/linkify-markdown": "1.0.3", - "@types/lodash": "4.17.0", + "@types/lodash": "4.17.1", "@types/luxon": "3.4.2", "@types/markdown-it": "14.0.1", "@types/markdown-table": "2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96ad69a305d8fb..c3119fa99293f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -434,8 +434,8 @@ importers: specifier: 1.0.3 version: 1.0.3 '@types/lodash': - specifier: 4.17.0 - version: 4.17.0 + specifier: 4.17.1 + version: 4.17.1 '@types/luxon': specifier: 3.4.2 version: 3.4.2 @@ -2098,8 +2098,8 @@ packages: '@types/linkify-markdown@1.0.3': resolution: {integrity: sha512-BnuGqDmpzmXCDMXHzgle/vMRUnbFcWclts0+n7Or421exav3XG6efl9gsxamLET6QPhX+pMnxcsHgnAO/daj9w==} - '@types/lodash@4.17.0': - resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + '@types/lodash@4.17.1': + resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} '@types/luxon@3.4.2': resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} @@ -8767,7 +8767,7 @@ snapshots: '@types/linkify-markdown@1.0.3': {} - '@types/lodash@4.17.0': {} + '@types/lodash@4.17.1': {} '@types/luxon@3.4.2': {} From d96068c500548724e3cbee6c02f5a7cfc55949cd Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 11 May 2024 13:51:11 +0200 Subject: [PATCH 118/172] feat(bazel): update deps in WORKSPACE.bzlmod (#29001) --- lib/modules/manager/bazel/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/bazel/index.ts b/lib/modules/manager/bazel/index.ts index 77b156c93b3469..5b12b8aafe65cf 100644 --- a/lib/modules/manager/bazel/index.ts +++ b/lib/modules/manager/bazel/index.ts @@ -9,7 +9,7 @@ import { extractPackageFile } from './extract'; export { extractPackageFile, updateArtifacts }; export const defaultConfig = { - fileMatch: ['(^|/)WORKSPACE(|\\.bazel)$', '\\.bzl$'], + fileMatch: ['(^|/)WORKSPACE(|\\.bazel|\\.bzlmod)$', '\\.bzl$'], }; export const categories: Category[] = ['bazel']; From da3872eda8e738cbc055cda1fc8d614c66272b80 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 12:02:16 +0000 Subject: [PATCH 119/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.10.7 (#29005) 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 e082e7a4b1c94f..b673f24c83c4a7 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.6@sha256:db3a2293ea8d64b27a9e330aafd0f9635508631a7e582f68cdfc8c3857e83a7b AS slim-base +FROM ghcr.io/renovatebot/base-image:2.10.7@sha256:16849f19f612d30c7a16ddbae50e9e29e6ba1b3132dad307365b6e20b8a9d40a AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.6-full@sha256:6f81b531038af62e92aa6243efd1fd82798cb3b15deb366ca0ac901c8b0fe93d AS full-base +FROM ghcr.io/renovatebot/base-image:2.10.7-full@sha256:55c0fee01e99d142001423a4384ee1b69d5841def5e7d6b88fbca1b96731cbfc AS full-base # -------------------------------------- # build image From 0c57195888771a6d798445b370e98c0eb2c7ea4b Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 11 May 2024 15:52:25 +0200 Subject: [PATCH 120/172] docs: pull who uses Renovate image into main repo (#29003) Co-authored-by: Michael Kriese --- docs/usage/assets/images/matrix.png | Bin 0 -> 54239 bytes docs/usage/index.md | 2 +- readme.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/usage/assets/images/matrix.png diff --git a/docs/usage/assets/images/matrix.png b/docs/usage/assets/images/matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..c305c6626d82d1adfdf22109438f0bd59d363ea8 GIT binary patch literal 54239 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 zn450>^33 Date: Sat, 11 May 2024 17:28:00 +0200 Subject: [PATCH 121/172] chore: improve code of conduct (#29008) --- CODE_OF_CONDUCT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c9c383579fbf77..4be7f647231a35 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -50,8 +50,8 @@ We quickly deal with rudeness in the community with: If you keep breaking the rules or challenge our guidelines openly, you will be blocked. For example: if you keep spamming the maintainers with `@mentions` or challenge our rules openly, you will be blocked. -We generally do not argue about these decisions, but we are willing to reverse a block if a you show that you understand and respect the rules, or if there was a misunderstanding. -Please reach out to the project's lead maintainer Rhys Arkins by email if so (the shorter the better). +We generally do not argue about these decisions, but we are willing to reverse a block if you show that you understand and respect the rules, or if there was a misunderstanding. +To reverse a block, or to clear up a misunderstanding, write a _short_ email to Renovate's lead maintainer Rhys Arkins. Simply put: we block and unblock swiftly, what matters is how you follow the rules going forward. From 4d11583e1846e83596bff1778e610ec61ecf593b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 15:39:06 +0000 Subject: [PATCH 122/172] feat(deps): update ghcr.io/renovatebot/base-image docker tag to v2.11.0 (#29009) 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 b673f24c83c4a7..d581680b4a8575 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.7@sha256:16849f19f612d30c7a16ddbae50e9e29e6ba1b3132dad307365b6e20b8a9d40a AS slim-base +FROM ghcr.io/renovatebot/base-image:2.11.0@sha256:9cca46a4b9cb6057fd6855211e243fe8bcf6faa1ad60c78cf2baa9d4c6408ce0 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.10.7-full@sha256:55c0fee01e99d142001423a4384ee1b69d5841def5e7d6b88fbca1b96731cbfc AS full-base +FROM ghcr.io/renovatebot/base-image:2.11.0-full@sha256:e5df9a40abfd683ef0373be382d66ca36248f033da8703b7bffad54c140b5f3e AS full-base # -------------------------------------- # build image From b333f4b4846815cf25ad854098f2f60cede68491 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 11 May 2024 19:11:44 +0200 Subject: [PATCH 123/172] docs(manager/terraform): rewrite Terraform vs OpenTofu (#29010) --- lib/modules/manager/terraform/readme.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/modules/manager/terraform/readme.md b/lib/modules/manager/terraform/readme.md index ebf59f69447b68..673634d7e9e71b 100644 --- a/lib/modules/manager/terraform/readme.md +++ b/lib/modules/manager/terraform/readme.md @@ -1,8 +1,9 @@ ### Terraform vs OpenTofu -There is no way for Renovate to differentiate, if a user is a Terraform user or has already adopted OpenTofu. -Therefore, Renovate defaults currently to interpret providers without a registry definition to be located at `registry.terraform.io`. -This behaviour can be modified using `packageRules`: +Renovate can not know if you want to use the Terraform or OpenTofu registry. +By default, Renovate uses the Terraform registry (`registry.terraform.io`) for providers _without_ a registry definition. + +You can override this default with your own `packageRules`, for example: ```json title="Prefer releases from OpenTofu" { From 5540e0b8aafb2691462a3dca5518342aacaacbb4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 12 May 2024 09:00:23 +0200 Subject: [PATCH 124/172] chore: fix typos in test descriptions (#29011) --- lib/config/migrations/custom/node-migration.spec.ts | 2 +- lib/modules/manager/bundler/update-locked.spec.ts | 2 +- lib/modules/manager/cargo/update-locked.spec.ts | 2 +- lib/workers/repository/update/pr/body/updates-table.spec.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/config/migrations/custom/node-migration.spec.ts b/lib/config/migrations/custom/node-migration.spec.ts index f9a7ec48fadb80..7171ebc41db193 100644 --- a/lib/config/migrations/custom/node-migration.spec.ts +++ b/lib/config/migrations/custom/node-migration.spec.ts @@ -12,7 +12,7 @@ describe('config/migrations/custom/node-migration', () => { ); }); - it('should not delete node incase it has more than one property', () => { + it('should not delete node in case it has more than one property', () => { expect(NodeMigration).toMigrate( { node: { enabled: true, automerge: false }, diff --git a/lib/modules/manager/bundler/update-locked.spec.ts b/lib/modules/manager/bundler/update-locked.spec.ts index 37caaadac05207..a0566ef66b1765 100644 --- a/lib/modules/manager/bundler/update-locked.spec.ts +++ b/lib/modules/manager/bundler/update-locked.spec.ts @@ -53,7 +53,7 @@ describe('modules/manager/bundler/update-locked', () => { expect(updateLockedDependency(config).status).toBe('unsupported'); }); - it('returns update-falied incase of errors', () => { + it('returns update-failed in case of errors', () => { const config: UpdateLockedConfig = { packageFile: 'Gemfile', lockFile: 'Gemfile.lock', diff --git a/lib/modules/manager/cargo/update-locked.spec.ts b/lib/modules/manager/cargo/update-locked.spec.ts index 5c99da7acdaf0a..c3ba15d26b6a6b 100644 --- a/lib/modules/manager/cargo/update-locked.spec.ts +++ b/lib/modules/manager/cargo/update-locked.spec.ts @@ -53,7 +53,7 @@ describe('modules/manager/cargo/update-locked', () => { expect(updateLockedDependency(config).status).toBe('unsupported'); }); - it('returns update-failed incase of errors', () => { + it('returns update-failed in case of errors', () => { const config: UpdateLockedConfig = { packageFile: 'Cargo.toml', lockFile: 'Cargo.lock', diff --git a/lib/workers/repository/update/pr/body/updates-table.spec.ts b/lib/workers/repository/update/pr/body/updates-table.spec.ts index 4fd2d140f703f9..54b1c1e7737c2a 100644 --- a/lib/workers/repository/update/pr/body/updates-table.spec.ts +++ b/lib/workers/repository/update/pr/body/updates-table.spec.ts @@ -152,7 +152,7 @@ describe('workers/repository/update/pr/body/updates-table', () => { ); }); - it('selects the best upgrade incase of duplicate table rows', () => { + it('selects the best upgrade in case of duplicate table rows', () => { const upgrade1 = partial({ manager: 'some-manager', branchName: 'some-branch', From 054e53e87a9d2ab05a723624a98d1e054525f8e1 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 12 May 2024 13:56:50 +0200 Subject: [PATCH 125/172] fix(gitlab): filter issues for ignorePrAuthor (#28996) Co-authored-by: Michael Kriese --- docs/usage/configuration-options.md | 5 ++++- lib/modules/platform/gitlab/index.ts | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 17799486a4475b..0e884ba064901d 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2060,9 +2060,12 @@ Applicable for Composer only for now. ## ignorePrAuthor This is usually needed if someone needs to migrate bot accounts, including from the Mend Renovate App to self-hosted. +An additional use case is for GitLab users of project or group access tokens who need to rotate them. + If `ignorePrAuthor` is configured to true, it means Renovate will fetch the entire list of repository PRs instead of optimizing to fetch only those PRs which it created itself. You should only want to enable this if you are changing the bot account (e.g. from `@old-bot` to `@new-bot`) and want `@new-bot` to find and update any existing PRs created by `@old-bot`. -It's recommended to revert this setting once that transition period is over and all old PRs are resolved. + +Setting this field to `true` in GitLab will also mean that all Issues will be fetched instead of only those by the bot itself. ## ignorePresets diff --git a/lib/modules/platform/gitlab/index.ts b/lib/modules/platform/gitlab/index.ts index e5b1e89368c945..0988ad0bb81750 100644 --- a/lib/modules/platform/gitlab/index.ts +++ b/lib/modules/platform/gitlab/index.ts @@ -1069,11 +1069,14 @@ export async function setBranchStatus({ export async function getIssueList(): Promise { if (!config.issueList) { - const query = getQueryString({ + const searchParams: Record = { per_page: '100', - scope: 'created_by_me', state: 'opened', - }); + }; + if (!config.ignorePrAuthor) { + searchParams.scope = 'created_by_me'; + } + const query = getQueryString(searchParams); const res = await gitlabApi.getJson< { iid: number; title: string; labels: string[] }[] >(`projects/${config.repository}/issues?${query}`, { From fe4550934d4d9d6aaeb86b883b3a476565185682 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 12 May 2024 14:07:50 +0200 Subject: [PATCH 126/172] docs(config options): rewrite `allowedVersions` (#29014) --- docs/usage/configuration-options.md | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 0e884ba064901d..dc47ce0b54a368 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2473,8 +2473,9 @@ For example you have multiple `package.json` and want to use `dependencyDashboar ### allowedVersions -Use this - usually within a packageRule - to limit how far to upgrade a dependency. -For example, if you wish to upgrade to Angular v1.5 but not to `angular` v1.6 or higher, you could define this to be `<= 1.5` or `< 1.6.0`: +You can use `allowedVersions` - usually within a `packageRules` entry - to limit how far to upgrade a dependency. + +For example, if you want to upgrade to Angular v1.5 but _not_ to `angular` v1.6 or higher, you could set `allowedVersions` to `<= 1.5` or `< 1.6.0`: ```json { @@ -2487,10 +2488,14 @@ For example, if you wish to upgrade to Angular v1.5 but not to `angular` v1.6 or } ``` -The valid syntax for this will be calculated at runtime because it depends on the versioning scheme, which is itself dynamic. +Renovate calculates the valid syntax for this at runtime, because it depends on the dynamic versioning scheme. + +#### Using regular expressions + +You can use Regular Expressions in the `allowedVersion` config. +You must _begin_ and _end_ your Regular Expression with the `/` character! -This field also supports Regular Expressions if they begin and end with `/`. -For example, the following will enforce that only 3 or 4-part versions are supported, without any prefixes: +For example, this config only allows 3 or 4-part versions, without any prefixes in the version: ```json { @@ -2503,8 +2508,12 @@ For example, the following will enforce that only 3 or 4-part versions are suppo } ``` -This field also supports a special negated regex syntax for ignoring certain versions. -Use the syntax `!/ /` like the following: +Again: note how the Regular Expression _begins_ and _ends_ with the `/` character. + +#### Ignore versions with negated regex syntax + +You can use a special negated regex syntax to ignore certain versions. +You must use the `!/ /` syntax, like this: ```json { From b0aa3fcc06d1e98a103c9c158d62e560d3b0c87b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 21:24:23 +0000 Subject: [PATCH 127/172] chore(deps): update containerbase/internal-tools action to v3.0.86 (#29017) 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 ce514aead6e652..2a1e24e6b87875 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -632,7 +632,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@92eb14b1949285966195aa5098c06f5ee0912388 # v3.0.85 + uses: containerbase/internal-tools@9f7fee1b8ad23efad8e02d0e7afd2cae63532add # v3.0.86 with: command: docker-config From b5908cfc3a5bdcac142847edd17292d666c9fe0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 01:30:42 +0000 Subject: [PATCH 128/172] docs: update references to renovate/renovate to v37.356.1 (#29018) 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 b92c499e5365f2..9657770455a777 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -384,7 +384,7 @@ To get access to the token a custom Renovate Docker image is needed that include The Dockerfile to create such an image can look like this: ```Dockerfile -FROM renovate/renovate:37.342.1 +FROM renovate/renovate:37.356.1 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 2bec32323746483efad33278f6f8eccded3e3a71 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 12 May 2024 19:23:29 -1000 Subject: [PATCH 129/172] refactor(preset): update regexManagers: to customManagers: (#28979) --- docs/usage/.pages | 2 +- docs/usage/configuration-options.md | 2 +- lib/config/presets/common.ts | 11 +++++++++++ lib/config/presets/index.spec.ts | 8 ++++++++ lib/config/presets/index.ts | 2 +- ...regex-managers.spec.ts => custom-managers.spec.ts} | 4 ++-- .../{regex-managers.ts => custom-managers.ts} | 0 lib/config/presets/internal/index.ts | 4 ++-- 8 files changed, 26 insertions(+), 7 deletions(-) rename lib/config/presets/internal/{regex-managers.spec.ts => custom-managers.spec.ts} (99%) rename lib/config/presets/internal/{regex-managers.ts => custom-managers.ts} (100%) diff --git a/docs/usage/.pages b/docs/usage/.pages index 992b2198e2eb93..9579c6e99cd47f 100644 --- a/docs/usage/.pages +++ b/docs/usage/.pages @@ -32,6 +32,7 @@ nav: - 'Noise Reduction': 'noise-reduction.md' - 'Upgrade best practices': 'upgrade-best-practices.md' - Included Presets: + - 'Custom Manager Presets': 'presets-customManagers.md' - 'Default Presets': 'presets-default.md' - 'Docker Presets': 'presets-docker.md' - 'Full Config Presets': 'presets-config.md' @@ -41,7 +42,6 @@ nav: - 'npm Presets': 'presets-npm.md' - 'Package Presets': 'presets-packages.md' - 'Preview Presets': 'presets-preview.md' - - 'Regex Manager Presets': 'presets-regexManagers.md' - 'Replacement Presets': 'presets-replacements.md' - 'Schedule Presets': 'presets-schedule.md' - 'Security Presets': 'presets-security.md' diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index dc47ce0b54a368..98f7813b243a22 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -703,7 +703,7 @@ For template fields, use the triple brace `{{{ }}}` notation to avoid Handlebars !!! tip - Look at our [Regex Manager Presets](./presets-regexManagers.md), they may have what you need. + Look at our [Custom Manager Presets](./presets-customManagers.md), they may have what you need. ### customType diff --git a/lib/config/presets/common.ts b/lib/config/presets/common.ts index 20ab27eaab961c..4fb427a4a3cfe9 100644 --- a/lib/config/presets/common.ts +++ b/lib/config/presets/common.ts @@ -31,6 +31,17 @@ export const removedPresets: Record = { 'github>whitesource/merge-confidence:beta': 'mergeConfidence:all-badges', 'replacements:messageFormat-{{package}}-to-@messageformat/{{package}}': 'replacements:messageFormat-to-scoped', + 'regexManagers:biomeVersions': 'customManagers:biomeVersions', + 'regexManagers:bitbucketPipelinesVersions': + 'customManagers:bitbucketPipelinesVersions', + 'regexManagers:dockerfileVersions': 'customManagers:dockerfileVersions', + 'regexManagers:githubActionsVersions': 'customManagers:githubActionsVersions', + 'regexManagers:gitlabPipelineVersions': + 'customManagers:gitlabPipelineVersions', + 'regexManagers:helmChartYamlAppVersions': + 'customManagers:helmChartYamlAppVersions', + 'regexManagers:mavenPropertyVersions': 'customManagers:mavenPropertyVersions', + 'regexManagers:tfvarsVersions': 'customManagers:tfvarsVersions', }; const renamedMonorepos: Record = { diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 443cdc5d0a19cd..f0d66a3b87cbce 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -1062,6 +1062,14 @@ describe('config/presets/index', () => { `); }); + it('handles renamed regexManagers presets', async () => { + const res = await presets.getPreset( + 'regexManagers:dockerfileVersions', + {}, + ); + expect(res.customManagers).toHaveLength(1); + }); + it('gets linters', async () => { const res = await presets.getPreset('packages:linters', {}); expect(res).toMatchSnapshot(); diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 827b1eef0768b2..1b0fcb264e6dc6 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -148,6 +148,7 @@ export function parsePreset(input: string): ParsedPreset { const presetsPackages = [ 'compatibility', 'config', + 'customManagers', 'default', 'docker', 'group', @@ -157,7 +158,6 @@ export function parsePreset(input: string): ParsedPreset { 'npm', 'packages', 'preview', - 'regexManagers', 'replacements', 'schedule', 'security', diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/custom-managers.spec.ts similarity index 99% rename from lib/config/presets/internal/regex-managers.spec.ts rename to lib/config/presets/internal/custom-managers.spec.ts index 4c9e69cfa25043..e869acdabe1e20 100644 --- a/lib/config/presets/internal/regex-managers.spec.ts +++ b/lib/config/presets/internal/custom-managers.spec.ts @@ -1,9 +1,9 @@ import { codeBlock } from 'common-tags'; import { regexMatches } from '../../../../test/util'; import { extractPackageFile } from '../../../modules/manager/custom/regex'; -import { presets } from './regex-managers'; +import { presets } from './custom-managers'; -describe('config/presets/internal/regex-managers', () => { +describe('config/presets/internal/custom-managers', () => { describe('Update `$schema` version in biome.json', () => { const customManager = presets['biomeVersions'].customManagers?.[0]; diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/custom-managers.ts similarity index 100% rename from lib/config/presets/internal/regex-managers.ts rename to lib/config/presets/internal/custom-managers.ts diff --git a/lib/config/presets/internal/index.ts b/lib/config/presets/internal/index.ts index 37b564cdf1cf4e..5bc8c4181e2cee 100644 --- a/lib/config/presets/internal/index.ts +++ b/lib/config/presets/internal/index.ts @@ -1,5 +1,6 @@ import type { Preset, PresetConfig } from '../types'; import * as configPreset from './config'; +import * as customManagersPreset from './custom-managers'; import * as defaultPreset from './default'; import * as dockerPreset from './docker'; import * as groupPreset from './group'; @@ -9,7 +10,6 @@ import * as monorepoPreset from './monorepo'; import * as npm from './npm'; import * as packagesPreset from './packages'; import * as previewPreset from './preview'; -import * as regexManagersPreset from './regex-managers'; import * as replacements from './replacements'; import * as schedulePreset from './schedule'; import * as securityPreset from './security'; @@ -19,6 +19,7 @@ import * as workaroundsPreset from './workarounds'; export const groups: Record> = { config: configPreset.presets, + customManagers: customManagersPreset.presets, default: defaultPreset.presets, docker: dockerPreset.presets, group: groupPreset.presets, @@ -28,7 +29,6 @@ export const groups: Record> = { npm: npm.presets, packages: packagesPreset.presets, preview: previewPreset.presets, - regexManagers: regexManagersPreset.presets, replacements: replacements.presets, schedule: schedulePreset.presets, security: securityPreset.presets, From 630814919c030bbca429a3602c80151ec39c245d Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 13 May 2024 10:27:00 +0200 Subject: [PATCH 130/172] docs(faq): no dependency dashboard on gerrit (#29016) --- docs/usage/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/faq.md b/docs/usage/faq.md index 0bec37771fcd39..3a99ed4d42c54c 100644 --- a/docs/usage/faq.md +++ b/docs/usage/faq.md @@ -51,7 +51,7 @@ Follow these steps to see which version the Mend Renovate app is on: ``` INFO: Repository started { - "renovateVersion": "37.326.0" + "renovateVersion": "37.356.1" } ``` @@ -63,7 +63,7 @@ Follow these steps to see which version the Mend Renovate app is on: | Feature | Platforms which lack feature | See Renovate issue(s) | | --------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | -| Dependency Dashboard | Azure, Bitbucket, Bitbucket Server | [#9592](https://github.com/renovatebot/renovate/issues/9592) | +| Dependency Dashboard | Azure, Bitbucket, Bitbucket Server, Gerrit | [#9592](https://github.com/renovatebot/renovate/issues/9592) | | The Mend Renovate App | Azure, Bitbucket, Bitbucket Server, Forgejo, Gitea, GitLab | | ## Major platform features not supported by Renovate From a2fed65482292c2d373c38b4858f8007d44b43fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 10:43:23 +0000 Subject: [PATCH 131/172] chore(deps): update pnpm to v9.1.0 (#29023) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 44cbd6a4bb14c2..560efc4986e66b 100644 --- a/package.json +++ b/package.json @@ -347,7 +347,7 @@ "typescript": "5.4.5", "unified": "9.2.2" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.1.0", "files": [ "dist", "renovate-schema.json" From c4bfd869c0539aaa91719aa9abc45eca96b0a55a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 13 May 2024 13:11:28 +0200 Subject: [PATCH 132/172] docs: create logo and brand use guidelines (#29021) --- docs/usage/.pages | 1 + docs/usage/logo-brand-guidelines.md | 36 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 docs/usage/logo-brand-guidelines.md diff --git a/docs/usage/.pages b/docs/usage/.pages index 9579c6e99cd47f..809fc075758dc7 100644 --- a/docs/usage/.pages +++ b/docs/usage/.pages @@ -57,5 +57,6 @@ nav: - 'Known Limitations': 'known-limitations.md' - 'Release notes for major versions': 'release-notes-for-major-versions.md' - Bot comparison: 'bot-comparison.md' + - 'Logo and brand guidelines': 'logo-brand-guidelines.md' - About Us: 'about-us.md' - Contributing to Renovate: 'contributing-to-renovate.md' diff --git a/docs/usage/logo-brand-guidelines.md b/docs/usage/logo-brand-guidelines.md new file mode 100644 index 00000000000000..7acab6425cd537 --- /dev/null +++ b/docs/usage/logo-brand-guidelines.md @@ -0,0 +1,36 @@ +# Logo and brand guidelines + +This page explains how you may use the Renovate name, logo and branding. + +## Do not pretend to be the real Renovate app + +Avoid using our name, logo, or branding in a way that causes people to think you are the real Renovate app on a public platform. +For example: do _not_ call your self-hosted version something like @realrenovatebot on GitHub. + +## Do not pretend to be a Renovate developer + +Avoid using our name, logo, or branding in a way that causes people to think you are a developer of Renovate. + +## Allowed uses of the Renovate name + +You are allowed to use the Renovate name: + +- to refer to the official Renovate app +- as a nickname/shorthand, in contexts where it is clear you are referring to your self-hosted version + +## Allowed uses of the Renovate logo + +You are allowed to use our logo as: + +- an icon in your repository readme, that says you are using Renovate +- part of a badge in your repository readme, that says you are using Renovate +- an avatar image for your self-hosted version of Renovate, but give your bot a _different_ name + +## Allowed uses of the Renovate branding + +Do not use our banner images. + +## We keep the rights to our logo, name, and branding + +You may only use our logo, name and branding as described in this guideline. +We keep the rights to our logo, name and branding. From 1598388dd02895b91ff22ce0cd3f66237fc0f6fe Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Mon, 13 May 2024 17:00:49 +0545 Subject: [PATCH 133/172] test(dotnet-version): add `releaseTimestamp` field (#29024) --- .../datasource/dotnet-version/index.spec.ts | 66 ++++++++++++++----- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/lib/modules/datasource/dotnet-version/index.spec.ts b/lib/modules/datasource/dotnet-version/index.spec.ts index e41ddf85995e30..84ed99c2e9d495 100644 --- a/lib/modules/datasource/dotnet-version/index.spec.ts +++ b/lib/modules/datasource/dotnet-version/index.spec.ts @@ -128,16 +128,31 @@ describe('modules/datasource/dotnet-version/index', () => { expect(res?.sourceUrl).toBe('https://github.com/dotnet/sdk'); expect(res?.releases).toHaveLength(19); expect(res?.releases).toIncludeAllPartialMembers([ - { version: '3.1.100-preview1-014459' }, - { version: '3.1.423' }, - { version: '5.0.100-preview.1.20155.7' }, - { version: '5.0.408' }, - { version: '6.0.100-preview.1.21103.13' }, - { version: '6.0.401' }, - { version: '6.0.304' }, - { version: '6.0.109' }, - { version: '7.0.100-preview.1.22110.4' }, - { version: '7.0.100-rc.1.22431.12' }, + { + version: '3.1.100-preview1-014459', + releaseTimestamp: '2019-10-15T00:00:00.000Z', + }, + { version: '3.1.423', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { + version: '5.0.100-preview.1.20155.7', + releaseTimestamp: '2020-03-16T00:00:00.000Z', + }, + { version: '5.0.408', releaseTimestamp: '2022-05-10T00:00:00.000Z' }, + { + version: '6.0.100-preview.1.21103.13', + releaseTimestamp: '2021-02-17T00:00:00.000Z', + }, + { version: '6.0.401', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { version: '6.0.304', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { version: '6.0.109', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { + version: '7.0.100-preview.1.22110.4', + releaseTimestamp: '2022-02-17T00:00:00.000Z', + }, + { + version: '7.0.100-rc.1.22431.12', + releaseTimestamp: '2022-09-14T00:00:00.000Z', + }, ]); }); @@ -164,14 +179,29 @@ describe('modules/datasource/dotnet-version/index', () => { expect(res?.sourceUrl).toBe('https://github.com/dotnet/runtime'); expect(res?.releases).toHaveLength(17); expect(res?.releases).toIncludeAllPartialMembers([ - { version: '3.1.0-preview1.19506.1' }, - { version: '3.1.29' }, - { version: '5.0.0-preview.1.20120.5' }, - { version: '5.0.17' }, - { version: '6.0.0-preview.1.21102.12' }, - { version: '6.0.9' }, - { version: '7.0.0-preview.1.22076.8' }, - { version: '7.0.0-rc.1.22426.10' }, + { + version: '3.1.0-preview1.19506.1', + releaseTimestamp: '2019-10-15T00:00:00.000Z', + }, + { version: '3.1.29', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { + version: '5.0.0-preview.1.20120.5', + releaseTimestamp: '2020-03-16T00:00:00.000Z', + }, + { version: '5.0.17', releaseTimestamp: '2022-05-10T00:00:00.000Z' }, + { + version: '6.0.0-preview.1.21102.12', + releaseTimestamp: '2021-02-17T00:00:00.000Z', + }, + { version: '6.0.9', releaseTimestamp: '2022-09-13T00:00:00.000Z' }, + { + version: '7.0.0-preview.1.22076.8', + releaseTimestamp: '2022-02-17T00:00:00.000Z', + }, + { + version: '7.0.0-rc.1.22426.10', + releaseTimestamp: '2022-09-14T00:00:00.000Z', + }, ]); }); }); From 4c6d03e8bb78750721c5dc4f77e0491a76f3c680 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 11:28:23 +0000 Subject: [PATCH 134/172] chore(deps): update pnpm to v9.1.1 (#29025) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 560efc4986e66b..87b192e6cabb48 100644 --- a/package.json +++ b/package.json @@ -347,7 +347,7 @@ "typescript": "5.4.5", "unified": "9.2.2" }, - "packageManager": "pnpm@9.1.0", + "packageManager": "pnpm@9.1.1", "files": [ "dist", "renovate-schema.json" From 33eb4fdf03b86caade2792243640c0c1d8b16e7d Mon Sep 17 00:00:00 2001 From: Florian Greinacher Date: Mon, 13 May 2024 14:31:32 +0200 Subject: [PATCH 135/172] chore(manager/poetry): log determined poetry version (#29028) --- lib/modules/manager/poetry/artifacts.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/modules/manager/poetry/artifacts.ts b/lib/modules/manager/poetry/artifacts.ts index f45bbdcb867812..d5582f619c5910 100644 --- a/lib/modules/manager/poetry/artifacts.ts +++ b/lib/modules/manager/poetry/artifacts.ts @@ -60,8 +60,11 @@ export function getPoetryRequirement( const firstLine = existingLockFileContent.split('\n')[0]; const poetryVersionMatch = firstLine.match(/by Poetry ([\d\\.]+)/); if (poetryVersionMatch?.[1]) { - logger.debug('Using poetry version from poetry.lock header'); - return poetryVersionMatch[1]; + const poetryVersion = poetryVersionMatch[1]; + logger.debug( + `Using poetry version ${poetryVersion} from poetry.lock header`, + ); + return poetryVersion; } const { val: lockfilePoetryConstraint } = Result.parse( @@ -69,7 +72,9 @@ export function getPoetryRequirement( Lockfile.transform(({ poetryConstraint }) => poetryConstraint), ).unwrap(); if (lockfilePoetryConstraint) { - logger.debug('Using poetry version from poetry.lock metadata'); + logger.debug( + `Using poetry version ${lockfilePoetryConstraint} from poetry.lock metadata`, + ); return lockfilePoetryConstraint; } @@ -78,7 +83,9 @@ export function getPoetryRequirement( PoetrySchemaToml.transform(({ poetryRequirement }) => poetryRequirement), ).unwrap(); if (pyprojectPoetryConstraint) { - logger.debug('Using poetry version from pyproject.toml'); + logger.debug( + `Using poetry version ${pyprojectPoetryConstraint} from pyproject.toml`, + ); return pyprojectPoetryConstraint; } From e0a44ecf6a39652a0534fc41099b34f5782f17bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 13:23:07 +0000 Subject: [PATCH 136/172] chore(deps): update github/codeql-action action to v3.25.5 (#29035) 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 8a51b93291e93a..83a9e4781e4feb 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@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/init@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 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@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/autobuild@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 # ℹ️ 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@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/analyze@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 3950fe6b1a1779..192ba24dab81cf 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@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/upload-sarif@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: sarif_file: results.sarif diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 160520e03dea80..3856cb786f3c81 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@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + - uses: github/codeql-action/upload-sarif@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: sarif_file: trivy-results.sarif category: 'docker-image-${{ matrix.tag }}' From 1e584ae801f90efd93da2aac35df326e3a55f4f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 13:24:32 +0000 Subject: [PATCH 137/172] chore(deps): update dependency @swc/core to v1.5.3 (#29036) 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 87b192e6cabb48..e0204709ae0597 100644 --- a/package.json +++ b/package.json @@ -264,7 +264,7 @@ "@openpgp/web-stream-tools": "0.0.14", "@renovate/eslint-plugin": "file:tools/eslint", "@semantic-release/exec": "6.0.3", - "@swc/core": "1.4.17", + "@swc/core": "1.5.3", "@types/auth-header": "1.0.6", "@types/aws4": "1.11.6", "@types/better-sqlite3": "7.6.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3119fa99293f4..b70e565ca7e41c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -368,8 +368,8 @@ importers: specifier: 6.0.3 version: 6.0.3(semantic-release@22.0.12(typescript@5.4.5)) '@swc/core': - specifier: 1.4.17 - version: 1.4.17 + specifier: 1.5.3 + version: 1.5.3 '@types/auth-header': specifier: 1.0.6 version: 1.0.6 @@ -531,7 +531,7 @@ importers: version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -555,16 +555,16 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5))) + version: 4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))) 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@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -600,10 +600,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5) type-fest: specifier: 4.18.2 version: 4.18.2 @@ -1863,68 +1863,68 @@ packages: resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==} engines: {node: '>=14.0.0'} - '@swc/core-darwin-arm64@1.4.17': - resolution: {integrity: sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw==} + '@swc/core-darwin-arm64@1.5.3': + resolution: {integrity: sha512-kRmmV2XqWegzGXvJfVVOj10OXhLgaVOOBjaX3p3Aqg7Do5ksg+bY5wi1gAN/Eul7B08Oqf7GG7WJevjDQGWPOg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.4.17': - resolution: {integrity: sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA==} + '@swc/core-darwin-x64@1.5.3': + resolution: {integrity: sha512-EYs0+ovaRw6ZN9GBr2nIeC7gUXWA0q4RYR+Og3Vo0Qgv2Mt/XudF44A2lPK9X7M3JIfu6JjnxnTuvsK1Lqojfw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.4.17': - resolution: {integrity: sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q==} + '@swc/core-linux-arm-gnueabihf@1.5.3': + resolution: {integrity: sha512-RBVUTidSf4wgPdv98VrgJ4rMzMDN/3LBWdT7l+R7mNFH+mtID7ZAhTON0o/m1HkECgAgi1xcbTOVAw1xgd5KLA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.4.17': - resolution: {integrity: sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q==} + '@swc/core-linux-arm64-gnu@1.5.3': + resolution: {integrity: sha512-DCC6El3MiTYfv98CShxz/g2s4Pxn6tV0mldCQ0UdRqaN2ApUn7E+zTrqaj5bk7yII3A43WhE9Mr6wNPbXUeVyg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.4.17': - resolution: {integrity: sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==} + '@swc/core-linux-arm64-musl@1.5.3': + resolution: {integrity: sha512-p04ysjYXEyaCGpJvwHm0T0nkPawXtdKBTThWnlh8M5jYULVNVA1YmC9azG2Avs1GDaLgBPVUgodmFYpdSupOYA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.4.17': - resolution: {integrity: sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==} + '@swc/core-linux-x64-gnu@1.5.3': + resolution: {integrity: sha512-/l4KJu0xwYm6tcVSOvF8RbXrIeIHJAhWnKvuX4ZnYKFkON968kB8Ghx+1yqBQcZf36tMzSuZUC5xBUA9u66lGA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.4.17': - resolution: {integrity: sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==} + '@swc/core-linux-x64-musl@1.5.3': + resolution: {integrity: sha512-54DmSnrTXq4fYEKNR0nFAImG3+FxsHlQ6Tol/v3l+rxmg2K0FeeDOpH7wTXeWhMGhFlGrLIyLSnA+SzabfoDIA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.4.17': - resolution: {integrity: sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==} + '@swc/core-win32-arm64-msvc@1.5.3': + resolution: {integrity: sha512-piUMqoHNwDXChBfaaFIMzYgoxepfd8Ci1uXXNVEnuiRKz3FiIcNLmvXaBD7lKUwKcnGgVziH/CrndX6SldKQNQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.4.17': - resolution: {integrity: sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g==} + '@swc/core-win32-ia32-msvc@1.5.3': + resolution: {integrity: sha512-zV5utPYBUzYhBOomCByAjKAvfVBcOCJtnszx7Zlfz7SAv/cGm8D1QzPDCvv6jDhIlUtLj6KyL8JXeFr+f95Fjw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.4.17': - resolution: {integrity: sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg==} + '@swc/core-win32-x64-msvc@1.5.3': + resolution: {integrity: sha512-QmUiXiPIV5gBADfDh8e2jKynEhyRC+dcKP/zF9y5KqDUErYzlhocLd68uYS4uIegP6AylYlmigHgcaktGEE9VQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.4.17': - resolution: {integrity: sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ==} + '@swc/core@1.5.3': + resolution: {integrity: sha512-pSEglypnBGLHBoBcv3aYS7IM2t2LRinubYMyP88UoFIcD2pear2CeB15CbjJ2IzuvERD0ZL/bthM7cDSR9g+aQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': ^0.5.0 @@ -7539,7 +7539,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -7553,7 +7553,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8544,51 +8544,51 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 - '@swc/core-darwin-arm64@1.4.17': + '@swc/core-darwin-arm64@1.5.3': optional: true - '@swc/core-darwin-x64@1.4.17': + '@swc/core-darwin-x64@1.5.3': optional: true - '@swc/core-linux-arm-gnueabihf@1.4.17': + '@swc/core-linux-arm-gnueabihf@1.5.3': optional: true - '@swc/core-linux-arm64-gnu@1.4.17': + '@swc/core-linux-arm64-gnu@1.5.3': optional: true - '@swc/core-linux-arm64-musl@1.4.17': + '@swc/core-linux-arm64-musl@1.5.3': optional: true - '@swc/core-linux-x64-gnu@1.4.17': + '@swc/core-linux-x64-gnu@1.5.3': optional: true - '@swc/core-linux-x64-musl@1.4.17': + '@swc/core-linux-x64-musl@1.5.3': optional: true - '@swc/core-win32-arm64-msvc@1.4.17': + '@swc/core-win32-arm64-msvc@1.5.3': optional: true - '@swc/core-win32-ia32-msvc@1.4.17': + '@swc/core-win32-ia32-msvc@1.5.3': optional: true - '@swc/core-win32-x64-msvc@1.4.17': + '@swc/core-win32-x64-msvc@1.5.3': optional: true - '@swc/core@1.4.17': + '@swc/core@1.5.3': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.4.17 - '@swc/core-darwin-x64': 1.4.17 - '@swc/core-linux-arm-gnueabihf': 1.4.17 - '@swc/core-linux-arm64-gnu': 1.4.17 - '@swc/core-linux-arm64-musl': 1.4.17 - '@swc/core-linux-x64-gnu': 1.4.17 - '@swc/core-linux-x64-musl': 1.4.17 - '@swc/core-win32-arm64-msvc': 1.4.17 - '@swc/core-win32-ia32-msvc': 1.4.17 - '@swc/core-win32-x64-msvc': 1.4.17 + '@swc/core-darwin-arm64': 1.5.3 + '@swc/core-darwin-x64': 1.5.3 + '@swc/core-linux-arm-gnueabihf': 1.5.3 + '@swc/core-linux-arm64-gnu': 1.5.3 + '@swc/core-linux-arm64-musl': 1.5.3 + '@swc/core-linux-x64-gnu': 1.5.3 + '@swc/core-linux-x64-musl': 1.5.3 + '@swc/core-win32-arm64-msvc': 1.5.3 + '@swc/core-win32-ia32-msvc': 1.5.3 + '@swc/core-win32-x64-msvc': 1.5.3 '@swc/counter@0.1.3': {} @@ -9595,13 +9595,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): 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@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10032,13 +10032,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript @@ -10987,16 +10987,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11006,7 +11006,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 @@ -11032,7 +11032,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 18.19.31 - ts-node: 10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11065,12 +11065,12 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5))): + jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-get-type@29.6.3: {} @@ -11121,9 +11121,9 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 @@ -11272,12 +11272,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12901,11 +12901,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12918,7 +12918,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.5) - ts-node@10.9.2(@swc/core@1.4.17)(@types/node@18.19.31)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -12936,7 +12936,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.4.17 + '@swc/core': 1.5.3 tsconfig-paths@3.15.0: dependencies: From 3dd51b34ec974dc1729502a9a67047edf10774bc Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 13 May 2024 15:31:41 +0200 Subject: [PATCH 138/172] docs: fix `readOnly` option order (#29037) --- docs/usage/configuration-options.md | 42 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 98f7813b243a22..d91765f149c56e 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -898,27 +898,6 @@ It will be compiled using Handlebars and the regex `groups` result. It will be compiled using Handlebars and the regex `groups` result. It will default to the value of `depName` if left unconfigured/undefined. -### readOnly - -If the `readOnly` field is being set to `true` inside the host rule, it will match only against the requests that are known to be read operations. -Examples are `GET` requests or `HEAD` requests, but also it could be certain types of GraphQL queries. - -This option could be used to avoid rate limits for certain platforms like GitHub or Bitbucket, by offloading the read operations to a different user. - -```json -{ - "hostRules": [ - { - "matchHost": "api.github.com", - "readOnly": true, - "token": "********" - } - ] -} -``` - -If more than one token matches for a read-only request then the `readOnly` token will be given preference. - ### currentValueTemplate If the `currentValue` for a dependency is not captured with a named group then it can be defined in config using this field. @@ -1971,6 +1950,27 @@ registry=https://gitlab.myorg.com/api/v4/packages/npm/ !!! note Values containing a URL path but missing a scheme will be prepended with 'https://' (e.g. `domain.com/path` -> `https://domain.com/path`) +### readOnly + +If the `readOnly` field is being set to `true` inside the host rule, it will match only against the requests that are known to be read operations. +Examples are `GET` requests or `HEAD` requests, but also it could be certain types of GraphQL queries. + +This option could be used to avoid rate limits for certain platforms like GitHub or Bitbucket, by offloading the read operations to a different user. + +```json +{ + "hostRules": [ + { + "matchHost": "api.github.com", + "readOnly": true, + "token": "********" + } + ] +} +``` + +If more than one token matches for a read-only request then the `readOnly` token will be given preference. + ### timeout Use this figure to adjust the timeout for queries. From c3529d6c3f4803503d8b3d4041d734c078deaad2 Mon Sep 17 00:00:00 2001 From: Quentin BERTRAND Date: Mon, 13 May 2024 17:01:42 +0200 Subject: [PATCH 139/172] feat(datasource/kubernetes-api): add flux versions from flux 2.3.0 (#29039) --- data/kubernetes-api.json5 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/kubernetes-api.json5 b/data/kubernetes-api.json5 index 19aa2e192e6307..cc6be1b43e0668 100644 --- a/data/kubernetes-api.json5 +++ b/data/kubernetes-api.json5 @@ -130,15 +130,18 @@ HelmChart: [ 'source.toolkit.fluxcd.io/v1alpha1', 'source.toolkit.fluxcd.io/v1beta1', + 'source.toolkit.fluxcd.io/v1', ], HelmRelease: [ 'helm.toolkit.fluxcd.io/v2beta1', 'helm.toolkit.fluxcd.io/v2beta2', + 'helm.toolkit.fluxcd.io/v2', ], HelmRepository: [ 'source.toolkit.fluxcd.io/v1alpha1', 'source.toolkit.fluxcd.io/v1beta1', 'source.toolkit.fluxcd.io/v1beta2', + 'source.toolkit.fluxcd.io/v1', ], ImageRepository: ['image.toolkit.fluxcd.io/v1beta2'], OCIRepository: ['source.toolkit.fluxcd.io/v1beta2'], From 04c68b36b443dcdf14687b96103f56db2bc08afb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 15:15:27 +0000 Subject: [PATCH 140/172] chore(deps): update dependency @swc/core to v1.5.5 (#29040) 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 e0204709ae0597..79f81f776a8e6b 100644 --- a/package.json +++ b/package.json @@ -264,7 +264,7 @@ "@openpgp/web-stream-tools": "0.0.14", "@renovate/eslint-plugin": "file:tools/eslint", "@semantic-release/exec": "6.0.3", - "@swc/core": "1.5.3", + "@swc/core": "1.5.5", "@types/auth-header": "1.0.6", "@types/aws4": "1.11.6", "@types/better-sqlite3": "7.6.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b70e565ca7e41c..d2118ac289ec5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -368,8 +368,8 @@ importers: specifier: 6.0.3 version: 6.0.3(semantic-release@22.0.12(typescript@5.4.5)) '@swc/core': - specifier: 1.5.3 - version: 1.5.3 + specifier: 1.5.5 + version: 1.5.5 '@types/auth-header': specifier: 1.0.6 version: 1.0.6 @@ -531,7 +531,7 @@ importers: version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -555,16 +555,16 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))) + version: 4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))) 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@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -600,10 +600,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5) type-fest: specifier: 4.18.2 version: 4.18.2 @@ -1863,68 +1863,68 @@ packages: resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==} engines: {node: '>=14.0.0'} - '@swc/core-darwin-arm64@1.5.3': - resolution: {integrity: sha512-kRmmV2XqWegzGXvJfVVOj10OXhLgaVOOBjaX3p3Aqg7Do5ksg+bY5wi1gAN/Eul7B08Oqf7GG7WJevjDQGWPOg==} + '@swc/core-darwin-arm64@1.5.5': + resolution: {integrity: sha512-Ol5ZwZYdTOZsv2NwjcT/qVVALKzVFeh+IJ4GNarr3P99+38Dkwi81OqCI1o/WaDXQYKAQC/V+CzMbkEuJJfq9Q==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.5.3': - resolution: {integrity: sha512-EYs0+ovaRw6ZN9GBr2nIeC7gUXWA0q4RYR+Og3Vo0Qgv2Mt/XudF44A2lPK9X7M3JIfu6JjnxnTuvsK1Lqojfw==} + '@swc/core-darwin-x64@1.5.5': + resolution: {integrity: sha512-XHWpKBIPKYLgh5/lV2PYjO84lkzf5JR51kjiloyz2Pa9HIV8tHoAP8bYdJwm4nUp2I7KcEh3pPH0AVu5LpxMKw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.5.3': - resolution: {integrity: sha512-RBVUTidSf4wgPdv98VrgJ4rMzMDN/3LBWdT7l+R7mNFH+mtID7ZAhTON0o/m1HkECgAgi1xcbTOVAw1xgd5KLA==} + '@swc/core-linux-arm-gnueabihf@1.5.5': + resolution: {integrity: sha512-vtoWNCWAe+CNSqtqIwFnIH48qgPPlUZKoQ4EVFeMM+7/kDi6SeNxoh5TierJs5bKAWxD49VkPvRoWFCk6V62mA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.5.3': - resolution: {integrity: sha512-DCC6El3MiTYfv98CShxz/g2s4Pxn6tV0mldCQ0UdRqaN2ApUn7E+zTrqaj5bk7yII3A43WhE9Mr6wNPbXUeVyg==} + '@swc/core-linux-arm64-gnu@1.5.5': + resolution: {integrity: sha512-L4l7M78U6h/rCAxId+y5Vu+1KfDRF6dJZtitFcaT293guiUQFwJv8gLxI4Jh5wFtZ0fYd0QaCuvh2Ip79CzGMg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.5.3': - resolution: {integrity: sha512-p04ysjYXEyaCGpJvwHm0T0nkPawXtdKBTThWnlh8M5jYULVNVA1YmC9azG2Avs1GDaLgBPVUgodmFYpdSupOYA==} + '@swc/core-linux-arm64-musl@1.5.5': + resolution: {integrity: sha512-DkzJc13ukXa7oJpyn24BjIgsiOybYrc+IxjsQyfNlDrrs1QXP4elStcpkD02SsIuSyHjZV8Hw2HFBMQB3OHPrA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.5.3': - resolution: {integrity: sha512-/l4KJu0xwYm6tcVSOvF8RbXrIeIHJAhWnKvuX4ZnYKFkON968kB8Ghx+1yqBQcZf36tMzSuZUC5xBUA9u66lGA==} + '@swc/core-linux-x64-gnu@1.5.5': + resolution: {integrity: sha512-kj4ZwWJGeBEUzHrRQP2VudN+kkkYH7OI1dPVDc6kWQx5X4329JeKOas4qY0l7gDVjBbRwN9IbbPI6TIn2KfAug==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.5.3': - resolution: {integrity: sha512-54DmSnrTXq4fYEKNR0nFAImG3+FxsHlQ6Tol/v3l+rxmg2K0FeeDOpH7wTXeWhMGhFlGrLIyLSnA+SzabfoDIA==} + '@swc/core-linux-x64-musl@1.5.5': + resolution: {integrity: sha512-6pTorCs4mYhPhYtC4jNOnhGgjNd3DZcRoZ9P0tzXXP69aCbYjvlgNH/NRvAROp9AaVFeZ7a7PmCWb6+Rbe7NKg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.5.3': - resolution: {integrity: sha512-piUMqoHNwDXChBfaaFIMzYgoxepfd8Ci1uXXNVEnuiRKz3FiIcNLmvXaBD7lKUwKcnGgVziH/CrndX6SldKQNQ==} + '@swc/core-win32-arm64-msvc@1.5.5': + resolution: {integrity: sha512-o0/9pstmEjwZyrY/bA+mymF0zH7E+GT/XCVqdKeWW9Wn3gTTyWa5MZnrFgI2THQ+AXwdglMB/Zo76ARQPaz/+A==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.5.3': - resolution: {integrity: sha512-zV5utPYBUzYhBOomCByAjKAvfVBcOCJtnszx7Zlfz7SAv/cGm8D1QzPDCvv6jDhIlUtLj6KyL8JXeFr+f95Fjw==} + '@swc/core-win32-ia32-msvc@1.5.5': + resolution: {integrity: sha512-B+nypUwsmCuaH6RtKWgiPCb+ENjxstJPPJeMJvBqlJqyCaIkZzN4M07Ozi3xVv1VG21SRkd6G3xIqRoalrNc0Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.5.3': - resolution: {integrity: sha512-QmUiXiPIV5gBADfDh8e2jKynEhyRC+dcKP/zF9y5KqDUErYzlhocLd68uYS4uIegP6AylYlmigHgcaktGEE9VQ==} + '@swc/core-win32-x64-msvc@1.5.5': + resolution: {integrity: sha512-ry83ki9ZX0Q+GWGnqc2J618Z+FvKE8Ajn42F8EYi8Wj0q6Jz3mj+pJzgzakk2INm2ldEZ+FaRPipn4ozsZDcBg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.5.3': - resolution: {integrity: sha512-pSEglypnBGLHBoBcv3aYS7IM2t2LRinubYMyP88UoFIcD2pear2CeB15CbjJ2IzuvERD0ZL/bthM7cDSR9g+aQ==} + '@swc/core@1.5.5': + resolution: {integrity: sha512-M8O22EEgdSONLd+7KRrXj8pn+RdAZZ7ISnPjE9KCQQlI0kkFNEquWR+uFdlFxQfwlyCe/Zb6uGXGDvtcov4IMg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': ^0.5.0 @@ -7539,7 +7539,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -7553,7 +7553,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8544,51 +8544,51 @@ snapshots: '@smithy/types': 2.12.0 tslib: 2.6.2 - '@swc/core-darwin-arm64@1.5.3': + '@swc/core-darwin-arm64@1.5.5': optional: true - '@swc/core-darwin-x64@1.5.3': + '@swc/core-darwin-x64@1.5.5': optional: true - '@swc/core-linux-arm-gnueabihf@1.5.3': + '@swc/core-linux-arm-gnueabihf@1.5.5': optional: true - '@swc/core-linux-arm64-gnu@1.5.3': + '@swc/core-linux-arm64-gnu@1.5.5': optional: true - '@swc/core-linux-arm64-musl@1.5.3': + '@swc/core-linux-arm64-musl@1.5.5': optional: true - '@swc/core-linux-x64-gnu@1.5.3': + '@swc/core-linux-x64-gnu@1.5.5': optional: true - '@swc/core-linux-x64-musl@1.5.3': + '@swc/core-linux-x64-musl@1.5.5': optional: true - '@swc/core-win32-arm64-msvc@1.5.3': + '@swc/core-win32-arm64-msvc@1.5.5': optional: true - '@swc/core-win32-ia32-msvc@1.5.3': + '@swc/core-win32-ia32-msvc@1.5.5': optional: true - '@swc/core-win32-x64-msvc@1.5.3': + '@swc/core-win32-x64-msvc@1.5.5': optional: true - '@swc/core@1.5.3': + '@swc/core@1.5.5': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.5.3 - '@swc/core-darwin-x64': 1.5.3 - '@swc/core-linux-arm-gnueabihf': 1.5.3 - '@swc/core-linux-arm64-gnu': 1.5.3 - '@swc/core-linux-arm64-musl': 1.5.3 - '@swc/core-linux-x64-gnu': 1.5.3 - '@swc/core-linux-x64-musl': 1.5.3 - '@swc/core-win32-arm64-msvc': 1.5.3 - '@swc/core-win32-ia32-msvc': 1.5.3 - '@swc/core-win32-x64-msvc': 1.5.3 + '@swc/core-darwin-arm64': 1.5.5 + '@swc/core-darwin-x64': 1.5.5 + '@swc/core-linux-arm-gnueabihf': 1.5.5 + '@swc/core-linux-arm64-gnu': 1.5.5 + '@swc/core-linux-arm64-musl': 1.5.5 + '@swc/core-linux-x64-gnu': 1.5.5 + '@swc/core-linux-x64-musl': 1.5.5 + '@swc/core-win32-arm64-msvc': 1.5.5 + '@swc/core-win32-ia32-msvc': 1.5.5 + '@swc/core-win32-x64-msvc': 1.5.5 '@swc/counter@0.1.3': {} @@ -9595,13 +9595,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): 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@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10032,13 +10032,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript @@ -10987,16 +10987,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11006,7 +11006,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 @@ -11032,7 +11032,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 18.19.31 - ts-node: 10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11065,12 +11065,12 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5))): + jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-get-type@29.6.3: {} @@ -11121,9 +11121,9 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 @@ -11272,12 +11272,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12901,11 +12901,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12918,7 +12918,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.5) - ts-node@10.9.2(@swc/core@1.5.3)(@types/node@18.19.31)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -12936,7 +12936,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.5.3 + '@swc/core': 1.5.5 tsconfig-paths@3.15.0: dependencies: From dd52eddd4e600683900857024a687e7152fccccd Mon Sep 17 00:00:00 2001 From: Miles Budnek Date: Mon, 13 May 2024 11:39:00 -0400 Subject: [PATCH 141/172] feat(pip_requirements): Extract flags from package files with no deps (#28961) --- .../manager/pip_requirements/extract.spec.ts | 38 +++++++++++++++++++ .../manager/pip_requirements/extract.ts | 8 +++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/pip_requirements/extract.spec.ts b/lib/modules/manager/pip_requirements/extract.spec.ts index 84eface817b47f..76932dce197188 100644 --- a/lib/modules/manager/pip_requirements/extract.spec.ts +++ b/lib/modules/manager/pip_requirements/extract.spec.ts @@ -239,5 +239,43 @@ some-package==0.3.1`; ], }); }); + + it('extracts a file with only --index-url flags', () => { + const res = extractPackageFile('--index-url https://example.com/pypi'); + expect(res).toMatchObject({ + deps: [], + registryUrls: ['https://example.com/pypi'], + }); + }); + + it('extracts a file with only --extra-index-url flags', () => { + const res = extractPackageFile( + '--extra-index-url https://example.com/pypi', + ); + expect(res).toMatchObject({ + deps: [], + additionalRegistryUrls: ['https://example.com/pypi'], + }); + }); + + it('extracts a file with only -r flags', () => { + const res = extractPackageFile('-r requirements-other.txt'); + expect(res).toMatchObject({ + deps: [], + managerData: { + requirementsFiles: ['requirements-other.txt'], + }, + }); + }); + + it('extracts a file with only -c flags', () => { + const res = extractPackageFile('-c constraints.txt'); + expect(res).toMatchObject({ + deps: [], + managerData: { + constraintsFiles: ['constraints.txt'], + }, + }); + }); }); }); diff --git a/lib/modules/manager/pip_requirements/extract.ts b/lib/modules/manager/pip_requirements/extract.ts index bf29df35775b1a..0f7818f49ea56c 100644 --- a/lib/modules/manager/pip_requirements/extract.ts +++ b/lib/modules/manager/pip_requirements/extract.ts @@ -131,7 +131,13 @@ export function extractPackageFile( return dep; }) .filter(is.truthy); - if (!deps.length) { + if ( + !deps.length && + !registryUrls.length && + !additionalRegistryUrls.length && + !additionalRequirementsFiles.length && + !additionalConstraintsFiles.length + ) { return null; } const res: PackageFileContent = { deps }; From 77edc3daed0cb0092751aa69803f91ac74e22b17 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 00:17:42 +0000 Subject: [PATCH 142/172] chore(deps): update dependency @types/node to v18.19.32 (#29050) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 128 ++++++++++++++++++++++++------------------------- 2 files changed, 65 insertions(+), 65 deletions(-) diff --git a/package.json b/package.json index 79f81f776a8e6b..8888415838d4b5 100644 --- a/package.json +++ b/package.json @@ -294,7 +294,7 @@ "@types/mdast": "3.0.15", "@types/moo": "0.5.9", "@types/ms": "0.7.34", - "@types/node": "18.19.31", + "@types/node": "18.19.32", "@types/parse-link-header": "2.0.3", "@types/semver": "7.5.8", "@types/semver-stable": "3.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2118ac289ec5d..cceddb55aff87f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -458,8 +458,8 @@ importers: specifier: 0.7.34 version: 0.7.34 '@types/node': - specifier: 18.19.31 - version: 18.19.31 + specifier: 18.19.32 + version: 18.19.32 '@types/parse-link-header': specifier: 2.0.3 version: 2.0.3 @@ -531,7 +531,7 @@ importers: version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -555,16 +555,16 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))) + version: 4.0.2(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))) 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@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 3.0.7(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -600,10 +600,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5) type-fest: specifier: 4.18.2 version: 4.18.2 @@ -2131,8 +2131,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@18.19.31': - resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} + '@types/node@18.19.32': + resolution: {integrity: sha512-2bkg93YBSDKk8DLmmHnmj/Rwr18TLx7/n+I23BigFwgexUJoMHZOd8X1OFxuF/W3NN0S2W2E5sVabI5CPinNvA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -7533,27 +7533,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7578,7 +7578,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-mock: 29.7.0 '@jest/expect-utils@29.4.1': @@ -7600,7 +7600,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -7622,7 +7622,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -7692,7 +7692,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -8649,7 +8649,7 @@ snapshots: '@types/aws4@1.11.6': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/babel__core@7.20.5': dependencies: @@ -8674,27 +8674,27 @@ snapshots: '@types/better-sqlite3@7.6.10': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/breejs__later@4.1.5': {} '@types/bunyan@1.8.11': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/bunyan@1.8.9': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/cacache@17.0.2': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/responselike': 1.0.3 '@types/callsite@1.0.34': {} @@ -8721,7 +8721,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/git-url-parse@9.0.3': {} @@ -8731,7 +8731,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/http-cache-semantics@4.0.4': {} @@ -8757,11 +8757,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/keyv@3.1.4': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/linkify-it@3.0.5': {} @@ -8780,7 +8780,7 @@ snapshots: '@types/marshal@0.5.3': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/mdast@3.0.15': dependencies: @@ -8796,7 +8796,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@18.19.31': + '@types/node@18.19.32': dependencies: undici-types: 5.26.5 @@ -8806,7 +8806,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/semver-stable@3.0.2': {} @@ -8826,7 +8826,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 minipass: 4.2.8 '@types/tmp@0.2.6': {} @@ -8851,7 +8851,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 optional: true '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': @@ -9595,13 +9595,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): 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@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10032,13 +10032,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript @@ -10967,7 +10967,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -10987,16 +10987,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11006,7 +11006,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 @@ -11031,8 +11031,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 18.19.31 - ts-node: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5) + '@types/node': 18.19.32 + ts-node: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11061,16 +11061,16 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5))): + jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-get-type@29.6.3: {} @@ -11078,7 +11078,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.31 + '@types/node': 18.19.32 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11121,16 +11121,16 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -11165,7 +11165,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11193,7 +11193,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -11239,7 +11239,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11258,7 +11258,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11267,17 +11267,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12901,11 +12901,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.31)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12918,14 +12918,14 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.5) - ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.31)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From 72c3ec4839c1b1aea17b60dbf4b0865784c99900 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 00:31:38 +0000 Subject: [PATCH 143/172] build(deps): update dependency validate-npm-package-name to v5.0.1 (#29045) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 8888415838d4b5..a24e4b3bb2ceea 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "tslib": "2.6.2", "upath": "2.0.1", "url-join": "4.0.1", - "validate-npm-package-name": "5.0.0", + "validate-npm-package-name": "5.0.1", "vuln-vects": "1.1.0", "xmldoc": "1.3.0", "zod": "3.23.6" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cceddb55aff87f..301c411970fa4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -315,8 +315,8 @@ importers: specifier: 4.0.1 version: 4.0.1 validate-npm-package-name: - specifier: 5.0.0 - version: 5.0.0 + specifier: 5.0.1 + version: 5.0.1 vuln-vects: specifier: 1.1.0 version: 1.1.0 @@ -2580,9 +2580,6 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - builtins@5.1.0: - resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - bunyan@1.8.15: resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} engines: {'0': node >=0.10.0} @@ -5931,8 +5928,8 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} vfile-message@2.0.4: @@ -9360,10 +9357,6 @@ snapshots: ieee754: 1.2.1 optional: true - builtins@5.1.0: - dependencies: - semver: 7.6.0 - bunyan@1.8.15: optionalDependencies: dtrace-provider: 0.8.8 @@ -13155,9 +13148,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.0: - dependencies: - builtins: 5.1.0 + validate-npm-package-name@5.0.1: {} vfile-message@2.0.4: dependencies: From cc5da0b7b403da06a589ae123da3f76077077682 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 00:31:51 +0000 Subject: [PATCH 144/172] chore(deps): update dependency @types/diff to v5.2.1 (#29046) 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 a24e4b3bb2ceea..2d3e5f192ca6b7 100644 --- a/package.json +++ b/package.json @@ -276,7 +276,7 @@ "@types/clean-git-ref": "2.0.2", "@types/common-tags": "1.8.4", "@types/conventional-commits-detector": "1.0.2", - "@types/diff": "5.2.0", + "@types/diff": "5.2.1", "@types/eslint": "8.56.10", "@types/fs-extra": "11.0.4", "@types/git-url-parse": "9.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 301c411970fa4b..c3cae9291f339a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -404,8 +404,8 @@ importers: specifier: 1.0.2 version: 1.0.2 '@types/diff': - specifier: 5.2.0 - version: 5.2.0 + specifier: 5.2.1 + version: 5.2.1 '@types/eslint': specifier: 8.56.10 version: 8.56.10 @@ -2032,8 +2032,8 @@ packages: '@types/conventional-commits-detector@1.0.2': resolution: {integrity: sha512-Yzo8dW+b2vziyDD9WNY+IPq4rcZyguHNuyNZC3wv0igpVFRd7VWHufl+vRQaCzDR2ftPTB1VPwbvXxWVpzBo+g==} - '@types/diff@5.2.0': - resolution: {integrity: sha512-pjJH+02ukgJRW0mViDUA1cdC+wzSgRu0e4cPuogPLAw0i66y62iMP0ZlXoJAmoXrKRZnF3pMDwyKZsgNVlMX4A==} + '@types/diff@5.2.1': + resolution: {integrity: sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==} '@types/emscripten@1.39.11': resolution: {integrity: sha512-dOeX2BeNA7j6BTEqJQL3ut0bRCfsyQMd5i4FT8JfHfYhAOuJPCGh0dQFbxVJxUyQ+75x6enhDdndGb624/QszA==} @@ -8704,7 +8704,7 @@ snapshots: '@types/conventional-commits-detector@1.0.2': {} - '@types/diff@5.2.0': {} + '@types/diff@5.2.1': {} '@types/emscripten@1.39.11': {} From 04f4edbd518f4fe7409a573357efed3fa8ff82a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 03:40:54 +0000 Subject: [PATCH 145/172] build(deps): update dependency re2 to v1.20.11 (#29053) 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 2d3e5f192ca6b7..cc1274c35ce335 100644 --- a/package.json +++ b/package.json @@ -251,7 +251,7 @@ "optionalDependencies": { "better-sqlite3": "9.6.0", "openpgp": "5.11.1", - "re2": "1.20.10" + "re2": "1.20.11" }, "devDependencies": { "@hyrious/marshal": "0.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3cae9291f339a..14a12e4bdbc8d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -334,8 +334,8 @@ importers: specifier: 5.11.1 version: 5.11.1 re2: - specifier: 1.20.10 - version: 1.20.10 + specifier: 1.20.11 + version: 1.20.11 devDependencies: '@hyrious/marshal': specifier: 0.3.3 @@ -5098,8 +5098,8 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - re2@1.20.10: - resolution: {integrity: sha512-/5JjSPXobSDaKFL6rD5Gb4qD4CVBITQb7NAxfQ/NA7o0HER3SJAPV3lPO2kvzw0/PN1pVJNVATEUk4y9j7oIIA==} + re2@1.20.11: + resolution: {integrity: sha512-OsGSxGYXQE3Ha9u+YE/bUYKr0BP6tEnSCcwgq7kQzRzLSYXPJQeYKUR1Hung/4RkIje2f2zYjgyr4nL9eeW18g==} react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -12221,7 +12221,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - re2@1.20.10: + re2@1.20.11: dependencies: install-artifact-from-github: 1.3.5 nan: 2.19.0 From 84e4239c62e989b42c7aee0806d7ddf522fea4cc Mon Sep 17 00:00:00 2001 From: Alex Kessock Date: Tue, 14 May 2024 01:34:51 -0600 Subject: [PATCH 146/172] feat(corepack): Add env COREPACK_INTEGRITY_KEYS (#29047) --- lib/util/exec/env.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/util/exec/env.ts b/lib/util/exec/env.ts index a83824a19bfbb5..2bf84be36ca372 100644 --- a/lib/util/exec/env.ts +++ b/lib/util/exec/env.ts @@ -31,6 +31,7 @@ const basicEnvVars = [ 'COREPACK_ENABLE_PROJECT_SPEC', 'COREPACK_ENABLE_UNSAFE_CUSTOM_URLS', 'COREPACK_HOME', + 'COREPACK_INTEGRITY_KEYS', 'COREPACK_NPM_REGISTRY', 'COREPACK_NPM_TOKEN', 'COREPACK_NPM_USERNAME', From 23421c572cd5aaa98bf0237250c305e51809d736 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 14 May 2024 09:43:26 +0200 Subject: [PATCH 147/172] docs: add modules introduction (#29038) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/modules/.pages | 3 +++ docs/usage/modules/index.md | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 docs/usage/modules/index.md diff --git a/docs/usage/modules/.pages b/docs/usage/modules/.pages index 74686a6979df56..2c965ed561bdd3 100644 --- a/docs/usage/modules/.pages +++ b/docs/usage/modules/.pages @@ -1,3 +1,6 @@ title: Renovate Modules +nav: + - Introduction: index.md + - ... order: asc sort_type: natural diff --git a/docs/usage/modules/index.md b/docs/usage/modules/index.md new file mode 100644 index 00000000000000..50f7fe12b8805c --- /dev/null +++ b/docs/usage/modules/index.md @@ -0,0 +1,14 @@ +--- +title: Modules introduction +--- + +# Modules introduction + +Renovate modules, please select a subsection. + +## Supported modules + +- [Datasources](./datasource/index.md) +- [Managers](./manager/index.md) +- [Platform](./platform/index.md) +- [Versioning](./versioning/index.md) From c608ceeaac2a1d53887ca62b319458c216c0820a Mon Sep 17 00:00:00 2001 From: Florian Greinacher Date: Tue, 14 May 2024 11:15:12 +0200 Subject: [PATCH 148/172] feat(gitlab): retry requests on resource locks (#29019) Co-authored-by: Michael Kriese --- lib/util/http/gitlab.spec.ts | 41 ++++++++++++++++++++++++++++++++++++ lib/util/http/gitlab.ts | 16 ++++++++++++++ lib/util/http/index.ts | 8 ++++++- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/lib/util/http/gitlab.spec.ts b/lib/util/http/gitlab.spec.ts index ff3bcb5077c790..f3f3363eb64fa6 100644 --- a/lib/util/http/gitlab.spec.ts +++ b/lib/util/http/gitlab.spec.ts @@ -1,3 +1,4 @@ +import { HTTPError } from 'got'; import * as httpMock from '../../../test/http-mock'; import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages'; import { GitlabReleasesDatasource } from '../../modules/datasource/gitlab-releases'; @@ -144,4 +145,44 @@ describe('util/http/gitlab', () => { ); }); }); + + describe('handles 409 errors', () => { + let NODE_ENV: string | undefined; + + beforeAll(() => { + // Unset NODE_ENV so that we can test the retry logic + NODE_ENV = process.env.NODE_ENV; + delete process.env.NODE_ENV; + }); + + afterAll(() => { + process.env.NODE_ENV = NODE_ENV; + }); + + it('retries the request on resource lock', async () => { + const body = { message: '409 Conflict: Resource lock' }; + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(409, body); + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(200, {}); + const res = await gitlabApi.postJson('some-url', {}); + expect(res.statusCode).toBe(200); + }); + + it('does not retry more than twice on resource lock', async () => { + const body = { message: '409 Conflict: Resource lock' }; + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(409, body); + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(409, body); + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(409, body); + await expect(gitlabApi.postJson('some-url', {})).rejects.toThrow( + HTTPError, + ); + }); + + it('does not retry for other reasons', async () => { + const body = { message: 'Other reason' }; + httpMock.scope(gitlabApiHost).post('/api/v4/some-url').reply(409, body); + await expect(gitlabApi.postJson('some-url', {})).rejects.toThrow( + HTTPError, + ); + }); + }); }); diff --git a/lib/util/http/gitlab.ts b/lib/util/http/gitlab.ts index e81dde8377b2b3..28beca26261f11 100644 --- a/lib/util/http/gitlab.ts +++ b/lib/util/http/gitlab.ts @@ -1,4 +1,5 @@ import is from '@sindresorhus/is'; +import type { RetryObject } from 'got'; import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import { parseLinkHeader, parseUrl } from '../url'; @@ -83,4 +84,19 @@ export class GitlabHttp extends Http { throw err; } } + + protected override calculateRetryDelay(retryObject: RetryObject): number { + const { error, attemptCount, retryOptions } = retryObject; + if ( + attemptCount <= retryOptions.limit && + error.options.method === 'POST' && + error.response?.statusCode === 409 && + error.response.rawBody.toString().includes('Resource lock') + ) { + const noise = Math.random() * 100; + return 2 ** (attemptCount - 1) * 1000 + noise; + } + + return super.calculateRetryDelay(retryObject); + } } diff --git a/lib/util/http/index.ts b/lib/util/http/index.ts index 7c505db6ef4bf3..0a9f2e313b9f21 100644 --- a/lib/util/http/index.ts +++ b/lib/util/http/index.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import merge from 'deepmerge'; -import got, { Options, RequestError } from 'got'; +import got, { Options, RequestError, RetryObject } from 'got'; import type { SetRequired } from 'type-fest'; import { infer as Infer, type ZodError, ZodType } from 'zod'; import { GlobalConfig } from '../../config/global'; @@ -124,6 +124,8 @@ export class Http { { context: { hostType }, retry: { + calculateDelay: (retryObject) => + this.calculateRetryDelay(retryObject), limit: retryLimit, maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it }, @@ -248,6 +250,10 @@ export class Http { } } + protected calculateRetryDelay({ computedValue }: RetryObject): number { + return computedValue; + } + get(url: string, options: HttpOptions = {}): Promise { return this.request(url, options); } From 5affc475f2aa21acad98272035d5ee154e7ff098 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 14 May 2024 11:22:51 +0200 Subject: [PATCH 149/172] feat(util/yaml): replace more go templates (#29061) --- .../kubernetes/__fixtures__/complex.yaml | 255 ++++++++++++++++++ .../manager/kubernetes/extract.spec.ts | 39 +++ lib/modules/manager/kubernetes/extract.ts | 1 + lib/util/yaml.ts | 3 +- 4 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 lib/modules/manager/kubernetes/__fixtures__/complex.yaml diff --git a/lib/modules/manager/kubernetes/__fixtures__/complex.yaml b/lib/modules/manager/kubernetes/__fixtures__/complex.yaml new file mode 100644 index 00000000000000..ed3dfd74f3821b --- /dev/null +++ b/lib/modules/manager/kubernetes/__fixtures__/complex.yaml @@ -0,0 +1,255 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common + labels: + {{- include "jitsi-meet.labels" . | nindent 4 }} +data: + ENABLE_AUTH: {{ ternary "1" "0" .Values.enableAuth | quote }} + ENABLE_GUESTS: {{ ternary "1" "0" .Values.enableGuests | quote }} + PUBLIC_URL: {{ include "jitsi-meet.publicURL" . }} + XMPP_DOMAIN: {{ include "jitsi-meet.xmpp.domain" . }} + XMPP_MUC_DOMAIN: {{ .Values.xmpp.mucDomain | default (printf "muc.%s" (include "jitsi-meet.xmpp.domain" .)) }} + XMPP_AUTH_DOMAIN: {{ .Values.xmpp.authDomain | default (printf "auth.%s" (include "jitsi-meet.xmpp.domain" .)) }} + XMPP_GUEST_DOMAIN: {{ .Values.xmpp.guestDomain | default (printf "guest.%s" (include "jitsi-meet.xmpp.domain" .)) }} + XMPP_RECORDER_DOMAIN: {{ .Values.xmpp.recorderDomain | default (printf "recorder.%s" (include "jitsi-meet.xmpp.domain" .)) }} + XMPP_INTERNAL_MUC_DOMAIN: {{ .Values.xmpp.internalMucDomain | default (printf "internal-muc.%s" (include "jitsi-meet.xmpp.domain" .)) }} + {{- if or .Values.websockets.colibri.enabled }} + ENABLE_COLIBRI_WEBSOCKET: 'true' + # TODO: rework into a proper regex or dynamic name list + ENABLE_COLIBRI_WEBSOCKET_UNSAFE_REGEX: '1' + {{- else }} + ENABLE_SCTP: 'true' + ENABLE_COLIBRI_WEBSOCKET: 'false' + JVB_PREFER_SCTP: 'true' + {{- end }} + {{- if .Values.websockets.xmpp.enabled }} + ENABLE_XMPP_WEBSOCKET: 'true' + {{- else }} + ENABLE_XMPP_WEBSOCKET: 'false' + {{- end }} + {{- if .Values.jibri.enabled }} + {{- if .Values.jibri.recording }} + ENABLE_RECORDING: "true" + ENABLE_FILE_RECORDING_SERVICE_SHARING: "true" + {{- end }} + {{- if .Values.jibri.livestreaming }} + ENABLE_LIVESTREAMING: "true" + {{- end }} + {{- end }} + TZ: '{{ .Values.tz }}' + {{- range $key, $value := .Values.extraCommonEnvs }} + {{- if not (kindIs "invalid" $value) }} + {{ $key }}: {{ tpl $value $ | quote }} + {{- end }} + {{- end }} + {{- if .Values.octo.enabled }} + ENABLE_OCTO: "1" + TESTING_OCTO_PROBABILITY: "1" + DEPLOYMENTINFO_REGION: "all" + DEPLOYMENTINFO_USERREGION: "all" + {{- end }} +--- +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "jitsi-meet.web.fullname" . }}-test-connection" + labels: + {{- include "jitsi-meet.web.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "jitsi-meet.web.fullname" . }}:{{ .Values.web.service.port }}'] + restartPolicy: Never +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "jitsi-meet.jvb.fullname" . }} + labels: + {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} + {{- with .Values.jvb.annotations }} + annotations: + {{ toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.jvb.replicaCount }} + selector: + matchLabels: + {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 6 }} + {{- if .Values.jvb.useHostPort }} + strategy: + type: Recreate + {{- end }} + template: + metadata: + labels: + {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 8 }} + {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.jvb.podLabels }} + {{ $label }}: {{ $value }} + {{- end }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/jvb/configmap.yaml") . | sha256sum }} + checksum/secret: {{ include (print $.Template.BasePath "/jvb/xmpp-secret.yaml") . | sha256sum }} + {{- if and .Values.jvb.metrics.enabled .Values.jvb.metrics.prometheusAnnotations }} + prometheus.io/port: "9888" + prometheus.io/scrape: "true" + {{- end }} + {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.jvb.podAnnotations }} + {{ $annotation }}: {{ $value|quote }} + {{- end }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.jvb.podSecurityContext | nindent 8 }} + {{- if .Values.jvb.useHostNetwork }} + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + {{- end }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.jvb.securityContext | nindent 12 }} + image: "{{ .Values.jvb.image.repository }}:{{ default .Chart.AppVersion .Values.jvb.image.tag }}" + imagePullPolicy: {{ pluck "pullPolicy" .Values.jvb.image .Values.image | first }} + envFrom: + - secretRef: + name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jvb + - configMapRef: + name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common + - configMapRef: + name: {{ include "jitsi-meet.jvb.fullname" . }} + {{- if .Values.global.releaseSecretsOverride.enabled }} + {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} + - {{ tpl (toYaml . ) $ | indent 12 | trim }} + {{- end }} + {{- end }} + env: + {{- if or .Values.jvb.useNodeIP .Values.jvb.publicIPs }} + - name: DOCKER_HOST_ADDRESS + {{- if .Values.jvb.publicIPs }} + value: {{ first .Values.jvb.publicIPs }} + {{- else }} + valueFrom: + fieldRef: + fieldPath: status.hostIP + {{- end }} + - name: JVB_ADVERTISE_IPS + {{- if .Values.jvb.publicIPs }} + value: {{ .Values.jvb.publicIPs | join "," }} + {{- else }} + valueFrom: + fieldRef: + fieldPath: status.hostIP + {{- end }} + {{- else }} + {{- fail "(jvb.publicIPs | jvb.useNodeIP) Please set an external IP addresses for JVB(s) or enable the Node IP autodetection!" }} + {{- end }} + {{- if .Values.websockets.colibri.enabled }} + - name: JVB_WS_SERVER_ID + valueFrom: + fieldRef: + fieldPath: status.podIP + {{- end }} + {{- if .Values.octo.enabled }} + - name: JVB_OCTO_BIND_ADDRESS + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: JVB_OCTO_RELAY_ID + valueFrom: + fieldRef: + fieldPath: status.podIP + {{- end }} + ports: + - name: rtp-udp + containerPort: {{ .Values.jvb.UDPPort }} + {{- if .Values.jvb.useHostPort }} + hostPort: {{ .Values.jvb.UDPPort }} + {{- end }} + protocol: UDP + {{- if .Values.websockets.colibri.enabled }} + - name: colibri-ws-tcp + containerPort: 9090 + protocol: TCP + {{- end }} + {{- if .Values.octo.enabled }} + - name: octo + containerPort: 4096 + protocol: TCP + {{- end }} + {{- with .Values.jvb.livenessProbe }} + livenessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.jvb.readinessProbe }} + readinessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + resources: + {{- toYaml .Values.jvb.resources | nindent 12 }} + {{- with .Values.jvb.extraVolumeMounts }} + volumeMounts: + {{- toYaml . | nindent 10 }} + {{- end }} + + {{- if .Values.jvb.metrics.enabled }} + - name: metrics + image: {{ .Values.jvb.metrics.image.repository }}:{{ .Values.jvb.metrics.image.tag }} + imagePullPolicy: {{ .Values.jvb.metrics.image.pullPolicy }} + securityContext: + runAsUser: 10001 + command: + - /prometheus-jitsi-meet-exporter + - -videobridge-url + - http://localhost:8080/colibri/stats + ports: + - containerPort: 9888 + name: tcp-metrics + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 9888 + initialDelaySeconds: 3 + periodSeconds: 5 + resources: + {{- toYaml .Values.jvb.metrics.resources | nindent 12 }} + {{- end }} + + {{- with .Values.jvb.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if or .Values.jvb.useHostPort .Values.jvb.affinity }} + affinity: + {{- if .Values.jvb.affinity }} + {{- toYaml .Values.jvb.affinity | nindent 8 }} + {{- else }} + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/component + operator: In + values: + - jvb + topologyKey: "kubernetes.io/hostname" + {{- end }} + {{- end }} + {{- with .Values.jvb.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.jvb.extraVolumes }} + volumes: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/lib/modules/manager/kubernetes/extract.spec.ts b/lib/modules/manager/kubernetes/extract.spec.ts index f1a2d02e83635c..56052789fb6f24 100644 --- a/lib/modules/manager/kubernetes/extract.spec.ts +++ b/lib/modules/manager/kubernetes/extract.spec.ts @@ -164,5 +164,44 @@ kind: ConfigMap ], }); }); + + it('extracts from complex templates', () => { + const res = extractPackageFile( + Fixtures.get('complex.yaml'), + 'complex.yaml', + {}, + ); + expect(res).toEqual({ + deps: [ + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: undefined, + datasource: 'docker', + depName: 'busybox', + replaceString: 'busybox', + }, + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: undefined, + datasource: 'docker', + depName: '{{', + replaceString: '{{', + }, + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: undefined, + datasource: 'docker', + depName: '{{', + replaceString: '{{', + }, + ], + }); + }); }); }); diff --git a/lib/modules/manager/kubernetes/extract.ts b/lib/modules/manager/kubernetes/extract.ts index b596f4f3402662..f86b1d9f02a619 100644 --- a/lib/modules/manager/kubernetes/extract.ts +++ b/lib/modules/manager/kubernetes/extract.ts @@ -74,6 +74,7 @@ function extractApis( doc = parseYaml(content, null, { filename: packageFile, removeTemplates: true, + json: true, }); } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse Kubernetes manifest.'); diff --git a/lib/util/yaml.ts b/lib/util/yaml.ts index c0bceac4b5f127..1a6ed8cce7ae2a 100644 --- a/lib/util/yaml.ts +++ b/lib/util/yaml.ts @@ -79,8 +79,9 @@ export function dump(obj: any, opts?: DumpOptions | undefined): string { function massageContent(content: string, options?: YamlOptions): string { if (options?.removeTemplates) { return content + .replace(regEx(/\s+{{.+?}}:.+/gs), '') .replace(regEx(/{{`.+?`}}/gs), '') - .replace(regEx(/{{.+?}}/g), '') + .replace(regEx(/{{.+?}}/gs), '') .replace(regEx(/{%`.+?`%}/gs), '') .replace(regEx(/{%.+?%}/g), ''); } From 8b99cbca7f479a1ed563355310788b98873a5bd2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 09:54:05 +0000 Subject: [PATCH 150/172] chore(deps): update dependency @types/node to v18.19.33 (#29051) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Michael Kriese --- package.json | 2 +- pnpm-lock.yaml | 138 ++++++++++++++++++++++++------------------------- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index cc1274c35ce335..001ab50e9fc1f9 100644 --- a/package.json +++ b/package.json @@ -294,7 +294,7 @@ "@types/mdast": "3.0.15", "@types/moo": "0.5.9", "@types/ms": "0.7.34", - "@types/node": "18.19.32", + "@types/node": "18.19.33", "@types/parse-link-header": "2.0.3", "@types/semver": "7.5.8", "@types/semver-stable": "3.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14a12e4bdbc8d7..3faba8a037ce3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -458,8 +458,8 @@ importers: specifier: 0.7.34 version: 0.7.34 '@types/node': - specifier: 18.19.32 - version: 18.19.32 + specifier: 18.19.33 + version: 18.19.33 '@types/parse-link-header': specifier: 2.0.3 version: 2.0.3 @@ -531,7 +531,7 @@ importers: version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -555,16 +555,16 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))) + version: 4.0.2(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5))) 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@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) + version: 3.0.7(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -600,10 +600,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5) type-fest: specifier: 4.18.2 version: 4.18.2 @@ -2131,8 +2131,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@18.19.32': - resolution: {integrity: sha512-2bkg93YBSDKk8DLmmHnmj/Rwr18TLx7/n+I23BigFwgexUJoMHZOd8X1OFxuF/W3NN0S2W2E5sVabI5CPinNvA==} + '@types/node@18.19.33': + resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4953,9 +4953,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-to-regexp@6.2.2: resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} @@ -7530,27 +7530,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7575,7 +7575,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 jest-mock: 29.7.0 '@jest/expect-utils@29.4.1': @@ -7597,7 +7597,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.32 + '@types/node': 18.19.33 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -7619,7 +7619,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -7689,7 +7689,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -8646,7 +8646,7 @@ snapshots: '@types/aws4@1.11.6': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/babel__core@7.20.5': dependencies: @@ -8671,27 +8671,27 @@ snapshots: '@types/better-sqlite3@7.6.10': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/breejs__later@4.1.5': {} '@types/bunyan@1.8.11': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/bunyan@1.8.9': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/cacache@17.0.2': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/responselike': 1.0.3 '@types/callsite@1.0.34': {} @@ -8718,7 +8718,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/git-url-parse@9.0.3': {} @@ -8728,7 +8728,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/http-cache-semantics@4.0.4': {} @@ -8754,11 +8754,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/keyv@3.1.4': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/linkify-it@3.0.5': {} @@ -8777,7 +8777,7 @@ snapshots: '@types/marshal@0.5.3': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/mdast@3.0.15': dependencies: @@ -8793,7 +8793,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@18.19.32': + '@types/node@18.19.33': dependencies: undici-types: 5.26.5 @@ -8803,7 +8803,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 '@types/semver-stable@3.0.2': {} @@ -8823,7 +8823,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 minipass: 4.2.8 '@types/tmp@0.2.6': {} @@ -8848,7 +8848,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 optional: true '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': @@ -9588,13 +9588,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)): 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@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10025,13 +10025,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript @@ -10432,7 +10432,7 @@ snapshots: jackspeak: 2.3.6 minimatch: 9.0.4 minipass: 7.1.0 - path-scurry: 1.10.2 + path-scurry: 1.11.1 glob@6.0.4: dependencies: @@ -10960,7 +10960,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -10980,16 +10980,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10999,7 +10999,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 @@ -11024,8 +11024,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 18.19.32 - ts-node: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5) + '@types/node': 18.19.33 + ts-node: 10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11054,16 +11054,16 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5))): + jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-get-type@29.6.3: {} @@ -11071,7 +11071,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.32 + '@types/node': 18.19.33 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11114,16 +11114,16 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -11158,7 +11158,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11186,7 +11186,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -11232,7 +11232,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11251,7 +11251,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.32 + '@types/node': 18.19.33 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11260,17 +11260,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 18.19.32 + '@types/node': 18.19.33 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12095,7 +12095,7 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.2: + path-scurry@1.11.1: dependencies: lru-cache: 10.2.2 minipass: 7.1.0 @@ -12894,11 +12894,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.32)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.33)(ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12911,14 +12911,14 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.5) - ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.32)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.5.5)(@types/node@18.19.33)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.32 + '@types/node': 18.19.33 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From 0f838d2be217ca4690dda0ded471fae941b2c395 Mon Sep 17 00:00:00 2001 From: Quentin BERTRAND Date: Tue, 14 May 2024 12:17:15 +0200 Subject: [PATCH 151/172] feat(datasource/kubernetes-api): add missing image api kinds (#29062) Signed-off-by: Quentin BERTRAND --- data/kubernetes-api.json5 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/kubernetes-api.json5 b/data/kubernetes-api.json5 index cc6be1b43e0668..81a6df5a0b27d3 100644 --- a/data/kubernetes-api.json5 +++ b/data/kubernetes-api.json5 @@ -143,7 +143,12 @@ 'source.toolkit.fluxcd.io/v1beta2', 'source.toolkit.fluxcd.io/v1', ], + ImagePolicy: ['image.toolkit.fluxcd.io/v1beta2'], ImageRepository: ['image.toolkit.fluxcd.io/v1beta2'], + ImageUpdateAutomation: [ + 'image.toolkit.fluxcd.io/v1beta1', + 'image.toolkit.fluxcd.io/v1beta2' + ], OCIRepository: ['source.toolkit.fluxcd.io/v1beta2'], Provider: [ 'notification.toolkit.fluxcd.io/v1beta2', From 8d78ca2ec8413739ac5c9247393ef8a147bfbd80 Mon Sep 17 00:00:00 2001 From: ddovile <71456312+ddovile@users.noreply.github.com> Date: Tue, 14 May 2024 13:18:02 +0300 Subject: [PATCH 152/172] fix(azure): paginate getTeams() (#29060) Co-authored-by: Dovile Dikoviciute --- .../platform/azure/azure-helper.spec.ts | 23 ++++++++++++++++++ lib/modules/platform/azure/azure-helper.ts | 20 ++++++++++++++++ lib/modules/platform/azure/index.spec.ts | 24 +++++++++---------- lib/modules/platform/azure/index.ts | 2 +- 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/lib/modules/platform/azure/azure-helper.spec.ts b/lib/modules/platform/azure/azure-helper.spec.ts index 2d4430dd37861b..3b9f1db120a739 100644 --- a/lib/modules/platform/azure/azure-helper.spec.ts +++ b/lib/modules/platform/azure/azure-helper.spec.ts @@ -434,4 +434,27 @@ describe('modules/platform/azure/azure-helper', () => { ).toEqual(GitPullRequestMergeStrategy.Rebase); }); }); + + describe('getAllProjectTeams', () => { + it('should get all teams ', async () => { + const team1 = Array.from({ length: 100 }, (_, index) => ({ + description: `team1 ${index + 1}`, + })); + const team2 = Array.from({ length: 3 }, (_, index) => ({ + description: `team2 ${index + 1}`, + })); + const allTeams = team1.concat(team2); + azureApi.coreApi.mockImplementationOnce( + () => + ({ + getTeams: jest + .fn() + .mockResolvedValueOnce(team1) + .mockResolvedValueOnce(team2), + }) as any, + ); + const res = await azureHelper.getAllProjectTeams('projectId'); + expect(res).toEqual(allTeams); + }); + }); }); diff --git a/lib/modules/platform/azure/azure-helper.ts b/lib/modules/platform/azure/azure-helper.ts index ff63ce284306e6..3aa9a353971022 100644 --- a/lib/modules/platform/azure/azure-helper.ts +++ b/lib/modules/platform/azure/azure-helper.ts @@ -1,3 +1,4 @@ +import type { WebApiTeam } from 'azure-devops-node-api/interfaces/CoreInterfaces.js'; import { GitCommit, GitPullRequestMergeStrategy, @@ -178,3 +179,22 @@ export async function getMergeMethod( return GitPullRequestMergeStrategy.NoFastForward; } } + +export async function getAllProjectTeams( + projectId: string, +): Promise { + const allTeams: WebApiTeam[] = []; + const azureApiCore = await azureApi.coreApi(); + const top = 100; + let skip = 0; + let length = 0; + + do { + const teams = await azureApiCore.getTeams(projectId, undefined, top, skip); + length = teams.length; + allTeams.push(...teams); + skip += top; + } while (top <= length); + + return allTeams; +} diff --git a/lib/modules/platform/azure/index.spec.ts b/lib/modules/platform/azure/index.spec.ts index b39ae81e91b284..934cb93e8c2281 100644 --- a/lib/modules/platform/azure/index.spec.ts +++ b/lib/modules/platform/azure/index.spec.ts @@ -1486,15 +1486,15 @@ describe('modules/platform/azure/index', () => { azureApi.coreApi.mockImplementation( () => ({ - getTeams: jest.fn(() => [ - { id: 3, name: 'abc' }, - { id: 4, name: 'def' }, - ]), getTeamMembersWithExtendedProperties: jest.fn(() => [ { identity: { displayName: 'jyc', uniqueName: 'jyc', id: 123 } }, ]), }) as any, ); + azureHelper.getAllProjectTeams = jest.fn().mockReturnValue([ + { id: 3, name: 'abc' }, + { id: 4, name: 'def' }, + ]); await azure.addAssignees(123, ['test@bonjour.fr', 'jyc', 'def']); expect(azureApi.gitApi).toHaveBeenCalledTimes(3); }); @@ -1513,15 +1513,15 @@ describe('modules/platform/azure/index', () => { azureApi.coreApi.mockImplementation( () => ({ - getTeams: jest.fn(() => [ - { id: 3, name: 'abc' }, - { id: 4, name: 'def' }, - ]), getTeamMembersWithExtendedProperties: jest.fn(() => [ { identity: { displayName: 'jyc', uniqueName: 'jyc', id: 123 } }, ]), }) as any, ); + azureHelper.getAllProjectTeams = jest.fn().mockReturnValue([ + { id: 3, name: 'abc' }, + { id: 4, name: 'def' }, + ]); await azure.addReviewers(123, ['test@bonjour.fr', 'jyc', 'required:def']); expect(azureApi.gitApi).toHaveBeenCalledTimes(3); expect(logger.once.info).toHaveBeenCalledTimes(1); @@ -1539,15 +1539,15 @@ describe('modules/platform/azure/index', () => { azureApi.coreApi.mockImplementation( () => ({ - getTeams: jest.fn(() => [ - { id: 3, name: 'abc' }, - { id: 4, name: 'def' }, - ]), getTeamMembersWithExtendedProperties: jest.fn(() => [ { identity: { displayName: 'jyc', uniqueName: 'jyc', id: 123 } }, ]), }) as any, ); + azureHelper.getAllProjectTeams = jest.fn().mockReturnValue([ + { id: 3, name: 'abc' }, + { id: 4, name: 'def' }, + ]); await azure.addReviewers(123, ['required:jyc']); expect(azureApi.gitApi).toHaveBeenCalledTimes(3); expect(logger.once.info).toHaveBeenCalledTimes(0); diff --git a/lib/modules/platform/azure/index.ts b/lib/modules/platform/azure/index.ts index 847aa33c34f6ea..773a7e26227247 100644 --- a/lib/modules/platform/azure/index.ts +++ b/lib/modules/platform/azure/index.ts @@ -855,7 +855,7 @@ async function getUserIds(users: string[]): Promise { const validReviewers = new Set(); // TODO #22198 - const teams = await azureApiCore.getTeams(repo.project!.id!); + const teams = await azureHelper.getAllProjectTeams(repo.project!.id!); const members = await Promise.all( teams.map( async (t) => From 91e8a86e2e4c903b810297b6e5ae6270e7dcd3f6 Mon Sep 17 00:00:00 2001 From: lstoeferle <48953604+lstoeferle@users.noreply.github.com> Date: Tue, 14 May 2024 14:18:20 +0200 Subject: [PATCH 153/172] feat: allow templating of the extends field (#27955) Co-authored-by: Michael Kriese Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/config-presets.md | 34 ++++++++++++++++++++++++++++++++ lib/config/presets/index.spec.ts | 15 ++++++++++++++ lib/config/presets/index.ts | 5 +++++ 3 files changed, 54 insertions(+) diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index 53ebfc0a77ee28..2357a5a8cdf554 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -234,6 +234,40 @@ Parameters are supported similar to other methods: } ``` +## Templating presets + +You can use [Handlebars](https://handlebarsjs.com/) templates to be flexible with your presets. +This can be handy when you want to include presets conditionally. + + +!!! note + The template only supports a small subset of options, but you can extend them via `customEnvVariables`. + +Read the [templates](./templates.md) section to learn more. + +### Example use-case + +The following example shows a self-hosted Renovate preset located in a GitLab repository called `renovate/presets`. + +```json +{ + "extends": ["local>renovate/presets"] +} +``` + +Usually you want to validate the preset before you put it in your Renovate configuration +Here is an example of how you can use templating to validate and load the preset on a branch level: + +```javascript +// config.js +module.exports = { + customEnvVariables: { + GITLAB_REF: process.env.CI_COMMIT_REF_NAME || 'main', + }, + extends: ['local>renovate/presets#{{ env.GITLAB_REF }}'], +}; +``` + ## Contributing to presets Have you configured a rule that could help others? diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index f0d66a3b87cbce..a55ae336459288 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -336,6 +336,21 @@ describe('config/presets/index', () => { expect(res).toMatchSnapshot(); }); + it('resolves self-hosted preset with templating', async () => { + GlobalConfig.set({ customEnvVariables: { GIT_REF: 'abc123' } }); + config.extends = ['local>username/preset-repo#{{ env.GIT_REF }}']; + local.getPreset.mockImplementationOnce(({ tag }) => + tag === 'abc123' + ? Promise.resolve({ labels: ['self-hosted with template resolved'] }) + : Promise.reject(new Error('Failed to resolve self-hosted preset')), + ); + + const res = await presets.resolveConfigPresets(config); + + expect(res.labels).toEqual(['self-hosted with template resolved']); + expect(local.getPreset).toHaveBeenCalledOnce(); + }); + it('resolves self-hosted transitive presets without baseConfig', async () => { config.platform = 'gitlab'; config.endpoint = 'https://dummy.example.com/api/v4'; diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 1b0fcb264e6dc6..93e8e1fc082399 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -10,6 +10,7 @@ import * as packageCache from '../../util/cache/package'; import { getTtlOverride } from '../../util/cache/package/decorator'; import { clone } from '../../util/clone'; import { regEx } from '../../util/regex'; +import * as template from '../../util/template'; import { GlobalConfig } from '../global'; import * as massage from '../massage'; import * as migration from '../migration'; @@ -320,6 +321,10 @@ export async function resolveConfigPresets( let config: AllConfig = {}; // First, merge all the preset configs from left to right if (inputConfig.extends?.length) { + // Compile templates + inputConfig.extends = inputConfig.extends.map((tmpl) => + template.compile(tmpl, {}), + ); for (const preset of inputConfig.extends) { if (shouldResolvePreset(preset, existingPresets, ignorePresets)) { logger.trace(`Resolving preset "${preset}"`); From 3bcafbb2fe3434937877db8a2f69c86183909f92 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 14 May 2024 15:10:31 +0200 Subject: [PATCH 154/172] fix(datasource/docker): use digest from header if available (#29065) --- lib/modules/datasource/docker/index.spec.ts | 77 +++++++++++++++++++++ lib/modules/datasource/docker/index.ts | 59 ++++++++++++---- 2 files changed, 121 insertions(+), 15 deletions(-) diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index e16d42ed533b86..e5805c7ed906e0 100644 --- a/lib/modules/datasource/docker/index.spec.ts +++ b/lib/modules/datasource/docker/index.spec.ts @@ -744,6 +744,83 @@ describe('modules/datasource/docker/index', () => { ); }); + it('supports architecture-specific digest whithout manifest list', async () => { + const currentDigest = + 'sha256:81c09f6d42c2db8121bcd759565ea244cedc759f36a0f090ec7da9de4f7f8fe4'; + + httpMock + .scope(authUrl) + .get( + '/token?service=registry.docker.io&scope=repository:library/some-dep:pull', + ) + .times(4) + .reply(200, { token: 'some-token' }); + httpMock + .scope(baseUrl) + .get('/') + .times(3) + .reply(401, '', { + 'www-authenticate': + 'Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/some-dep:pull"', + }) + .head('/library/some-dep/manifests/' + currentDigest) + .reply(200, '', { + 'content-type': + 'application/vnd.docker.distribution.manifest.v2+json', + }) + .get('/library/some-dep/manifests/' + currentDigest) + .reply(200, { + schemaVersion: 2, + mediaType: 'application/vnd.docker.distribution.manifest.v2+json', + config: { + digest: 'some-config-digest', + mediaType: 'application/vnd.docker.container.image.v1+json', + }, + }) + .get('/library/some-dep/blobs/some-config-digest') + .reply(200, { + architecture: 'amd64', + }); + httpMock + .scope(baseUrl) + .get('/') + .reply(401, '', { + 'www-authenticate': + 'Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/some-dep:pull"', + }) + .get('/library/some-dep/manifests/some-new-value') + .reply( + 200, + { + schemaVersion: 2, + mediaType: 'application/vnd.docker.distribution.manifest.v2+json', + config: { + mediaType: 'application/vnd.docker.container.image.v1+json', + size: 2917, + digest: + 'sha256:4591c431eb2fcf90ebb32476db6cfe342617fc3d3ca9653b9e0c47859cac1cf9', + }, + }, + { + 'docker-content-digest': 'some-new-digest', + }, + ); + + const res = await getDigest( + { + datasource: 'docker', + packageName: 'some-dep', + currentDigest, + }, + 'some-new-value', + ); + + expect(logger.logger.debug).toHaveBeenCalledWith( + `Current digest ${currentDigest} relates to architecture amd64`, + ); + expect(res).toBe('some-new-digest'); + }); + it('handles missing architecture-specific digest', async () => { const currentDigest = 'sha256:81c09f6d42c2db8121bcd759565ea244cedc759f36a0f090ec7da9de4f7f8fe4'; diff --git a/lib/modules/datasource/docker/index.ts b/lib/modules/datasource/docker/index.ts index 0f5563551d38c8..a62192581aa4ec 100644 --- a/lib/modules/datasource/docker/index.ts +++ b/lib/modules/datasource/docker/index.ts @@ -292,7 +292,14 @@ export class DockerDatasource extends Datasource { const parsed = ManifestJson.safeParse(manifestResponse.body); if (!parsed.success) { logger.debug( - { registry, dockerRepository, tag, err: parsed.error }, + { + registry, + dockerRepository, + tag, + body: manifestResponse.body, + headers: manifestResponse.headers, + err: parsed.error, + }, 'Invalid manifest response', ); return null; @@ -856,23 +863,45 @@ export class DockerDatasource extends Datasource { ); if (architecture && manifestResponse) { - const parse = ManifestJson.safeParse(manifestResponse.body); - const manifestList = parse.success - ? parse.data - : /* istanbul ignore next: hard to test */ null; - if ( - manifestList && - (manifestList.mediaType === - 'application/vnd.docker.distribution.manifest.list.v2+json' || + const parsed = ManifestJson.safeParse(manifestResponse.body); + /* istanbul ignore else: hard to test */ + if (parsed.success) { + const manifestList = parsed.data; + if ( manifestList.mediaType === - 'application/vnd.oci.image.index.v1+json') - ) { - for (const manifest of manifestList.manifests) { - if (manifest.platform?.architecture === architecture) { - digest = manifest.digest; - break; + 'application/vnd.docker.distribution.manifest.list.v2+json' || + manifestList.mediaType === + 'application/vnd.oci.image.index.v1+json' + ) { + for (const manifest of manifestList.manifests) { + if (manifest.platform?.architecture === architecture) { + digest = manifest.digest; + break; + } } + // TODO: return null if no matching architecture digest found + // https://github.com/renovatebot/renovate/discussions/22639 + } else if ( + hasKey('docker-content-digest', manifestResponse.headers) + ) { + // TODO: return null if no matching architecture, requires to fetch the config manifest + // https://github.com/renovatebot/renovate/discussions/22639 + digest = manifestResponse.headers[ + 'docker-content-digest' + ] as string; } + } else { + logger.debug( + { + registryHost, + dockerRepository, + newTag, + body: manifestResponse.body, + headers: manifestResponse.headers, + err: parsed.error, + }, + 'Failed to parse manifest response', + ); } } From b6d5e4a8c9bed9c283f9f73bb3b125765017a704 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 16:26:15 +0000 Subject: [PATCH 155/172] build(deps): update dependency semver to v7.6.1 (#29073) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 60 ++++++++++++++++++++++++-------------------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 001ab50e9fc1f9..785e3059055265 100644 --- a/package.json +++ b/package.json @@ -231,7 +231,7 @@ "remark": "13.0.0", "remark-github": "10.1.0", "safe-stable-stringify": "2.4.3", - "semver": "7.6.0", + "semver": "7.6.1", "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3faba8a037ce3e..14e5227a39f245 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -279,8 +279,8 @@ importers: specifier: 2.4.3 version: 2.4.3 semver: - specifier: 7.6.0 - version: 7.6.0 + specifier: 7.6.1 + version: 7.6.1 semver-stable: specifier: 3.0.0 version: 3.0.0 @@ -5303,8 +5303,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.1: + resolution: {integrity: sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==} engines: {node: '>=10'} hasBin: true @@ -7766,7 +7766,7 @@ snapshots: '@npmcli/fs@3.1.0': dependencies: - semver: 7.6.0 + semver: 7.6.1 '@octokit/auth-token@4.0.0': {} @@ -7900,7 +7900,7 @@ snapshots: '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation': 0.51.0(@opentelemetry/api@1.8.0) '@opentelemetry/semantic-conventions': 1.24.0 - semver: 7.6.0 + semver: 7.6.1 transitivePeerDependencies: - supports-color @@ -7911,7 +7911,7 @@ snapshots: '@types/shimmer': 1.0.5 import-in-the-middle: 1.7.1 require-in-the-middle: 7.3.0 - semver: 7.6.0 + semver: 7.6.1 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -7976,7 +7976,7 @@ snapshots: '@opentelemetry/propagator-b3': 1.24.0(@opentelemetry/api@1.8.0) '@opentelemetry/propagator-jaeger': 1.24.0(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) - semver: 7.6.0 + semver: 7.6.1 '@opentelemetry/semantic-conventions@1.24.0': {} @@ -8178,7 +8178,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.0.2 semantic-release: 22.0.12(typescript@5.4.5) - semver: 7.6.0 + semver: 7.6.1 tempy: 3.1.0 '@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.12(typescript@5.4.5))': @@ -8864,7 +8864,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.0 + semver: 7.6.1 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8925,7 +8925,7 @@ snapshots: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.1 tsutils: 3.21.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8940,7 +8940,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 - semver: 7.6.0 + semver: 7.6.1 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8957,7 +8957,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.1 transitivePeerDependencies: - supports-color - typescript @@ -8971,7 +8971,7 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.0 + semver: 7.6.1 transitivePeerDependencies: - supports-color - typescript @@ -9009,7 +9009,7 @@ snapshots: lodash: 4.17.21 micromatch: 4.0.5 p-limit: 2.3.0 - semver: 7.6.0 + semver: 7.6.1 strip-ansi: 6.0.1 tar: 6.2.1 tinylogic: 2.0.0 @@ -9552,7 +9552,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 - semver: 7.6.0 + semver: 7.6.1 split2: 4.2.0 conventional-commits-detector@1.0.3: @@ -9790,7 +9790,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 11.1.0 minimatch: 9.0.2 - semver: 7.6.0 + semver: 7.6.1 electron-to-chromium@1.4.756: {} @@ -10458,7 +10458,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.6.0 + semver: 7.6.1 serialize-error: 7.0.1 globals@11.12.0: {} @@ -10908,7 +10908,7 @@ snapshots: '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + semver: 7.6.1 transitivePeerDependencies: - supports-color @@ -11225,7 +11225,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.1 transitivePeerDependencies: - supports-color @@ -11453,7 +11453,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.1 make-error@1.3.6: {} @@ -11764,7 +11764,7 @@ snapshots: node-abi@3.62.0: dependencies: - semver: 7.6.0 + semver: 7.6.1 optional: true node-emoji@2.1.3: @@ -11789,7 +11789,7 @@ snapshots: make-fetch-happen: 13.0.1 nopt: 7.2.1 proc-log: 3.0.0 - semver: 7.6.0 + semver: 7.6.1 tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: @@ -11825,14 +11825,14 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.1 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.1: dependencies: hosted-git-info: 7.0.2 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.1 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -12467,7 +12467,7 @@ snapshots: p-reduce: 3.0.0 read-pkg-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.6.1 semver-diff: 4.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -12479,7 +12479,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.1 semver-regex@4.0.5: {} @@ -12493,9 +12493,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 + semver@7.6.1: {} serialize-error@7.0.1: dependencies: @@ -12903,7 +12901,7 @@ snapshots: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.0 + semver: 7.6.1 typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: From 89f576da00ef3130b38a3b8ddd6de743d7cfd8dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 16:42:10 +0000 Subject: [PATCH 156/172] build(deps): update opentelemetry-js monorepo (#29074) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 16 ++-- pnpm-lock.yaml | 216 ++++++++++++++++++++++++------------------------- 2 files changed, 116 insertions(+), 116 deletions(-) diff --git a/package.json b/package.json index 785e3059055265..1cb3f75cd36cea 100644 --- a/package.json +++ b/package.json @@ -151,15 +151,15 @@ "@breejs/later": "4.2.0", "@cdktf/hcl2json": "0.20.7", "@opentelemetry/api": "1.8.0", - "@opentelemetry/context-async-hooks": "1.24.0", - "@opentelemetry/exporter-trace-otlp-http": "0.51.0", - "@opentelemetry/instrumentation": "0.51.0", + "@opentelemetry/context-async-hooks": "1.24.1", + "@opentelemetry/exporter-trace-otlp-http": "0.51.1", + "@opentelemetry/instrumentation": "0.51.1", "@opentelemetry/instrumentation-bunyan": "0.38.0", - "@opentelemetry/instrumentation-http": "0.51.0", - "@opentelemetry/resources": "1.24.0", - "@opentelemetry/sdk-trace-base": "1.24.0", - "@opentelemetry/sdk-trace-node": "1.24.0", - "@opentelemetry/semantic-conventions": "1.24.0", + "@opentelemetry/instrumentation-http": "0.51.1", + "@opentelemetry/resources": "1.24.1", + "@opentelemetry/sdk-trace-base": "1.24.1", + "@opentelemetry/sdk-trace-node": "1.24.1", + "@opentelemetry/semantic-conventions": "1.24.1", "@qnighy/marshal": "0.1.3", "@renovatebot/kbpgp": "3.0.1", "@renovatebot/osv-offline": "1.5.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14e5227a39f245..3ba3162319161d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,32 +39,32 @@ importers: specifier: 1.8.0 version: 1.8.0 '@opentelemetry/context-async-hooks': - specifier: 1.24.0 - version: 1.24.0(@opentelemetry/api@1.8.0) + specifier: 1.24.1 + version: 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/exporter-trace-otlp-http': - specifier: 0.51.0 - version: 0.51.0(@opentelemetry/api@1.8.0) + specifier: 0.51.1 + version: 0.51.1(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation': - specifier: 0.51.0 - version: 0.51.0(@opentelemetry/api@1.8.0) + specifier: 0.51.1 + version: 0.51.1(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation-bunyan': specifier: 0.38.0 version: 0.38.0(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation-http': - specifier: 0.51.0 - version: 0.51.0(@opentelemetry/api@1.8.0) + specifier: 0.51.1 + version: 0.51.1(@opentelemetry/api@1.8.0) '@opentelemetry/resources': - specifier: 1.24.0 - version: 1.24.0(@opentelemetry/api@1.8.0) + specifier: 1.24.1 + version: 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-trace-base': - specifier: 1.24.0 - version: 1.24.0(@opentelemetry/api@1.8.0) + specifier: 1.24.1 + version: 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-trace-node': - specifier: 1.24.0 - version: 1.24.0(@opentelemetry/api@1.8.0) + specifier: 1.24.1 + version: 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/semantic-conventions': - specifier: 1.24.0 - version: 1.24.0 + specifier: 1.24.1 + version: 1.24.1 '@qnighy/marshal': specifier: 0.1.3 version: 0.1.3 @@ -1395,28 +1395,28 @@ packages: typescript: optional: true - '@opentelemetry/api-logs@0.51.0': - resolution: {integrity: sha512-m/jtfBPEIXS1asltl8fPQtO3Sb1qMpuL61unQajUmM8zIxeMF1AlqzWXM3QedcYgTTFiJCew5uJjyhpmqhc0+g==} + '@opentelemetry/api-logs@0.51.1': + resolution: {integrity: sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==} engines: {node: '>=14'} '@opentelemetry/api@1.8.0': resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@1.24.0': - resolution: {integrity: sha512-s7xaQ9ifDpJvwbWRLkZD/J5hY35w+MECm4TQUkg6szRcny9lf6oVhWij4w3JJFQgvHQMXU7oXOpX8Z05HxV/8g==} + '@opentelemetry/context-async-hooks@1.24.1': + resolution: {integrity: sha512-R5r6DO4kgEOVBxFXhXjwospLQkv+sYxwCfjvoZBe7Zm6KKXAV9kDSJhi/D1BweowdZmO+sdbENLs374gER8hpQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/core@1.24.0': - resolution: {integrity: sha512-FP2oN7mVPqcdxJDTTnKExj4mi91EH+DNuArKfHTjPuJWe2K1JfMIVXNfahw1h3onJxQnxS8K0stKkogX05s+Aw==} + '@opentelemetry/core@1.24.1': + resolution: {integrity: sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/exporter-trace-otlp-http@0.51.0': - resolution: {integrity: sha512-zODqnLZmPOxj9CarFv0TrVlx9mgj0TfCMCiUiTdNi9iA2rgdKVo+bjJjpYF6LCTJOQCR5TScAUCKyzwkgDI+iA==} + '@opentelemetry/exporter-trace-otlp-http@0.51.1': + resolution: {integrity: sha512-n+LhLPsX07URh+HhV2SHVSvz1t4G/l/CE5BjpmhAPqeTceFac1VpyQkavWEJbvnK5bUEXijWt4LxAxFpt2fXyw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 @@ -1427,75 +1427,75 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.51.0': - resolution: {integrity: sha512-6VsGPBnU6iVKWhVBnuRpwrmiHfxt8EYrqfnH2glfsMpsn4xy+O6U0yGlggPLhoYeOVafV3h70EEk5MU0tpsbiw==} + '@opentelemetry/instrumentation-http@0.51.1': + resolution: {integrity: sha512-6b3nZnFFEz/3xZ6w8bVxctPUWIPWiXuPQ725530JgxnN1cvYFd8CJ75PrHZNjynmzSSnqBkN3ef4R9N+RpMh8Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.51.0': - resolution: {integrity: sha512-Eg/+Od5bEvzpvZQGhvMyKIkrzB9S7jW+6z9LHEI2VXhl/GrqQ3oBqlzJt4tA6pGtxRmqQWKWGM1wAbwDdW/gUA==} + '@opentelemetry/instrumentation@0.51.1': + resolution: {integrity: sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.51.0': - resolution: {integrity: sha512-hR4c9vWVz1QgzCBSyy9zSDkvfTgaK96E6/tfVP6O4dzdZW9HqWimA3lXV/KXadEGqShvM4GToz9EHp2A5RU5bQ==} + '@opentelemetry/otlp-exporter-base@0.51.1': + resolution: {integrity: sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/otlp-transformer@0.51.0': - resolution: {integrity: sha512-ylLgx2xumVoSefDHP9GMAU/LG+TU3+8eacVDXV5o1RqWxsdVOaQmCTY0XyDgeRTn6hIOVAq/HHQbRq3iWOrt2A==} + '@opentelemetry/otlp-transformer@0.51.1': + resolution: {integrity: sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.9.0' - '@opentelemetry/propagator-b3@1.24.0': - resolution: {integrity: sha512-7TMIDE4+NO5vnkor+zned42wqca+hmhW5gWKhmYjUHC5B5uojo1PvtmBrd7kigFu96XvL4ZUWVzibWRWIQ/++Q==} + '@opentelemetry/propagator-b3@1.24.1': + resolution: {integrity: sha512-nda97ZwhpZKyUJTXqQuKzNhPMUgMLunbbGWn8kroBwegn+nh6OhtyGkrVQsQLNdVKJl0KeB5z0ZgeWszrYhwFw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/propagator-jaeger@1.24.0': - resolution: {integrity: sha512-r3MX3AmJiUeiWTXSDOdwBeaO+ahvWcFCpuKxmhhsH8Q8LqDnjhNd3krqBh4Qsq9wa0WhWtiQaDs/NOCWoMOlOw==} + '@opentelemetry/propagator-jaeger@1.24.1': + resolution: {integrity: sha512-7bRBJn3FG1l195A1m+xXRHvgzAOBsfmRi9uZ5Da18oTh7BLmNDiA8+kpk51FpTsU1PCikPVpRDNPhKVB6lyzZg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/resources@1.24.0': - resolution: {integrity: sha512-mxC7E7ocUS1tLzepnA7O9/G8G6ZTdjCH2pXme1DDDuCuk6n2/53GADX+GWBuyX0dfIxeMInIbJAdjlfN9GNr6A==} + '@opentelemetry/resources@1.24.1': + resolution: {integrity: sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/sdk-logs@0.51.0': - resolution: {integrity: sha512-K4fMBRFD8hQ6khk0rvYFuo6L9ymeGgByir6BcuFIgQuQ00OhYwBi9AruZz5V733Ejq7P8ObR3YyubkOUIbeVAw==} + '@opentelemetry/sdk-logs@0.51.1': + resolution: {integrity: sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.9.0' '@opentelemetry/api-logs': '>=0.39.1' - '@opentelemetry/sdk-metrics@1.24.0': - resolution: {integrity: sha512-4tJ+E6N019OZVB/nUW/LoK9xHxfeh88TCoaTqHeLBE9wLYfi6irWW6J9cphMav7J8Qk0D5b7/RM4VEY4dArWOA==} + '@opentelemetry/sdk-metrics@1.24.1': + resolution: {integrity: sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.9.0' - '@opentelemetry/sdk-trace-base@1.24.0': - resolution: {integrity: sha512-H9sLETZ4jw9UJ3totV8oM5R0m4CW0ZIOLfp4NV3g0CM8HD5zGZcaW88xqzWDgiYRpctFxd+WmHtGX/Upoa2vRg==} + '@opentelemetry/sdk-trace-base@1.24.1': + resolution: {integrity: sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/sdk-trace-node@1.24.0': - resolution: {integrity: sha512-QgByHmM9uloTpcYEEyW9YJEIMKHFSIM677RH9pJPWWwtM2NQFbEp/8HIJw80Ymtaz6cAxg1Kay1ByqIVzq3t5g==} + '@opentelemetry/sdk-trace-node@1.24.1': + resolution: {integrity: sha512-/FZX8uWaGIAwsDhqI8VvQ+qWtfMNlXjaFYGc+vmxgdRFppCSSIRwrPyIhJO1qx61okyYhoyxVEZAfoiNxrfJCg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.9.0' - '@opentelemetry/semantic-conventions@1.24.0': - resolution: {integrity: sha512-yL0jI6Ltuz8R+Opj7jClGrul6pOoYrdfVmzQS4SITXRPH7I5IRZbrwe/6/v8v4WYMa6MYZG480S1+uc/IGfqsA==} + '@opentelemetry/semantic-conventions@1.24.1': + resolution: {integrity: sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==} engines: {node: '>=14'} '@pkgjs/parseargs@0.11.0': @@ -2322,8 +2322,8 @@ packages: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: acorn: ^8 @@ -3701,8 +3701,8 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} - import-in-the-middle@1.7.1: - resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} + import-in-the-middle@1.7.4: + resolution: {integrity: sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==} import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} @@ -7861,124 +7861,124 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@opentelemetry/api-logs@0.51.0': + '@opentelemetry/api-logs@0.51.1': dependencies: '@opentelemetry/api': 1.8.0 '@opentelemetry/api@1.8.0': {} - '@opentelemetry/context-async-hooks@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/context-async-hooks@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/core@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/semantic-conventions': 1.24.0 + '@opentelemetry/semantic-conventions': 1.24.1 - '@opentelemetry/exporter-trace-otlp-http@0.51.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/exporter-trace-otlp-http@0.51.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/otlp-exporter-base': 0.51.0(@opentelemetry/api@1.8.0) - '@opentelemetry/otlp-transformer': 0.51.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation-bunyan@0.38.0(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.51.0 - '@opentelemetry/instrumentation': 0.51.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) '@types/bunyan': 1.8.9 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.51.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/instrumentation-http@0.51.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation': 0.51.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.24.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 semver: 7.6.1 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.51.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/instrumentation@0.51.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.51.0 + '@opentelemetry/api-logs': 0.51.1 '@types/shimmer': 1.0.5 - import-in-the-middle: 1.7.1 + import-in-the-middle: 1.7.4 require-in-the-middle: 7.3.0 semver: 7.6.1 shimmer: 1.2.1 transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.51.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/otlp-exporter-base@0.51.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) - '@opentelemetry/otlp-transformer@0.51.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/otlp-transformer@0.51.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.51.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-logs': 0.51.0(@opentelemetry/api-logs@0.51.0)(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-metrics': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-b3@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/propagator-b3@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-jaeger@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/propagator-jaeger@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) - '@opentelemetry/resources@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/resources@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.24.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 - '@opentelemetry/sdk-logs@0.51.0(@opentelemetry/api-logs@0.51.0)(@opentelemetry/api@1.8.0)': + '@opentelemetry/sdk-logs@0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/api-logs': 0.51.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-metrics@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/sdk-metrics@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) lodash.merge: 4.6.2 - '@opentelemetry/sdk-trace-base@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/sdk-trace-base@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.24.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 - '@opentelemetry/sdk-trace-node@1.24.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/sdk-trace-node@1.24.1(@opentelemetry/api@1.8.0)': dependencies: '@opentelemetry/api': 1.8.0 - '@opentelemetry/context-async-hooks': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-b3': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-jaeger': 1.24.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/context-async-hooks': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-b3': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-jaeger': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) semver: 7.6.1 - '@opentelemetry/semantic-conventions@1.24.0': {} + '@opentelemetry/semantic-conventions@1.24.1': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -9055,7 +9055,7 @@ snapshots: abbrev@2.0.0: optional: true - acorn-import-assertions@1.9.0(acorn@8.11.3): + acorn-import-attributes@1.9.5(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -10672,10 +10672,10 @@ snapshots: transitivePeerDependencies: - supports-color - import-in-the-middle@1.7.1: + import-in-the-middle@1.7.4: dependencies: acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) + acorn-import-attributes: 1.9.5(acorn@8.11.3) cjs-module-lexer: 1.3.1 module-details-from-path: 1.0.3 From 5232cb6531fc0fb6546e9d5e628183d3303dc398 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 22:17:42 +0000 Subject: [PATCH 157/172] build(deps): update dependency semver to v7.6.2 (#29076) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 58 +++++++++++++++++++++++++------------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 1cb3f75cd36cea..26b3cf6e5e4c98 100644 --- a/package.json +++ b/package.json @@ -231,7 +231,7 @@ "remark": "13.0.0", "remark-github": "10.1.0", "safe-stable-stringify": "2.4.3", - "semver": "7.6.1", + "semver": "7.6.2", "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ba3162319161d..5424b028ac3526 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -279,8 +279,8 @@ importers: specifier: 2.4.3 version: 2.4.3 semver: - specifier: 7.6.1 - version: 7.6.1 + specifier: 7.6.2 + version: 7.6.2 semver-stable: specifier: 3.0.0 version: 3.0.0 @@ -5303,8 +5303,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.1: - resolution: {integrity: sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==} + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true @@ -7766,7 +7766,7 @@ snapshots: '@npmcli/fs@3.1.0': dependencies: - semver: 7.6.1 + semver: 7.6.2 '@octokit/auth-token@4.0.0': {} @@ -7900,7 +7900,7 @@ snapshots: '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) '@opentelemetry/semantic-conventions': 1.24.1 - semver: 7.6.1 + semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -7911,7 +7911,7 @@ snapshots: '@types/shimmer': 1.0.5 import-in-the-middle: 1.7.4 require-in-the-middle: 7.3.0 - semver: 7.6.1 + semver: 7.6.2 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -7976,7 +7976,7 @@ snapshots: '@opentelemetry/propagator-b3': 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/propagator-jaeger': 1.24.1(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) - semver: 7.6.1 + semver: 7.6.2 '@opentelemetry/semantic-conventions@1.24.1': {} @@ -8178,7 +8178,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.0.2 semantic-release: 22.0.12(typescript@5.4.5) - semver: 7.6.1 + semver: 7.6.2 tempy: 3.1.0 '@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.12(typescript@5.4.5))': @@ -8864,7 +8864,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.1 + semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8925,7 +8925,7 @@ snapshots: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.1 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8940,7 +8940,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 - semver: 7.6.1 + semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -8957,7 +8957,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.1 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -8971,7 +8971,7 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.1 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -9009,7 +9009,7 @@ snapshots: lodash: 4.17.21 micromatch: 4.0.5 p-limit: 2.3.0 - semver: 7.6.1 + semver: 7.6.2 strip-ansi: 6.0.1 tar: 6.2.1 tinylogic: 2.0.0 @@ -9552,7 +9552,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 - semver: 7.6.1 + semver: 7.6.2 split2: 4.2.0 conventional-commits-detector@1.0.3: @@ -9790,7 +9790,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 11.1.0 minimatch: 9.0.2 - semver: 7.6.1 + semver: 7.6.2 electron-to-chromium@1.4.756: {} @@ -10458,7 +10458,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.6.1 + semver: 7.6.2 serialize-error: 7.0.1 globals@11.12.0: {} @@ -10908,7 +10908,7 @@ snapshots: '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.1 + semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -11225,7 +11225,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.1 + semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -11453,7 +11453,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.1 + semver: 7.6.2 make-error@1.3.6: {} @@ -11764,7 +11764,7 @@ snapshots: node-abi@3.62.0: dependencies: - semver: 7.6.1 + semver: 7.6.2 optional: true node-emoji@2.1.3: @@ -11789,7 +11789,7 @@ snapshots: make-fetch-happen: 13.0.1 nopt: 7.2.1 proc-log: 3.0.0 - semver: 7.6.1 + semver: 7.6.2 tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: @@ -11825,14 +11825,14 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.1 + semver: 7.6.2 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.1: dependencies: hosted-git-info: 7.0.2 is-core-module: 2.13.1 - semver: 7.6.1 + semver: 7.6.2 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -12467,7 +12467,7 @@ snapshots: p-reduce: 3.0.0 read-pkg-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.6.1 + semver: 7.6.2 semver-diff: 4.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -12479,7 +12479,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.1 + semver: 7.6.2 semver-regex@4.0.5: {} @@ -12493,7 +12493,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.1: {} + semver@7.6.2: {} serialize-error@7.0.1: dependencies: @@ -12901,7 +12901,7 @@ snapshots: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.1 + semver: 7.6.2 typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: From 78edb5b0f857d9a3b6c4c62e30a63fe595219ee2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 03:15:11 +0000 Subject: [PATCH 158/172] chore(deps): update codecov/codecov-action action to v4.4.0 (#29080) 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 2a1e24e6b87875..d7280a3c48506b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -406,7 +406,7 @@ jobs: merge-multiple: true - name: Codecov - uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be # v4.3.1 + uses: codecov/codecov-action@6d798873df2b1b8e5846dba6fb86631229fbcb17 # v4.4.0 with: token: ${{ secrets.CODECOV_TOKEN }} directory: coverage/lcov From 945c4cf8bae32b8309628ae51d95ed86b833852d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 03:15:35 +0000 Subject: [PATCH 159/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.11.1 (#29079) 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 d581680b4a8575..5ead4cfee9166d 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.11.0@sha256:9cca46a4b9cb6057fd6855211e243fe8bcf6faa1ad60c78cf2baa9d4c6408ce0 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.11.1@sha256:6ee5889634c1060cfe62f5ba743b3d459cdb04ab3b88d49f211eade84386fec5 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.11.0-full@sha256:e5df9a40abfd683ef0373be382d66ca36248f033da8703b7bffad54c140b5f3e AS full-base +FROM ghcr.io/renovatebot/base-image:2.11.1-full@sha256:eb2e23f52fc7273be3105c0e9443052377bcd89723fbd65aeb16e96b37ed43e2 AS full-base # -------------------------------------- # build image From ead5d55a4986856d731ea13c9bec81987db38e8c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 05:16:14 +0200 Subject: [PATCH 160/172] build(deps): update dependency zod to v3.23.7 (#29077) 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 26b3cf6e5e4c98..667c1089048e49 100644 --- a/package.json +++ b/package.json @@ -246,7 +246,7 @@ "validate-npm-package-name": "5.0.1", "vuln-vects": "1.1.0", "xmldoc": "1.3.0", - "zod": "3.23.6" + "zod": "3.23.7" }, "optionalDependencies": { "better-sqlite3": "9.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5424b028ac3526..e9b13103f42909 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -324,8 +324,8 @@ importers: specifier: 1.3.0 version: 1.3.0 zod: - specifier: 3.23.6 - version: 3.23.6 + specifier: 3.23.7 + version: 3.23.7 optionalDependencies: better-sqlite3: specifier: 9.6.0 @@ -6062,8 +6062,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.23.6: - resolution: {integrity: sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==} + zod@3.23.7: + resolution: {integrity: sha512-NBeIoqbtOiUMomACV/y+V3Qfs9+Okr18vR5c/5pHClPpufWOrsx8TENboDPe265lFdfewX2yBtNTLPvnmCxwog==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -13309,6 +13309,6 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.23.6: {} + zod@3.23.7: {} zwitch@1.0.5: {} From e291ef0dbdf515399d4cc97ff5aeb954ff2d5e8a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 15 May 2024 10:42:00 +0200 Subject: [PATCH 161/172] fix(datasource/github-runners): add Ubuntu 24.04 Noble Numbat as unstable (#29088) --- lib/modules/datasource/github-runners/index.spec.ts | 1 + lib/modules/datasource/github-runners/index.ts | 1 + lib/modules/datasource/github-runners/readme.md | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/modules/datasource/github-runners/index.spec.ts b/lib/modules/datasource/github-runners/index.spec.ts index 3504b8cbdc9b55..aa2bcbd3e8effe 100644 --- a/lib/modules/datasource/github-runners/index.spec.ts +++ b/lib/modules/datasource/github-runners/index.spec.ts @@ -15,6 +15,7 @@ describe('modules/datasource/github-runners/index', () => { { version: '18.04', isDeprecated: true }, { version: '20.04' }, { version: '22.04' }, + { version: '24.04', isStable: false }, ], sourceUrl: 'https://github.com/actions/runner-images', }); diff --git a/lib/modules/datasource/github-runners/index.ts b/lib/modules/datasource/github-runners/index.ts index c5a2b80773493c..9cf3722dc3b430 100644 --- a/lib/modules/datasource/github-runners/index.ts +++ b/lib/modules/datasource/github-runners/index.ts @@ -10,6 +10,7 @@ export class GithubRunnersDatasource extends Datasource { */ private static readonly releases: Record = { ubuntu: [ + { version: '24.04', isStable: false }, { version: '22.04' }, { version: '20.04' }, { version: '18.04', isDeprecated: true }, diff --git a/lib/modules/datasource/github-runners/readme.md b/lib/modules/datasource/github-runners/readme.md index 82b2769d17cd05..4c3d92bb3249e9 100644 --- a/lib/modules/datasource/github-runners/readme.md +++ b/lib/modules/datasource/github-runners/readme.md @@ -1,7 +1,7 @@ This datasource returns a list of all runners that are hosted by GitHub. The datasource is based on [GitHub's `runner-images` repository](https://github.com/actions/runner-images). -Examples: `windows-2022` / `ubuntu-22.04` / `macos-14` +Examples: `windows-2022` / `ubuntu-24.04` / `macos-14` ## Maintenance From dba9ad3353409461e1d7261662d4115461d80f75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 08:55:15 +0000 Subject: [PATCH 162/172] chore(deps): update ghcr.io/containerbase/devcontainer docker tag to v10.6.10 (#29091) 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 d0bd23af854520..8584468262b5f9 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.6.9 +FROM ghcr.io/containerbase/devcontainer:10.6.10 From caedb6f4528d87fc0f46f8d5a7a4c5c6443f098f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 08:56:04 +0000 Subject: [PATCH 163/172] build(deps): update dependency zod to v3.23.8 (#29090) 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 667c1089048e49..bad6c7f6facf4d 100644 --- a/package.json +++ b/package.json @@ -246,7 +246,7 @@ "validate-npm-package-name": "5.0.1", "vuln-vects": "1.1.0", "xmldoc": "1.3.0", - "zod": "3.23.7" + "zod": "3.23.8" }, "optionalDependencies": { "better-sqlite3": "9.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9b13103f42909..8cb074448d723b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -324,8 +324,8 @@ importers: specifier: 1.3.0 version: 1.3.0 zod: - specifier: 3.23.7 - version: 3.23.7 + specifier: 3.23.8 + version: 3.23.8 optionalDependencies: better-sqlite3: specifier: 9.6.0 @@ -6062,8 +6062,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.23.7: - resolution: {integrity: sha512-NBeIoqbtOiUMomACV/y+V3Qfs9+Okr18vR5c/5pHClPpufWOrsx8TENboDPe265lFdfewX2yBtNTLPvnmCxwog==} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -13309,6 +13309,6 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.23.7: {} + zod@3.23.8: {} zwitch@1.0.5: {} From 01f9861069ccecbee921da41cabc7f6b8ddc5f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Goetz?= Date: Wed, 15 May 2024 11:57:02 +0200 Subject: [PATCH 164/172] docs: Update Swissquote article with information on the scheduler and dashboards (#29030) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- .../images/swissquote_stats_collection.png | Bin 0 -> 96990 bytes docs/usage/user-stories/swissquote.md | 35 ++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 docs/usage/assets/images/swissquote_stats_collection.png diff --git a/docs/usage/assets/images/swissquote_stats_collection.png b/docs/usage/assets/images/swissquote_stats_collection.png new file mode 100644 index 0000000000000000000000000000000000000000..666ea1770487f9260e3726b5e4dc2af720e1ed3e GIT binary patch literal 96990 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

Jnf7;iL%BSo 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 literal 0 HcmV?d00001 diff --git a/docs/usage/user-stories/swissquote.md b/docs/usage/user-stories/swissquote.md index c11367f0cf180b..8ffa13e58415bc 100644 --- a/docs/usage/user-stories/swissquote.md +++ b/docs/usage/user-stories/swissquote.md @@ -182,7 +182,9 @@ Some features and options we enjoy: There is an [on-premise option](https://www.mend.io/free-developer-tools/renovate/on-premises/), but you can also use [the Mend Renovate App](https://github.com/marketplace/renovate). On our side, we’re not using the on-premise but rather a custom scheduler using the open source Docker image. -## Some stats after two years with Renovate +## Some stats after four years with Renovate + +> The figures here have been updated in November 2023 We started using Renovate Bot in 2019, using the (now deprecated) `renovate/pro` Docker image. We installed it as a GitHub app and some early adopters started to use it. @@ -197,18 +199,43 @@ Here is the dashboard for our current scheduler:

![Swissquote scheduler dashboard](../assets/images/swissquote_stats.png){ loading=lazy } -
A dashboard we made at Swissquote to keep our Renovate runs in check, July 2022.
+
A dashboard we made at Swissquote to keep our Renovate runs in check, November 2023.
We don’t force any team to use Renovate, each team can decide to opt-in and do it for each project separately. Some statistics: -- 824 repositories enabled out of about 2000 active repositories -- 8000 PRs were merged since we installed Renovate +- 857 repositories enabled out of about 2000 active repositories +- 11000 PRs were merged since we installed Renovate - 239 PRs were merged last month - 2 SSDs died on our Renovate machine with the number of projects to clone again and again +### How does the scheduler work? + +The scheduler is a Node.js application that handles an in-memory queue and starts Docker containers to run Renovate on. +Our custom scheduler application regularly sends data points to our InfluxDB database, which we then display in Grafana. + +Here is how it works: + +
+ ![Swissquote scheduler diagram](../assets/images/swissquote_stats_collection.png){ loading=lazy } +
A diagram explaining how our scheduler interacts with Renovate.
+
+ +All the information on the dashboard you saw above is created from three measurements: + +1. Queue: Every 5 minutes, we send the status of the queue size and the number of jobs currently running +1. Webhook: When receiving a webhook request from GitHub, we send a data point on the duration of treatment for that item +1. Runs: After each run, we send a data point on the run duration, success, and number of PRs created/updated/merged/closed + +The queue is filled by webhooks _or_ by re-queueing all repositories at regular intervals. +For each repository, we start a Renovate Docker image and pipe its logs to a file. +This allows us to run ten workers in parallel. +We could technically run more workers but decided not to hammer our GitHub instance. + +You can find more details in this [discussion on the Renovate repository, from November 2023](https://github.com/renovatebot/renovate/discussions/23105#discussioncomment-6366621). + ## The future of Renovate at Swissquote Not all teams are using Renovate at this stage, as some teams prefer to manually update their dependencies. From d9cd9612eca0e5d262a4bb4c0d08d1c1871d299c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 15 May 2024 12:05:11 +0200 Subject: [PATCH 165/172] docs(bot comparison): dependabot-core switched to MIT license (#29095) --- docs/usage/bot-comparison.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/bot-comparison.md b/docs/usage/bot-comparison.md index f969547c4c0456..fb49fdd802fc3b 100644 --- a/docs/usage/bot-comparison.md +++ b/docs/usage/bot-comparison.md @@ -18,7 +18,7 @@ If you see anything wrong on this page, please let us know by creating a [Discus | Compatibility score badges | Four badges showing: Age, Adoption, Passing, Confidence | One badge with overall compatibility score | | Built-in to GitHub | No, requires app or self-hosting | Yes | | Scheduling | By default, Renovate runs as often as it is allowed to, read [Renovate scheduling](./key-concepts/scheduling.md) to learn more | Yes: `daily`, `weekly`, `monthly` | -| License | [GNU Affero General Public License](https://github.com/renovatebot/renovate/blob/main/license) | [The Prosperity Public License 2.0.0](https://github.com/dependabot/dependabot-core/blob/main/LICENSE) | +| License | [GNU Affero General Public License](https://github.com/renovatebot/renovate/blob/main/license) | [MIT License](https://github.com/dependabot/dependabot-core/blob/main/LICENSE) | | Programming language of project | TypeScript | Ruby | | Project pulse | [`renovatebot/renovate` monthly pulse](https://github.com/renovatebot/renovate/pulse/monthly) | [`dependabot-core` monthly pulse](https://github.com/dependabot/dependabot-core/pulse/monthly) | | Contributor graph | [`renovatebot/renovate` contributor graph](https://github.com/renovatebot/renovate/graphs/contributors) | [`dependabot-core` contributor graph](https://github.com/dependabot/dependabot-core/graphs/contributors) | @@ -114,7 +114,7 @@ Dependabot has four options that apply at a language level: Renovate uses the [GNU Affero General Public License](https://github.com/renovatebot/renovate/blob/main/license). -Dependabot uses [The Prosperity Public License 2.0.0](https://github.com/dependabot/dependabot-core/blob/main/LICENSE). +Dependabot uses the [MIT License](https://github.com/dependabot/dependabot-core/blob/main/LICENSE). Neither license is relevant to the end user though if consuming through an App/SaaS. From 1254f6a66254c9202eb6724489f80d183f3f5586 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 10:08:41 +0000 Subject: [PATCH 166/172] fix(deps): update ghcr.io/containerbase/sidecar docker tag to v10.6.10 (#29096) 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 4c9a5a8df3f209..c32544eb171ef5 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -492,7 +492,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:10.6.9', + default: 'ghcr.io/containerbase/sidecar:10.6.10', globalOnly: true, }, { From 88fd2124ff0a410d3cbca1780954e499d1f94f7f Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 15 May 2024 13:43:49 +0200 Subject: [PATCH 167/172] docs(config): add note about GnuPG v2.4 usage (#29067) Co-authored-by: Rhys Arkins Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/self-hosted-configuration.md | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index b96039d95cb794..297be8da6eb406 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -929,6 +929,32 @@ uid Renovate Bot sub rsa4096 2021-09-10 [E] ``` + +!!! note + If you use GnuPG `v2.4` (or newer) to generate the key, then you must disable `AEAD` preferences. + This is needed to allow Renovate to decrypt the encrypted values. + +```bash +❯ gpg --edit-key renovate@whitesourcesoftware.com +gpg> showpref +[ultimate] (1). Renovate Bot + Cipher: AES256, AES192, AES, 3DES + AEAD: OCB, EAX + Digest: SHA512, SHA384, SHA256, SHA224, SHA1 + Compression: ZLIB, BZIP2, ZIP, Uncompressed + Features: MDC, AEAD, Keyserver no-modify + +gpg> setpref AES256 AES192 AES 3DES SHA512 SHA384 SHA256 SHA224 SHA1 ZLIB BZIP2 ZIP +Set preference list to: + Cipher: AES256, AES192, AES, 3DES + AEAD: + Digest: SHA512, SHA384, SHA256, SHA224, SHA1 + Compression: ZLIB, BZIP2, ZIP, Uncompressed + Features: MDC, Keyserver no-modify +Really update the preferences? (y/N) y +gpg> save +``` + - Copy the key ID from the output (`794B820F34B34A8DF32AADB20649CEXAMPLEONLY` in the above example) or run `gpg --list-secret-keys` if you forgot to take a copy From 99ba857374c455b929790a538623638f17957898 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 11:55:16 +0000 Subject: [PATCH 168/172] fix(deps): update ghcr.io/renovatebot/base-image docker tag to v2.11.2 (#29099) 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 5ead4cfee9166d..bf22a3c5affb11 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,12 +3,12 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.11.1@sha256:6ee5889634c1060cfe62f5ba743b3d459cdb04ab3b88d49f211eade84386fec5 AS slim-base +FROM ghcr.io/renovatebot/base-image:2.11.2@sha256:865603a61fea86becd8b373a8fcc2a3b5aa492958e1df52da3ff3402c8a5ca94 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.11.1-full@sha256:eb2e23f52fc7273be3105c0e9443052377bcd89723fbd65aeb16e96b37ed43e2 AS full-base +FROM ghcr.io/renovatebot/base-image:2.11.2-full@sha256:6356c034403a795159d390dccd9838e0c377748c17c5b638f808612dadd87e7e AS full-base # -------------------------------------- # build image From e03a5cf0cbd1d566f2b19901882243ecd6dd6cfb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 23:04:20 +0000 Subject: [PATCH 169/172] chore(deps): update containerbase/internal-tools action to v3.0.87 (#29108) 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 d7280a3c48506b..13b99e178a2e62 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -632,7 +632,7 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@9f7fee1b8ad23efad8e02d0e7afd2cae63532add # v3.0.86 + uses: containerbase/internal-tools@7e72a69bea17a290f4fb09e2844311d62147c75a # v3.0.87 with: command: docker-config From 2429a07eefbecb83408a9135bad600bee1af2544 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Thu, 16 May 2024 02:00:12 -0300 Subject: [PATCH 170/172] test(osgi): Use "codeBlock" for tests (#29110) --- lib/modules/manager/osgi/extract.spec.ts | 191 ++++++++++++++--------- 1 file changed, 113 insertions(+), 78 deletions(-) diff --git a/lib/modules/manager/osgi/extract.spec.ts b/lib/modules/manager/osgi/extract.spec.ts index 7250b59f2dc457..cb07c5dc771043 100644 --- a/lib/modules/manager/osgi/extract.spec.ts +++ b/lib/modules/manager/osgi/extract.spec.ts @@ -1,107 +1,142 @@ +import { codeBlock } from 'common-tags'; import { extractPackageFile } from '.'; -const noArtifacts = `{ - "configurations": { - "org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet":{ - "alias":"/server" +const noArtifacts = codeBlock` + { + "configurations": { + "org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet": { + "alias": "/server" + } } } -}`; -const unsupportedFeatureVersion = `{ - "feature-resource-version": "2.0", - "bundles":[ +`; + +const unsupportedFeatureVersion = codeBlock` + { + "feature-resource-version": "2.0", + "bundles": [ { - "id":"commons-codec:commons-codec:1.15", - "start-order":"5" + "id": "commons-codec:commons-codec:1.15", + "start-order": "5" } - ] -}`; -const featureWithBundlesAsObjects = `{ - "feature-resource-version": "1.0", - "bundles":[ + ] + } +`; + +const featureWithBundlesAsObjects = codeBlock` + { + "feature-resource-version": "1.0", + "bundles": [ { - "id":"commons-codec:commons-codec:1.15", - "start-order":"5" + "id": "commons-codec:commons-codec:1.15", + "start-order": "5" }, { - "id":"commons-collections:commons-collections:3.2.2", - "start-order":"15" + "id": "commons-collections:commons-collections:3.2.2", + "start-order": "15" } - ] -}`; -const featureWithBundlesAsStrings = `{ - "bundles": [ - "org.apache.felix/org.apache.felix.scr/2.1.26", - "org.apache.felix/org.apache.felix.log/1.2.4" - ] -}`; -const featureWithComment = `{ - // comments are permitted - "bundles": [ "org.apache.aries:org.apache.aries.util:1.1.3" ] -}`; -const artifactsExtension = `{ - "content-packages:ARTIFACTS|true": [ + ] + } +`; + +const featureWithBundlesAsStrings = codeBlock` + { + "bundles": [ + "org.apache.felix/org.apache.felix.scr/2.1.26", + "org.apache.felix/org.apache.felix.log/1.2.4" + ] + } +`; + +const featureWithComment = codeBlock` + { + // comments are permitted + "bundles": [ + "org.apache.aries:org.apache.aries.util:1.1.3" + ] + } +`; + +const artifactsExtension = codeBlock` + { + "content-packages:ARTIFACTS|true": [ "com.day.cq:core.wcm.components.all:zip:2.21.0" - ] -}`; -const doubleSlashNotComment = `{ - "bundles":[ - { - "id":"com.h2database:h2-mvstore:2.1.214", - "start-order":"15" + ] + } +`; + +const doubleSlashNotComment = codeBlock` + { + "bundles": [ + { + "id": "com.h2database:h2-mvstore:2.1.214", + "start-order": "15" }, { - "id":"org.mongodb:mongo-java-driver:3.12.11", - "start-order":"15" - } - ], - "configurations":{ - "org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService":{ - "db":"sling", - "mongouri":"mongodb://$[env:MONGODB_HOST;default=localhost]:$[env:MONGODB_PORT;type=Integer;default=27017]" - } + "id": "org.mongodb:mongo-java-driver:3.12.11", + "start-order": "15" + } + ], + "configurations": { + "org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService": { + "db": "sling", + "mongouri": "mongodb://$[env:MONGODB_HOST;default=localhost]:$[env:MONGODB_PORT;type=Integer;default=27017]" + } + } } -}`; -const frameworkArtifact = `{ - "execution-environment:JSON|false":{ - "framework":{ - "id":"org.apache.felix:org.apache.felix.framework:7.0.5" +`; + +const frameworkArtifact = codeBlock` + { + "execution-environment:JSON|false": { + "framework": { + "id": "org.apache.felix:org.apache.felix.framework:7.0.5" } + } } -}`; -const versionWithVariable = `{ - "bundles":[ +`; + +const versionWithVariable = codeBlock` + { + "bundles": [ { - "id":"com.fasterxml.jackson.core:jackson-annotations:$\{jackson.version}", - "start-order":"20" + "id": "com.fasterxml.jackson.core:jackson-annotations:\${jackson.version}", + "start-order": "20" } - ] -}`; -const malformedDefinitions = `{ - "bundles":[ + ] + } +`; + +const malformedDefinitions = codeBlock` + { + "bundles": [ { - "#": "missing the 'id' attribute", - "not-id":"commons-codec:commons-codec:1.15" + "#": "missing the 'id' attribute", + "not-id": "commons-codec:commons-codec:1.15" }, { - "#": "too few parts in the GAV definition", - "id":"commons-codec:1.15" + "#": "too few parts in the GAV definition", + "id": "commons-codec:1.15" }, { - "#": "valid definition, should be extracted", - "id":"commons-codec:commons-codec:1.15" + "#": "valid definition, should be extracted", + "id": "commons-codec:commons-codec:1.15" } - ] -}`; -const invalidFeatureVersion = `{ - "feature-resource-version": "unknown", - "bundles":[ + ] + } +`; + +const invalidFeatureVersion = codeBlock` + { + "feature-resource-version": "unknown", + "bundles": [ { - "id":"commons-codec:commons-codec:1.15", - "start-order":"5" + "id": "commons-codec:commons-codec:1.15", + "start-order": "5" } - ] -}`; + ] + } +`; describe('modules/manager/osgi/extract', () => { describe('extractPackageFile()', () => { From 20716b060942d90466fd65388712b1558de4b554 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Wed, 15 May 2024 22:04:46 -0700 Subject: [PATCH 171/172] feat(presets): add strum to monorepos (#29109) --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index 6e64979e7d2235..b9ec77f2e93898 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -475,6 +475,7 @@ const repoGroups = { storybook: 'https://github.com/storybookjs/storybook', 'storybook-react-native': 'https://github.com/storybookjs/react-native', strapi: 'https://github.com/strapi/strapi', + strum: 'https://github.com/Peternator7/strum', 'stryker-js': 'https://github.com/stryker-mutator/stryker-js', surveyjs: 'https://github.com/surveyjs/surveyjs', 'swashbuckle-aspnetcore': From 66de0465e944f55669d5822cea6a2d459a6e5ed6 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 16 May 2024 09:14:34 +0200 Subject: [PATCH 172/172] feat(presets/workarounds): add bitnami docker versioning (#29112) --- .../presets/internal/workarounds.spec.ts | 45 +++++++++++++++++++ lib/config/presets/internal/workarounds.ts | 18 ++++++++ 2 files changed, 63 insertions(+) create mode 100644 lib/config/presets/internal/workarounds.spec.ts diff --git a/lib/config/presets/internal/workarounds.spec.ts b/lib/config/presets/internal/workarounds.spec.ts new file mode 100644 index 00000000000000..f0d8440bbb9917 --- /dev/null +++ b/lib/config/presets/internal/workarounds.spec.ts @@ -0,0 +1,45 @@ +import { regEx } from '../../../util/regex'; +import { presets } from './workarounds'; + +describe('config/presets/internal/workarounds', () => { + describe('bitnamiDockerImageVersioning', () => { + const versioning = presets.bitnamiDockerImageVersioning.packageRules![0] + .versioning as string; + const versioningRe = regEx(versioning.substring(6)); + const matchCurrentValue = presets.bitnamiDockerImageVersioning + .packageRules![0].matchCurrentValue as string; + const matchCurrentValueRe = regEx( + matchCurrentValue.substring(1, matchCurrentValue.length - 1), + ); + + it.each` + input | expected + ${'latest'} | ${false} + ${'20'} | ${true} + ${'20-debian'} | ${false} + ${'20-debian-12'} | ${true} + ${'1.24'} | ${true} + ${'1.24-debian-12'} | ${true} + ${'1.24.0'} | ${true} + ${'1.24.0-debian-12'} | ${true} + ${'1.24.0-debian-12-r24'} | ${true} + `('versioning("$input") == "$expected"', ({ input, expected }) => { + expect(versioningRe.test(input)).toEqual(expected); + }); + + it.each` + input | expected + ${'latest'} | ${false} + ${'20'} | ${false} + ${'20-debian'} | ${false} + ${'20-debian-12'} | ${true} + ${'1.24'} | ${false} + ${'1.24-debian-12'} | ${true} + ${'1.24.0'} | ${false} + ${'1.24.0-debian-12'} | ${true} + ${'1.24.0-debian-12-r24'} | ${true} + `('matchCurrentValue("$input") == "$expected"', ({ input, expected }) => { + expect(matchCurrentValueRe.test(input)).toEqual(expected); + }); + }); +}); diff --git a/lib/config/presets/internal/workarounds.ts b/lib/config/presets/internal/workarounds.ts index a6c8fe3f0c1b5a..158515222e43b0 100644 --- a/lib/config/presets/internal/workarounds.ts +++ b/lib/config/presets/internal/workarounds.ts @@ -21,9 +21,27 @@ export const presets: Record = { 'workarounds:disableEclipseLifecycleMapping', 'workarounds:disableMavenParentRoot', 'workarounds:containerbase', + 'workarounds:bitnamiDockerImageVersioning', ], ignoreDeps: [], // Hack to improve onboarding PR description }, + bitnamiDockerImageVersioning: { + description: 'Use custom regex versioning for bitnami images', + packageRules: [ + { + matchCurrentValue: + '/^(?\\d+)(?:\\.(?\\d+)(?:\\.(?\\d+))?)?-(?.+)-(?\\d+)(?:-r(?\\d+))?$/', + matchDatasources: ['docker'], + matchPackagePrefixes: [ + 'bitnami/', + 'docker.io/bitnami/', + 'gcr.io/bitnami-containers/', + ], + versioning: + 'regex:^(?\\d+)(?:\\.(?\\d+)(?:\\.(?\\d+))?)?(:?-(?.+)-(?\\d+)(?:-r(?\\d+))?)?$', + }, + ], + }, containerbase: { description: 'Add some containerbase overrides.', packageRules: [