From 5538ffde1a26ed097843f448250ffcaae8ffc8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20B=C3=B6ing?= Date: Wed, 12 Apr 2023 12:47:12 +0200 Subject: [PATCH 001/122] docs: add GitHub PAT hint for fetchReleaseNotes (#21443) --- docs/usage/configuration-options.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index f44b2ad0db4ca7..1aaf81207512d9 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -912,6 +912,8 @@ Renovate can fetch release notes when they are hosted on one of these platforms: - GitHub (.com and Enterprise Server) - GitLab (.com and CE/EE) +If you are running on any platform except github.com, you need to [configure a Personal Access Token](https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-release-notes) to allow Renovate to fetch release notes from github.com. + !!! note Renovate can only show release notes from some platforms and some package managers. From b1424dd948bd269061e1cbdff824a19e9612123b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikolai=20R=C3=B8ed=20Kristiansen?= Date: Wed, 12 Apr 2023 13:49:23 +0200 Subject: [PATCH 002/122] feat(manager/helmfile): Detect kustomization.yaml (#21111) Co-authored-by: Michael Kriese --- .../helmfile/__fixtures__/go-template.yaml | 4 +- .../helmfile/__fixtures__/multidoc.yaml | 2 - .../__snapshots__/extract.spec.ts.snap | 6 +- lib/modules/manager/helmfile/extract.spec.ts | 67 +++++++++++-------- lib/modules/manager/helmfile/extract.ts | 60 ++++++++++++----- lib/modules/manager/helmfile/utils.ts | 15 ++++- 6 files changed, 100 insertions(+), 54 deletions(-) diff --git a/lib/modules/manager/helmfile/__fixtures__/go-template.yaml b/lib/modules/manager/helmfile/__fixtures__/go-template.yaml index d9179d9a170271..29553475bd178d 100644 --- a/lib/modules/manager/helmfile/__fixtures__/go-template.yaml +++ b/lib/modules/manager/helmfile/__fixtures__/go-template.yaml @@ -12,10 +12,10 @@ releases: chart: ./foo - name: "{{ requiredEnv \"RELEASE_NAME\" }}" namespace: default - chart: ../bar + chart: ../repo/bar - name: "{{ requiredEnv \"RELEASE_NAME\" }}" namespace: default - chart: /baz + chart: /tmp/github/some/repo/baz - name: {{ requiredEnv "RELEASE_NAME" }} namespace: default chart: ./foo diff --git a/lib/modules/manager/helmfile/__fixtures__/multidoc.yaml b/lib/modules/manager/helmfile/__fixtures__/multidoc.yaml index d42bd70e57cfd2..f194b9c30410a9 100644 --- a/lib/modules/manager/helmfile/__fixtures__/multidoc.yaml +++ b/lib/modules/manager/helmfile/__fixtures__/multidoc.yaml @@ -25,8 +25,6 @@ repositories: url: https://charts.bitnami.com/bitnami - name: prometheus-community url: https://prometheus-community.github.io/helm-charts -- name: incubator - url: https://charts.helm.sh/incubator/ templates: external-chart: &external-chart diff --git a/lib/modules/manager/helmfile/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/helmfile/__snapshots__/extract.spec.ts.snap index 49b560fae84aa4..a81b5d69302566 100644 --- a/lib/modules/manager/helmfile/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/helmfile/__snapshots__/extract.spec.ts.snap @@ -33,14 +33,14 @@ exports[`modules/manager/helmfile/extract extractPackageFile() parses multidoc y { "currentValue": "0.1.0", "depName": "raw", - "managerData": { - "needKustomize": true, - }, "registryUrls": [ "https://charts.helm.sh/incubator/", ], }, ], + "managerData": { + "needKustomize": true, + }, } `; diff --git a/lib/modules/manager/helmfile/extract.spec.ts b/lib/modules/manager/helmfile/extract.spec.ts index 68a7bbb8cd1b05..5405340710b201 100644 --- a/lib/modules/manager/helmfile/extract.spec.ts +++ b/lib/modules/manager/helmfile/extract.spec.ts @@ -1,20 +1,25 @@ import { Fixtures } from '../../../../test/fixtures'; +import { fs } from '../../../../test/util'; +import { GlobalConfig } from '../../../config/global'; import { extractPackageFile } from '.'; +jest.mock('../../../util/fs'); + describe('modules/manager/helmfile/extract', () => { describe('extractPackageFile()', () => { beforeEach(() => { + GlobalConfig.set({ localDir: '/tmp/github/some/repo' }); jest.resetAllMocks(); }); - it('returns null if no releases', () => { + it('returns null if no releases', async () => { const content = ` repositories: - name: kiwigrid url: https://kiwigrid.github.io `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -22,7 +27,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result).toBeNull(); }); - it('do not crash on invalid helmfile.yaml', () => { + it('do not crash on invalid helmfile.yaml', async () => { const content = ` repositories: - name: kiwigrid @@ -31,7 +36,7 @@ describe('modules/manager/helmfile/extract', () => { releases: [ `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -39,7 +44,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result).toBeNull(); }); - it('skip if repository details are not specified', () => { + it('skip if repository details are not specified', async () => { const content = ` repositories: - name: kiwigrid @@ -50,7 +55,7 @@ describe('modules/manager/helmfile/extract', () => { chart: experimental/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -60,7 +65,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result?.deps.every((dep) => dep.skipReason)).toBeTruthy(); }); - it('skip templetized release with invalid characters', () => { + it('skip templetized release with invalid characters', async () => { const content = ` repositories: - name: kiwigrid @@ -74,7 +79,7 @@ describe('modules/manager/helmfile/extract', () => { chart: stable/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -94,7 +99,7 @@ describe('modules/manager/helmfile/extract', () => { }); }); - it('skip local charts', () => { + it('skip local charts', async () => { const content = ` repositories: - name: kiwigrid @@ -105,7 +110,7 @@ describe('modules/manager/helmfile/extract', () => { chart: ./charts/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -115,7 +120,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result?.deps.every((dep) => dep.skipReason)).toBeTruthy(); }); - it('skip chart with unknown repository', () => { + it('skip chart with unknown repository', async () => { const content = ` repositories: - name: kiwigrid @@ -126,7 +131,7 @@ describe('modules/manager/helmfile/extract', () => { chart: example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -136,7 +141,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result?.deps.every((dep) => dep.skipReason)).toBeTruthy(); }); - it('skip chart with special character in the name', () => { + it('skip chart with special character in the name', async () => { const content = ` repositories: - name: kiwigrid @@ -150,7 +155,7 @@ describe('modules/manager/helmfile/extract', () => { chart: kiwigrid/example?example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -160,7 +165,7 @@ describe('modules/manager/helmfile/extract', () => { expect(result?.deps.every((dep) => dep.skipReason)).toBeTruthy(); }); - it('skip chart that does not have specified version', () => { + it('skip chart that does not have specified version', async () => { const content = ` repositories: - name: kiwigrid @@ -170,7 +175,7 @@ describe('modules/manager/helmfile/extract', () => { chart: stable/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -180,9 +185,9 @@ describe('modules/manager/helmfile/extract', () => { expect(result?.deps.every((dep) => dep.skipReason)).toBeTruthy(); }); - it('parses multidoc yaml', () => { + it('parses multidoc yaml', async () => { const fileName = 'helmfile.yaml'; - const result = extractPackageFile( + const result = await extractPackageFile( Fixtures.get('multidoc.yaml'), fileName, { @@ -199,12 +204,13 @@ describe('modules/manager/helmfile/extract', () => { { depName: 'kube-prometheus-stack', currentValue: '13.7' }, { depName: 'invalid', skipReason: 'invalid-name' }, { depName: 'external-dns', skipReason: 'invalid-version' }, - { depName: 'raw', managerData: { needKustomize: true } }, + { depName: 'raw' }, ], + managerData: { needKustomize: true }, }); }); - it('parses a chart with a go templating', () => { + it('parses a chart with a go templating', async () => { const content = ` repositories: - name: kiwigrid @@ -222,7 +228,7 @@ describe('modules/manager/helmfile/extract', () => { chart: stable/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -242,7 +248,7 @@ describe('modules/manager/helmfile/extract', () => { }); }); - it('parses a chart with empty strings for template values', () => { + it('parses a chart with empty strings for template values', async () => { const content = ` repositories: - name: kiwigrid @@ -259,7 +265,7 @@ describe('modules/manager/helmfile/extract', () => { chart: stable/example `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -281,7 +287,7 @@ describe('modules/manager/helmfile/extract', () => { }); }); - it('parses a chart with an oci repository and non-oci one', () => { + it('parses a chart with an oci repository and non-oci one', async () => { const content = ` repositories: - name: oci-repo @@ -299,7 +305,7 @@ describe('modules/manager/helmfile/extract', () => { version: 3.3.0 `; const fileName = 'helmfile.yaml'; - const result = extractPackageFile(content, fileName, { + const result = await extractPackageFile(content, fileName, { registryAliases: { stable: 'https://charts.helm.sh/stable', }, @@ -321,9 +327,10 @@ describe('modules/manager/helmfile/extract', () => { }); }); - it('parses and replaces templating strings', () => { + it('parses and replaces templating strings', async () => { const filename = 'helmfile.yaml'; - const result = extractPackageFile( + fs.localPathExists.mockReturnValue(Promise.resolve(true)); + const result = await extractPackageFile( Fixtures.get('go-template.yaml'), filename, { @@ -347,7 +354,10 @@ describe('modules/manager/helmfile/extract', () => { depName: '', skipReason: 'local-chart', }, - { depName: null, skipReason: 'local-chart' }, + { + depName: null, + skipReason: 'local-chart', + }, { depName: 'ingress-nginx', currentValue: '3.37.0', @@ -372,6 +382,7 @@ describe('modules/manager/helmfile/extract', () => { registryUrls: ['https://charts.helm.sh/stable'], }, ], + managerData: { needKustomize: true }, }); }); }); diff --git a/lib/modules/manager/helmfile/extract.ts b/lib/modules/manager/helmfile/extract.ts index 4f65fbd823c1be..347f8cf77f7cbd 100644 --- a/lib/modules/manager/helmfile/extract.ts +++ b/lib/modules/manager/helmfile/extract.ts @@ -10,7 +10,10 @@ import type { PackageFileContent, } from '../types'; import type { Doc } from './types'; -import { areKustomizationsUsed } from './utils'; +import { + kustomizationsKeysUsed, + localChartHasKustomizationsYaml, +} from './utils'; const isValidChartName = (name: string | undefined): boolean => !!name && !regEx(/[!@#$%^&*(),.?":{}/|<>A-Z]/).test(name); @@ -22,14 +25,22 @@ function extractYaml(content: string): string { .replace(regEx(/{{.+?}}/g), ''); } -export function extractPackageFile( +function isLocalPath(possiblePath: string): boolean { + return ['./', '../', '/'].some((localPrefix) => + possiblePath.startsWith(localPrefix) + ); +} + +export async function extractPackageFile( content: string, fileName: string, config: ExtractConfig -): PackageFileContent | null { - let deps: PackageDependency[] = []; +): Promise { + const deps: PackageDependency[] = []; let docs: Doc[]; const registryAliases: Record = {}; + // Record kustomization usage for all deps, since updating artifacts is run on the helmfile.yaml as a whole. + let needKustomize = false; try { docs = loadAll(extractYaml(content), null, { json: true }) as Doc[]; } catch (err) { @@ -48,23 +59,31 @@ export function extractPackageFile( } logger.debug({ registryAliases }, 'repositories discovered.'); - deps = doc.releases.map((dep) => { + for (const dep of doc.releases) { let depName = dep.chart; let repoName: string | null = null; if (!is.string(dep.chart)) { - return { + deps.push({ depName: dep.name, skipReason: 'invalid-name', - }; + }); + continue; } // If it starts with ./ ../ or / then it's a local path - if (['./', '../', '/'].some((val) => dep.chart.startsWith(val))) { - return { + if (isLocalPath(dep.chart)) { + if ( + kustomizationsKeysUsed(dep) || + (await localChartHasKustomizationsYaml(dep)) + ) { + needKustomize = true; + } + deps.push({ depName: dep.name, skipReason: 'local-chart', - }; + }); + continue; } if (is.number(dep.version)) { @@ -80,10 +99,11 @@ export function extractPackageFile( } if (!is.string(dep.version)) { - return { + deps.push({ depName, skipReason: 'invalid-version', - }; + }); + continue; } const res: PackageDependency = { @@ -93,8 +113,8 @@ export function extractPackageFile( .concat([config.registryAliases?.[repoName]] as string[]) .filter(is.string), }; - if (areKustomizationsUsed(dep)) { - res.managerData = { needKustomize: true }; + if (kustomizationsKeysUsed(dep)) { + needKustomize = true; } // in case of OCI repository, we need a PackageDependency with a DockerDatasource and a packageName const repository = doc.repositories?.find( @@ -116,9 +136,15 @@ export function extractPackageFile( res.skipReason = 'unknown-registry'; } - return res; - }); + deps.push(res); + } } - return deps.length ? { deps, datasource: HelmDatasource.id } : null; + return deps.length + ? { + deps, + datasource: HelmDatasource.id, + ...(needKustomize && { managerData: { needKustomize } }), + } + : null; } diff --git a/lib/modules/manager/helmfile/utils.ts b/lib/modules/manager/helmfile/utils.ts index 415925b9d10aa0..16abccda2a3997 100644 --- a/lib/modules/manager/helmfile/utils.ts +++ b/lib/modules/manager/helmfile/utils.ts @@ -1,10 +1,21 @@ +import upath from 'upath'; + +import { localPathExists } from '../../../util/fs'; import type { Release } from './types'; -/** Returns true if kustomize specific keys exist in a helmfile release */ -export function areKustomizationsUsed(release: Release): boolean { +/** Returns true if a helmfile release contains kustomize specific keys **/ +export function kustomizationsKeysUsed(release: Release): boolean { return ( release.strategicMergePatches !== undefined || release.jsonPatches !== undefined || release.transformers !== undefined ); } + +/** Returns true if a helmfile release uses a local chart with a kustomization.yaml file **/ +// eslint-disable-next-line require-await +export async function localChartHasKustomizationsYaml( + release: Release +): Promise { + return localPathExists(upath.join(release.chart, 'kustomization.yaml')); +} From c02cf6a34f078556ed5eff1a653333bc98782276 Mon Sep 17 00:00:00 2001 From: kechigon <43576135+kechigon@users.noreply.github.com> Date: Wed, 12 Apr 2023 20:53:08 +0900 Subject: [PATCH 003/122] fix(ansible-galaxy): space parsing (#20679) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- lib/modules/manager/ansible-galaxy/extract.spec.ts | 13 ++++++++++++- lib/modules/manager/ansible-galaxy/extract.ts | 2 +- lib/modules/manager/ansible-galaxy/util.ts | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/modules/manager/ansible-galaxy/extract.spec.ts b/lib/modules/manager/ansible-galaxy/extract.spec.ts index 5c2dbb36274d7e..5f6fab0c364099 100644 --- a/lib/modules/manager/ansible-galaxy/extract.spec.ts +++ b/lib/modules/manager/ansible-galaxy/extract.spec.ts @@ -1,3 +1,4 @@ +import { codeBlock } from 'common-tags'; import { Fixtures } from '../../../../test/fixtures'; import { getSliceEndNumber } from './extract'; import { extractPackageFile } from './'; @@ -27,6 +28,16 @@ describe('modules/manager/ansible-galaxy/extract', () => { expect(res?.deps).toHaveLength(2); }); + it('extracts dependencies from requirements.yml with a space at the end of line', () => { + const yamlFile = codeBlock`collections: + - name: https://github.com/lowlydba/lowlydba.sqlserver.git + type: git + version: 1.1.3`; + const res = extractPackageFile(yamlFile, 'requirements.yml'); + expect(res?.deps).toHaveLength(1); + expect(res?.deps[0].currentValue).toBe('1.1.3'); + }); + it('check if an empty file returns null', () => { const res = extractPackageFile('\n', 'requirements.yml'); expect(res).toBeNull(); @@ -75,7 +86,7 @@ describe('modules/manager/ansible-galaxy/extract', () => { it('choose second block', () => { const res = getSliceEndNumber(5, 10, 5); - expect(res).toBe(9); + expect(res).toBe(10); }); }); }); diff --git a/lib/modules/manager/ansible-galaxy/extract.ts b/lib/modules/manager/ansible-galaxy/extract.ts index 6ef90271a3cd2a..cf94569973d92e 100644 --- a/lib/modules/manager/ansible-galaxy/extract.ts +++ b/lib/modules/manager/ansible-galaxy/extract.ts @@ -13,7 +13,7 @@ export function getSliceEndNumber( if (start < 0 || start > numberOfLines - 1) { return -1; } - let nearestEnd = numberOfLines - 1; + let nearestEnd = numberOfLines; for (const blocksKey of blocks) { if (start < blocksKey && blocksKey < nearestEnd) { nearestEnd = blocksKey; diff --git a/lib/modules/manager/ansible-galaxy/util.ts b/lib/modules/manager/ansible-galaxy/util.ts index a6e127688ce43d..36bb71ad9e00a7 100644 --- a/lib/modules/manager/ansible-galaxy/util.ts +++ b/lib/modules/manager/ansible-galaxy/util.ts @@ -1,7 +1,7 @@ import { regEx } from '../../../util/regex'; export const newBlockRegEx = /^\s*-\s*((\w+):\s*(.*))$/; -export const blockLineRegEx = /^\s*((\w+):\s*(.*))$/; +export const blockLineRegEx = /^\s*((\w+):\s*(\S+))\s*$/; export const galaxyDepRegex = /[\w-]+\.[\w-]+/; export const dependencyRegex = /^dependencies:/; export const galaxyRegEx = regEx( From 1767f7608b10b3100c7dd5f0929ba4eb4ce18a2f Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 12 Apr 2023 14:30:33 +0200 Subject: [PATCH 004/122] fix: Revert "refactor: safely parse composer files" (#21448) --- lib/modules/manager/composer/artifacts.ts | 35 +++--------- lib/modules/manager/composer/extract.ts | 10 ++-- lib/modules/manager/composer/schema.ts | 57 ------------------- lib/modules/manager/composer/types.ts | 45 +++++++++++++++ lib/modules/manager/composer/update-locked.ts | 2 +- lib/modules/manager/composer/utils.ts | 2 +- 6 files changed, 59 insertions(+), 92 deletions(-) delete mode 100644 lib/modules/manager/composer/schema.ts diff --git a/lib/modules/manager/composer/artifacts.ts b/lib/modules/manager/composer/artifacts.ts index 290a212073a523..0eae7fefdefad1 100644 --- a/lib/modules/manager/composer/artifacts.ts +++ b/lib/modules/manager/composer/artifacts.ts @@ -21,8 +21,7 @@ import { regEx } from '../../../util/regex'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { PackagistDatasource } from '../../datasource/packagist'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; -import { ComposerConfig, ComposerLock } from './schema'; -import type { AuthJson } from './types'; +import type { AuthJson, ComposerLock } from './types'; import { extractConstraints, findGithubToken, @@ -105,32 +104,12 @@ export async function updateArtifacts({ try { await writeLocalFile(packageFileName, newPackageFileContent); - const composerLockResult = ComposerLock.safeParse( - JSON.parse(existingLockFileContent) - ); - // istanbul ignore if - if (!composerLockResult.success) { - logger.warn( - { error: composerLockResult.error }, - 'Unable to parse composer.lock' - ); - return null; - } - - const newPackageFileResult = ComposerConfig.safeParse( - JSON.parse(newPackageFileContent) - ); - // istanbul ignore if - if (!newPackageFileResult.success) { - logger.warn( - { error: newPackageFileResult.error }, - 'Unable to parse composer.json' - ); - return null; - } - + const existingLockFile: ComposerLock = JSON.parse(existingLockFileContent); const constraints = { - ...extractConstraints(newPackageFileResult.data, composerLockResult.data), + ...extractConstraints( + JSON.parse(newPackageFileContent), + existingLockFile + ), ...config.constraints, }; @@ -157,7 +136,7 @@ export async function updateArtifacts({ const commands: string[] = []; // Determine whether install is required before update - if (requireComposerDependencyInstallation(composerLockResult.data)) { + if (requireComposerDependencyInstallation(existingLockFile)) { const preCmd = 'composer'; const preArgs = 'install' + getComposerArguments(config, composerToolConstraint); diff --git a/lib/modules/manager/composer/extract.ts b/lib/modules/manager/composer/extract.ts index c18c264d84ba10..ae40abec469249 100644 --- a/lib/modules/manager/composer/extract.ts +++ b/lib/modules/manager/composer/extract.ts @@ -10,10 +10,10 @@ import type { PackageDependency, PackageFileContent } from '../types'; import type { ComposerConfig, ComposerLock, + ComposerManagerData, ComposerRepositories, - ComposerRepository, -} from './schema'; -import type { ComposerManagerData } from './types'; + Repo, +} from './types'; /** * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies @@ -34,7 +34,7 @@ function transformRegUrl(url: string): string { */ function parseRepositories( repoJson: ComposerRepositories, - repositories: Record, + repositories: Record, registryUrls: string[] ): void { try { @@ -91,7 +91,7 @@ export async function extractPackageFile( logger.debug(`Invalid JSON in ${fileName}`); return null; } - const repositories: Record = {}; + const repositories: Record = {}; const registryUrls: string[] = []; const res: PackageFileContent = { deps: [] }; diff --git a/lib/modules/manager/composer/schema.ts b/lib/modules/manager/composer/schema.ts deleted file mode 100644 index 35cffa60bc4b42..00000000000000 --- a/lib/modules/manager/composer/schema.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { z } from 'zod'; - -const ComposerLockPackage = z.object({ - name: z.string(), - version: z.string(), -}); - -export const ComposerLock = z.object({ - 'plugin-api-version': z.string().optional(), - packages: z.array(ComposerLockPackage).optional(), - 'packages-dev': z.array(ComposerLockPackage).optional(), -}); -export type ComposerLock = z.infer; - -const ComposerRepository = z.object({ - name: z.string().optional(), - type: z.union([ - z.literal('composer'), - z.literal('git'), - z.literal('package'), - z.literal('path'), - z.literal('vcs'), - ]), - packagist: z.boolean().optional(), - 'packagist.org': z.boolean().optional(), - url: z.string().url(), -}); -export type ComposerRepository = z.infer; - -const ComposerRepositories = z.union([ - z.record(z.string(), z.union([ComposerRepository, z.boolean()])), - z.array(ComposerRepository), -]); -export type ComposerRepositories = z.infer; - -export const ComposerConfig = z.object({ - type: z.string().optional(), - /** - * Setting a fixed PHP version (e.g. {"php": "7.0.3"}) will let you fake the - * platform version so that you can emulate a production env or define your - * target platform in the config. - * See https://getcomposer.org/doc/06-config.md#platform - */ - config: z - .object({ platform: z.object({ php: z.string().optional() }).optional() }) - .optional(), - /** - * A repositories field can be an array of Repo objects or an object of repoName: Repo - * Also it can be a boolean (usually false) to disable packagist. - * (Yes this can be confusing, as it is also not properly documented in the composer docs) - * See https://getcomposer.org/doc/05-repositories.md#disabling-packagist-org - */ - repositories: ComposerRepositories.optional(), - require: z.record(z.string(), z.string()).optional(), - 'require-dev': z.record(z.string(), z.string()).optional(), -}); -export type ComposerConfig = z.infer; diff --git a/lib/modules/manager/composer/types.ts b/lib/modules/manager/composer/types.ts index 7261568b101a0d..c46f294d0cf861 100644 --- a/lib/modules/manager/composer/types.ts +++ b/lib/modules/manager/composer/types.ts @@ -1,4 +1,49 @@ // istanbul ignore file: types only +export interface Repo { + name?: string; + type: 'composer' | 'git' | 'package' | 'path' | 'vcs'; + packagist?: boolean; + 'packagist.org'?: boolean; + url: string; +} +export type ComposerRepositories = Record | Repo[]; + +export interface ComposerConfig { + type?: string; + /** + * Setting a fixed PHP version (e.g. {"php": "7.0.3"}) will let you fake the + * platform version so that you can emulate a production env or define your + * target platform in the config. + * See https://getcomposer.org/doc/06-config.md#platform + */ + config?: { + platform?: { + php?: string; + }; + }; + /** + * A repositories field can be an array of Repo objects or an object of repoName: Repo + * Also it can be a boolean (usually false) to disable packagist. + * (Yes this can be confusing, as it is also not properly documented in the composer docs) + * See https://getcomposer.org/doc/05-repositories.md#disabling-packagist-org + */ + repositories?: ComposerRepositories; + + require?: Record; + 'require-dev'?: Record; +} + +export interface ComposerLockPackage { + name: string; + version: string; +} + +export interface ComposerLock { + 'plugin-api-version'?: string; + packages?: ComposerLockPackage[]; + 'packages-dev'?: ComposerLockPackage[]; +} + export interface ComposerManagerData { composerJsonType?: string; } diff --git a/lib/modules/manager/composer/update-locked.ts b/lib/modules/manager/composer/update-locked.ts index 76897b49e793b9..fcfaa89d2f11c9 100644 --- a/lib/modules/manager/composer/update-locked.ts +++ b/lib/modules/manager/composer/update-locked.ts @@ -1,7 +1,7 @@ import { logger } from '../../../logger'; import { api as composer } from '../../versioning/composer'; import type { UpdateLockedConfig, UpdateLockedResult } from '../types'; -import type { ComposerLock } from './schema'; +import type { ComposerLock } from './types'; export function updateLockedDependency( config: UpdateLockedConfig diff --git a/lib/modules/manager/composer/utils.ts b/lib/modules/manager/composer/utils.ts index 7835a2a84e4d3a..330f50bc713892 100644 --- a/lib/modules/manager/composer/utils.ts +++ b/lib/modules/manager/composer/utils.ts @@ -7,7 +7,7 @@ import type { ToolConstraint } from '../../../util/exec/types'; import { HostRuleSearch, find as findHostRule } from '../../../util/host-rules'; import { api, id as composerVersioningId } from '../../versioning/composer'; import type { UpdateArtifactsConfig } from '../types'; -import type { ComposerConfig, ComposerLock } from './schema'; +import type { ComposerConfig, ComposerLock } from './types'; export { composerVersioningId }; From f7d73168682e45451655f42c5cccd337633d4708 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 12 Apr 2023 16:03:25 +0200 Subject: [PATCH 005/122] build: export pipenv constraints --- lib/modules/manager/pipenv/artifacts.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/pipenv/artifacts.ts b/lib/modules/manager/pipenv/artifacts.ts index e6959984718669..50692ec341312e 100644 --- a/lib/modules/manager/pipenv/artifacts.ts +++ b/lib/modules/manager/pipenv/artifacts.ts @@ -17,7 +17,7 @@ import type { } from '../types'; import { PipfileLockSchema } from './schema'; -function getPythonConstraint( +export function getPythonConstraint( existingLockFileContent: string, config: UpdateArtifactsConfig ): string | undefined { @@ -51,7 +51,7 @@ function getPythonConstraint( return undefined; } -function getPipenvConstraint( +export function getPipenvConstraint( existingLockFileContent: string, config: UpdateArtifactsConfig ): string { From efc366ec578cb9d710215fe35b5c7f5ae94297f3 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Wed, 12 Apr 2023 19:13:59 +0530 Subject: [PATCH 006/122] feat(datasource): rename `node` -> `node-version` (#21149) --- .../custom/datasource-migration.spec.ts | 11 +++ .../migrations/custom/datasource-migration.ts | 2 + .../match-datasources-migration.spec.ts | 9 +- .../custom/match-datasources-migration.ts | 2 + .../presets/internal/regex-managers.spec.ts | 2 +- lib/modules/datasource/api.ts | 4 +- .../__fixtures__/index.json | 0 .../__snapshots__/index.spec.ts.snap | 2 +- .../{node => node-version}/common.ts | 2 +- .../{node => node-version}/index.spec.ts | 2 +- .../{node => node-version}/index.ts | 2 +- .../{node => node-version}/readme.md | 0 .../{node => node-version}/types.ts | 0 lib/modules/manager/asdf/extract.spec.ts | 12 +-- lib/modules/manager/asdf/index.ts | 4 +- .../manager/asdf/upgradeable-tooling.ts | 4 +- lib/modules/manager/regex/index.spec.ts | 89 +++++++++++++------ lib/util/exec/containerbase.ts | 2 +- 18 files changed, 102 insertions(+), 47 deletions(-) rename lib/modules/datasource/{node => node-version}/__fixtures__/index.json (100%) rename lib/modules/datasource/{node => node-version}/__snapshots__/index.spec.ts.snap (98%) rename lib/modules/datasource/{node => node-version}/common.ts (59%) rename lib/modules/datasource/{node => node-version}/index.spec.ts (96%) rename lib/modules/datasource/{node => node-version}/index.ts (96%) rename lib/modules/datasource/{node => node-version}/readme.md (100%) rename lib/modules/datasource/{node => node-version}/types.ts (100%) diff --git a/lib/config/migrations/custom/datasource-migration.spec.ts b/lib/config/migrations/custom/datasource-migration.spec.ts index 10eda1e06a7109..53540fddf463cc 100644 --- a/lib/config/migrations/custom/datasource-migration.spec.ts +++ b/lib/config/migrations/custom/datasource-migration.spec.ts @@ -22,4 +22,15 @@ describe('config/migrations/custom/datasource-migration', () => { } ); }); + + it('should migrate node', () => { + expect(DatasourceMigration).toMigrate( + { + datasource: 'node', + }, + { + datasource: 'node-version', + } + ); + }); }); diff --git a/lib/config/migrations/custom/datasource-migration.ts b/lib/config/migrations/custom/datasource-migration.ts index d9158db39c2dc4..25c114f1147f41 100644 --- a/lib/config/migrations/custom/datasource-migration.ts +++ b/lib/config/migrations/custom/datasource-migration.ts @@ -18,6 +18,8 @@ export function migrateDatasource(value: string): string { return 'java-version'; case 'dotnet': return 'dotnet-version'; + case 'node': + return 'node-version'; } return value; } diff --git a/lib/config/migrations/custom/match-datasources-migration.spec.ts b/lib/config/migrations/custom/match-datasources-migration.spec.ts index 1a8c8ac579d3c3..8efaf46950d39b 100644 --- a/lib/config/migrations/custom/match-datasources-migration.spec.ts +++ b/lib/config/migrations/custom/match-datasources-migration.spec.ts @@ -4,10 +4,15 @@ describe('config/migrations/custom/match-datasources-migration', () => { it('should migrate properly', () => { expect(MatchDatasourcesMigration).toMigrate( { - matchDatasources: ['adoptium-java', 'dotnet', 'npm'], + matchDatasources: ['adoptium-java', 'dotnet', 'npm', 'node'], }, { - matchDatasources: ['java-version', 'dotnet-version', 'npm'], + matchDatasources: [ + 'java-version', + 'dotnet-version', + 'npm', + 'node-version', + ], } ); }); diff --git a/lib/config/migrations/custom/match-datasources-migration.ts b/lib/config/migrations/custom/match-datasources-migration.ts index 5d87e57d453f19..9beb79fc3f067b 100644 --- a/lib/config/migrations/custom/match-datasources-migration.ts +++ b/lib/config/migrations/custom/match-datasources-migration.ts @@ -12,6 +12,8 @@ export class MatchDatasourcesMigration extends AbstractMigration { return 'java-version'; case 'dotnet': return 'dotnet-version'; + case 'node': + return 'node-version'; default: return datasource; } diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts index d963a5e70627d4..91bdd85ba6ecab 100644 --- a/lib/config/presets/internal/regex-managers.spec.ts +++ b/lib/config/presets/internal/regex-managers.spec.ts @@ -110,7 +110,7 @@ describe('config/presets/internal/regex-managers', () => { expect(res?.deps).toMatchObject([ { currentValue: '18.13.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', replaceString: '# renovate: datasource=node depName=node versioning=node\n NODE_VERSION: 18.13.0\n', diff --git a/lib/modules/datasource/api.ts b/lib/modules/datasource/api.ts index 48ffd8c4c97cf0..3048b2eb4e5a8b 100644 --- a/lib/modules/datasource/api.ts +++ b/lib/modules/datasource/api.ts @@ -37,7 +37,7 @@ import { JavaVersionDatasource } from './java-version'; import { JenkinsPluginsDatasource } from './jenkins-plugins'; import { KubernetesApiDatasource } from './kubernetes-api'; import { MavenDatasource } from './maven'; -import { NodeDatasource } from './node'; +import { NodeVersionDatasource } from './node-version'; import { NpmDatasource } from './npm'; import { NugetDatasource } from './nuget'; import { OrbDatasource } from './orb'; @@ -99,7 +99,7 @@ api.set(JavaVersionDatasource.id, new JavaVersionDatasource()); api.set(JenkinsPluginsDatasource.id, new JenkinsPluginsDatasource()); api.set(KubernetesApiDatasource.id, new KubernetesApiDatasource()); api.set(MavenDatasource.id, new MavenDatasource()); -api.set(NodeDatasource.id, new NodeDatasource()); +api.set(NodeVersionDatasource.id, new NodeVersionDatasource()); api.set(NpmDatasource.id, new NpmDatasource()); api.set(NugetDatasource.id, new NugetDatasource()); api.set(OrbDatasource.id, new OrbDatasource()); diff --git a/lib/modules/datasource/node/__fixtures__/index.json b/lib/modules/datasource/node-version/__fixtures__/index.json similarity index 100% rename from lib/modules/datasource/node/__fixtures__/index.json rename to lib/modules/datasource/node-version/__fixtures__/index.json diff --git a/lib/modules/datasource/node/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/node-version/__snapshots__/index.spec.ts.snap similarity index 98% rename from lib/modules/datasource/node/__snapshots__/index.spec.ts.snap rename to lib/modules/datasource/node-version/__snapshots__/index.spec.ts.snap index 19f0672668480d..e5eefdf5302186 100644 --- a/lib/modules/datasource/node/__snapshots__/index.spec.ts.snap +++ b/lib/modules/datasource/node-version/__snapshots__/index.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`modules/datasource/node/index getReleases processes real data 1`] = ` +exports[`modules/datasource/node-version/index getReleases processes real data 1`] = ` { "homepage": "https://nodejs.org", "registryUrl": "https://nodejs.org/dist", diff --git a/lib/modules/datasource/node/common.ts b/lib/modules/datasource/node-version/common.ts similarity index 59% rename from lib/modules/datasource/node/common.ts rename to lib/modules/datasource/node-version/common.ts index 9a88f37c5cb889..ce6b58c7b579c2 100644 --- a/lib/modules/datasource/node/common.ts +++ b/lib/modules/datasource/node-version/common.ts @@ -1,3 +1,3 @@ export const defaultRegistryUrl = 'https://nodejs.org/dist'; -export const datasource = 'node'; +export const datasource = 'node-version'; diff --git a/lib/modules/datasource/node/index.spec.ts b/lib/modules/datasource/node-version/index.spec.ts similarity index 96% rename from lib/modules/datasource/node/index.spec.ts rename to lib/modules/datasource/node-version/index.spec.ts index 1a68ce8a7506e4..ac1934ce3317c7 100644 --- a/lib/modules/datasource/node/index.spec.ts +++ b/lib/modules/datasource/node-version/index.spec.ts @@ -4,7 +4,7 @@ import * as httpMock from '../../../../test/http-mock'; import { EXTERNAL_HOST_ERROR } from '../../../constants/error-messages'; import { datasource, defaultRegistryUrl } from './common'; -describe('modules/datasource/node/index', () => { +describe('modules/datasource/node-version/index', () => { describe('getReleases', () => { it('throws for 500', async () => { httpMock.scope(defaultRegistryUrl).get('/index.json').reply(500); diff --git a/lib/modules/datasource/node/index.ts b/lib/modules/datasource/node-version/index.ts similarity index 96% rename from lib/modules/datasource/node/index.ts rename to lib/modules/datasource/node-version/index.ts index c3585953904bae..34f0c1bbbb2775 100644 --- a/lib/modules/datasource/node/index.ts +++ b/lib/modules/datasource/node-version/index.ts @@ -6,7 +6,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; import { datasource, defaultRegistryUrl } from './common'; import type { NodeRelease } from './types'; -export class NodeDatasource extends Datasource { +export class NodeVersionDatasource extends Datasource { static readonly id = datasource; constructor() { diff --git a/lib/modules/datasource/node/readme.md b/lib/modules/datasource/node-version/readme.md similarity index 100% rename from lib/modules/datasource/node/readme.md rename to lib/modules/datasource/node-version/readme.md diff --git a/lib/modules/datasource/node/types.ts b/lib/modules/datasource/node-version/types.ts similarity index 100% rename from lib/modules/datasource/node/types.ts rename to lib/modules/datasource/node-version/types.ts diff --git a/lib/modules/manager/asdf/extract.spec.ts b/lib/modules/manager/asdf/extract.spec.ts index dd323150f2b1fd..fa2b01f241c308 100644 --- a/lib/modules/manager/asdf/extract.spec.ts +++ b/lib/modules/manager/asdf/extract.spec.ts @@ -9,7 +9,7 @@ describe('modules/manager/asdf/extract', () => { deps: [ { currentValue: '16.16.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', }, ], @@ -34,7 +34,7 @@ describe('modules/manager/asdf/extract', () => { deps: [ { currentValue: '16.16.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', }, ], @@ -287,7 +287,7 @@ dummy 1.2.3 }, { currentValue: '18.12.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', }, { @@ -489,7 +489,7 @@ dummy 1.2.3 deps: [ { currentValue: data.expect, - datasource: 'node', + datasource: 'node-version', depName: 'node', }, ], @@ -518,7 +518,7 @@ dummy 1.2.3 deps: [ { currentValue: '16.16.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', }, ], @@ -531,7 +531,7 @@ dummy 1.2.3 deps: [ { currentValue: '16.16.0', - datasource: 'node', + datasource: 'node-version', depName: 'node', skipReason: 'ignored', }, diff --git a/lib/modules/manager/asdf/index.ts b/lib/modules/manager/asdf/index.ts index 134ac7e3663a5d..081133ee265f3b 100644 --- a/lib/modules/manager/asdf/index.ts +++ b/lib/modules/manager/asdf/index.ts @@ -5,7 +5,7 @@ import { GithubReleasesDatasource } from '../../datasource/github-releases'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import { HexpmBobDatasource } from '../../datasource/hexpm-bob'; import { JavaVersionDatasource } from '../../datasource/java-version'; -import { NodeDatasource } from '../../datasource/node'; +import { NodeVersionDatasource } from '../../datasource/node-version'; import { NpmDatasource } from '../../datasource/npm'; import { RubyVersionDatasource } from '../../datasource/ruby-version'; @@ -23,7 +23,7 @@ export const supportedDatasources = [ GithubReleasesDatasource.id, GithubTagsDatasource.id, HexpmBobDatasource.id, - NodeDatasource.id, + NodeVersionDatasource.id, NpmDatasource.id, RubyVersionDatasource.id, DartVersionDatasource.id, diff --git a/lib/modules/manager/asdf/upgradeable-tooling.ts b/lib/modules/manager/asdf/upgradeable-tooling.ts index 0c75a80c0a118e..c3557c23abc88f 100644 --- a/lib/modules/manager/asdf/upgradeable-tooling.ts +++ b/lib/modules/manager/asdf/upgradeable-tooling.ts @@ -5,7 +5,7 @@ import { GithubReleasesDatasource } from '../../datasource/github-releases'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import { HexpmBobDatasource } from '../../datasource/hexpm-bob'; import { JavaVersionDatasource } from '../../datasource/java-version'; -import { NodeDatasource } from '../../datasource/node'; +import { NodeVersionDatasource } from '../../datasource/node-version'; import { NpmDatasource } from '../../datasource/npm'; import { RubyVersionDatasource } from '../../datasource/ruby-version'; import * as regexVersioning from '../../versioning/regex'; @@ -266,7 +266,7 @@ export const upgradeableTooling: Record = { asdfPluginUrl: 'https://github.com/asdf-vm/asdf-nodejs', config: { depName: 'node', - datasource: NodeDatasource.id, + datasource: NodeVersionDatasource.id, }, }, ocaml: { diff --git a/lib/modules/manager/regex/index.spec.ts b/lib/modules/manager/regex/index.spec.ts index 886c7ed2ffb1af..c1adbbb93347b7 100644 --- a/lib/modules/manager/regex/index.spec.ts +++ b/lib/modules/manager/regex/index.spec.ts @@ -559,33 +559,68 @@ describe('modules/manager/regex/index', () => { }); }); - it('migrates', async () => { - const config: CustomExtractConfig = { - matchStrings: [ - '# renovate: datasource=(?[a-z-]+?)(?: (?:packageName|lookupName)=(?.+?))?(?: versioning=(?[a-z-]+?))?\\sRUN install-[a-z]+? (?[a-z-]+?) (?.+?)(?:\\s|$)', - ], - versioningTemplate: - '{{#if versioning}}{{versioning}}{{else}}semver{{/if}}', - }; - const res = await extractPackageFile( + it.each([ + [ + 'dotnet', codeBlock` - # renovate: datasource=dotnet packageName=dotnet-runtime - RUN install-tool dotnet 6.0.13 - `, + # renovate: datasource=dotnet packageName=dotnet-runtime + RUN install-tool dotnet 6.0.13 + `, 'Dockerfile', - config - ); - expect(res).toMatchObject({ - deps: [ - { - depName: 'dotnet', - packageName: 'dotnet-runtime', - currentValue: '6.0.13', - datasource: 'dotnet-version', - replaceString: - '# renovate: datasource=dotnet packageName=dotnet-runtime\nRUN install-tool dotnet 6.0.13', - }, - ], - }); - }); + 'dotnet-version', + 'dotnet-runtime', + 'dotnet', + ], + [ + 'adoptium-java', + codeBlock` + # renovate: datasource=adoptium-java packageName=java + RUN install-tool java 6.0.13 + `, + 'Dockerfile', + 'java-version', + 'java', + 'java', + ], + [ + 'node', + codeBlock` + # renovate: datasource=node packageName=node + RUN install-tool node 6.0.13 + `, + 'Dockerfile', + 'node-version', + 'node', + 'node', + ], + ])( + 'migrates %s', + async ( + _oldDatasource, + content, + packageFile, + newDatasource, + packageName, + depName + ) => { + const config: CustomExtractConfig = { + matchStrings: [ + '# renovate: datasource=(?[a-z-]+?)(?: (?:packageName|lookupName)=(?.+?))?(?: versioning=(?[a-z-]+?))?\\sRUN install-[a-z]+? (?[a-z-]+?) (?.+?)(?:\\s|$)', + ], + versioningTemplate: + '{{#if versioning}}{{versioning}}{{else}}semver{{/if}}', + }; + const res = await extractPackageFile(content, packageFile, config); + expect(res).toMatchObject({ + deps: [ + { + depName, + packageName, + currentValue: '6.0.13', + datasource: newDatasource, + }, + ], + }); + } + ); }); diff --git a/lib/util/exec/containerbase.ts b/lib/util/exec/containerbase.ts index ed55be68f8879c..d0966006b5feea 100644 --- a/lib/util/exec/containerbase.ts +++ b/lib/util/exec/containerbase.ts @@ -97,7 +97,7 @@ const allToolConfig: Record = { versioning: semverVersioningId, }, node: { - datasource: 'node', + datasource: 'node-version', packageName: 'node', versioning: nodeVersioningId, }, From c79b2090325957add13c4cf2ed805f9dab1adfb0 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 12 Apr 2023 17:12:15 +0200 Subject: [PATCH 007/122] refactor(platform): optional `getVulnerabilityAlerts` (#21449) --- lib/modules/platform/azure/index.spec.ts | 7 ------- lib/modules/platform/azure/index.ts | 6 +----- lib/modules/platform/bitbucket-server/index.spec.ts | 7 ------- lib/modules/platform/bitbucket-server/index.ts | 7 +------ lib/modules/platform/bitbucket/index.spec.ts | 6 ------ lib/modules/platform/bitbucket/index.ts | 6 +----- lib/modules/platform/codecommit/index.ts | 7 +------ lib/modules/platform/gitea/index.spec.ts | 6 ------ lib/modules/platform/gitea/index.ts | 7 +------ lib/modules/platform/gitlab/index.spec.ts | 7 ------- lib/modules/platform/gitlab/index.ts | 6 +----- lib/modules/platform/types.ts | 2 +- lib/workers/repository/init/vulnerability.spec.ts | 1 + lib/workers/repository/init/vulnerability.ts | 4 ++-- 14 files changed, 10 insertions(+), 69 deletions(-) diff --git a/lib/modules/platform/azure/index.spec.ts b/lib/modules/platform/azure/index.spec.ts index 31b58e79dc9945..511bf8210e4f71 100644 --- a/lib/modules/platform/azure/index.spec.ts +++ b/lib/modules/platform/azure/index.spec.ts @@ -1349,13 +1349,6 @@ describe('modules/platform/azure/index', () => { }); }); - describe('getVulnerabilityAlerts()', () => { - it('returns empty', async () => { - const res = await azure.getVulnerabilityAlerts(); - expect(res).toHaveLength(0); - }); - }); - describe('deleteLabel()', () => { it('Should delete a label', async () => { await initRepo({ repository: 'some/repo' }); diff --git a/lib/modules/platform/azure/index.ts b/lib/modules/platform/azure/index.ts index cd47dbadceca81..73b1a4e23366b2 100644 --- a/lib/modules/platform/azure/index.ts +++ b/lib/modules/platform/azure/index.ts @@ -16,7 +16,7 @@ import { REPOSITORY_NOT_FOUND, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus } from '../../../types'; import * as git from '../../../util/git'; import * as hostRules from '../../../util/host-rules'; import { regEx } from '../../../util/regex'; @@ -909,7 +909,3 @@ export async function deleteLabel( const azureApiGit = await azureApi.gitApi(); await azureApiGit.deletePullRequestLabels(config.repoId, prNumber, label); } - -export function getVulnerabilityAlerts(): Promise { - return Promise.resolve([]); -} diff --git a/lib/modules/platform/bitbucket-server/index.spec.ts b/lib/modules/platform/bitbucket-server/index.spec.ts index 6c8965a2ab87dd..763d837ecf1220 100644 --- a/lib/modules/platform/bitbucket-server/index.spec.ts +++ b/lib/modules/platform/bitbucket-server/index.spec.ts @@ -1729,13 +1729,6 @@ Followed by some information. }); }); - describe('getVulnerabilityAlerts()', () => { - it('returns empty array', async () => { - expect.assertions(1); - expect(await bitbucket.getVulnerabilityAlerts()).toEqual([]); - }); - }); - describe('getBranchStatus()', () => { it('should be success', async () => { const scope = await initRepo(); diff --git a/lib/modules/platform/bitbucket-server/index.ts b/lib/modules/platform/bitbucket-server/index.ts index f99b960f5b2aa9..b8258e58043656 100644 --- a/lib/modules/platform/bitbucket-server/index.ts +++ b/lib/modules/platform/bitbucket-server/index.ts @@ -7,7 +7,7 @@ import { REPOSITORY_NOT_FOUND, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus } from '../../../types'; import type { FileData } from '../../../types/platform/bitbucket-server'; import * as git from '../../../util/git'; import { deleteBranch } from '../../../util/git'; @@ -979,8 +979,3 @@ export function massageMarkdown(input: string): string { .replace(regEx(`\n---\n\n.*?.*?(\n|$)`), '') .replace(regEx('', 'g'), ''); } - -export function getVulnerabilityAlerts(): Promise { - logger.debug(`getVulnerabilityAlerts()`); - return Promise.resolve([]); -} diff --git a/lib/modules/platform/bitbucket/index.spec.ts b/lib/modules/platform/bitbucket/index.spec.ts index 03337462d67624..70a93df243c374 100644 --- a/lib/modules/platform/bitbucket/index.spec.ts +++ b/lib/modules/platform/bitbucket/index.spec.ts @@ -1456,12 +1456,6 @@ describe('modules/platform/bitbucket/index', () => { }); }); - describe('getVulnerabilityAlerts()', () => { - it('returns empty array', async () => { - expect(await bitbucket.getVulnerabilityAlerts()).toEqual([]); - }); - }); - describe('getJsonFile()', () => { it('returns file content', async () => { const data = { foo: 'bar' }; diff --git a/lib/modules/platform/bitbucket/index.ts b/lib/modules/platform/bitbucket/index.ts index 278d2ed0d2f581..b76e66576851c6 100644 --- a/lib/modules/platform/bitbucket/index.ts +++ b/lib/modules/platform/bitbucket/index.ts @@ -3,7 +3,7 @@ import is from '@sindresorhus/is'; import JSON5 from 'json5'; import { REPOSITORY_NOT_FOUND } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus } from '../../../types'; import * as git from '../../../util/git'; import * as hostRules from '../../../util/host-rules'; import { BitbucketHttp, setBaseUrl } from '../../../util/http/bitbucket'; @@ -949,7 +949,3 @@ export async function mergePr({ } return true; } - -export function getVulnerabilityAlerts(): Promise { - return Promise.resolve([]); -} diff --git a/lib/modules/platform/codecommit/index.ts b/lib/modules/platform/codecommit/index.ts index c4a12b1db4885e..e689415cb39457 100644 --- a/lib/modules/platform/codecommit/index.ts +++ b/lib/modules/platform/codecommit/index.ts @@ -12,7 +12,7 @@ import { REPOSITORY_NOT_FOUND, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, PrState, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus, PrState } from '../../../types'; import * as git from '../../../util/git'; import { regEx } from '../../../util/regex'; import { sanitize } from '../../../util/sanitize'; @@ -563,11 +563,6 @@ export function deleteLabel(prNumber: number, label: string): Promise { return Promise.resolve(); } -/* istanbul ignore next */ -export function getVulnerabilityAlerts(): Promise { - return Promise.resolve([]); -} - // Returns the combined status for a branch. /* istanbul ignore next */ export function getBranchStatus(branchName: string): Promise { diff --git a/lib/modules/platform/gitea/index.spec.ts b/lib/modules/platform/gitea/index.spec.ts index 5142b0d8299ff6..4b61916037cf34 100644 --- a/lib/modules/platform/gitea/index.spec.ts +++ b/lib/modules/platform/gitea/index.spec.ts @@ -1916,12 +1916,6 @@ describe('modules/platform/gitea/index', () => { }); }); - describe('getVulnerabilityAlerts', () => { - it('should return an empty list - unsupported by platform', async () => { - expect(await gitea.getVulnerabilityAlerts()).toEqual([]); - }); - }); - describe('getJsonFile()', () => { it('returns file content', async () => { const data = { foo: 'bar' }; diff --git a/lib/modules/platform/gitea/index.ts b/lib/modules/platform/gitea/index.ts index 9627e86d8cfb3c..2162e5252215dc 100644 --- a/lib/modules/platform/gitea/index.ts +++ b/lib/modules/platform/gitea/index.ts @@ -10,7 +10,7 @@ import { REPOSITORY_MIRRORED, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus } from '../../../types'; import * as git from '../../../util/git'; import { setBaseUrl } from '../../../util/http/gitea'; import { sanitize } from '../../../util/sanitize'; @@ -949,10 +949,6 @@ const platform: Platform = { massageMarkdown(prBody: string): string { return smartTruncate(smartLinks(prBody), 1000000); }, - - getVulnerabilityAlerts(): Promise { - return Promise.resolve([]); - }, }; /* eslint-disable @typescript-eslint/unbound-method */ @@ -979,7 +975,6 @@ export const { getPrList, getRepoForceRebase, getRepos, - getVulnerabilityAlerts, initPlatform, initRepo, mergePr, diff --git a/lib/modules/platform/gitlab/index.spec.ts b/lib/modules/platform/gitlab/index.spec.ts index 5990f566b0aeb2..de8b8b466c2ce0 100644 --- a/lib/modules/platform/gitlab/index.spec.ts +++ b/lib/modules/platform/gitlab/index.spec.ts @@ -2139,13 +2139,6 @@ These updates have all been created already. Click a checkbox below to force a r }); }); - describe('getVulnerabilityAlerts()', () => { - it('returns empty', async () => { - const res = await gitlab.getVulnerabilityAlerts(); - expect(res).toHaveLength(0); - }); - }); - describe('deleteLabel(issueNo, label)', () => { it('should delete the label', async () => { httpMock diff --git a/lib/modules/platform/gitlab/index.ts b/lib/modules/platform/gitlab/index.ts index fc0f7fd391aeee..24b69b9865ed25 100644 --- a/lib/modules/platform/gitlab/index.ts +++ b/lib/modules/platform/gitlab/index.ts @@ -16,7 +16,7 @@ import { TEMPORARY_ERROR, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import type { BranchStatus, VulnerabilityAlert } from '../../../types'; +import type { BranchStatus } from '../../../types'; import * as git from '../../../util/git'; import * as hostRules from '../../../util/host-rules'; import { setBaseUrl } from '../../../util/http/gitlab'; @@ -1209,10 +1209,6 @@ export async function ensureCommentRemoval( } } -export function getVulnerabilityAlerts(): Promise { - return Promise.resolve([]); -} - export async function filterUnavailableUsers( users: string[] ): Promise { diff --git a/lib/modules/platform/types.ts b/lib/modules/platform/types.ts index 06b9fc1896db75..d37eae8db6c50a 100644 --- a/lib/modules/platform/types.ts +++ b/lib/modules/platform/types.ts @@ -165,7 +165,7 @@ export interface Platform { findIssue(title: string): Promise; getIssueList(): Promise; getIssue?(number: number, useCache?: boolean): Promise; - getVulnerabilityAlerts(): Promise; + getVulnerabilityAlerts?(): Promise; getRawFile( fileName: string, repoName?: string, diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts index 10e1df6b8b6bb8..7b47d5ab7aa06a 100644 --- a/lib/workers/repository/init/vulnerability.spec.ts +++ b/lib/workers/repository/init/vulnerability.spec.ts @@ -47,6 +47,7 @@ describe('workers/repository/init/vulnerability', () => { config.transitiveRemediation = true; // TODO #7154 delete config.vulnerabilityAlerts!.enabled; + delete config.packageRules; // test coverage platform.getVulnerabilityAlerts.mockResolvedValue([ partial(), { diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts index bba4f091544b20..7cf228988eb556 100644 --- a/lib/workers/repository/init/vulnerability.ts +++ b/lib/workers/repository/init/vulnerability.ts @@ -56,8 +56,8 @@ export async function detectVulnerabilityAlerts( logger.debug('Vulnerability alerts are disabled'); return input; } - const alerts = await platform.getVulnerabilityAlerts(); - if (!alerts.length) { + const alerts = await platform.getVulnerabilityAlerts?.(); + if (!alerts?.length) { logger.debug('No vulnerability alerts found'); if (input.vulnerabilityAlertsOnly) { throw new Error(NO_VULNERABILITY_ALERTS); From 2de1b29c1fa0b9f1bcd6bfc3913e66cdaae76f76 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 12 Apr 2023 17:13:34 +0200 Subject: [PATCH 008/122] feat(fs): add `isValidLocalPath` function (#21433) --- lib/modules/manager/gitlabci/extract.ts | 7 +++++- lib/util/fs/index.spec.ts | 13 ++++++++++- lib/util/fs/index.ts | 11 ++++++++- lib/util/fs/util.spec.ts | 30 ++++++++++++++++++++++++- lib/util/fs/util.ts | 27 +++++++++++++++++++++- 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/lib/modules/manager/gitlabci/extract.ts b/lib/modules/manager/gitlabci/extract.ts index 6601e91580e198..acc67acfa19b10 100644 --- a/lib/modules/manager/gitlabci/extract.ts +++ b/lib/modules/manager/gitlabci/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { logger } from '../../../logger'; -import { readLocalFile } from '../../../util/fs'; +import { isValidLocalPath, readLocalFile } from '../../../util/fs'; import { trimLeadingSlash } from '../../../util/url'; import type { ExtractConfig, @@ -133,6 +133,11 @@ export async function extractAllPackageFiles( while (filesToExamine.length > 0) { const file = filesToExamine.pop()!; + if (!isValidLocalPath(file)) { + logger.debug(`Invalid gitlabci file path ${file}`); + continue; + } + const content = await readLocalFile(file, 'utf8'); if (!content) { logger.debug(`Empty or non existent gitlabci file ${file}`); diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts index 2e0af88fe02919..e97ebf1a41257b 100644 --- a/lib/util/fs/index.spec.ts +++ b/lib/util/fs/index.spec.ts @@ -17,6 +17,7 @@ import { getLocalFiles, getParentDir, getSiblingFileName, + isValidLocalPath, listCacheDir, localPathExists, localPathIsFile, @@ -205,7 +206,17 @@ describe('util/fs/index', () => { }); it('returns false', async () => { - expect(await localPathExists('file.txt')).toBe(false); + expect(await localPathExists('file.txt')).toBeFalse(); + }); + }); + + describe('isLocalPath', () => { + it('returns true for valid local path', () => { + expect(isValidLocalPath('./foo/...')).toBeTrue(); + }); + + it('returns false', () => { + expect(isValidLocalPath('/file.txt')).toBeFalse(); }); }); diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts index 7b76b61db8b688..5493a6397f8493 100644 --- a/lib/util/fs/index.ts +++ b/lib/util/fs/index.ts @@ -6,7 +6,7 @@ import fs from 'fs-extra'; import upath from 'upath'; import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; -import { ensureCachePath, ensureLocalPath } from './util'; +import { ensureCachePath, ensureLocalPath, isValidPath } from './util'; export const pipeline = util.promisify(stream.pipeline); @@ -120,6 +120,15 @@ export async function localPathExists(pathName: string): Promise { } } +/** + * Validate local path without throwing. + * @param path Path to check + * @returns `true` if given `path` is a valid local path, otherwise `false`. + */ +export function isValidLocalPath(path: string): boolean { + return isValidPath(path, 'localDir'); +} + /** * Tries to find `otherFileName` in the directory where * `existingFileNameWithPath` is, then in its parent directory, then in the diff --git a/lib/util/fs/util.spec.ts b/lib/util/fs/util.spec.ts index f62fff16254565..c37d971b0673f6 100644 --- a/lib/util/fs/util.spec.ts +++ b/lib/util/fs/util.spec.ts @@ -1,7 +1,7 @@ import upath from 'upath'; import { GlobalConfig } from '../../config/global'; import { FILE_ACCESS_VIOLATION_ERROR } from '../../constants/error-messages'; -import { ensureCachePath, ensureLocalPath } from './util'; +import { ensureCachePath, ensureLocalPath, isValidPath } from './util'; describe('util/fs/util', () => { const localDir = upath.resolve('/foo'); @@ -45,7 +45,35 @@ describe('util/fs/util', () => { ${'/bar/../foo'} ${'/bar/../../etc/passwd'} ${'/baz'} + ${'/baz"'} `(`ensureCachePath('$path', '${cacheDir}') - throws`, ({ path }) => { expect(() => ensureCachePath(path)).toThrow(FILE_ACCESS_VIOLATION_ERROR); }); + + it.each` + value | expected + ${'.'} | ${true} + ${'./...'} | ${true} + ${'foo'} | ${true} + ${'foo/bar'} | ${true} + ${'./foo/bar'} | ${true} + ${'./foo/bar/...'} | ${true} + ${'..'} | ${false} + ${'....'} | ${true} + ${'./foo/..'} | ${true} + ${'./foo/..../bar'} | ${true} + ${'./..'} | ${false} + ${'\\foo'} | ${false} + ${"foo'"} | ${false} + ${'fo"o'} | ${false} + ${'fo&o'} | ${false} + ${'f;oo'} | ${true} + ${'f o o'} | ${true} + ${'/'} | ${false} + ${'/foo'} | ${false} + ${'&&'} | ${false} + ${';'} | ${true} + `('isValidPath($value) == $expected', ({ value, expected }) => { + expect(isValidPath(value, 'cacheDir')).toBe(expected); + }); }); diff --git a/lib/util/fs/util.ts b/lib/util/fs/util.ts index 323e0257ffd51f..91ed0f8de06f87 100644 --- a/lib/util/fs/util.ts +++ b/lib/util/fs/util.ts @@ -3,8 +3,12 @@ import { GlobalConfig } from '../../config/global'; import { FILE_ACCESS_VIOLATION_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; +// http://www.mtu.edu/umc/services/digital/writing/characters-avoid/ +// We allow spaces, but not newlines +const restricted = /[[\]#%&{}<>*?\b\n\r\0$!'"@|‘“+^`]/; + function assertBaseDir(path: string, baseDir: string): void { - if (!path.startsWith(upath.resolve(baseDir))) { + if (!path.startsWith(baseDir)) { logger.debug( { path, baseDir }, 'Preventing access to file outside the base directory' @@ -14,6 +18,11 @@ function assertBaseDir(path: string, baseDir: string): void { } function ensurePath(path: string, key: 'localDir' | 'cacheDir'): string { + if (restricted.test(path)) { + logger.debug({ path }, 'Preventing access to path with illegal characters'); + throw new Error(FILE_ACCESS_VIOLATION_ERROR); + } + const baseDir = upath.resolve(GlobalConfig.get(key)!); const fullPath = upath.resolve( upath.isAbsolute(path) ? path : upath.join(baseDir, path) @@ -29,3 +38,19 @@ export function ensureLocalPath(path: string): string { export function ensureCachePath(path: string): string { return ensurePath(path, 'cacheDir'); } + +export function isValidPath( + path: string, + key: 'localDir' | 'cacheDir' +): boolean { + if (restricted.test(path)) { + return false; + } + + const baseDir = upath.resolve(GlobalConfig.get(key)!); + const fullPath = upath.resolve( + upath.isAbsolute(path) ? path : upath.join(baseDir, path) + ); + + return fullPath.startsWith(baseDir); +} From d7b7f0421c7e1a53311d08b622d314ee0fcf7a26 Mon Sep 17 00:00:00 2001 From: Vojta Polak Date: Wed, 12 Apr 2023 17:38:13 +0200 Subject: [PATCH 009/122] feat: support depth URL argument in Terraform modules (#21287) --- .../extractors/others/modules.spec.ts | 77 +++++++++++++++++++ .../terraform/extractors/others/modules.ts | 8 +- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/lib/modules/manager/terraform/extractors/others/modules.spec.ts b/lib/modules/manager/terraform/extractors/others/modules.spec.ts index 88c204c1b46826..eb2ff9844bc401 100644 --- a/lib/modules/manager/terraform/extractors/others/modules.spec.ts +++ b/lib/modules/manager/terraform/extractors/others/modules.spec.ts @@ -19,10 +19,24 @@ describe('modules/manager/terraform/extractors/others/modules', () => { const groups = githubRefMatchRegex.exec( 'github.com/hashicorp/example?ref=v1.0.0' )?.groups; + const depth = githubRefMatchRegex.exec( + 'github.com/hashicorp/example?depth=1&ref=v1.0.0' + )?.groups; + const depth2 = githubRefMatchRegex.exec( + 'github.com/hashicorp/example?ref=v1.0.0&depth=1' + )?.groups; expect(groups).toEqual({ project: 'hashicorp/example', tag: 'v1.0.0', }); + expect(depth).toEqual({ + project: 'hashicorp/example', + tag: 'v1.0.0', + }); + expect(depth2).toEqual({ + project: 'hashicorp/example', + tag: 'v1.0.0', + }); }); it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => { @@ -47,6 +61,15 @@ describe('modules/manager/terraform/extractors/others/modules', () => { const ssh = gitTagsRefMatchRegex.exec( 'ssh://github.com/hashicorp/example?ref=v1.0.0' )?.groups; + const depth = gitTagsRefMatchRegex.exec( + 'ssh://github.com/hashicorp/example?depth=1&ref=v1.0.0' + )?.groups; + const depth2 = gitTagsRefMatchRegex.exec( + 'ssh://github.com/hashicorp/example?ref=v1.0.0&depth=1' + )?.groups; + const folder = gitTagsRefMatchRegex.exec( + 'git::ssh://git@git.example.com/modules/foo-module.git//bar?depth=1&ref=v1.0.0' + )?.groups; expect(http).toMatchObject({ project: 'hashicorp/example', @@ -60,6 +83,18 @@ describe('modules/manager/terraform/extractors/others/modules', () => { project: 'hashicorp/example', tag: 'v1.0.0', }); + expect(depth).toMatchObject({ + project: 'hashicorp/example', + tag: 'v1.0.0', + }); + expect(depth2).toMatchObject({ + project: 'hashicorp/example', + tag: 'v1.0.0', + }); + expect(folder).toMatchObject({ + project: '/bar', + tag: 'v1.0.0', + }); }); it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => { @@ -113,6 +148,12 @@ describe('modules/manager/terraform/extractors/others/modules', () => { const subfolderWithDoubleSlash = bitbucketRefMatchRegex.exec( 'bitbucket.org/hashicorp/example.git//terraform?ref=v1.0.0' )?.groups; + const depth = bitbucketRefMatchRegex.exec( + 'git::https://git@bitbucket.org/hashicorp/example.git?depth=1&ref=v1.0.0' + )?.groups; + const depth2 = bitbucketRefMatchRegex.exec( + 'git::https://git@bitbucket.org/hashicorp/example.git?ref=v1.0.0&depth=1' + )?.groups; expect(ssh).toMatchObject({ workspace: 'hashicorp', @@ -139,6 +180,16 @@ describe('modules/manager/terraform/extractors/others/modules', () => { project: 'example', tag: 'v1.0.0', }); + expect(depth).toMatchObject({ + workspace: 'hashicorp', + project: 'example', + tag: 'v1.0.0', + }); + expect(depth2).toMatchObject({ + workspace: 'hashicorp', + project: 'example', + tag: 'v1.0.0', + }); }); it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => { @@ -200,6 +251,32 @@ describe('modules/manager/terraform/extractors/others/modules', () => { }); }); + it('should split organization, project, repository and tag from source url with depth argument', () => { + const depth = azureDevOpsSshRefMatchRegex.exec( + 'git::git@ssh.dev.azure.com:v3/MyOrg/MyProject/MyRepository//some-module/path?depth=1&ref=1.0.0' + )?.groups; + const depth2 = azureDevOpsSshRefMatchRegex.exec( + 'git::git@ssh.dev.azure.com:v3/MyOrg/MyProject/MyRepository//some-module/path?ref=1.0.0&depth=1' + )?.groups; + + expect(depth).toEqual({ + modulepath: '//some-module/path', + organization: 'MyOrg', + project: 'MyProject', + repository: 'MyRepository', + tag: '1.0.0', + url: 'git@ssh.dev.azure.com:v3/MyOrg/MyProject/MyRepository', + }); + expect(depth2).toEqual({ + modulepath: '//some-module/path', + organization: 'MyOrg', + project: 'MyProject', + repository: 'MyRepository', + tag: '1.0.0', + url: 'git@ssh.dev.azure.com:v3/MyOrg/MyProject/MyRepository', + }); + }); + it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => { const dots = azureDevOpsSshRefMatchRegex.exec( 'git::git@ssh.dev.azure.com:v3/MyOrg/MyProject/MyRepository//some-module/path?ref=v1.0.0' diff --git a/lib/modules/manager/terraform/extractors/others/modules.ts b/lib/modules/manager/terraform/extractors/others/modules.ts index 3eba9cc81aa02c..2c135d995d55f3 100644 --- a/lib/modules/manager/terraform/extractors/others/modules.ts +++ b/lib/modules/manager/terraform/extractors/others/modules.ts @@ -10,16 +10,16 @@ import { DependencyExtractor } from '../../base'; import type { TerraformDefinitionFile } from '../../hcl/types'; export const githubRefMatchRegex = regEx( - /github\.com([/:])(?[^/]+\/[a-z0-9-_.]+).*\?ref=(?.*)$/i + /github\.com([/:])(?[^/]+\/[a-z0-9-_.]+).*\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/i ); export const bitbucketRefMatchRegex = regEx( - /(?:git::)?(?(?:http|https|ssh)?(?::\/\/)?(?:.*@)?(?bitbucket\.org\/(?.*)\/(?.*).git\/?(?.*)))\?ref=(?.*)$/ + /(?:git::)?(?(?:http|https|ssh)?(?::\/\/)?(?:.*@)?(?bitbucket\.org\/(?.*)\/(?.*).git\/?(?.*)))\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/ ); export const gitTagsRefMatchRegex = regEx( - /(?:git::)?(?(?:(?:http|https|ssh):\/\/)?(?:.*@)?(?.*\/(?.*\/.*)))\?ref=(?.*)$/ + /(?:git::)?(?(?:(?:http|https|ssh):\/\/)?(?:.*@)?(?.*\/(?.*\/.*)))\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/ ); export const azureDevOpsSshRefMatchRegex = regEx( - /(?:git::)?(?git@ssh\.dev\.azure\.com:v3\/(?[^/]*)\/(?[^/]*)\/(?[^/]*))(?.*)?\?ref=(?.*)$/ + /(?:git::)?(?git@ssh\.dev\.azure\.com:v3\/(?[^/]*)\/(?[^/]*)\/(?[^/]*))(?.*)?\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/ ); const hostnameMatchRegex = regEx(/^(?([\w|\d]+\.)+[\w|\d]+)/); From 135e6cd078c703c1b160d92d690dea6efbbf93ba Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Wed, 12 Apr 2023 23:29:24 +0530 Subject: [PATCH 010/122] feat(config): rename stabilityDays to minimumReleaseAge (#21376) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- docs/usage/configuration-options.md | 111 +++++++++--------- .../custom/stability-days-migration.spec.ts | 30 +++++ .../custom/stability-days-migration.ts | 25 ++++ lib/config/migrations/migrations-service.ts | 2 + lib/config/options/index.ts | 13 +- lib/config/presets/internal/npm.ts | 2 +- lib/util/date.spec.ts | 14 ++- lib/util/date.ts | 4 + lib/util/pretty-time.spec.ts | 2 + .../__snapshots__/vulnerability.spec.ts.snap | 8 +- .../__snapshots__/filter-checks.spec.ts.snap | 4 +- .../process/lookup/filter-checks.spec.ts | 29 +++-- .../process/lookup/filter-checks.ts | 15 +-- .../repository/process/lookup/index.spec.ts | 4 +- .../repository/update/branch/index.spec.ts | 10 +- lib/workers/repository/update/branch/index.ts | 23 ++-- .../repository/update/branch/status-checks.ts | 4 +- 17 files changed, 194 insertions(+), 106 deletions(-) create mode 100644 lib/config/migrations/custom/stability-days-migration.spec.ts create mode 100644 lib/config/migrations/custom/stability-days-migration.ts diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 1aaf81207512d9..dce691c47270a5 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1520,14 +1520,14 @@ Change this setting to `true` if you want to use internal Renovate checks toward ## internalChecksFilter This setting determines whether Renovate controls when and how filtering of internal checks are performed, particularly when multiple versions of the same update type are available. -Currently this applies to the `stabilityDays` check only. +Currently this applies to the `minimumReleaseAge` check only. - `none`: No filtering will be performed, and the highest release will be used regardless of whether it's pending or not - `strict`: All pending releases will be filtered. PRs will be skipped unless a non-pending version is available - `flexible`: Similar to strict, but in the case where all versions are pending then a PR will be created with the highest pending version -The `flexible` mode can result in "flapping" of Pull Requests, where e.g. a pending PR with version `1.0.3` is first released but then downgraded to `1.0.2` once it passes `stabilityDays`. -We recommend that you use the `strict` mode, and enable the `dependencyDashboard` so that you have visibility into suppressed PRs. +The `flexible` mode can result in "flapping" of Pull Requests, for example: a pending PR with version `1.0.3` is first released but then downgraded to `1.0.2` once it passes `minimumReleaseAge`. +We recommend that you use the `strict` mode, and enable the `dependencyDashboard` so that you can see suppressed PRs. ## java @@ -1610,6 +1610,60 @@ Depending on its running schedule, Renovate may run a few times within that time Add to this object if you wish to define rules that apply only to major updates. +## minimumReleaseAge + +If this is set _and_ an update has a release timestamp header, then Renovate will check if the set duration has passed. + +Note: Renovate will wait for the set duration to pass for each **separate** version. +Renovate does not wait until the package has seen no releases for x time-duration(`minimumReleaseAge`). +`minimumReleaseAge` is not intended to help with slowing down fast releasing project updates. +If you want to slow down PRs for a specific package, setup a custom schedule for that package. +Read [our selective-scheduling help](https://docs.renovatebot.com/noise-reduction/#selective-scheduling) to learn how to set the schedule. + +If the time since the release is less than the set `minimumReleaseAge` a "pending" status check is added to the branch. +If enough days have passed then the "pending" status is removed, and a "passing" status check is added. + +Some datasources don't have a release timestamp, in which case this feature is not compatible. +Other datasources may have a release timestamp, but Renovate does not support it yet, in which case a feature request needs to be implemented. + +Maven users: you cannot use `minimumReleaseAge` if a Maven source returns unreliable `last-modified` headers. + + +!!! note + Configuring this option will add a `renovate/stability-days` option to the status checks. + +There are a couple of uses for `minimumReleaseAge`: + + + +#### Suppress branch/PR creation for X days + +If you combine `minimumReleaseAge=3 days` and `internalChecksFilter="strict"` then Renovate will hold back from creating branches until 3 or more days have elapsed since the version was released. +We recommend that you set `dependencyDashboard=true` so you can see these pending PRs. + +#### Prevent holding broken npm packages + +npm packages less than 72 hours (3 days) old can be unpublished, which could result in a service impact if you have already updated to it. +Set `minimumReleaseAge` to `3 days` for npm packages to prevent relying on a package that can be removed from the registry: + +```json +{ + "packageRules": [ + { + "matchDatasources": ["npm"], + "minimumReleaseAge": "3 days" + } + ] +} +``` + +#### Await X time duration before Automerging + +If you enabled `automerge` _and_ `minimumReleaseAge`, it means that PRs will be created immediately but automerging will be delayed until the time-duration has passed. +This works because Renovate will add a "renovate/stability-days" pending status check to each branch/PR and that pending check will prevent the branch going green to automerge. + + + ## minor Add to this object if you wish to define rules that apply only to minor updates. @@ -2585,7 +2639,7 @@ This is why we configured an upper limit for how long we wait until creating a P !!! note - If the option `stabilityDays` is non-zero then Renovate disables the `prNotPendingHours` functionality. + If the option `minimumReleaseAge` is non-zero then Renovate disables the `prNotPendingHours` functionality. ## prPriority @@ -3194,55 +3248,6 @@ Configure this to `true` if you wish to get one PR for every separate major vers e.g. if you are on webpack@v1 currently then default behavior is a PR for upgrading to webpack@v3 and not for webpack@v2. If this setting is true then you would get one PR for webpack@v2 and one for webpack@v3. -## stabilityDays - -If this is set to a non-zero value, _and_ an update has a release timestamp header, then Renovate will check if the "stability days" have passed. - -Note: Renovate will wait for the set number of `stabilityDays` to pass for each **separate** version. -Renovate does not wait until the package has seen no releases for x `stabilityDays`. -`stabilityDays` is not intended to help with slowing down fast releasing project updates. -If you want to slow down PRs for a specific package, setup a custom schedule for that package. -Read [our selective-scheduling help](https://docs.renovatebot.com/noise-reduction/#selective-scheduling) to learn how to set the schedule. - -If the number of days since the release is less than the set `stabilityDays` a "pending" status check is added to the branch. -If enough days have passed then the "pending" status is removed, and a "passing" status check is added. - -Some datasources do not provide a release timestamp (in which case this feature is not compatible), and other datasources may provide a release timestamp but it's not supported by Renovate (in which case a feature request needs to be implemented). - -Maven users: you cannot use `stabilityDays` if a Maven source returns unreliable `last-modified` headers. - -There are a couple of uses for `stabilityDays`: - - - -#### Suppress branch/PR creation for X days - -If you combine `stabilityDays=3` and `internalChecksFilter="strict"` then Renovate will hold back from creating branches until 3 or more days have elapsed since the version was released. -It's recommended that you enable `dependencyDashboard=true` so you don't lose visibility of these pending PRs. - -#### Prevent holding broken npm packages - -npm packages less than 72 hours (3 days) old can be unpublished, which could result in a service impact if you have already updated to it. -Set `stabilityDays` to 3 for npm packages to prevent relying on a package that can be removed from the registry: - -```json -{ - "packageRules": [ - { - "matchDatasources": ["npm"], - "stabilityDays": 3 - } - ] -} -``` - -#### Await X days before Automerging - -If you have both `automerge` as well as `stabilityDays` enabled, it means that PRs will be created immediately but automerging will be delayed until X days have passed. -This works because Renovate will add a "renovate/stability-days" pending status check to each branch/PR and that pending check will prevent the branch going green to automerge. - - - ## stopUpdatingLabel This feature only works on supported platforms, check the table above. diff --git a/lib/config/migrations/custom/stability-days-migration.spec.ts b/lib/config/migrations/custom/stability-days-migration.spec.ts new file mode 100644 index 00000000000000..b13719bb3901ea --- /dev/null +++ b/lib/config/migrations/custom/stability-days-migration.spec.ts @@ -0,0 +1,30 @@ +import { StabilityDaysMigration } from './stability-days-migration'; + +describe('config/migrations/custom/stability-days-migration', () => { + it('migrates', () => { + expect(StabilityDaysMigration).toMigrate( + { + stabilityDays: 0, + }, + { + minimumReleaseAge: null, + } + ); + expect(StabilityDaysMigration).toMigrate( + { + stabilityDays: 2, + }, + { + minimumReleaseAge: '2 days', + } + ); + expect(StabilityDaysMigration).toMigrate( + { + stabilityDays: 1, + }, + { + minimumReleaseAge: '1 day', + } + ); + }); +}); diff --git a/lib/config/migrations/custom/stability-days-migration.ts b/lib/config/migrations/custom/stability-days-migration.ts new file mode 100644 index 00000000000000..49d86cdabf80ea --- /dev/null +++ b/lib/config/migrations/custom/stability-days-migration.ts @@ -0,0 +1,25 @@ +import is from '@sindresorhus/is'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class StabilityDaysMigration extends AbstractMigration { + override readonly deprecated = true; + override readonly propertyName = 'stabilityDays'; + + override run(value: unknown): void { + if (is.integer(value)) { + let newValue: null | string; + switch (value) { + case 0: + newValue = null; + break; + case 1: + newValue = '1 day'; + break; + default: + newValue = `${value} days`; + break; + } + this.setSafely('minimumReleaseAge', newValue); + } + } +} diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts index de172fdd7c391b..08177481823d1f 100644 --- a/lib/config/migrations/migrations-service.ts +++ b/lib/config/migrations/migrations-service.ts @@ -47,6 +47,7 @@ import { SemanticCommitsMigration } from './custom/semantic-commits-migration'; import { SemanticPrefixMigration } from './custom/semantic-prefix-migration'; import { SeparateMajorReleasesMigration } from './custom/separate-major-release-migration'; import { SeparateMultipleMajorMigration } from './custom/separate-multiple-major-migration'; +import { StabilityDaysMigration } from './custom/stability-days-migration'; import { SuppressNotificationsMigration } from './custom/suppress-notifications-migration'; import { TrustLevelMigration } from './custom/trust-level-migration'; import { UnpublishSafeMigration } from './custom/unpublish-safe-migration'; @@ -143,6 +144,7 @@ export class MigrationsService { SemanticPrefixMigration, MatchDatasourcesMigration, DatasourceMigration, + StabilityDaysMigration, ]; static run(originalConfig: RenovateConfig): RenovateConfig { diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index faa0653fd50761..233ba616f235a9 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1576,16 +1576,15 @@ const options: RenovateOptions[] = [ supportedPlatforms: ['azure', 'gitea', 'github', 'gitlab'], }, { - name: 'stabilityDays', - description: - 'Number of days required before a new release is considered stable.', - type: 'integer', - default: 0, + name: 'minimumReleaseAge', + description: 'Time required before a new release is considered stable.', + type: 'string', + default: null, }, { name: 'internalChecksAsSuccess', description: - 'Whether to consider passing internal checks such as stabilityDays when determining branch status.', + 'Whether to consider passing internal checks such as `minimumReleaseAge` when determining branch status.', type: 'boolean', default: false, }, @@ -1719,7 +1718,7 @@ const options: RenovateOptions[] = [ groupName: null, schedule: [], dependencyDashboardApproval: false, - stabilityDays: 0, + minimumReleaseAge: null, rangeStrategy: 'update-lockfile', commitMessageSuffix: '[SECURITY]', branchTopic: `{{{datasource}}}-{{{depName}}}-vulnerability`, diff --git a/lib/config/presets/internal/npm.ts b/lib/config/presets/internal/npm.ts index 57552b194e38e9..e269bbd8c77072 100644 --- a/lib/config/presets/internal/npm.ts +++ b/lib/config/presets/internal/npm.ts @@ -7,7 +7,7 @@ export const presets: Record = { description: 'Wait until the npm package is three days old before raising the update, this prevents npm unpublishing a package you already upgraded to.', npm: { - stabilityDays: 3, + minimumReleaseAge: '3 days', }, }, }; diff --git a/lib/util/date.spec.ts b/lib/util/date.spec.ts index 87d3742ac28923..08d5d102c38898 100644 --- a/lib/util/date.spec.ts +++ b/lib/util/date.spec.ts @@ -1,4 +1,9 @@ -import { getElapsedDays, getElapsedHours, getElapsedMinutes } from './date'; +import { + getElapsedDays, + getElapsedHours, + getElapsedMinutes, + getElapsedMs, +} from './date'; const ONE_MINUTE_MS = 60 * 1000; const ONE_HOUR_MS = 60 * ONE_MINUTE_MS; @@ -34,4 +39,11 @@ describe('util/date', () => { expect(getElapsedHours(new Date('invalid_date_string'))).toBe(0); }); }); + + describe('getElapsedMilliseconds', () => { + it('returns elapsed time in milliseconds', () => { + const elapsedMs = new Date().getTime() - new Date(Jan1).getTime(); + expect(getElapsedMs(Jan1.toISOString())).toBe(elapsedMs); + }); + }); }); diff --git a/lib/util/date.ts b/lib/util/date.ts index 53d7877da52dc5..61fbe64b5c8f40 100644 --- a/lib/util/date.ts +++ b/lib/util/date.ts @@ -26,3 +26,7 @@ export function getElapsedHours(date: Date | string): number { const diff = DateTime.now().diff(pastDate, 'hours'); return Math.floor(diff.hours); } + +export function getElapsedMs(timestamp: string): number { + return new Date().getTime() - new Date(timestamp).getTime(); +} diff --git a/lib/util/pretty-time.spec.ts b/lib/util/pretty-time.spec.ts index a9f291e467a9c6..266089e7e03c29 100644 --- a/lib/util/pretty-time.spec.ts +++ b/lib/util/pretty-time.spec.ts @@ -15,6 +15,8 @@ describe('util/pretty-time', () => { ${'1h 1 m 1s'} | ${1 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1000} ${'1hour 1 min 1s'} | ${1 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1000} ${'1h 1m 1s 1ms'} | ${1 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1000 + 1} + ${'1d2h3m'} | ${24 * 60 * 60 * 1000 + 2 * 60 * 60 * 1000 + 3 * 60 * 1000} + ${'1 day'} | ${24 * 60 * 60 * 1000} ${'3 days'} | ${3 * 24 * 60 * 60 * 1000} ${'1 week'} | ${7 * 24 * 60 * 60 * 1000} ${'1 month'} | ${30 * 24 * 60 * 60 * 1000} diff --git a/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap b/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap index 990d099897ce2e..e731e34f30e745 100644 --- a/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap +++ b/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap @@ -21,10 +21,10 @@ exports[`workers/repository/init/vulnerability detectVulnerabilityAlerts() retur "commitMessageSuffix": "[SECURITY]", "dependencyDashboardApproval": false, "groupName": null, + "minimumReleaseAge": null, "prCreation": "immediate", "rangeStrategy": "update-lockfile", "schedule": [], - "stabilityDays": 0, }, "isVulnerabilityAlert": true, "matchCurrentVersion": "= 1.8.2", @@ -51,10 +51,10 @@ go", "commitMessageSuffix": "[SECURITY]", "dependencyDashboardApproval": false, "groupName": null, + "minimumReleaseAge": null, "prCreation": "immediate", "rangeStrategy": "update-lockfile", "schedule": [], - "stabilityDays": 0, }, "isVulnerabilityAlert": true, "matchCurrentVersion": "1.8.2", @@ -81,10 +81,10 @@ actions", "commitMessageSuffix": "[SECURITY]", "dependencyDashboardApproval": false, "groupName": null, + "minimumReleaseAge": null, "prCreation": "immediate", "rangeStrategy": "update-lockfile", "schedule": [], - "stabilityDays": 0, }, "isVulnerabilityAlert": true, "matchCurrentVersion": "== 1.6.7", @@ -126,10 +126,10 @@ Ansible before versions 2.1.4, 2.2.1 is vulnerable to an improper input validati "commitMessageSuffix": "[SECURITY]", "dependencyDashboardApproval": false, "groupName": null, + "minimumReleaseAge": null, "prCreation": "immediate", "rangeStrategy": "update-lockfile", "schedule": [], - "stabilityDays": 0, }, "isVulnerabilityAlert": true, "matchCurrentVersion": "2.4.2", diff --git a/lib/workers/repository/process/lookup/__snapshots__/filter-checks.spec.ts.snap b/lib/workers/repository/process/lookup/__snapshots__/filter-checks.spec.ts.snap index 3c5cc28de8b003..5bf232ab929a17 100644 --- a/lib/workers/repository/process/lookup/__snapshots__/filter-checks.spec.ts.snap +++ b/lib/workers/repository/process/lookup/__snapshots__/filter-checks.spec.ts.snap @@ -24,7 +24,7 @@ exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() } `; -exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() picks up stabilityDays settings from hostRules 1`] = ` +exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() picks up minimumReleaseAge settings from hostRules 1`] = ` { "pendingChecks": false, "pendingReleases": [], @@ -35,7 +35,7 @@ exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() } `; -exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() picks up stabilityDays settings from updateType 1`] = ` +exports[`workers/repository/process/lookup/filter-checks .filterInternalChecks() picks up minimumReleaseAge settings from updateType 1`] = ` { "pendingChecks": false, "pendingReleases": [ diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index 5802aced0e1fe6..8c210db87d6526 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -4,6 +4,7 @@ import * as allVersioning from '../../../../modules/versioning'; import { clone } from '../../../../util/clone'; import * as _dateUtil from '../../../../util/date'; import * as _mergeConfidence from '../../../../util/merge-confidence'; +import { toMs } from '../../../../util/pretty-time'; import { filterInternalChecks } from './filter-checks'; import type { LookupUpdateConfig, UpdateResult } from './types'; @@ -44,10 +45,10 @@ describe('workers/repository/process/lookup/filter-checks', () => { config.currentVersion = '1.0.0'; sortedReleases = clone(releases); jest.resetAllMocks(); - dateUtil.getElapsedDays.mockReturnValueOnce(3); - dateUtil.getElapsedDays.mockReturnValueOnce(5); - dateUtil.getElapsedDays.mockReturnValueOnce(7); - dateUtil.getElapsedDays.mockReturnValueOnce(9); + dateUtil.getElapsedMs.mockReturnValueOnce(toMs('3 days') ?? 0); + dateUtil.getElapsedMs.mockReturnValueOnce(toMs('5 days') ?? 0); + dateUtil.getElapsedMs.mockReturnValueOnce(toMs('7 days') ?? 0); + dateUtil.getElapsedMs.mockReturnValueOnce(toMs('9 days') ?? 0); }); describe('.filterInternalChecks()', () => { @@ -67,7 +68,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { it('returns non-pending latest release if internalChecksFilter=flexible and none pass checks', async () => { config.internalChecksFilter = 'flexible'; - config.stabilityDays = 10; + config.minimumReleaseAge = '10 days'; const res = await filterInternalChecks( config, versioning, @@ -82,7 +83,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { it('returns pending latest release if internalChecksFilter=strict and none pass checks', async () => { config.internalChecksFilter = 'strict'; - config.stabilityDays = 10; + config.minimumReleaseAge = '10 days'; const res = await filterInternalChecks( config, versioning, @@ -97,7 +98,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { it('returns non-latest release if internalChecksFilter=strict and some pass checks', async () => { config.internalChecksFilter = 'strict'; - config.stabilityDays = 6; + config.minimumReleaseAge = '6 days'; const res = await filterInternalChecks( config, versioning, @@ -112,7 +113,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { it('returns non-latest release if internalChecksFilter=flexible and some pass checks', async () => { config.internalChecksFilter = 'strict'; - config.stabilityDays = 6; + config.minimumReleaseAge = '6 days'; const res = await filterInternalChecks( config, versioning, @@ -125,10 +126,12 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res.release.version).toBe('1.0.2'); }); - it('picks up stabilityDays settings from hostRules', async () => { + it('picks up minimumReleaseAge settings from hostRules', async () => { config.internalChecksFilter = 'strict'; - config.stabilityDays = 6; - config.packageRules = [{ matchUpdateTypes: ['patch'], stabilityDays: 1 }]; + config.minimumReleaseAge = '6 days'; + config.packageRules = [ + { matchUpdateTypes: ['patch'], minimumReleaseAge: '1 day' }, + ]; const res = await filterInternalChecks( config, versioning, @@ -141,9 +144,9 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res.release.version).toBe('1.0.4'); }); - it('picks up stabilityDays settings from updateType', async () => { + it('picks up minimumReleaseAge settings from updateType', async () => { config.internalChecksFilter = 'strict'; - config.patch = { stabilityDays: 4 }; + config.patch = { minimumReleaseAge: '4 days' }; const res = await filterInternalChecks( config, versioning, diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index 4cd6ac70f6150d..83b625cffdf00f 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -3,13 +3,14 @@ import { mergeChildConfig } from '../../../../config'; import { logger } from '../../../../logger'; import type { Release } from '../../../../modules/datasource'; import type { VersioningApi } from '../../../../modules/versioning'; -import { getElapsedDays } from '../../../../util/date'; +import { getElapsedMs } from '../../../../util/date'; import { getMergeConfidenceLevel, isActiveConfidenceLevel, satisfiesConfidenceLevel, } from '../../../../util/merge-confidence'; import { applyPackageRules } from '../../../../util/package-rules'; +import { toMs } from '../../../../util/pretty-time'; import type { LookupUpdateConfig, UpdateResult } from './types'; import { getUpdateType } from './update-type'; @@ -30,7 +31,7 @@ export async function filterInternalChecks( let pendingChecks = false; let pendingReleases: Release[] = []; if (internalChecksFilter === 'none') { - // Don't care if stabilityDays or minimumConfidence are unmet + // Don't care if minimumReleaseAge or minimumConfidence are unmet release = sortedReleases.pop(); } else { // iterate through releases from highest to lowest, looking for the first which will pass checks if present @@ -51,19 +52,19 @@ export async function filterInternalChecks( ); // Apply packageRules in case any apply to updateType releaseConfig = applyPackageRules(releaseConfig); - // Now check for a stabilityDays config + // Now check for a minimumReleaseAge config const { minimumConfidence, - stabilityDays, + minimumReleaseAge, releaseTimestamp, version: newVersion, updateType, } = releaseConfig; - if (is.integer(stabilityDays) && releaseTimestamp) { - if (getElapsedDays(releaseTimestamp) < stabilityDays) { + if (is.nonEmptyString(minimumReleaseAge) && releaseTimestamp) { + if (getElapsedMs(releaseTimestamp) < (toMs(minimumReleaseAge) ?? 0)) { // Skip it if it doesn't pass checks logger.trace( - { depName, check: 'stabilityDays' }, + { depName, check: 'minimumReleaseAge' }, `Release ${candidateRelease.version} is pending status checks` ); pendingReleases.unshift(candidateRelease); diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 10c963df82a8f1..fb91a5467745b3 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -1002,7 +1002,7 @@ describe('workers/repository/process/lookup/index', () => { config.currentValue = '1.4.4'; config.packageName = 'some/action'; config.datasource = GithubReleasesDatasource.id; - config.stabilityDays = 14; + config.minimumReleaseAge = '14 days'; config.internalChecksFilter = 'strict'; const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); @@ -1025,7 +1025,7 @@ describe('workers/repository/process/lookup/index', () => { config.currentValue = '1.4.4'; config.packageName = 'some/action'; config.datasource = GithubReleasesDatasource.id; - config.stabilityDays = 3; + config.minimumReleaseAge = '3 days'; config.internalChecksFilter = 'strict'; const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); diff --git a/lib/workers/repository/update/branch/index.spec.ts b/lib/workers/repository/update/branch/index.spec.ts index 146312255a2e52..0288741eab8ae7 100644 --- a/lib/workers/repository/update/branch/index.spec.ts +++ b/lib/workers/repository/update/branch/index.spec.ts @@ -162,17 +162,17 @@ describe('workers/repository/update/branch/index', () => { }); }); - it('skips branch for fresh release with stabilityDays', async () => { + it('skips branch for fresh release with minimumReleaseAge', async () => { schedule.isScheduledNow.mockReturnValueOnce(true); config.prCreation = 'not-pending'; (config.upgrades as Partial[]) = [ { releaseTimestamp: new Date('2019-01-01').getTime().toString(), - stabilityDays: 1, + minimumReleaseAge: '1 day', }, { releaseTimestamp: new Date().toString(), - stabilityDays: 1, + minimumReleaseAge: '1 day', }, ]; @@ -185,13 +185,13 @@ describe('workers/repository/update/branch/index', () => { }); }); - it('skips branch if not stabilityDays not met', async () => { + it('skips branch if minimumReleaseAge not met', async () => { schedule.isScheduledNow.mockReturnValueOnce(true); config.prCreation = 'not-pending'; config.upgrades = partial([ { releaseTimestamp: '2099-12-31', - stabilityDays: 1, + minimumReleaseAge: '1 day', }, ]); const res = await branchWorker.processBranch(config); diff --git a/lib/workers/repository/update/branch/index.ts b/lib/workers/repository/update/branch/index.ts index 188e5f31a1a666..077e15eacb9b9b 100644 --- a/lib/workers/repository/update/branch/index.ts +++ b/lib/workers/repository/update/branch/index.ts @@ -23,7 +23,7 @@ import { } from '../../../../modules/platform/comment'; import { scm } from '../../../../modules/platform/scm'; import { ExternalHostError } from '../../../../types/errors/external-host-error'; -import { getElapsedDays } from '../../../../util/date'; +import { getElapsedMs } from '../../../../util/date'; import { emojify } from '../../../../util/emoji'; import { checkoutBranch } from '../../../../util/git'; import { @@ -31,6 +31,7 @@ import { isActiveConfidenceLevel, satisfiesConfidenceLevel, } from '../../../../util/merge-confidence'; +import { toMs } from '../../../../util/pretty-time'; import * as template from '../../../../util/template'; import { isLimitReached } from '../../../global/limits'; import type { BranchConfig, BranchResult, PrBlockedBy } from '../../../types'; @@ -280,25 +281,29 @@ export async function processBranch( if ( config.upgrades.some( (upgrade) => - (upgrade.stabilityDays && upgrade.releaseTimestamp) || + (is.nonEmptyString(upgrade.minimumReleaseAge) && + upgrade.releaseTimestamp) || isActiveConfidenceLevel(upgrade.minimumConfidence!) ) ) { // Only set a stability status check if one or more of the updates contain - // both a stabilityDays setting and a releaseTimestamp + // both a minimumReleaseAge setting and a releaseTimestamp config.stabilityStatus = 'green'; // Default to 'success' but set 'pending' if any update is pending for (const upgrade of config.upgrades) { - if (is.number(upgrade.stabilityDays) && upgrade.releaseTimestamp) { - const daysElapsed = getElapsedDays(upgrade.releaseTimestamp); - if (daysElapsed < upgrade.stabilityDays) { + if ( + is.nonEmptyString(upgrade.minimumReleaseAge) && + upgrade.releaseTimestamp + ) { + const timeElapsed = getElapsedMs(upgrade.releaseTimestamp); + if (timeElapsed < (toMs(upgrade.minimumReleaseAge) ?? 0)) { logger.debug( { depName: upgrade.depName, - daysElapsed, - stabilityDays: upgrade.stabilityDays, + timeElapsed, + minimumReleaseAge: upgrade.minimumReleaseAge, }, - 'Update has not passed stability days' + 'Update has not passed minimum release age' ); config.stabilityStatus = 'yellow'; continue; diff --git a/lib/workers/repository/update/branch/status-checks.ts b/lib/workers/repository/update/branch/status-checks.ts index a880fc3a9e6e1e..6fe93414f0f6be 100644 --- a/lib/workers/repository/update/branch/status-checks.ts +++ b/lib/workers/repository/update/branch/status-checks.ts @@ -65,8 +65,8 @@ export async function setStability(config: StabilityConfig): Promise { const context = `renovate/stability-days`; const description = config.stabilityStatus === 'green' - ? 'Updates have met stability days requirement' - : 'Updates have not met stability days requirement'; + ? 'Updates have met minimum release age requirement' + : 'Updates have not met minimum release age requirement'; await setStatusCheck( config.branchName, context, From eef0df8a78b2836ea5d90519dc0b818b51bdab3c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 19:01:44 +0000 Subject: [PATCH 011/122] chore(deps): update actions/checkout action to v3.5.1 (#21464) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/release-npm.yml | 2 +- .github/workflows/update-data.yml | 2 +- .github/workflows/ws_scan.yaml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e0c723117a77f..0ee09cbf6968eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: NODE_VERSION: ${{ matrix.node-version }} steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 with: fetch-depth: 2 @@ -106,7 +106,7 @@ jobs: timeout-minutes: 15 steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 with: fetch-depth: 2 @@ -156,7 +156,7 @@ jobs: steps: # full checkout for semantic-release - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 with: fetch-depth: 0 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e98a663c7c7fb2..d2554d9522d02b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 - name: Delete fixtures to suppress false positives run: | diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 73184c0fdb8973..123a4b0366cba9 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@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 - name: 'Dependency Review' uses: actions/dependency-review-action@f46c48ed6d4f1227fb2d9ea62bf6bcbed315589e # v3.0.4 diff --git a/.github/workflows/release-npm.yml b/.github/workflows/release-npm.yml index ecdfb908973d85..8b2bdf66c4ee95 100644 --- a/.github/workflows/release-npm.yml +++ b/.github/workflows/release-npm.yml @@ -38,7 +38,7 @@ jobs: echo "NPM_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV fi - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 with: ref: ${{ env.GIT_SHA }} diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index 48b4f6c67505e0..3d6769f598aa8c 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -15,7 +15,7 @@ jobs: update-data: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 - name: Set up Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 diff --git a/.github/workflows/ws_scan.yaml b/.github/workflows/ws_scan.yaml index ad50866346a57d..d15f715727c252 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@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 - name: Download UA run: curl -LJO https://github.com/whitesource/unified-agent-distribution/releases/latest/download/wss-unified-agent.jar From 4058749ade7d4d7c66a150a877be0d0a1ef47686 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 19:07:00 +0000 Subject: [PATCH 012/122] chore(deps): update node.js to 72fa4d2 (#21463) 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 f4b35369354095..1c15145e222933 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/containerbase/node:18.15.0@sha256:d7bd3e320e60dfd51a5b4ddbb01929f18d8c54b00c6f9d706e6dcfbc17dfee1e +FROM ghcr.io/containerbase/node:18.15.0@sha256:72fa4d274b5e343ac0a0f05ba230b1beb16c915f30d87dbeafddc20e985c17f9 USER root From 9402e71103e8c063476066af9542c69c76059d7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 20:08:07 +0000 Subject: [PATCH 013/122] chore(deps): update dependency type-fest to v3.8.0 (#21466) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 562fdd77976eff..07a778aed1eb1c 100644 --- a/package.json +++ b/package.json @@ -329,7 +329,7 @@ "tmp-promise": "3.0.3", "ts-jest": "29.1.0", "ts-node": "10.9.1", - "type-fest": "3.7.2", + "type-fest": "3.8.0", "typescript": "5.0.3", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index 06fa8eef941184..927821eda0ca05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9978,10 +9978,10 @@ type-detect@4.0.8, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.7.2.tgz#08f83ee3229b63077e95c9035034d32905969457" - integrity sha512-f9BHrLjRJ4MYkfOsnC/53PNDzZJcVo14MqLp2+hXE39p5bgwqohxR5hDZztwxlbxmIVuvC2EFAKrAkokq23PLA== +type-fest@3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.8.0.tgz#ce80d1ca7c7d11c5540560999cbd410cb5b3a385" + integrity sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q== type-fest@^0.13.1: version "0.13.1" From 9b481c45996ab5eb8a93b442f070e149d291c6e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 20:08:40 +0000 Subject: [PATCH 014/122] chore(deps): update dependency eslint-import-resolver-typescript to v3.5.5 (#21465) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 07a778aed1eb1c..f2ae3de4e0e6ec 100644 --- a/package.json +++ b/package.json @@ -301,7 +301,7 @@ "eslint": "8.37.0", "eslint-config-prettier": "8.8.0", "eslint-formatter-gha": "1.4.2", - "eslint-import-resolver-typescript": "3.5.4", + "eslint-import-resolver-typescript": "3.5.5", "eslint-plugin-import": "2.27.5", "eslint-plugin-jest": "27.2.1", "eslint-plugin-jest-formatting": "3.1.0", diff --git a/yarn.lock b/yarn.lock index 927821eda0ca05..843290ea0bb7c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4930,13 +4930,14 @@ eslint-import-resolver-node@^0.3.7: is-core-module "^2.11.0" resolve "^1.22.1" -eslint-import-resolver-typescript@3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.4.tgz#7370c326c3c08f0c1839c592d79d20b704de15d4" - integrity sha512-9xUpnedEmSfG57sN1UvWPiEhfJ8bPt0Wg2XysA7Mlc79iFGhmJtRUg9LxtkK81FhMUui0YuR2E8iUsVhePkh4A== +eslint-import-resolver-typescript@3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== dependencies: debug "^4.3.4" enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" get-tsconfig "^4.5.0" globby "^13.1.3" is-core-module "^2.11.0" From 9d2871085cfa22c1fde52c8749fe7d3ee6342977 Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Wed, 12 Apr 2023 22:34:13 +0200 Subject: [PATCH 015/122] refactor(vulnerabilities): rename fetchVulnerabilities to appendVulnerabilityPackageRules (#21468) --- .../repository/process/extract-update.spec.ts | 6 +- .../repository/process/extract-update.ts | 5 +- .../process/vulnerabilities.spec.ts | 105 ++++++++++++++---- .../repository/process/vulnerabilities.ts | 2 +- 4 files changed, 92 insertions(+), 26 deletions(-) diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts index fd337a189836f7..47b8e67e3a232f 100644 --- a/lib/workers/repository/process/extract-update.spec.ts +++ b/lib/workers/repository/process/extract-update.spec.ts @@ -116,9 +116,9 @@ describe('workers/repository/process/extract-update', () => { suppressNotifications: ['deprecationWarningIssues'], osvVulnerabilityAlerts: true, }; - const fetchVulnerabilitiesMock = jest.fn(); + const appendVulnerabilityPackageRulesMock = jest.fn(); createVulnerabilitiesMock.mockResolvedValueOnce({ - fetchVulnerabilities: fetchVulnerabilitiesMock, + appendVulnerabilityPackageRules: appendVulnerabilityPackageRulesMock, }); repositoryCache.getCache.mockReturnValueOnce({ scan: {} }); git.checkoutBranch.mockResolvedValueOnce('123test'); @@ -127,7 +127,7 @@ describe('workers/repository/process/extract-update', () => { await lookup(config, packageFiles); expect(createVulnerabilitiesMock).toHaveBeenCalledOnce(); - expect(fetchVulnerabilitiesMock).toHaveBeenCalledOnce(); + expect(appendVulnerabilityPackageRulesMock).toHaveBeenCalledOnce(); }); it('handles exception when fetching vulnerabilities', async () => { diff --git a/lib/workers/repository/process/extract-update.ts b/lib/workers/repository/process/extract-update.ts index e8406e46190267..d10df7303bbaee 100644 --- a/lib/workers/repository/process/extract-update.ts +++ b/lib/workers/repository/process/extract-update.ts @@ -175,7 +175,10 @@ async function fetchVulnerabilities( if (config.osvVulnerabilityAlerts) { try { const vulnerabilities = await Vulnerabilities.create(); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); } catch (err) { logger.warn({ err }, 'Unable to read vulnerability information'); } diff --git a/lib/workers/repository/process/vulnerabilities.spec.ts b/lib/workers/repository/process/vulnerabilities.spec.ts index 895ef3ef03f295..dd075106105528 100644 --- a/lib/workers/repository/process/vulnerabilities.spec.ts +++ b/lib/workers/repository/process/vulnerabilities.spec.ts @@ -80,7 +80,10 @@ describe('workers/repository/process/vulnerabilities', () => { ], }; - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.trace).toHaveBeenCalledWith( 'Cannot map datasource docker to OSV ecosystem' ); @@ -97,7 +100,10 @@ describe('workers/repository/process/vulnerabilities', () => { }; getVulnerabilitiesMock.mockResolvedValueOnce([]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.trace).toHaveBeenCalledWith( 'No vulnerabilities found in OSV database for lodash' ); @@ -121,7 +127,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(0); }); @@ -143,7 +152,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.trace).toHaveBeenCalledWith( 'Skipping withdrawn vulnerability GHSA-x5rq-j2xg-h7qm' ); @@ -167,7 +179,10 @@ describe('workers/repository/process/vulnerabilities', () => { }; getVulnerabilitiesMock.mockResolvedValueOnce([lodashVulnerability]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.debug).toHaveBeenCalledWith( 'Skipping vulnerability lookup for package lodash due to unsupported version #4.17.11' ); @@ -191,7 +206,10 @@ describe('workers/repository/process/vulnerabilities', () => { }; getVulnerabilitiesMock.mockRejectedValueOnce(err); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.warn).toHaveBeenCalledWith( { err }, 'Error fetching vulnerability information for lodash' @@ -236,7 +254,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.debug).toHaveBeenCalledWith( { event }, 'Skipping OSV event with invalid version' @@ -266,7 +287,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(0); }); @@ -294,7 +318,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.info).toHaveBeenCalledWith( 'No fixed version available for vulnerability GHSA-xxxx-yyyy-zzzz in fake 4.17.11' ); @@ -333,7 +360,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.info).toHaveBeenCalledWith( 'No fixed version available for vulnerability GHSA-xxxx-yyyy-zzzz in fake 1.5.1' ); @@ -379,7 +409,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.debug).toHaveBeenCalledWith( 'Vulnerability GO-2022-0187 affects stdlib 1.7.5' ); @@ -454,7 +487,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(1); expect(config.packageRules).toMatchObject([ { @@ -513,7 +549,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(2); expect(config.packageRules).toMatchObject([ { @@ -546,7 +585,10 @@ describe('workers/repository/process/vulnerabilities', () => { }; getVulnerabilitiesMock.mockResolvedValueOnce([lodashVulnerability]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(0); }); @@ -607,7 +649,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(1); expect(config.packageRules).toMatchObject([ @@ -686,7 +731,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(2); expect(config.packageRules).toMatchObject([ @@ -740,7 +788,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.debug).not.toHaveBeenCalledWith( 'OSV advisory GHSA-xxxx-yyyy-zzzz lists quokka 1.2.3 as vulnerable' ); @@ -784,7 +835,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(1); expect(config.packageRules).toMatchObject([ { @@ -859,7 +913,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(logger.logger.debug).toHaveBeenCalledWith( 'Error processing CVSS vector some-invalid-score' @@ -921,7 +978,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(1); expect(config.packageRules).toMatchObject([ @@ -1003,7 +1063,10 @@ describe('workers/repository/process/vulnerabilities', () => { }, ]); - await vulnerabilities.fetchVulnerabilities(config, packageFiles); + await vulnerabilities.appendVulnerabilityPackageRules( + config, + packageFiles + ); expect(config.packageRules).toHaveLength(1); expect(config.packageRules).toMatchObject([ diff --git a/lib/workers/repository/process/vulnerabilities.ts b/lib/workers/repository/process/vulnerabilities.ts index 39f4f5647b1703..3651d838348a62 100644 --- a/lib/workers/repository/process/vulnerabilities.ts +++ b/lib/workers/repository/process/vulnerabilities.ts @@ -50,7 +50,7 @@ export class Vulnerabilities { return instance; } - async fetchVulnerabilities( + async appendVulnerabilityPackageRules( config: RenovateConfig, packageFiles: Record ): Promise { From 7d9269db0b889e782c0042cd54ca2abac199b09a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:02:12 +0000 Subject: [PATCH 016/122] chore(deps): update linters (#21469) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 6 +-- yarn.lock | 106 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 80 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index f2ae3de4e0e6ec..0bc9cd04ccfd5a 100644 --- a/package.json +++ b/package.json @@ -289,8 +289,8 @@ "@types/url-join": "4.0.1", "@types/validate-npm-package-name": "4.0.0", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.57.1", - "@typescript-eslint/parser": "5.57.1", + "@typescript-eslint/eslint-plugin": "5.58.0", + "@typescript-eslint/parser": "5.58.0", "aws-sdk-client-mock": "2.1.1", "callsite": "1.0.0", "common-tags": "1.8.2", @@ -298,7 +298,7 @@ "cross-env": "7.0.3", "diff": "5.1.0", "emojibase-data": "7.0.1", - "eslint": "8.37.0", + "eslint": "8.38.0", "eslint-config-prettier": "8.8.0", "eslint-formatter-gha": "1.4.2", "eslint-import-resolver-typescript": "3.5.5", diff --git a/yarn.lock b/yarn.lock index 843290ea0bb7c8..aa543a002e9bb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1601,10 +1601,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.37.0": - version "8.37.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" - integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== "@gar/promisify@^1.1.3": version "1.1.3" @@ -3221,15 +3221,15 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz#d1ab162a3cd2671b8a1c9ddf6e2db73b14439735" - integrity sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ== +"@typescript-eslint/eslint-plugin@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz#b1d4b0ad20243269d020ef9bbb036a40b0849829" + integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/type-utils" "5.57.1" - "@typescript-eslint/utils" "5.57.1" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/type-utils" "5.58.0" + "@typescript-eslint/utils" "5.58.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -3244,14 +3244,14 @@ dependencies: "@typescript-eslint/utils" "5.57.1" -"@typescript-eslint/parser@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748" - integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA== +"@typescript-eslint/parser@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.58.0.tgz#2ac4464cf48bef2e3234cb178ede5af352dddbc6" + integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== dependencies: - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/typescript-estree" "5.57.1" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.57.1": @@ -3262,13 +3262,21 @@ "@typescript-eslint/types" "5.57.1" "@typescript-eslint/visitor-keys" "5.57.1" -"@typescript-eslint/type-utils@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz#235daba621d3f882b8488040597b33777c74bbe9" - integrity sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw== +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== dependencies: - "@typescript-eslint/typescript-estree" "5.57.1" - "@typescript-eslint/utils" "5.57.1" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + +"@typescript-eslint/type-utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz#f7d5b3971483d4015a470d8a9e5b8a7d10066e52" + integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== + dependencies: + "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/utils" "5.58.0" debug "^4.3.4" tsutils "^3.21.0" @@ -3277,6 +3285,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== + "@typescript-eslint/typescript-estree@5.57.1": version "5.57.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" @@ -3290,6 +3303,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== + dependencies: + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.57.1", "@typescript-eslint/utils@^5.10.0": version "5.57.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" @@ -3304,6 +3330,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.57.1": version "5.57.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" @@ -3312,6 +3352,14 @@ "@typescript-eslint/types" "5.57.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== + dependencies: + "@typescript-eslint/types" "5.58.0" + eslint-visitor-keys "^3.3.0" + "@yarnpkg/core@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-3.4.0.tgz#1684dfcbd4e68ff28a11a25154d415f7de2c8224" @@ -5017,15 +5065,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@8.37.0: - version "8.37.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" - integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== +eslint@8.38.0: + version "8.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.37.0" + "@eslint/js" "8.38.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" From 1e6c757d01457a57d0ed446e3d4553aeae51a8cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 03:01:21 +0000 Subject: [PATCH 017/122] chore(deps): update node.js to v18.16.0 (#21470) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 55bffd620b9af5..6d80269a4f04ad 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.15.0 +18.16.0 From 33829bab77effcf4756d0f4d99341b7f584eb872 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 08:17:32 +0000 Subject: [PATCH 018/122] chore(deps): update node.js to v18.16.0 (#21472) 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 1c15145e222933..bc9853f54eeec2 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/containerbase/node:18.15.0@sha256:72fa4d274b5e343ac0a0f05ba230b1beb16c915f30d87dbeafddc20e985c17f9 +FROM ghcr.io/containerbase/node:18.16.0@sha256:fc48ac97eb5d0dee207d4a336a52d7d3be68e1adec01cc1d13a1c12fab80a265 USER root From 734ab7f4213bdce7b013ccfe22556caef1ae9be3 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 13 Apr 2023 10:44:41 +0200 Subject: [PATCH 019/122] docs(pull requests): rewrite (#21440) Co-authored-by: Rhys Arkins --- docs/usage/key-concepts/pull-requests.md | 28 +++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/usage/key-concepts/pull-requests.md b/docs/usage/key-concepts/pull-requests.md index b930aa8c7a244a..75164c5fd95906 100644 --- a/docs/usage/key-concepts/pull-requests.md +++ b/docs/usage/key-concepts/pull-requests.md @@ -7,23 +7,31 @@ This page describes how Renovate pull requests work. ## How Renovate finds existing PRs -Renovate does not keep any kind of database/state of its own about open or closed Pull Requests. +Renovate does not need to maintain any database/state about open or closed Pull Requests. Instead, it uses the code platform's APIs to search and find such PRs. -Locating of existing PRs - whether open or closed - is done by matching both the branch name (e.g. `renovate/lodash-4.x`) and Pull Request title (e.g. `Update lodash to v4.17.21`). +Renovate finds existing PRs (open or closed) by matching both: -In cases like the above, there is typically at most one existing PR with the desired branch + title combination. -When grouping is enabled by users, and PRs have titles like "All non-major updates", then there may be multiple past PRs which match. +- the branch name, for example: `renovate/lodash-4.x`, +- _and_ the Pull Request title, for example: `Update lodash to v4.17.21` + +In cases like the above, there is typically one existing PR with a matching branch name and PR title. +But if you group PRs and use titles like "All non-major updates", then multiple past PRs may match. ## Normal PRs -As described above, Renovate PRs normally have some uniqueness in their title relating to the version in the upgrade. -In such cases, if a user closes such a PR, it can be inferred that they don't want to see it again in future. -For example, they wish to ignore `lodash@4.17.21`. +As explained above, Renovate PRs normally have some "uniqueness" in their title relating to the version in the upgrade. +When you close a "unique" PR, Renovate assumes you don't want to see that PR again in future, for example: + +1. You ignored `lodash@4.17.21` by closing Renovate's PR +1. Renovate assumes you don't want any updates to `4.17.21` of `lodash` +1. Renovate creates a new PR when the branch + title "uniqueness" exists again, like when `lodash@4.17.22` releases -In such cases, new PRs won't be created until the branch+title uniqueness exists again, such as if there is a `lodash@4.17.22`. +Renovate behaves similarly for `major` updates, for example: -Similarly in the case of major updates (such as "Update lodash to v4") then it can be inferred that the user wishes to ignore all of v4 of `lodash`, even when newer v4 versions are available. +1. You ignored a `major` update for Lodash (pr title: "Update lodash to v4") by closing Renovate's PR +1. Renovate assumes you don't want any updates to `v4` of `lodash` +1. Renovate won't create any update PRs for `v4` of `lodash`, even if there are newer versions of `v4` ## Immortal PRs @@ -62,7 +70,7 @@ Then the update becomes "Update react (major)", which is not safely ignorable, i ### Future plans for immortal PRs In the future we may embed metadata in each PR identifying the exact files and packages + versions that PR contains. -Then we could allow such PRs to be closed/ignored but then as soon as there's any chance to files/packages/versions being updated then we'd be cached busted and create a new PR. +Then we could allow such PRs to be closed/ignored but then as soon as there's any chance to files/packages/versions being updated then we'd be cache busted and create a new PR. If you regularly wish to close immortal PRs, it's an indication that you may be grouping too widely. ### How to fix immortal PRs From 2ff75fb8e28919662c912c696e9f181d1229ddd2 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 13 Apr 2023 10:57:39 +0200 Subject: [PATCH 020/122] fix(fs): allow `@` inside paths (#21476) --- lib/util/fs/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/fs/util.ts b/lib/util/fs/util.ts index 91ed0f8de06f87..11a5f1639cea46 100644 --- a/lib/util/fs/util.ts +++ b/lib/util/fs/util.ts @@ -5,7 +5,7 @@ import { logger } from '../../logger'; // http://www.mtu.edu/umc/services/digital/writing/characters-avoid/ // We allow spaces, but not newlines -const restricted = /[[\]#%&{}<>*?\b\n\r\0$!'"@|‘“+^`]/; +const restricted = /[[\]#%&{}<>*?\b\n\r\0$!'"|‘“+^`]/; function assertBaseDir(path: string, baseDir: string): void { if (!path.startsWith(baseDir)) { From 139739fe7794e87698c1dc871e465ec68c658fea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 12:24:22 +0200 Subject: [PATCH 021/122] chore(deps): update actions/stale action to v8 (#21479) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/stale-action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale-action.yml b/.github/workflows/stale-action.yml index 2f918a83a9d625..0ef526217ed2d4 100644 --- a/.github/workflows/stale-action.yml +++ b/.github/workflows/stale-action.yml @@ -13,7 +13,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7.0.0 + - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8.0.0 with: # Rate limit per run, (defaults to 30, but we've increased it to 40 for now). operations-per-run: 40 From 3d23793237712f700642b95fc76a27113d7263d8 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 13 Apr 2023 15:09:01 +0200 Subject: [PATCH 022/122] fix(fs): allow `+$` inside paths (#21482) --- lib/util/fs/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/fs/util.ts b/lib/util/fs/util.ts index 11a5f1639cea46..5dbab5bf9342c0 100644 --- a/lib/util/fs/util.ts +++ b/lib/util/fs/util.ts @@ -5,7 +5,7 @@ import { logger } from '../../logger'; // http://www.mtu.edu/umc/services/digital/writing/characters-avoid/ // We allow spaces, but not newlines -const restricted = /[[\]#%&{}<>*?\b\n\r\0$!'"|‘“+^`]/; +const restricted = /[[\]#%&{}<>*?\b\n\r\0!'"|‘“^`]/; function assertBaseDir(path: string, baseDir: string): void { if (!path.startsWith(baseDir)) { From bd497257b3b55ea9deeebe6ffb5c69c80dd37759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp?= Date: Thu, 13 Apr 2023 14:42:22 +0100 Subject: [PATCH 023/122] docs: refresh links around presets (#21484) --- docs/development/creating-editing-renovate-presets.md | 2 +- docs/usage/config-presets.md | 2 +- docs/usage/noise-reduction.md | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/development/creating-editing-renovate-presets.md b/docs/development/creating-editing-renovate-presets.md index c62fcae8e1f1c7..2e7c5468a9c609 100644 --- a/docs/development/creating-editing-renovate-presets.md +++ b/docs/development/creating-editing-renovate-presets.md @@ -1,6 +1,6 @@ # Creating/editing Renovate presets -Renovate comes with default presets that you can find in the `lib/config/presets/internal` directory. +Renovate comes with default presets that you can find in the [`lib/config/presets/internal`](https://github.com/renovatebot/renovate/tree/main/lib/config/presets/internal) directory. You can suggest changes to the presets with a pull request. Follow the rules below to increase the chance that your pull request gets merged. diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index 635656ee5b6243..b70a8f48bbabad 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -211,7 +211,7 @@ Renovate will determine the current platform and look up the preset from there. ## Contributing to presets Have you configured a rule that you think others might benefit from? -Please consider contributing it to the [Renovate](https://github.com/renovatebot/renovate) repository so that it gains higher visibility and saves others from reinventing the same thing. +Please consider contributing it to the [Renovate repository](https://github.com/renovatebot/renovate/tree/main/lib/config/presets/internal) so that it gains higher visibility and saves others from reinventing the same thing. ## Organization level presets diff --git a/docs/usage/noise-reduction.md b/docs/usage/noise-reduction.md index f3d36eb5faf197..01cb98055776a1 100644 --- a/docs/usage/noise-reduction.md +++ b/docs/usage/noise-reduction.md @@ -176,7 +176,8 @@ Let's automerge it if all the linting updates pass: ``` Have you come up with a rule that you think others would benefit from? -How about a PR back to [renovate-config](https://github.com/singapore/renovate-config) with the above rule named `":automergeEslintWeekly"` ? +How about a PR to [our presets](https://github.com/renovatebot/renovate/tree/main/lib/config/presets/internal)? +For example the above rule could be named `":automergeEslintWeekly"` in `schedule.ts`. ## Lock file considerations From 3fc6ed1d28b9f782f3ba9d8e46080491a5babf38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:16:21 +0000 Subject: [PATCH 024/122] chore(deps): update actions/checkout action to v3.5.2 (#21487) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/release-npm.yml | 2 +- .github/workflows/update-data.yml | 2 +- .github/workflows/ws_scan.yaml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ee09cbf6968eb..cadf9d4c58b901 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: NODE_VERSION: ${{ matrix.node-version }} steps: - - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 with: fetch-depth: 2 @@ -106,7 +106,7 @@ jobs: timeout-minutes: 15 steps: - - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 with: fetch-depth: 2 @@ -156,7 +156,7 @@ jobs: steps: # full checkout for semantic-release - - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 with: fetch-depth: 0 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d2554d9522d02b..a9cf4fc9db983b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Delete fixtures to suppress false positives run: | diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 123a4b0366cba9..5c45b7bdd56623 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@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: 'Dependency Review' uses: actions/dependency-review-action@f46c48ed6d4f1227fb2d9ea62bf6bcbed315589e # v3.0.4 diff --git a/.github/workflows/release-npm.yml b/.github/workflows/release-npm.yml index 8b2bdf66c4ee95..ae567d2a064cda 100644 --- a/.github/workflows/release-npm.yml +++ b/.github/workflows/release-npm.yml @@ -38,7 +38,7 @@ jobs: echo "NPM_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV fi - - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 with: ref: ${{ env.GIT_SHA }} diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index 3d6769f598aa8c..6831026fc86478 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -15,7 +15,7 @@ jobs: update-data: runs-on: ubuntu-latest steps: - - uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Set up Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 diff --git a/.github/workflows/ws_scan.yaml b/.github/workflows/ws_scan.yaml index d15f715727c252..f38944c6ac38ec 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@83b7061638ee4956cf7545a6f7efe594e5ad0247 # v3.5.1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Download UA run: curl -LJO https://github.com/whitesource/unified-agent-distribution/releases/latest/download/wss-unified-agent.jar From bcf559dc4962ffe142097aae96f2becb072f4e07 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 16:19:06 +0200 Subject: [PATCH 025/122] chore(deps): update peter-evans/create-pull-request action to v5 (#21477) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/update-data.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index 6831026fc86478..12bfef2f6266ae 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -33,7 +33,7 @@ jobs: run: yarn prettier-fix - name: Create pull request - uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54 # v4.2.4 + uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5 # v5.0.0 with: author: 'Renovate Bot ' branch: 'chore/update-static-data' From e875ec914f8e04a56feecb96ff99345a1d5713c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 16:20:49 +0200 Subject: [PATCH 026/122] build(deps): update dependency semantic-release to v21 (#21478) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 1302 +++++++++++++++++++++++++++----------------------- 2 files changed, 696 insertions(+), 608 deletions(-) diff --git a/package.json b/package.json index 0bc9cd04ccfd5a..5fbf50f8e3cfc2 100644 --- a/package.json +++ b/package.json @@ -323,7 +323,7 @@ "nock": "13.3.0", "npm-run-all": "4.1.5", "rimraf": "4.4.1", - "semantic-release": "20.1.3", + "semantic-release": "21.0.1", "shelljs": "0.8.5", "strip-ansi": "6.0.1", "tmp-promise": "3.0.3", diff --git a/yarn.lock b/yarn.lock index aa543a002e9bb0..d22c159ac4d418 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1948,76 +1948,66 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" - integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== +"@npmcli/arborist@^6.2.7": + version "6.2.7" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.7.tgz#434b66fb90c598b25d4d0ba116b124bf504d6e65" + integrity sha512-7Gp1lZEweW1GzoMOo0Z10zAm4SKZsVYUWtFSCrahXmV5H3Mp4Pgwg1nIgkXj4LkjqT+fLsXmjK6rQBauDH64Jg== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/query" "^1.2.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.3" - cacache "^16.1.3" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^5.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^3.0.0" + "@npmcli/query" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + bin-links "^4.0.1" + cacache "^17.0.4" common-ancestor-path "^1.0.1" - hosted-git-info "^5.2.1" - json-parse-even-better-errors "^2.3.1" + hosted-git-info "^6.1.1" + json-parse-even-better-errors "^3.0.0" json-stringify-nice "^1.1.4" - minimatch "^5.1.0" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.2" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" + minimatch "^7.4.2" + nopt "^7.0.0" + npm-install-checks "^6.0.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-registry-fetch "^14.0.3" + npmlog "^7.0.1" + pacote "^15.0.8" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" + promise-call-limit "^1.0.2" + read-package-json-fast "^3.0.2" semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" + ssri "^10.0.1" + treeverse "^3.0.0" walk-up-path "^1.0.0" -"@npmcli/ci-detect@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" - integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== - -"@npmcli/config@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" - integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== +"@npmcli/config@^6.1.5": + version "6.1.5" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.1.5.tgz#79f6e84dbe13f0ad14133898cb4cb904cab7097a" + integrity sha512-nUjJ4+Xo2/XWoq5wsF9ajRtm5xADlLjtyBQGdGlWFRgHpYggZtxQP1XteM6SvEQsHI3P9vDyLGIYO0MlNrQZwQ== dependencies: - "@npmcli/map-workspaces" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" ini "^3.0.0" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - proc-log "^2.0.0" - read-package-json-fast "^2.0.3" + nopt "^7.0.0" + proc-log "^3.0.0" + read-package-json-fast "^3.0.2" semver "^7.3.5" walk-up-path "^1.0.0" -"@npmcli/disparity-colors@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" - integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== +"@npmcli/disparity-colors@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" + integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== dependencies: ansi-styles "^4.3.0" -"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": +"@npmcli/fs@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== @@ -2032,47 +2022,46 @@ dependencies: semver "^7.3.5" -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== +"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.0.4.tgz#cdf74f21b1d440c0756fb28159d935129d9daa33" + integrity sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg== dependencies: - "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" - which "^2.0.2" + which "^3.0.0" -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" -"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== +"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.3.tgz#476944b63cd1f65bf83c6fdc7f4ca7be56906b1f" + integrity sha512-HlCvFuTzw4UNoKyZdqiNrln+qMF71QJkxy2dsusV8QQdoa89e2TF4dATCzBxbl4zzRzdDoWWyP5ADVrNAH9cRQ== dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" + "@npmcli/name-from-folder" "^2.0.0" + glob "^9.3.1" + minimatch "^7.4.2" + read-package-json-fast "^3.0.0" -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== +"@npmcli/metavuln-calculator@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" + cacache "^17.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^15.0.0" semver "^7.3.5" "@npmcli/move-file@^2.0.0": @@ -2083,49 +2072,47 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": +"@npmcli/name-from-folder@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/promise-spawn@^3.0.0": +"@npmcli/package-json@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.0.0.tgz#c9219a197e1be8dbf43c4ef8767a72277c0533b6" + integrity sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg== dependencies: - infer-owner "^1.0.4" + json-parse-even-better-errors "^3.0.0" -"@npmcli/query@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" - integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/query@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" + integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== dependencies: - npm-package-arg "^9.1.0" postcss-selector-parser "^6.0.10" - semver "^7.3.7" -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== +"@npmcli/run-script@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.0.tgz#f89e322c729e26ae29db6cc8cc76559074aac208" + integrity sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ== dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" + read-package-json-fast "^3.0.0" + which "^3.0.0" "@octokit/auth-token@^3.0.0": version "3.0.3" @@ -2617,24 +2604,24 @@ p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" - integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== +"@semantic-release/npm@^10.0.2": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.3.tgz#11c5a1927f2e942d4067732d930cb44718b9b7ac" + integrity sha512-Chbv3kX4o+y+r1X6hsqBVB8NFbSVfiNlYOqMG6o9Wc8r5Y4cjxfbaMCuJ++XAtw3YXYX/NVD05cPzBi4Orjusg== dependencies: "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - execa "^5.0.0" + aggregate-error "^4.0.1" + execa "^7.0.0" fs-extra "^11.0.0" - lodash "^4.17.15" + lodash-es "^4.17.21" nerf-dart "^1.0.0" - normalize-url "^6.0.0" - npm "^8.3.0" + normalize-url "^8.0.0" + npm "^9.5.0" rc "^1.2.8" - read-pkg "^5.0.0" + read-pkg "^8.0.0" registry-auth-token "^5.0.0" semver "^7.1.2" - tempy "^1.0.0" + tempy "^3.0.0" "@semantic-release/release-notes-generator@^10.0.0": version "10.0.3" @@ -2652,6 +2639,11 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" +"@sigstore/protobuf-specs@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" + integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== + "@sinclair/typebox@^0.25.16": version "0.25.24" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" @@ -2786,6 +2778,19 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.2.tgz#6c1e99210ada62c057b1742b5528d85acbfe0a47" + integrity sha512-uxarDtxTIK3f8hJS4yFhW/lvTa3tsiQU5iDCRut+NCnOXvNtEul0Ct58NIIcIx9Rkt7OFEK31Ndpqsd663nsew== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^8.0.3" + "@types/auth-header@1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/auth-header/-/auth-header-1.0.2.tgz#45879542c5c754debbb753b1491bbf690888b4ef" @@ -3461,11 +3466,23 @@ JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@^1.0.0, abbrev@~1.1.1: +abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3612,6 +3629,14 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" + integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== + dependencies: + delegates "^1.0.0" + readable-stream "^4.1.0" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -3688,7 +3713,7 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -asap@^2.0.0, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== @@ -3815,22 +3840,25 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bin-links@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== +bin-links@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" + integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" binary-extensions@^2.2.0: version "2.2.0" @@ -3918,6 +3946,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" @@ -3935,7 +3971,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@17.0.5: +cacache@17.0.5, cacache@^17.0.0, cacache@^17.0.4, cacache@^17.0.5: version "17.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.5.tgz#6dbec26c11f1f6a2b558bc11ed3316577c339ebc" integrity sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA== @@ -3954,7 +3990,7 @@ cacache@17.0.5: tar "^6.1.11" unique-filename "^3.0.0" -cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: +cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== @@ -4115,7 +4151,7 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== @@ -4164,7 +4200,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@^0.6.1, cli-table3@^0.6.2: +cli-table3@^0.6.1, cli-table3@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== @@ -4222,12 +4258,10 @@ cluster-key-slot@1.1.2: resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" +cmd-shim@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== co@^4.6.0: version "4.6.0" @@ -4453,10 +4487,12 @@ crypto-random-string@3.3.1: dependencies: type-fest "^0.8.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" css-select@^5.1.0: version "5.1.0" @@ -4503,11 +4539,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -4573,20 +4604,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delay@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -4627,14 +4644,6 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -4821,12 +4830,12 @@ entities@~3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -env-ci@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-8.0.0.tgz#97a6605c6639b2a74c74b1557500bc152c1c6e7e" - integrity sha512-W+3BqGZozFua9MPeXpmTm5eYEBtGgL76jGu/pwMVp/L8PdECSCEWaIp7d4Mw7kuUrbUldK0oV0bNd6ZZjLiMiA== +env-ci@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-9.0.0.tgz#53df706b4b841f5f05413402ef82049eba8e4af3" + integrity sha512-Q3cjr1tX9xwigprw4G8M3o7PIOO/1LYji6TyGsbD1WfMmD23etZvhgmPXJqkP788yH4dgSSK7oaIMuaayUJIfg== dependencies: - execa "^6.1.0" + execa "^7.0.0" java-properties "^1.0.2" env-paths@^2.2.0: @@ -4839,7 +4848,7 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -error-ex@^1.3.1: +error-ex@^1.3.1, error-ex@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -5154,11 +5163,21 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -5174,21 +5193,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" @@ -5283,7 +5287,7 @@ fast-xml-parser@4.1.2: dependencies: strnum "^1.0.5" -fastest-levenshtein@^1.0.12: +fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== @@ -5431,7 +5435,7 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0: +fs-minipass@^3.0.0, fs-minipass@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.1.tgz#853809af15b6d03e27638d1ab6432e6b378b085d" integrity sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw== @@ -5487,6 +5491,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.0.tgz#e270ca9d97dae84abf64e5277ef1ebddc7dd1e2f" + integrity sha512-0s5T5eciEG7Q3ugkxAkFtaDhrrhXsCRivA5y8C9WMHWuI8UlMOJg7+Iwf7Mccii+Dfs3H5jHepU0joPVyQU0Lw== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + generic-pool@3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" @@ -5632,7 +5650,7 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.2.0, glob@^9.3.1: +glob@^9.2.0, glob@^9.3.0, glob@^9.3.1, glob@^9.3.2: version "9.3.5" resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== @@ -5745,7 +5763,7 @@ graceful-fs@4.2.10: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5868,14 +5886,7 @@ hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -hosted-git-info@^6.0.0: +hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== @@ -5887,7 +5898,7 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -5922,11 +5933,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - human-signals@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" @@ -5951,12 +5957,17 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.2.tgz#c48f48397cf8ef6174fcc28aa5f8c1de6203d389" + integrity sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg== dependencies: - minimatch "^5.0.1" + minimatch "^7.4.2" ignore@5.2.4, ignore@^5.2.0: version "5.2.4" @@ -6032,18 +6043,18 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== +init-package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" install-artifact-from-github@^1.3.1: version "1.3.2" @@ -6239,12 +6250,7 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: +is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -6889,11 +6895,16 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6950,10 +6961,10 @@ just-diff-apply@^5.2.0: resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== -just-diff@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" - integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== just-extend@^4.0.2: version "4.2.1" @@ -6995,117 +7006,118 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libnpmaccess@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== +libnpmaccess@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" -libnpmdiff@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" - integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== +libnpmdiff@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.15.tgz#e358fbc271301ccc4ee117083b0c2594a700ea3f" + integrity sha512-Rxj7GpRC/17Szkf1Yf8vaplnwxzXQdAvnaA5l7gvw1X1KECOal8+GF8Z61QgNQsyDePRcwe1AgbKqUIcInS0lQ== dependencies: - "@npmcli/disparity-colors" "^2.0.0" - "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/arborist" "^6.2.7" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.2" binary-extensions "^2.2.0" diff "^5.1.0" - minimatch "^5.0.1" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - tar "^6.1.0" - -libnpmexec@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" - integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== - dependencies: - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/fs" "^2.1.1" - "@npmcli/run-script" "^4.2.0" + minimatch "^7.4.2" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + tar "^6.1.13" + +libnpmexec@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-5.0.15.tgz#e40e9163700489a3fd7e2d92497c79b07da1d006" + integrity sha512-Y5u9tpJShOe4+In5POEzYsOagFLYjOOU4NhVQ4WfCnNho49VDJqXiej7RzMl3pqm7Z2nrLWqj+gbYDmUjnLzGQ== + dependencies: + "@npmcli/arborist" "^6.2.7" + "@npmcli/run-script" "^6.0.0" chalk "^4.1.0" - mkdirp-infer-owner "^2.0.0" - npm-package-arg "^9.0.1" - npmlog "^6.0.2" - pacote "^13.6.1" - proc-log "^2.0.0" - read "^1.0.7" - read-package-json-fast "^2.0.2" + ci-info "^3.7.1" + npm-package-arg "^10.1.0" + npmlog "^7.0.1" + pacote "^15.0.8" + proc-log "^3.0.0" + read "^2.0.0" + read-package-json-fast "^3.0.2" semver "^7.3.7" walk-up-path "^1.0.0" -libnpmfund@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" - integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== +libnpmfund@^4.0.15: + version "4.0.15" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.15.tgz#b524f6a6271379d7ce480aed300e4f53cef04392" + integrity sha512-r4CvEfh0fO+RfL3WaF1bN7L68axVXBtWRIHfzFGAf48FHriCM1j6IF8KisrT4xnVDXujOErFUR4wiTWZuj8UeQ== dependencies: - "@npmcli/arborist" "^5.6.3" + "@npmcli/arborist" "^6.2.7" -libnpmhook@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" - integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== +libnpmhook@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.3.tgz#5dbd6a146feb7e11993d36a26f750ae2347bb1d9" + integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw== dependencies: aproba "^2.0.0" - npm-registry-fetch "^13.0.0" + npm-registry-fetch "^14.0.3" -libnpmorg@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" - integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== +libnpmorg@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.3.tgz#bd0a11d7a84b5f5c14689fb1e244fbb540700d63" + integrity sha512-QCLLB2oKCCwdiedQRcsj5eHAyYXM7vICM5f0gB9aRQzyVzx57S3anBIzhEUOhJxq6cWKtXRfkR5GsCxHEJ0CxA== dependencies: aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmpack@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" - integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== - dependencies: - "@npmcli/run-script" "^4.1.3" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - -libnpmpublish@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-registry-fetch "^14.0.3" + +libnpmpack@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.15.tgz#3061bf25c90fce77e5cdc00373f43a36c1aabca3" + integrity sha512-Y5NhWNL86Tb1IhazPHJ/C2GUgkHDOttarvjIFLH/t+q/ReKSTy1HKlB/c2+AdVHYjWHuVo1rXdnY22SoD8U69A== + dependencies: + "@npmcli/arborist" "^6.2.7" + "@npmcli/run-script" "^6.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + +libnpmpublish@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.1.3.tgz#98e1b0a41cc8addfb7a8aee241e57e0034b877c4" + integrity sha512-Ek/pCn90CphbpeQ3Jrd/TtQNsvBjwHnB1gtxrWiZQNCed7hTMlSSQzYhnZeipAXvxxQkH3Ebf34/60Hw2JyV+g== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" semver "^7.3.7" - ssri "^9.0.0" + sigstore "^1.0.0" + ssri "^10.0.1" -libnpmsearch@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" - integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== +libnpmsearch@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.2.tgz#b6a531a312855dd3bf84dd273b1033dd09b4cbec" + integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g== dependencies: - npm-registry-fetch "^13.0.0" + npm-registry-fetch "^14.0.3" -libnpmteam@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" - integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== +libnpmteam@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.3.tgz#196657e9d87c0cc914c44fee588ad2b838074a3c" + integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA== dependencies: aproba "^2.0.0" - npm-registry-fetch "^13.0.0" + npm-registry-fetch "^14.0.3" -libnpmversion@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" - integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== +libnpmversion@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.2.tgz#cad9cd1b287fcf9576a64edfe71491b49a65d06f" + integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g== dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/run-script" "^4.1.3" - json-parse-even-better-errors "^2.3.1" - proc-log "^2.0.0" + "@npmcli/git" "^4.0.1" + "@npmcli/run-script" "^6.0.0" + json-parse-even-better-errors "^3.0.0" + proc-log "^3.0.0" semver "^7.3.7" lie@3.1.1: @@ -7125,6 +7137,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lines-and-columns@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + linkify-it@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" @@ -7327,7 +7344,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: +make-fetch-happen@^10.0.3: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== @@ -7349,6 +7366,27 @@ make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: socks-proxy-agent "^7.0.0" ssri "^9.0.0" +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz#ed83dd3685b97f75607156d2721848f6eca561b9" + integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -7593,7 +7631,7 @@ minimalistic-assert@^1.0.0: dependencies: brace-expansion "^1.1.7" -minimatch@5.1.6, minimatch@^5.0.1, minimatch@^5.1.0: +minimatch@5.1.6, minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -7607,7 +7645,14 @@ minimatch@6.1.6: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: +minimatch@^7.4.2, minimatch@^7.4.3: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2, minimatch@^8.0.3: version "8.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== @@ -7646,6 +7691,17 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" +minipass-fetch@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.1.tgz#bae3789f668d82ffae3ea47edc6b78b8283b3656" + integrity sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw== + dependencies: + minipass "^4.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -7687,6 +7743,11 @@ minipass@^4.0.0, minipass@^4.2.4: resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.7.tgz#14c6fc0dcab54d9c4dd64b2b7032fef04efec218" integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== +minipass@^4.2.5: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" @@ -7700,15 +7761,6 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -7761,10 +7813,10 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== mv@~2: version "2.1.1" @@ -7855,7 +7907,7 @@ node-fetch@^2.6.7, node-fetch@^2.6.9: dependencies: whatwg-url "^5.0.0" -node-gyp@^9.0.0, node-gyp@^9.1.0, node-gyp@^9.3.0: +node-gyp@^9.0.0, node-gyp@^9.3.0, node-gyp@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== @@ -7904,6 +7956,13 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" +nopt@^7.0.0, nopt@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.1.0.tgz#91f6a3366182176e72ecab93a09c19b63b485f28" + integrity sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q== + dependencies: + abbrev "^2.0.0" + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7924,12 +7983,12 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: - hosted-git-info "^5.0.0" + hosted-git-info "^6.0.0" is-core-module "^2.8.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" @@ -7939,99 +7998,89 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.0.0, normalize-url@^6.0.1: +normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" - integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== - dependencies: - chalk "^4.0.0" +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== +npm-audit-report@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-4.0.0.tgz#dfffdb6464a7799d3d30e067ae1943982cf45f69" + integrity sha512-k2o5476sLrp94b6Gl819YzlS7LAdb8lgE6yQCysBEji5E3WoUdRve6tiVMLKAPPdLfItU4kOSUycWS5HFTrbug== dependencies: - npm-normalize-package-bin "^1.0.1" + chalk "^4.0.0" -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: - npm-normalize-package-bin "^2.0.0" + npm-normalize-package-bin "^3.0.0" -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== +npm-install-checks@^6.0.0, npm-install-checks@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" + integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== dependencies: semver "^7.1.1" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== +npm-normalize-package-bin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz#6097436adb4ef09e2628b59a7882576fe53ce485" + integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" + hosted-git-info "^6.0.0" + proc-log "^3.0.0" semver "^7.3.5" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" + ignore-walk "^6.0.0" -npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" + integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" semver "^7.3.5" -npm-profile@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e" - integrity sha512-Tlu13duByHyDd4Xy0PgroxzxnBYWbGGL5aZifNp8cx2DxUrHSoETXtPKg38aRPsBWMRfDtvcvVfJNasj7oImQQ== +npm-profile@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== dependencies: - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" + integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" + make-fetch-happen "^11.0.0" + minipass "^4.0.0" + minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" npm-run-all@4.1.5: version "4.1.5" @@ -8062,91 +8111,84 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npm-user-validate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== +npm-user-validate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== -npm@^8.3.0: - version "8.19.4" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.4.tgz#65ad6a2dfdd157a4ef4467fb86e8dcd35a43493f" - integrity sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw== +npm@^9.5.0: + version "9.6.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.6.4.tgz#ff4798c9778badac2fae83078ead9a88680978c2" + integrity sha512-8/Mct0X/w77PmgIpSlXfNIOlrZBfT+8966zLCxOhwi1qZ2Ueyy99uWPSDW6bt2OKw1NzrvHJBSgkzAvn1iWuhw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/config" "^4.2.1" - "@npmcli/fs" "^2.1.0" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.2.1" - abbrev "~1.1.1" + "@npmcli/arborist" "^6.2.7" + "@npmcli/config" "^6.1.5" + "@npmcli/map-workspaces" "^3.0.3" + "@npmcli/package-json" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + abbrev "^2.0.0" archy "~1.0.0" - cacache "^16.1.3" + cacache "^17.0.5" chalk "^4.1.2" - chownr "^2.0.0" + ci-info "^3.8.0" cli-columns "^4.0.0" - cli-table3 "^0.6.2" + cli-table3 "^0.6.3" columnify "^1.6.0" - fastest-levenshtein "^1.0.12" - fs-minipass "^2.1.0" - glob "^8.0.1" - graceful-fs "^4.2.10" - hosted-git-info "^5.2.1" + fastest-levenshtein "^1.0.16" + fs-minipass "^3.0.1" + glob "^9.3.2" + graceful-fs "^4.2.11" + hosted-git-info "^6.1.1" ini "^3.0.1" - init-package-json "^3.0.2" + init-package-json "^5.0.0" is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^6.0.4" - libnpmdiff "^4.0.5" - libnpmexec "^4.0.14" - libnpmfund "^3.0.5" - libnpmhook "^8.0.4" - libnpmorg "^4.0.4" - libnpmpack "^4.1.3" - libnpmpublish "^6.0.5" - libnpmsearch "^5.0.4" - libnpmteam "^4.0.4" - libnpmversion "^3.0.7" - make-fetch-happen "^10.2.0" - minimatch "^5.1.0" - minipass "^3.1.6" + json-parse-even-better-errors "^3.0.0" + libnpmaccess "^7.0.2" + libnpmdiff "^5.0.15" + libnpmexec "^5.0.15" + libnpmfund "^4.0.15" + libnpmhook "^9.0.3" + libnpmorg "^5.0.3" + libnpmpack "^5.0.15" + libnpmpublish "^7.1.3" + libnpmsearch "^6.0.2" + libnpmteam "^5.0.3" + libnpmversion "^4.0.2" + make-fetch-happen "^11.0.3" + minimatch "^7.4.3" + minipass "^4.2.5" minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" ms "^2.1.2" - node-gyp "^9.1.0" - nopt "^6.0.0" - npm-audit-report "^3.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.1.0" - npm-pick-manifest "^7.0.2" - npm-profile "^6.2.0" - npm-registry-fetch "^13.3.1" - npm-user-validate "^1.0.1" - npmlog "^6.0.2" - opener "^1.5.2" + node-gyp "^9.3.1" + nopt "^7.1.0" + npm-audit-report "^4.0.0" + npm-install-checks "^6.1.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-profile "^7.0.1" + npm-registry-fetch "^14.0.3" + npm-user-validate "^2.0.0" + npmlog "^7.0.1" p-map "^4.0.0" - pacote "^13.6.2" - parse-conflict-json "^2.0.2" - proc-log "^2.0.1" + pacote "^15.1.1" + parse-conflict-json "^3.0.1" + proc-log "^3.0.0" qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^5.0.2" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.1" - tar "^6.1.11" + read "^2.0.0" + read-package-json "^6.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.8" + ssri "^10.0.2" + tar "^6.1.13" text-table "~0.2.0" tiny-relative-date "^1.3.0" - treeverse "^2.0.0" - validate-npm-package-name "^4.0.0" - which "^2.0.2" - write-file-atomic "^4.0.1" + treeverse "^3.0.0" + validate-npm-package-name "^5.0.0" + which "^3.0.0" + write-file-atomic "^5.0.0" -npmlog@^6.0.0, npmlog@^6.0.2: +npmlog@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== @@ -8156,6 +8198,16 @@ npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -8229,11 +8281,6 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - openpgp@5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.7.0.tgz#fe0a346f26171ffb726636ae7ccb24a504281dbc" @@ -8398,31 +8445,28 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== +pacote@^15.0.0, pacote@^15.0.8, pacote@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.1.tgz#94d8c6e0605e04d427610b3aacb0357073978348" + integrity sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ== dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^4.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.0.0" + ssri "^10.0.0" tar "^6.1.11" parent-module@^1.0.0: @@ -8432,13 +8476,13 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== +parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" just-diff-apply "^5.2.0" parse-entities@^2.0.0: @@ -8471,6 +8515,17 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.0.0.tgz#51c0713f233b804eb5adee3ef1e75d3243e0ff06" + integrity sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw== + dependencies: + "@babel/code-frame" "^7.21.4" + error-ex "^1.3.2" + json-parse-even-better-errors "^3.0.0" + lines-and-columns "^2.0.3" + type-fest "^3.8.0" + parse-link-header@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-2.0.0.tgz#949353e284f8aa01f2ac857a98f692b57733f6b7" @@ -8646,22 +8701,27 @@ pretty-format@^29.4.1, pretty-format@^29.5.0: ansi-styles "^5.0.0" react-is "^18.0.0" -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== -promise-call-limit@^1.0.1: +promise-call-limit@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== @@ -8709,12 +8769,12 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: - read "1" + read "^2.0.0" propagate@^2.0.0: version "2.0.1" @@ -8805,28 +8865,28 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== +read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" -read-package-json@^5.0.0, read-package-json@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== +read-package-json@^6.0.0, read-package-json@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.1.tgz#566cb06bc05dbddefba4607e9096d5a9efbcd836" + integrity sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA== dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" + glob "^9.3.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: version "7.0.1" @@ -8855,7 +8915,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.0.0, read-pkg@^5.2.0: +read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -8875,6 +8935,16 @@ read-pkg@^7.1.0: parse-json "^5.2.0" type-fest "^2.0.0" +read-pkg@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.0.0.tgz#78b93774c15a3f151b56d5790d5127a5cb9fc507" + integrity sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw== + dependencies: + "@types/normalize-package-data" "^2.4.1" + normalize-package-data "^5.0.0" + parse-json "^7.0.0" + type-fest "^3.8.0" + read-yaml-file@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-2.1.0.tgz#c5866712db9ef5343b4d02c2413bada53c41c4a9" @@ -8883,12 +8953,12 @@ read-yaml-file@^2.1.0: js-yaml "^4.0.0" strip-bom "^4.0.0" -read@1, read@^1.0.7, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== +read@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.0.0.tgz#1d469a7321088e53b86ca77bf60a609e02f4eed8" + integrity sha512-88JMmpeeRYzW9gvIpYyXlYadWanW4vB2CYtDDVBfbRpbSogUNjTWEBXxJXMIVFSLjWVdCcdcIjI3+VV3Z2e9mw== dependencies: - mute-stream "~0.0.4" + mute-stream "~1.0.0" readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: version "3.6.2" @@ -8912,15 +8982,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== +readable-stream@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" + integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" rechoir@^0.6.2: version "0.6.2" @@ -9199,20 +9269,20 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semantic-release@20.1.3: - version "20.1.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-20.1.3.tgz#fb2e58aa2c9d4d3bee93d1bcb4563c3ffbba6f66" - integrity sha512-sMIK9IaOdLP9hxzTxdTVHxINsazlDgv2gjZ1yeyRZXpIT3xAnuQUDEez8k+AC+lFUtGnfzA2Ct3V5lDyiMestw== +semantic-release@21.0.1: + version "21.0.1" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.0.1.tgz#f2cb0eb1d0b1883efdac2883ec40342ac5c6ff30" + integrity sha512-UhGxTUXHJQCBFgEQRZszLOHDpMduDSHGq3Q+30Bu+g0GbXh/EW508+kuFHezP5m0mN8xINW8hooiR3dzSV5ZLA== dependencies: "@semantic-release/commit-analyzer" "^9.0.2" "@semantic-release/error" "^3.0.0" "@semantic-release/github" "^8.0.0" - "@semantic-release/npm" "^9.0.0" + "@semantic-release/npm" "^10.0.2" "@semantic-release/release-notes-generator" "^10.0.0" aggregate-error "^4.0.1" cosmiconfig "^8.0.0" debug "^4.0.0" - env-ci "^8.0.0" + env-ci "^9.0.0" execa "^7.0.0" figures "^5.0.0" find-versions "^5.1.0" @@ -9362,6 +9432,15 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" +sigstore@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.2.0.tgz#ae5b31dac75c2d31e7873897e2862f0d0b205bce" + integrity sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA== + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.0.0" + simple-git@3.17.0: version "3.17.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.17.0.tgz#1a961fa43f697b4e2391cf34c8a0554ef84fed8e" @@ -9548,7 +9627,14 @@ ssri@^10.0.0: dependencies: minipass "^4.0.0" -ssri@^9.0.0, ssri@^9.0.1: +ssri@^10.0.1, ssri@^10.0.2: + version "10.0.3" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.3.tgz#7f83da39058ca1d599d174e9eee4237659710bf4" + integrity sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg== + dependencies: + minipass "^4.0.0" + +ssri@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== @@ -9785,7 +9871,7 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar@^6.0.5, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: +tar@^6.0.5, tar@^6.1.11, tar@^6.1.13, tar@^6.1.2: version "6.1.13" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== @@ -9802,16 +9888,15 @@ temp-dir@^2.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== -tempy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== +tempy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.0.0.tgz#a6c0a15f5534a820e92c3e1369f1c1e87ebd6b68" + integrity sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA== dependencies: - del "^6.0.0" - is-stream "^2.0.0" + is-stream "^3.0.0" temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" + type-fest "^2.12.2" + unique-string "^3.0.0" test-exclude@^6.0.0: version "6.0.0" @@ -9925,10 +10010,10 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== trim-newlines@^3.0.0: version "3.0.1" @@ -10005,6 +10090,14 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tuf-js@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.3.tgz#db3aada70fbf91fd9def9ad255645eaf81309f69" + integrity sha512-jGYi5nG/kqgfTFQSdoN6PW9eIn+XRZqdXku+fSwNk6UpWIsWaV7pzAqPgFr85edOPhoyJDyBqCS+DCnHroMvrw== + dependencies: + "@tufjs/models" "1.0.2" + make-fetch-happen "^11.0.1" + tunnel@0.0.6, tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" @@ -10027,7 +10120,7 @@ type-detect@4.0.8, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@3.8.0: +type-fest@3.8.0, type-fest@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.8.0.tgz#ce80d1ca7c7d11c5540560999cbd410cb5b3a385" integrity sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q== @@ -10037,11 +10130,6 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -10067,12 +10155,12 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.2: +type-fest@^1.0.1, type-fest@^1.0.2: version "1.4.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.0.0, type-fest@^2.5.0: +type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.5.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== @@ -10172,12 +10260,12 @@ unique-slug@^4.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: - crypto-random-string "^2.0.0" + crypto-random-string "^4.0.0" unist-util-is@^4.0.0: version "4.1.0" @@ -10286,20 +10374,13 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@5.0.0: +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -10392,6 +10473,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +which@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.0.tgz#a9efd016db59728758a390d23f1687b6e8f59f8e" + integrity sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -10442,7 +10530,7 @@ write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1, write-file-atomic@^4.0.2: +write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== From 7666dd9efcd65ac5e20acd8879a8263bc72058f5 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 13 Apr 2023 16:20:49 +0200 Subject: [PATCH 027/122] docs: Add Maintaining AUR packages with Renovate user story (#21413) --- docs/usage/user-stories/.pages | 1 + .../maintaining-aur-packages-with-renovate.md | 172 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 docs/usage/user-stories/maintaining-aur-packages-with-renovate.md diff --git a/docs/usage/user-stories/.pages b/docs/usage/user-stories/.pages index 328263cc25e5fd..514440edf04e85 100644 --- a/docs/usage/user-stories/.pages +++ b/docs/usage/user-stories/.pages @@ -1,4 +1,5 @@ title: User Stories nav: - 'Swissquote': 'swissquote.md' + - 'Maintaining AUR packages with Renovate': 'maintaining-aur-packages-with-renovate.md' diff --git a/docs/usage/user-stories/maintaining-aur-packages-with-renovate.md b/docs/usage/user-stories/maintaining-aur-packages-with-renovate.md new file mode 100644 index 00000000000000..a9da98da7578d2 --- /dev/null +++ b/docs/usage/user-stories/maintaining-aur-packages-with-renovate.md @@ -0,0 +1,172 @@ + + + +# Maintaining AUR packages with Renovate + +> This article was written by [Jamie Magee](https://github.com/JamieMagee) and originally published on [Jamie Magee's blog](https://jamiemagee.co.uk/blog/maintaining-aur-packages-with-renovate/). + + +!!! note + Jamie Magee helps to maintain Renovate. + They obviously like Renovate, and want you to use it. + +One big advantage that Arch Linux has over other distributions, apart from being able to say “BTW I use Arch.”, is the Arch User Repository (AUR). +It’s a community-driven repository with over 80,000 packages. +If you’re looking for a package, chances are you'll find it in the AUR. + +Keeping all those packages up to date, takes a lot of manual effort by a lot of volunteers. +People have created and used tools, like [`urlwatch`](https://github.com/thp/urlwatch) and [`aurpublish`](https://github.com/eli-schwartz/aurpublish), to let them know when upstream releases are cut and automate some parts of the process. +I know I do. +But I wanted to automate the entire process. +I think [Renovate](https://github.com/renovatebot/renovate/) can help here. + +## Updating versions with Renovate + +Renovate is an automated dependency update tool. +You might have seen it opening pull requests on GitHub and making updates for npm or other package managers, but it’s a lot more powerful than just that. + +Renovate has a couple of concepts that I need to explain first: [datasources](../modules/datasource/index.md) and [managers](../modules/manager/index.md). +Datasources define where to look for new versions of a dependency. +Renovate comes with over 50 different datasources, but the one that is important for AUR packages is the [`git-tags` datasource](https://docs.renovatebot.com/modules/datasource/#git-tags-datasource). +Managers are the Renovate concept for package managers. +There isn’t an AUR or `PKGBUILD` manager, but there is a [regex manager](https://docs.renovatebot.com/modules/manager/regex/) that I can use. + +I can create a `renovate.json` configuration with the following regex manager configuration: + +```json +{ + "regexManagers": [ + { + "fileMatch": ["(^|/)PKGBUILD$"], + "matchStrings": [ + "pkgver=(?.*) # renovate: datasource=(?.*) depName=(?.*)" + ], + "extractVersionTemplate": "^v?(?.*)$" + } + ] +} +``` + +Breaking that down: + +- The `fileMatch` setting tells Renovate to look for any `PKGBUILD` files in a repository +- The `matchStrings` is the regex format to extract the version, datasource, and dependency name from the `PKGBUILD` +- The `extractVersionTemplate` is to handle a “v” in front of any version number that is sometimes added to Git tags + +And here’s an extract from the PKGBUILD for the [bicep-bin](https://aur.archlinux.org/packages/bicep-bin) AUR package that I maintain: + +```bash +pkgver=0.15.31 # renovate: datasource=github-tags depName=Azure/bicep +``` + +Here I’m configuring Renovate to use the [`github-tags`](https://docs.renovatebot.com/modules/datasource/github-tags/) datasource and to look in the [`Azure/bicep` GitHub repository](https://github.com/Azure/bicep) for new versions. +That means it’ll look in the [list of tags for the `Azure/bicep` repository](https://github.com/Azure/bicep/tags) for any new versions. +If Renovate finds any new versions, it’ll automatically update the `PKGBUILD` and open a pull request with the updated version. + +So I’ve automated the `PKGBUILD` update, but that’s only half of the work. +The checksums and `.SRCINFO` must be updated before pushing to the AUR. +Unfortunately, Renovate can’t do that (yet, see [Renovate issue #16923](https://github.com/renovatebot/renovate/issues/16923)), but GitHub Actions can! + +## Updating checksums and `.SRCINFO` with GitHub Actions + +Updating the checksums with `updpkgsums` is easy, and generating an updated `.SRCINFO` with `makepkg --printsrcinfo > .SRCINFO` is straightforward too. +But doing that for a whole repository of AUR packages is going to be a little trickier. +So let me build up the GitHub actions workflow step-by-step. + +First, I only want to run this workflow on pull requests targeting the `main` branch. + +```yaml +on: + pull_request: + types: + - opened + - synchronize + branches: + - main +``` + +Next, I’m going to need to check out the entire history of the repository, so I can compare the files changed in the latest commit with the Git history. + +```yaml +jobs: + updpkgsums: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + fetch-depth: 0 + ref: ${{ github.ref }} +``` + +Getting the package that changed in a pull request requires a little bit of shell magic. + +```yaml +- name: Find updated package + run: | + #!/usr/bin/env bash + set -euxo pipefail + + echo "pkgbuild=$(git diff --name-only origin/main origin/${GITHUB_HEAD_REF} "*PKGBUILD" | head -1 | xargs dirname)" >> $GITHUB_ENV +``` + +Now I’ve found the package that changed in the Renovate pull request, I can update the files. + +This step in the workflow uses a private GitHub Action that I have in my `aur-packages` repository. +I’m not going to break it down here, but at its core it runs `updpkgsums` and `makepkg --printsrcinfo > .SRCINFO` with a little extra configuration required to run Arch Linux on GitHub Actions runners. +You can [check out the full code on GitHub](https://github.com/JamieMagee/aur-packages/tree/main/.github/actions/aur). + +```yaml +- name: Validate package + if: ${{ env.pkgbuild != '' }} + uses: ./.github/actions/aur + with: + action: 'updpkgsums' + pkgname: ${{ env.pkgbuild }} +``` + +Finally, once the `PKGBUILD` and `.SRCINFO` are updated I need to commit that change back to the pull request. + +```yaml +- name: Commit + if: ${{ env.pkgbuild != '' }} + uses: stefanzweifel/git-auto-commit-action@3ea6ae190baf489ba007f7c92608f33ce20ef04a # v4.16.0 + with: + file_pattern: '*/PKGBUILD */.SRCINFO' +``` + +Check out [this pull request for `bicep-bin`](https://github.com/JamieMagee/aur-packages/pull/62) where Renovate opened a pull request, and my GitHub Actions workflow updated the `b2sums` in the `PKGBUILD` and updated the `.SRCINFO`. + +But why stop there? +Let’s talk about publishing. + +## Publishing to the AUR + +Each AUR package is its own Git repository. +So to update a package in the AUR, I only need to push a new commit with the updated `PKGBUILD` and `.SRCINFO`. +Thankfully, [KSXGitHub](https://github.com/KSXGitHub) created the [`github-actions-deploy-aur` GitHub Action](https://github.com/KSXGitHub/github-actions-deploy-aur) to streamline the whole process. + +If I create a new GitHub Actions workflow to publish to the AUR, I can reuse the first two steps from my previous workflow to check out the repository and find the updated package. +Then all I need to do is to use the `github-actions-deploy-aur` GitHub Action: + +```yaml +- name: Publish package + uses: KSXGitHub/github-actions-deploy-aur@065b6056b25bdd43830d5a3f01899d0ff7169819 # v2.6.0 + if: ${{ env.pkgbuild != '' }} + with: + pkgname: ${{ env.pkgbuild }} + pkgbuild: ${{ env.pkgbuild }}/PKGBUILD + commit_username: ${{ secrets.AUR_USERNAME }} + commit_email: ${{ secrets.AUR_EMAIL }} + ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} +``` + +### All together now + +If you own any AUR packages and want to automate some of the maintenance burden, check out [my AUR packages template GitHub repository](https://github.com/JamieMagee/aur-packages-template/). +It contains all of the steps I showed in this blog post. +And if you want to see how it works in practice, check out [my AUR packages GitHub repository](https://github.com/JamieMagee/aur-packages). From a12ac33f0f28f7c6e93bf465cdcdfacde0b6f96a Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 13 Apr 2023 09:01:04 -0600 Subject: [PATCH 028/122] fix(cache): use UTC dates for cache strategy calculations (#21488) --- .../abstract-cache-strategy.ts | 8 ++++---- .../memory-cache-strategy.spec.ts | 20 ++++++++++++++++++- .../package-cache-strategy.spec.ts | 2 +- .../package-cache-strategy.ts | 12 ++++++----- lib/util/github/graphql/util.ts | 2 +- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/util/github/graphql/cache-strategies/abstract-cache-strategy.ts b/lib/util/github/graphql/cache-strategies/abstract-cache-strategy.ts index 461b8f7b3eee15..ed23730c885e24 100644 --- a/lib/util/github/graphql/cache-strategies/abstract-cache-strategy.ts +++ b/lib/util/github/graphql/cache-strategies/abstract-cache-strategy.ts @@ -23,7 +23,7 @@ export abstract class AbstractGithubGraphqlCacheStrategy< /** * The time which is used during single cache access cycle. */ - protected readonly now = DateTime.now(); + protected readonly now = DateTime.now().toUTC(); /** * Set of all versions which were reconciled @@ -73,14 +73,14 @@ export abstract class AbstractGithubGraphqlCacheStrategy< const storedData = await this.load(); if (storedData) { const cacheTTLDuration = { - days: AbstractGithubGraphqlCacheStrategy.cacheTTLDays, + hours: AbstractGithubGraphqlCacheStrategy.cacheTTLDays * 24, }; if (!isDateExpired(this.now, storedData.createdAt, cacheTTLDuration)) { result = storedData; } } - this.createdAt = DateTime.fromISO(result.createdAt); + this.createdAt = DateTime.fromISO(result.createdAt).toUTC(); this.items = result.items; return this.items; } @@ -91,7 +91,7 @@ export abstract class AbstractGithubGraphqlCacheStrategy< */ private isStabilized(item: GithubItem): boolean { const unstableDuration = { - days: AbstractGithubGraphqlCacheStrategy.cacheTTLDays, + hours: AbstractGithubGraphqlCacheStrategy.cacheTTLDays * 24, }; return isDateExpired(this.now, item.releaseTimestamp, unstableDuration); } diff --git a/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts b/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts index 6c7bc66c7f4fe6..88849193a12b66 100644 --- a/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts +++ b/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts @@ -4,7 +4,25 @@ import { clone } from '../../../clone'; import type { GithubDatasourceItem, GithubGraphqlCacheRecord } from '../types'; import { GithubGraphqlMemoryCacheStrategy } from './memory-cache-strategy'; -const isoTs = (t: string) => DateTime.fromJSDate(new Date(t)).toISO()!; +// const isoTs = (t: string) => DateTime.fromJSDate(new Date(t)).toISO()!; + +const hourMinRe = /T\d{2}:\d{2}$/; +const hourMinSecRe = /T\d{2}:\d{2}:\d{2}$/; +const hourMinSecMillisRe = /T\d{2}:\d{2}:\d{2}\.\d\d\d$/; + +const isoTs = (t: string) => { + let iso = t.replace(' ', 'T'); + if (hourMinSecMillisRe.test(iso)) { + iso = iso + 'Z'; + } else if (hourMinSecRe.test(iso)) { + iso = iso + '.000Z'; + } else if (hourMinRe.test(iso)) { + iso = iso + ':00.000Z'; + } else { + throw new Error('Unrecognized date-time string. ' + t); + } + return iso; +}; const mockTime = (input: string): void => { const now = DateTime.fromISO(isoTs(input)).valueOf(); diff --git a/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts b/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts index 1ee0c3f9369044..80c02add16a5b3 100644 --- a/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts +++ b/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts @@ -4,7 +4,7 @@ import { clone } from '../../../clone'; import type { GithubDatasourceItem, GithubGraphqlCacheRecord } from '../types'; import { GithubGraphqlPackageCacheStrategy } from './package-cache-strategy'; -const isoTs = (t: string) => DateTime.fromJSDate(new Date(t)).toISO()!; +const isoTs = (t: string) => t.replace(' ', 'T') + ':00.000Z'; const mockTime = (input: string): void => { const now = DateTime.fromISO(isoTs(input)).valueOf(); diff --git a/lib/util/github/graphql/cache-strategies/package-cache-strategy.ts b/lib/util/github/graphql/cache-strategies/package-cache-strategy.ts index 6459f170c43d29..8e9f6f25e97439 100644 --- a/lib/util/github/graphql/cache-strategies/package-cache-strategy.ts +++ b/lib/util/github/graphql/cache-strategies/package-cache-strategy.ts @@ -16,11 +16,13 @@ export class GithubGraphqlPackageCacheStrategy< cacheRecord: GithubGraphqlCacheRecord ): Promise { if (this.hasUpdatedItems) { - const expiry = this.createdAt.plus({ - // Not using 'days' as it does not handle adjustments for Daylight Saving time. - // The offset in the resulting DateTime object does not match that of the expiry or this.now. - hours: AbstractGithubGraphqlCacheStrategy.cacheTTLDays * 24, - }); + const expiry = this.createdAt + .plus({ + // Not using 'days' as it does not handle adjustments for Daylight Saving time. + // The offset in the resulting DateTime object does not match that of the expiry or this.now. + hours: AbstractGithubGraphqlCacheStrategy.cacheTTLDays * 24, + }) + .toUTC(); const ttlMinutes = expiry.diff(this.now, ['minutes']).as('minutes'); if (ttlMinutes && ttlMinutes > 0) { await packageCache.set( diff --git a/lib/util/github/graphql/util.ts b/lib/util/github/graphql/util.ts index d595c39de488e2..1ae3214b418916 100644 --- a/lib/util/github/graphql/util.ts +++ b/lib/util/github/graphql/util.ts @@ -20,6 +20,6 @@ export function isDateExpired( initialTimestamp: string, duration: DurationLikeObject ): boolean { - const expiryTime = DateTime.fromISO(initialTimestamp).plus(duration); + const expiryTime = DateTime.fromISO(initialTimestamp).plus(duration).toUTC(); return currentTime >= expiryTime; } From 8b0acd4108072ae404d053f2f9b7da40dd4e41df Mon Sep 17 00:00:00 2001 From: Alex Kessock Date: Thu, 13 Apr 2023 09:19:13 -0600 Subject: [PATCH 029/122] feat: compare all branch authors when deciding if a branch is modified (#20739) --- lib/modules/platform/default-scm.spec.ts | 2 +- lib/modules/platform/default-scm.ts | 4 +- lib/modules/platform/types.ts | 2 +- lib/util/git/index.spec.ts | 48 ++++++++++- lib/util/git/index.ts | 85 ++++++++++++------- .../config-migration/branch/rebase.ts | 2 +- .../repository/onboarding/branch/rebase.ts | 4 +- lib/workers/repository/onboarding/pr/index.ts | 4 +- lib/workers/repository/update/branch/index.ts | 5 +- lib/workers/repository/update/branch/reuse.ts | 4 +- lib/workers/repository/update/pr/automerge.ts | 2 +- 11 files changed, 119 insertions(+), 43 deletions(-) diff --git a/lib/modules/platform/default-scm.spec.ts b/lib/modules/platform/default-scm.spec.ts index 023948fa3dacae..28826974dcd88a 100644 --- a/lib/modules/platform/default-scm.spec.ts +++ b/lib/modules/platform/default-scm.spec.ts @@ -45,7 +45,7 @@ describe('modules/platform/default-scm', () => { it('delegate isBranchModified to util/git', async () => { git.isBranchModified.mockResolvedValueOnce(true); - await defaultGitScm.isBranchModified('branchName'); + await defaultGitScm.isBranchModified('branchName', 'main'); expect(git.isBranchModified).toHaveBeenCalledTimes(1); }); }); diff --git a/lib/modules/platform/default-scm.ts b/lib/modules/platform/default-scm.ts index d21f3cff0b832e..cf30e1e6bbd674 100644 --- a/lib/modules/platform/default-scm.ts +++ b/lib/modules/platform/default-scm.ts @@ -27,7 +27,7 @@ export class DefaultGitScm implements PlatformScm { return git.isBranchConflicted(baseBranch, branch); } - isBranchModified(branchName: string): Promise { - return git.isBranchModified(branchName); + isBranchModified(branchName: string, baseBranch?: string): Promise { + return git.isBranchModified(branchName, baseBranch); } } diff --git a/lib/modules/platform/types.ts b/lib/modules/platform/types.ts index d37eae8db6c50a..1cd330290f8141 100644 --- a/lib/modules/platform/types.ts +++ b/lib/modules/platform/types.ts @@ -218,7 +218,7 @@ export interface Platform { export interface PlatformScm { isBranchBehindBase(branchName: string, baseBranch: string): Promise; - isBranchModified(branchName: string): Promise; + isBranchModified(branchName: string, baseBranch?: string): Promise; isBranchConflicted(baseBranch: string, branch: string): Promise; branchExists(branchName: string): Promise; getBranchCommit(branchName: string): Promise; diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 1f205f85bd4893..7cdbf5e507fa16 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -77,6 +77,20 @@ describe('util/git/index', () => { await repo.addConfig('user.email', 'custom@example.com'); await repo.commit('custom message'); + await repo.checkoutBranch('renovate/multiple_commits', defaultBranch); + await fs.writeFile(base.path + '/commit1', 'commit1'); + await repo.add(['commit1']); + await repo.addConfig('user.email', 'author1@example.com'); + await repo.commit('commit1 message'); + await fs.writeFile(base.path + '/commit2', 'commit2'); + await repo.add(['commit2']); + await repo.addConfig('user.email', 'author2@example.com'); + await repo.commit('commit2 message'); + await fs.writeFile(base.path + '/commit3', 'commit3'); + await repo.add(['commit3']); + await repo.addConfig('user.email', 'author1@example.com'); + await repo.commit('commit3 message'); + await repo.checkoutBranch('renovate/nested_files', defaultBranch); await fs.mkdirp(base.path + '/bin/'); await fs.writeFile(base.path + '/bin/nested', 'nested'); @@ -275,11 +289,16 @@ describe('util/git/index', () => { it('should return false when branch is not found', async () => { expect(await git.isBranchModified('renovate/not_found')).toBeFalse(); + expect( + await git.isBranchModified('renovate/not_found', defaultBranch) + ).toBeFalse(); }); it('should return false when author matches', async () => { expect(await git.isBranchModified('renovate/future_branch')).toBeFalse(); - expect(await git.isBranchModified('renovate/future_branch')).toBeFalse(); + expect( + await git.isBranchModified('renovate/future_branch', defaultBranch) + ).toBeFalse(); }); it('should return false when author is ignored', async () => { @@ -287,15 +306,42 @@ describe('util/git/index', () => { gitIgnoredAuthors: ['custom@example.com'], }); expect(await git.isBranchModified('renovate/custom_author')).toBeFalse(); + expect( + await git.isBranchModified('renovate/custom_author', defaultBranch) + ).toBeFalse(); + }); + + it('should return false if every author is ignored with multiple commits', async () => { + git.setUserRepoConfig({ + gitIgnoredAuthors: ['author1@example.com', 'author2@example.com'], + }); + expect( + await git.isBranchModified('renovate/multiple_commits', defaultBranch) + ).toBeFalse(); }); it('should return true when custom author is unknown', async () => { expect(await git.isBranchModified('renovate/custom_author')).toBeTrue(); + expect( + await git.isBranchModified('renovate/custom_author', defaultBranch) + ).toBeTrue(); + }); + + it('should return true if any commit is modified', async () => { + git.setUserRepoConfig({ + gitIgnoredAuthors: ['author1@example.com'], + }); + expect( + await git.isBranchModified('renovate/multiple_commits', defaultBranch) + ).toBeTrue(); }); it('should return value stored in modifiedCacheResult', async () => { modifiedCache.getCachedModifiedResult.mockReturnValue(true); expect(await git.isBranchModified('renovate/future_branch')).toBeTrue(); + expect( + await git.isBranchModified('renovate/future_branch', defaultBranch) + ).toBeTrue(); }); }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 2df34dfdcd43b9..8aea27da4d2c06 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -603,7 +603,10 @@ export async function isBranchBehindBase( } } -export async function isBranchModified(branchName: string): Promise { +export async function isBranchModified( + branchName: string, + baseBranch?: string +): Promise { if (!branchExists(branchName)) { logger.debug('branch.isModified(): no cache'); return false; @@ -623,21 +626,48 @@ export async function isBranchModified(branchName: string): Promise { return isModified; } - logger.debug('branch.isModified(): using git to calculate'); - await syncGit(); - // Retrieve the author of the most recent commit - let lastAuthor: string | undefined; + // Retrieve the commit authors + let branchAuthors: string[] = []; try { - lastAuthor = ( - await git.raw([ - 'log', - '-1', - '--pretty=format:%ae', - `origin/${branchName}`, - '--', - ]) - ).trim(); + if (baseBranch) { + logger.debug( + `branch.isModified(): using git to calculate authors between ${branchName} and ${baseBranch}` + ); + branchAuthors = [ + ...new Set( + ( + await git.raw([ + 'log', + '--pretty=format:%ae', + `origin/${branchName}...origin/${baseBranch}`, + '--', + ]) + ) + .trim() + .split('\n') + ), + ]; + } else { + logger.debug( + `branch.isModified(): checking last author of ${branchName}` + ); + branchAuthors = [ + ...new Set( + ( + await git.raw([ + 'log', + '-1', + '--pretty=format:%ae', + `origin/${branchName}`, + '--', + ]) + ) + .trim() + .split('\n') + ), + ]; + } } catch (err) /* istanbul ignore next */ { if (err.message?.includes('fatal: bad revision')) { logger.debug( @@ -646,26 +676,19 @@ export async function isBranchModified(branchName: string): Promise { ); throw new Error(REPOSITORY_CHANGED); } - logger.warn({ err }, 'Error checking last author for isBranchModified'); + logger.warn({ err }, 'Error retrieving git authors for isBranchModified'); } const { gitAuthorEmail } = config; - if ( - lastAuthor === gitAuthorEmail || - config.ignoredAuthors.some((ignoredAuthor) => lastAuthor === ignoredAuthor) - ) { - // author matches - branch has not been modified - logger.debug('branch.isModified() = false'); - config.branchIsModified[branchName] = false; - setCachedModifiedResult(branchName, false); - return false; + let branchIsModified = false; + for (const author of branchAuthors) { + if (author !== gitAuthorEmail && !config.ignoredAuthors.includes(author)) { + branchIsModified = true; + } } - logger.debug( - { branchName, lastAuthor, gitAuthorEmail }, - 'branch.isModified() = true' - ); - config.branchIsModified[branchName] = true; - setCachedModifiedResult(branchName, true); - return true; + logger.debug(`branch.isModified() = ${branchIsModified}`); + config.branchIsModified[branchName] = branchIsModified; + setCachedModifiedResult(branchName, branchIsModified); + return branchIsModified; } export async function isBranchConflicted( diff --git a/lib/workers/repository/config-migration/branch/rebase.ts b/lib/workers/repository/config-migration/branch/rebase.ts index cb932c11484244..041a6cf48539bc 100644 --- a/lib/workers/repository/config-migration/branch/rebase.ts +++ b/lib/workers/repository/config-migration/branch/rebase.ts @@ -16,7 +16,7 @@ export async function rebaseMigrationBranch( ): Promise { logger.debug('Checking if migration branch needs rebasing'); const branchName = getMigrationBranchName(config); - if (await scm.isBranchModified(branchName)) { + if (await scm.isBranchModified(branchName, config.baseBranch)) { logger.debug('Migration branch has been edited and cannot be rebased'); return null; } diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts index 4cb1d27345db4d..04f28a4c01b811 100644 --- a/lib/workers/repository/onboarding/branch/rebase.ts +++ b/lib/workers/repository/onboarding/branch/rebase.ts @@ -25,7 +25,9 @@ export async function rebaseOnboardingBranch( } // TODO #7154 - if (await scm.isBranchModified(config.onboardingBranch!)) { + if ( + await scm.isBranchModified(config.onboardingBranch!, config.defaultBranch) + ) { logger.debug('Onboarding branch has been edited and cannot be rebased'); return null; } diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 923dec654e8c2d..04aa5e753a83c4 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -96,7 +96,9 @@ If you need any further assistance then you can also [request help here](${ if (GlobalConfig.get('dryRun')) { // TODO: types (#7154) logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`); - } else if (await scm.isBranchModified(config.onboardingBranch!)) { + } else if ( + await scm.isBranchModified(config.onboardingBranch!, config.defaultBranch) + ) { configDesc = emojify( `### Configuration\n\n:abcd: Renovate has detected a custom config for this PR. Feel free to ask for [help](${ config.productLinks!.help diff --git a/lib/workers/repository/update/branch/index.ts b/lib/workers/repository/update/branch/index.ts index 077e15eacb9b9b..327e8ef57cac2d 100644 --- a/lib/workers/repository/update/branch/index.ts +++ b/lib/workers/repository/update/branch/index.ts @@ -190,7 +190,10 @@ export async function processBranch( } logger.debug('Checking if PR has been edited'); - const branchIsModified = await scm.isBranchModified(config.branchName); + const branchIsModified = await scm.isBranchModified( + config.branchName, + config.baseBranch + ); if (branchPr) { logger.debug('Found existing branch PR'); if (branchPr.state !== 'open') { diff --git a/lib/workers/repository/update/branch/reuse.ts b/lib/workers/repository/update/branch/reuse.ts index d99be494751221..92a82eabcf3b7c 100644 --- a/lib/workers/repository/update/branch/reuse.ts +++ b/lib/workers/repository/update/branch/reuse.ts @@ -59,7 +59,7 @@ export async function shouldReuseExistingBranch( if (await scm.isBranchBehindBase(branchName, baseBranch)) { logger.debug(`Branch is behind base branch and needs rebasing`); // We can rebase the branch only if no PR or PR can be rebased - if (await scm.isBranchModified(branchName)) { + if (await scm.isBranchModified(branchName, baseBranch)) { logger.debug('Cannot rebase branch as it has been modified'); result.reuseExistingBranch = true; result.isModified = true; @@ -80,7 +80,7 @@ export async function shouldReuseExistingBranch( if (result.isConflicted) { logger.debug('Branch is conflicted'); - if ((await scm.isBranchModified(branchName)) === false) { + if ((await scm.isBranchModified(branchName, baseBranch)) === false) { logger.debug(`Branch is not mergeable and needs rebasing`); if (config.rebaseWhen === 'never') { logger.debug('Rebasing disabled by config'); diff --git a/lib/workers/repository/update/pr/automerge.ts b/lib/workers/repository/update/pr/automerge.ts index 66960c8f8e56af..43853908c345c2 100644 --- a/lib/workers/repository/update/pr/automerge.ts +++ b/lib/workers/repository/update/pr/automerge.ts @@ -82,7 +82,7 @@ export async function checkAutoMerge( }; } // Check if it's been touched - if (await scm.isBranchModified(branchName)) { + if (await scm.isBranchModified(branchName, config.baseBranch)) { logger.debug('PR is ready for automerge but has been modified'); return { automerged: false, From ffbf6e929d6af0b4910942027d09ab971ce43587 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:27:50 +0000 Subject: [PATCH 030/122] chore(deps): update github/codeql-action action to v2.2.12 (#21493) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a9cf4fc9db983b..90d15b59887358 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,7 +30,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 with: languages: javascript @@ -40,7 +40,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@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/autobuild@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -54,4 +54,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 From bdd115c1f87b38f831d5934faf45abeabb2ba3c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:17:17 +0000 Subject: [PATCH 031/122] chore(deps): update dependency memfs to v3.5.0 (#21503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5fbf50f8e3cfc2..dcdced9d1959a9 100644 --- a/package.json +++ b/package.json @@ -317,7 +317,7 @@ "jest-mock-extended": "3.0.4", "lint-staged": "13.2.0", "markdownlint-cli2": "0.6.0", - "memfs": "3.4.13", + "memfs": "3.5.0", "mock-fs": "5.2.0", "mockdate": "3.0.5", "nock": "13.3.0", diff --git a/yarn.lock b/yarn.lock index d22c159ac4d418..a8069ec0171239 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7517,10 +7517,10 @@ mdurl@^1.0.1: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== -memfs@3.4.13: - version "3.4.13" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== +memfs@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.0.tgz#9da86405fca0a539addafd37dbd452344fd1c0bd" + integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== dependencies: fs-monkey "^1.0.3" From 5fb1747361186b484d507cfe9ff088a5caf8e377 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 14 Apr 2023 08:20:34 +0200 Subject: [PATCH 032/122] fix: Revert "feat: compare all branch authors when deciding if a branch is modified" (#21505) --- lib/modules/platform/default-scm.spec.ts | 2 +- lib/modules/platform/default-scm.ts | 4 +- lib/modules/platform/types.ts | 2 +- lib/util/git/index.spec.ts | 48 +---------- lib/util/git/index.ts | 85 +++++++------------ .../config-migration/branch/rebase.ts | 2 +- .../repository/onboarding/branch/rebase.ts | 4 +- lib/workers/repository/onboarding/pr/index.ts | 4 +- lib/workers/repository/update/branch/index.ts | 5 +- lib/workers/repository/update/branch/reuse.ts | 4 +- lib/workers/repository/update/pr/automerge.ts | 2 +- 11 files changed, 43 insertions(+), 119 deletions(-) diff --git a/lib/modules/platform/default-scm.spec.ts b/lib/modules/platform/default-scm.spec.ts index 28826974dcd88a..023948fa3dacae 100644 --- a/lib/modules/platform/default-scm.spec.ts +++ b/lib/modules/platform/default-scm.spec.ts @@ -45,7 +45,7 @@ describe('modules/platform/default-scm', () => { it('delegate isBranchModified to util/git', async () => { git.isBranchModified.mockResolvedValueOnce(true); - await defaultGitScm.isBranchModified('branchName', 'main'); + await defaultGitScm.isBranchModified('branchName'); expect(git.isBranchModified).toHaveBeenCalledTimes(1); }); }); diff --git a/lib/modules/platform/default-scm.ts b/lib/modules/platform/default-scm.ts index cf30e1e6bbd674..d21f3cff0b832e 100644 --- a/lib/modules/platform/default-scm.ts +++ b/lib/modules/platform/default-scm.ts @@ -27,7 +27,7 @@ export class DefaultGitScm implements PlatformScm { return git.isBranchConflicted(baseBranch, branch); } - isBranchModified(branchName: string, baseBranch?: string): Promise { - return git.isBranchModified(branchName, baseBranch); + isBranchModified(branchName: string): Promise { + return git.isBranchModified(branchName); } } diff --git a/lib/modules/platform/types.ts b/lib/modules/platform/types.ts index 1cd330290f8141..d37eae8db6c50a 100644 --- a/lib/modules/platform/types.ts +++ b/lib/modules/platform/types.ts @@ -218,7 +218,7 @@ export interface Platform { export interface PlatformScm { isBranchBehindBase(branchName: string, baseBranch: string): Promise; - isBranchModified(branchName: string, baseBranch?: string): Promise; + isBranchModified(branchName: string): Promise; isBranchConflicted(baseBranch: string, branch: string): Promise; branchExists(branchName: string): Promise; getBranchCommit(branchName: string): Promise; diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 7cdbf5e507fa16..1f205f85bd4893 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -77,20 +77,6 @@ describe('util/git/index', () => { await repo.addConfig('user.email', 'custom@example.com'); await repo.commit('custom message'); - await repo.checkoutBranch('renovate/multiple_commits', defaultBranch); - await fs.writeFile(base.path + '/commit1', 'commit1'); - await repo.add(['commit1']); - await repo.addConfig('user.email', 'author1@example.com'); - await repo.commit('commit1 message'); - await fs.writeFile(base.path + '/commit2', 'commit2'); - await repo.add(['commit2']); - await repo.addConfig('user.email', 'author2@example.com'); - await repo.commit('commit2 message'); - await fs.writeFile(base.path + '/commit3', 'commit3'); - await repo.add(['commit3']); - await repo.addConfig('user.email', 'author1@example.com'); - await repo.commit('commit3 message'); - await repo.checkoutBranch('renovate/nested_files', defaultBranch); await fs.mkdirp(base.path + '/bin/'); await fs.writeFile(base.path + '/bin/nested', 'nested'); @@ -289,16 +275,11 @@ describe('util/git/index', () => { it('should return false when branch is not found', async () => { expect(await git.isBranchModified('renovate/not_found')).toBeFalse(); - expect( - await git.isBranchModified('renovate/not_found', defaultBranch) - ).toBeFalse(); }); it('should return false when author matches', async () => { expect(await git.isBranchModified('renovate/future_branch')).toBeFalse(); - expect( - await git.isBranchModified('renovate/future_branch', defaultBranch) - ).toBeFalse(); + expect(await git.isBranchModified('renovate/future_branch')).toBeFalse(); }); it('should return false when author is ignored', async () => { @@ -306,42 +287,15 @@ describe('util/git/index', () => { gitIgnoredAuthors: ['custom@example.com'], }); expect(await git.isBranchModified('renovate/custom_author')).toBeFalse(); - expect( - await git.isBranchModified('renovate/custom_author', defaultBranch) - ).toBeFalse(); - }); - - it('should return false if every author is ignored with multiple commits', async () => { - git.setUserRepoConfig({ - gitIgnoredAuthors: ['author1@example.com', 'author2@example.com'], - }); - expect( - await git.isBranchModified('renovate/multiple_commits', defaultBranch) - ).toBeFalse(); }); it('should return true when custom author is unknown', async () => { expect(await git.isBranchModified('renovate/custom_author')).toBeTrue(); - expect( - await git.isBranchModified('renovate/custom_author', defaultBranch) - ).toBeTrue(); - }); - - it('should return true if any commit is modified', async () => { - git.setUserRepoConfig({ - gitIgnoredAuthors: ['author1@example.com'], - }); - expect( - await git.isBranchModified('renovate/multiple_commits', defaultBranch) - ).toBeTrue(); }); it('should return value stored in modifiedCacheResult', async () => { modifiedCache.getCachedModifiedResult.mockReturnValue(true); expect(await git.isBranchModified('renovate/future_branch')).toBeTrue(); - expect( - await git.isBranchModified('renovate/future_branch', defaultBranch) - ).toBeTrue(); }); }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 8aea27da4d2c06..2df34dfdcd43b9 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -603,10 +603,7 @@ export async function isBranchBehindBase( } } -export async function isBranchModified( - branchName: string, - baseBranch?: string -): Promise { +export async function isBranchModified(branchName: string): Promise { if (!branchExists(branchName)) { logger.debug('branch.isModified(): no cache'); return false; @@ -626,48 +623,21 @@ export async function isBranchModified( return isModified; } + logger.debug('branch.isModified(): using git to calculate'); + await syncGit(); - // Retrieve the commit authors - let branchAuthors: string[] = []; + // Retrieve the author of the most recent commit + let lastAuthor: string | undefined; try { - if (baseBranch) { - logger.debug( - `branch.isModified(): using git to calculate authors between ${branchName} and ${baseBranch}` - ); - branchAuthors = [ - ...new Set( - ( - await git.raw([ - 'log', - '--pretty=format:%ae', - `origin/${branchName}...origin/${baseBranch}`, - '--', - ]) - ) - .trim() - .split('\n') - ), - ]; - } else { - logger.debug( - `branch.isModified(): checking last author of ${branchName}` - ); - branchAuthors = [ - ...new Set( - ( - await git.raw([ - 'log', - '-1', - '--pretty=format:%ae', - `origin/${branchName}`, - '--', - ]) - ) - .trim() - .split('\n') - ), - ]; - } + lastAuthor = ( + await git.raw([ + 'log', + '-1', + '--pretty=format:%ae', + `origin/${branchName}`, + '--', + ]) + ).trim(); } catch (err) /* istanbul ignore next */ { if (err.message?.includes('fatal: bad revision')) { logger.debug( @@ -676,19 +646,26 @@ export async function isBranchModified( ); throw new Error(REPOSITORY_CHANGED); } - logger.warn({ err }, 'Error retrieving git authors for isBranchModified'); + logger.warn({ err }, 'Error checking last author for isBranchModified'); } const { gitAuthorEmail } = config; - let branchIsModified = false; - for (const author of branchAuthors) { - if (author !== gitAuthorEmail && !config.ignoredAuthors.includes(author)) { - branchIsModified = true; - } + if ( + lastAuthor === gitAuthorEmail || + config.ignoredAuthors.some((ignoredAuthor) => lastAuthor === ignoredAuthor) + ) { + // author matches - branch has not been modified + logger.debug('branch.isModified() = false'); + config.branchIsModified[branchName] = false; + setCachedModifiedResult(branchName, false); + return false; } - logger.debug(`branch.isModified() = ${branchIsModified}`); - config.branchIsModified[branchName] = branchIsModified; - setCachedModifiedResult(branchName, branchIsModified); - return branchIsModified; + logger.debug( + { branchName, lastAuthor, gitAuthorEmail }, + 'branch.isModified() = true' + ); + config.branchIsModified[branchName] = true; + setCachedModifiedResult(branchName, true); + return true; } export async function isBranchConflicted( diff --git a/lib/workers/repository/config-migration/branch/rebase.ts b/lib/workers/repository/config-migration/branch/rebase.ts index 041a6cf48539bc..cb932c11484244 100644 --- a/lib/workers/repository/config-migration/branch/rebase.ts +++ b/lib/workers/repository/config-migration/branch/rebase.ts @@ -16,7 +16,7 @@ export async function rebaseMigrationBranch( ): Promise { logger.debug('Checking if migration branch needs rebasing'); const branchName = getMigrationBranchName(config); - if (await scm.isBranchModified(branchName, config.baseBranch)) { + if (await scm.isBranchModified(branchName)) { logger.debug('Migration branch has been edited and cannot be rebased'); return null; } diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts index 04f28a4c01b811..4cb1d27345db4d 100644 --- a/lib/workers/repository/onboarding/branch/rebase.ts +++ b/lib/workers/repository/onboarding/branch/rebase.ts @@ -25,9 +25,7 @@ export async function rebaseOnboardingBranch( } // TODO #7154 - if ( - await scm.isBranchModified(config.onboardingBranch!, config.defaultBranch) - ) { + if (await scm.isBranchModified(config.onboardingBranch!)) { logger.debug('Onboarding branch has been edited and cannot be rebased'); return null; } diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 04aa5e753a83c4..923dec654e8c2d 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -96,9 +96,7 @@ If you need any further assistance then you can also [request help here](${ if (GlobalConfig.get('dryRun')) { // TODO: types (#7154) logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`); - } else if ( - await scm.isBranchModified(config.onboardingBranch!, config.defaultBranch) - ) { + } else if (await scm.isBranchModified(config.onboardingBranch!)) { configDesc = emojify( `### Configuration\n\n:abcd: Renovate has detected a custom config for this PR. Feel free to ask for [help](${ config.productLinks!.help diff --git a/lib/workers/repository/update/branch/index.ts b/lib/workers/repository/update/branch/index.ts index 327e8ef57cac2d..077e15eacb9b9b 100644 --- a/lib/workers/repository/update/branch/index.ts +++ b/lib/workers/repository/update/branch/index.ts @@ -190,10 +190,7 @@ export async function processBranch( } logger.debug('Checking if PR has been edited'); - const branchIsModified = await scm.isBranchModified( - config.branchName, - config.baseBranch - ); + const branchIsModified = await scm.isBranchModified(config.branchName); if (branchPr) { logger.debug('Found existing branch PR'); if (branchPr.state !== 'open') { diff --git a/lib/workers/repository/update/branch/reuse.ts b/lib/workers/repository/update/branch/reuse.ts index 92a82eabcf3b7c..d99be494751221 100644 --- a/lib/workers/repository/update/branch/reuse.ts +++ b/lib/workers/repository/update/branch/reuse.ts @@ -59,7 +59,7 @@ export async function shouldReuseExistingBranch( if (await scm.isBranchBehindBase(branchName, baseBranch)) { logger.debug(`Branch is behind base branch and needs rebasing`); // We can rebase the branch only if no PR or PR can be rebased - if (await scm.isBranchModified(branchName, baseBranch)) { + if (await scm.isBranchModified(branchName)) { logger.debug('Cannot rebase branch as it has been modified'); result.reuseExistingBranch = true; result.isModified = true; @@ -80,7 +80,7 @@ export async function shouldReuseExistingBranch( if (result.isConflicted) { logger.debug('Branch is conflicted'); - if ((await scm.isBranchModified(branchName, baseBranch)) === false) { + if ((await scm.isBranchModified(branchName)) === false) { logger.debug(`Branch is not mergeable and needs rebasing`); if (config.rebaseWhen === 'never') { logger.debug('Rebasing disabled by config'); diff --git a/lib/workers/repository/update/pr/automerge.ts b/lib/workers/repository/update/pr/automerge.ts index 43853908c345c2..66960c8f8e56af 100644 --- a/lib/workers/repository/update/pr/automerge.ts +++ b/lib/workers/repository/update/pr/automerge.ts @@ -82,7 +82,7 @@ export async function checkAutoMerge( }; } // Check if it's been touched - if (await scm.isBranchModified(branchName, config.baseBranch)) { + if (await scm.isBranchModified(branchName)) { logger.debug('PR is ready for automerge but has been modified'); return { automerged: false, From b548a938bcb30c220e1775f8ddddcc447f5627eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp?= Date: Fri, 14 Apr 2023 07:25:30 +0100 Subject: [PATCH 033/122] docs: add restriction on matchCurrentVersion (#21485) Co-authored-by: Rhys Arkins --- docs/usage/configuration-options.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index dce691c47270a5..a37bd906c287fd 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2031,7 +2031,7 @@ The `currentVersion` field will be one of the following (in order of preference) Consider using instead `matchCurrentValue` if you wish to match against the raw string value of a dependency. -`matchCurrentVersion` can be an exact SemVer version or a SemVer range: +`matchCurrentVersion` can be an exact version or a version range: ```json { @@ -2044,6 +2044,10 @@ Consider using instead `matchCurrentValue` if you wish to match against the raw } ``` +The syntax of the version range must follow the [versioning scheme](https://docs.renovatebot.com/modules/versioning/#supported-versioning) used by the matched package(s). +This is usually defined by the [manager](https://docs.renovatebot.com/modules/manager/#supported-managers) which discovered them or by the default versioning for the package's [datasource](https://docs.renovatebot.com/modules/datasource/). +For example, a Gradle package would typically need Gradle constraint syntax (e.g. `[,7.0)`) and not SemVer syntax (e.g. `<7.0`). + This field also supports Regular Expressions which must begin and end with `/`. For example, the following enforces that only `1.*` versions will be used: From 6b12beeb1b585eb6b6a5a4f1b0717c999e02d882 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 14 Apr 2023 10:15:00 +0200 Subject: [PATCH 034/122] build: support more containerbase tools --- lib/util/exec/containerbase.ts | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/util/exec/containerbase.ts b/lib/util/exec/containerbase.ts index d0966006b5feea..7c05ad685b2135 100644 --- a/lib/util/exec/containerbase.ts +++ b/lib/util/exec/containerbase.ts @@ -5,6 +5,8 @@ import { logger } from '../../logger'; import { getPkgReleases } from '../../modules/datasource'; import * as allVersioning from '../../modules/versioning'; import { id as composerVersioningId } from '../../modules/versioning/composer'; +import { id as gradleVersioningId } from '../../modules/versioning/gradle'; +import { id as mavenVersioningId } from '../../modules/versioning/maven'; import { id as nodeVersioningId } from '../../modules/versioning/node'; import { id as npmVersioningId } from '../../modules/versioning/npm'; import { id as pep440VersioningId } from '../../modules/versioning/pep440'; @@ -60,6 +62,16 @@ const allToolConfig: Record = { packageName: 'golang', versioning: npmVersioningId, }, + gradle: { + datasource: 'gradle-version', + packageName: 'gradle', + versioning: gradleVersioningId, + }, + hashin: { + datasource: 'pypi', + packageName: 'hashin', + versioning: pep440VersioningId, + }, helm: { datasource: 'github-releases', packageName: 'helm/helm', @@ -91,6 +103,11 @@ const allToolConfig: Record = { packageName: 'lerna', versioning: npmVersioningId, }, + maven: { + datasource: 'maven', + packageName: 'org.apache.maven:maven', + versioning: mavenVersioningId, + }, nix: { datasource: 'github-tags', packageName: 'NixOS/nix', @@ -112,6 +129,16 @@ const allToolConfig: Record = { packageName: 'containerbase/php-prebuild', versioning: composerVersioningId, }, + 'pip-tools': { + datasource: 'pypi', + packageName: 'pip-tools', + versioning: pep440VersioningId, + }, + pipenv: { + datasource: 'pypi', + packageName: 'pipenv', + versioning: pep440VersioningId, + }, pnpm: { datasource: 'npm', packageName: 'pnpm', @@ -219,7 +246,10 @@ export async function resolveConstraint( return constraint; } } else { - logger.warn({ toolName, constraint }, 'Invalid tool constraint'); + logger.warn( + { toolName, constraint, versioning: toolConfig.versioning }, + 'Invalid tool constraint' + ); constraint = undefined; } } From b32bafb4ddf6d57f970b0ee6ba25d2be89d11762 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Apr 2023 15:34:29 +0000 Subject: [PATCH 035/122] chore(deps): update dependency lint-staged to v13.2.1 (#21518) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dcdced9d1959a9..610a9dcc97953b 100644 --- a/package.json +++ b/package.json @@ -315,7 +315,7 @@ "jest-extended": "3.2.4", "jest-junit": "15.0.0", "jest-mock-extended": "3.0.4", - "lint-staged": "13.2.0", + "lint-staged": "13.2.1", "markdownlint-cli2": "0.6.0", "memfs": "3.5.0", "mock-fs": "5.2.0", diff --git a/yarn.lock b/yarn.lock index a8069ec0171239..26cbbf0b1319d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7149,10 +7149,10 @@ linkify-it@^4.0.1: dependencies: uc.micro "^1.0.1" -lint-staged@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.0.tgz#b7abaf79c91cd36d824f17b23a4ce5209206126a" - integrity sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw== +lint-staged@13.2.1: + version "13.2.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.1.tgz#9d30a14e3e42897ef417bc98556fb757f75cae87" + integrity sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw== dependencies: chalk "5.2.0" cli-truncate "^3.1.0" From 4e44417014be6912e493db93aa36121943aee9dc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Apr 2023 20:34:10 +0000 Subject: [PATCH 036/122] chore(deps): update dependency typescript to v5.0.4 (#21526) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 610a9dcc97953b..b524c13ef9960a 100644 --- a/package.json +++ b/package.json @@ -330,7 +330,7 @@ "ts-jest": "29.1.0", "ts-node": "10.9.1", "type-fest": "3.8.0", - "typescript": "5.0.3", + "typescript": "5.0.4", "unified": "9.2.2" }, "resolutions": { diff --git a/yarn.lock b/yarn.lock index 26cbbf0b1319d8..05befaafb4110a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10190,10 +10190,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.3.tgz#fe976f0c826a88d0a382007681cbb2da44afdedf" - integrity sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA== +typescript@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" From b0644358034c291c4c23baad2e9e1171dbb47fbd Mon Sep 17 00:00:00 2001 From: Jeroen de Bruijn <62570005+jdbruijn@users.noreply.github.com> Date: Sat, 15 Apr 2023 07:45:06 +0200 Subject: [PATCH 037/122] fix(manager/github-actions): allow dot `.` in reusable workflow repository name (#21519) --- lib/modules/manager/github-actions/extract.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/github-actions/extract.ts b/lib/modules/manager/github-actions/extract.ts index 90ff7ce93cfd13..714acad7e3db19 100644 --- a/lib/modules/manager/github-actions/extract.ts +++ b/lib/modules/manager/github-actions/extract.ts @@ -10,7 +10,7 @@ import type { Workflow } from './types'; const dockerActionRe = regEx(/^\s+uses: ['"]?docker:\/\/([^'"]+)\s*$/); const actionRe = regEx( - /^\s+-?\s+?uses: (?['"]?(?[\w-]+\/[\w-]+)(?\/.*)?@(?[^\s'"]+)['"]?(?:\s+#\s*(?:renovate\s*:\s*)?(?:pin\s+|tag\s*=\s*)?@?(?v?\d+(?:\.\d+(?:\.\d+)?)?))?)/ + /^\s+-?\s+?uses: (?['"]?(?[\w-]+\/[.\w-]+)(?\/.*)?@(?[^\s'"]+)['"]?(?:\s+#\s*(?:renovate\s*:\s*)?(?:pin\s+|tag\s*=\s*)?@?(?v?\d+(?:\.\d+(?:\.\d+)?)?))?)/ ); // SHA1 or SHA256, see https://github.blog/2020-10-19-git-2-29-released/ From 7e4a7a0cf16dd5350154dcedd4b8f0a2f1c649f0 Mon Sep 17 00:00:00 2001 From: Daiki Nishikawa Date: Sat, 15 Apr 2023 15:55:28 +0900 Subject: [PATCH 038/122] feat: add swc package to monorepo group (#21431) Co-authored-by: Michael Kriese --- 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 6fa72f85951539..dacc38adad2c4c 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -263,6 +263,7 @@ const orgGroups = { ngrx: 'https://github.com/ngrx/', nrwl: 'https://github.com/nrwl/', 'semantic-release': 'https://github.com/semantic-release/', + swc: 'https://github.com/swc-project/', }; /* eslint sort-keys: ["error", "asc", {caseSensitive: false, natural: true}] */ From d8400d307c332956071dd178c4773d8fd7c577bc Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 15 Apr 2023 09:33:30 +0200 Subject: [PATCH 039/122] build: add java-maven install-tool support --- lib/util/exec/containerbase.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/util/exec/containerbase.ts b/lib/util/exec/containerbase.ts index 7c05ad685b2135..bcb21adab9dee1 100644 --- a/lib/util/exec/containerbase.ts +++ b/lib/util/exec/containerbase.ts @@ -87,6 +87,12 @@ const allToolConfig: Record = { packageName: 'java', versioning: npmVersioningId, }, + /* not used in Renovate */ + 'java-maven': { + datasource: 'java-version', + packageName: 'java', + versioning: mavenVersioningId, + }, jb: { datasource: 'github-releases', packageName: 'jsonnet-bundler/jsonnet-bundler', From 09e43acdf68a32ee3259f77592b8de1be9ce2cd7 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Sat, 15 Apr 2023 20:09:43 +0200 Subject: [PATCH 040/122] fix(fs): allow `{}` inside paths (#21530) --- lib/util/fs/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/fs/util.ts b/lib/util/fs/util.ts index 5dbab5bf9342c0..ab7df10fdb1990 100644 --- a/lib/util/fs/util.ts +++ b/lib/util/fs/util.ts @@ -5,7 +5,7 @@ import { logger } from '../../logger'; // http://www.mtu.edu/umc/services/digital/writing/characters-avoid/ // We allow spaces, but not newlines -const restricted = /[[\]#%&{}<>*?\b\n\r\0!'"|‘“^`]/; +const restricted = /[[\]#%&<>*?\b\n\r\0!'"|‘“^`]/; function assertBaseDir(path: string, baseDir: string): void { if (!path.startsWith(baseDir)) { From 31a7db6db2995abcb3aa69816cd3e7a6c3202179 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Apr 2023 20:36:31 +0000 Subject: [PATCH 041/122] chore(deps): update node.js to b6efb2a (#21528) 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 bc9853f54eeec2..740cdb0db6a8b6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/containerbase/node:18.16.0@sha256:fc48ac97eb5d0dee207d4a336a52d7d3be68e1adec01cc1d13a1c12fab80a265 +FROM ghcr.io/containerbase/node:18.16.0@sha256:b6efb2ad8c2e8f36449c103d337fd398e70c7bec2c0da39fe3c185ca8a4f38bd USER root From 6d0aeee2b8243870738eeff4af4c6fa1b64b7808 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 16 Apr 2023 12:00:09 +0300 Subject: [PATCH 042/122] fix(maven): Support versions containing `+` sign (#21533) --- lib/modules/versioning/ivy/index.ts | 18 ++++++++++++++++-- lib/modules/versioning/maven/compare.spec.ts | 1 + lib/modules/versioning/maven/compare.ts | 4 ++-- lib/modules/versioning/maven/index.spec.ts | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/modules/versioning/ivy/index.ts b/lib/modules/versioning/ivy/index.ts index d8999f85ced7fc..79ff4641c11f70 100644 --- a/lib/modules/versioning/ivy/index.ts +++ b/lib/modules/versioning/ivy/index.ts @@ -42,13 +42,27 @@ function isValid(str: string): boolean { if (!str) { return false; } - return maven.isVersion(str) || !!parseDynamicRevision(str); + + if (LATEST_REGEX.test(str)) { + return true; + } + + return isVersion(str) || !!parseDynamicRevision(str); } function isVersion(str: string): boolean { - if (!str || LATEST_REGEX.test(str)) { + if (!str) { return false; } + + if (LATEST_REGEX.test(str)) { + return false; + } + + if (str.includes('+')) { + return false; + } + return maven.isVersion(str); } diff --git a/lib/modules/versioning/maven/compare.spec.ts b/lib/modules/versioning/maven/compare.spec.ts index 55b0af3d2b4587..61bcc1aaed34c2 100644 --- a/lib/modules/versioning/maven/compare.spec.ts +++ b/lib/modules/versioning/maven/compare.spec.ts @@ -187,6 +187,7 @@ describe('modules/versioning/maven/compare', () => { ${'1-0.alpha'} | ${'1-0.beta'} ${'1_5ea'} | ${'1_c3b'} ${'1_c3b'} | ${'2'} + ${'17.0.5'} | ${'17.0.5+8'} `('$x < $y', ({ x, y }) => { expect(compare(x, y)).toBe(-1); expect(compare(y, x)).toBe(1); diff --git a/lib/modules/versioning/maven/compare.ts b/lib/modules/versioning/maven/compare.ts index e65c1f2de2446f..f186d0fbfac286 100644 --- a/lib/modules/versioning/maven/compare.ts +++ b/lib/modules/versioning/maven/compare.ts @@ -44,7 +44,7 @@ function isDigit(char: string): boolean { } function isLetter(char: string): boolean { - return regEx(/^[a-z_]$/i).test(char); + return regEx(/^[a-z_+]$/i).test(char); } function isTransition(prevChar: string, nextChar: string): boolean { @@ -281,7 +281,7 @@ function isVersion(version: unknown): version is string { if (!version || typeof version !== 'string') { return false; } - if (!regEx(/^[a-z_0-9.-]+$/i).test(version)) { + if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) { return false; } if (regEx(/^[.-]/).test(version)) { diff --git a/lib/modules/versioning/maven/index.spec.ts b/lib/modules/versioning/maven/index.spec.ts index 1089a0c4aea73e..d52110c92440a3 100644 --- a/lib/modules/versioning/maven/index.spec.ts +++ b/lib/modules/versioning/maven/index.spec.ts @@ -11,6 +11,7 @@ describe('modules/versioning/maven/index', () => { test.each` version | expected ${'1.0.0'} | ${true} + ${'17.0.5+8'} | ${true} ${'[1.12.6,1.18.6]'} | ${true} ${undefined} | ${false} `('isValid("$version") === $expected', ({ version, expected }) => { From 69740ba73d9d67ebb01318a04ee1a08288522ba2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 00:29:32 +0000 Subject: [PATCH 043/122] docs: update references to renovate/renovate to v35.48.2 (#21542) 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 523a292ec3c643..a5b2dcc1772315 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -388,7 +388,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:35.40.0 +FROM renovate/renovate:35.48.2 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From e3624749de0c3b0818228b2f45ad7e897cf7e408 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 00:35:17 +0000 Subject: [PATCH 044/122] chore(deps): lock file maintenance (#21543) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 215 ++++++++++++++++++++++-------------------------------- 1 file changed, 89 insertions(+), 126 deletions(-) diff --git a/yarn.lock b/yarn.lock index 05befaafb4110a..a59c1f9f442f7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1040,9 +1040,9 @@ tslib "^2.3.1" "@aws-sdk/types@^3.222.0": - version "3.306.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.306.0.tgz#076aa94a1d711311c14bab10b251752506a21487" - integrity sha512-RnyknWWpQcRmNH7AsNr89sdhOoltCU/4YEwBMw34Eh+/36l7HfA5PdEKbsOkO7MO4+2g5qmmm/AHcnHRvymApg== + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.310.0.tgz#b83a0580feb38b58417abb8b4ed3eae1a0cb7bc1" + integrity sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A== dependencies: tslib "^2.5.0" @@ -1146,9 +1146,9 @@ tslib "^2.3.1" "@aws-sdk/util-locate-window@^3.0.0": - version "3.295.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.295.0.tgz#b421047b977ef53a8575b7b72780c7209ff5480e" - integrity sha512-d/s+zhUx5Kh4l/ecMP/TBjzp1GR/g89Q4nWH6+wH5WgdHsK+LG+vmsk6mVNuP/8wsCofYG4NBqp5Ulbztbm9QA== + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" + integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w== dependencies: tslib "^2.5.0" @@ -3243,11 +3243,11 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.3.0": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.57.1.tgz#da521391f16379b396896b120919c63f24fa78c2" - integrity sha512-5F5s8mpM1Y0RQ5iWzKQPQm5cmhARgcMfUwyHX1ZZFL8Tm0PyzyQ+9jgYSMaW74XXvpDg9/KdmMICLlwNwKtO7w== + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.58.0.tgz#157af1376add1a945c4559eef25114f0a29f49e1" + integrity sha512-LA/sRPaynZlrlYxdefrZbMx8dqs/1Kc0yNG+XOk5CwwZx7tTv263ix3AJNioF0YBVt7hADpAUR20owl6pv4MIQ== dependencies: - "@typescript-eslint/utils" "5.57.1" + "@typescript-eslint/utils" "5.58.0" "@typescript-eslint/parser@5.58.0": version "5.58.0" @@ -3259,14 +3259,6 @@ "@typescript-eslint/typescript-estree" "5.58.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" - integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== - dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" - "@typescript-eslint/scope-manager@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" @@ -3285,29 +3277,11 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" - integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== - "@typescript-eslint/types@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== -"@typescript-eslint/typescript-estree@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" - integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== - dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" @@ -3321,21 +3295,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.57.1", "@typescript-eslint/utils@^5.10.0": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" - integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/typescript-estree" "5.57.1" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/utils@5.58.0": +"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.10.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== @@ -3349,14 +3309,6 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" - integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== - dependencies: - "@typescript-eslint/types" "5.57.1" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" @@ -4070,9 +4022,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001477" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz#a2ffb2276258233034bbb869d4558b02658a511e" - integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== + version "1.0.30001479" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001479.tgz#ef3d6f76011e44181af411fd4896123afbc14eda" + integrity sha512-6nuRFim5dx8Eu2tO+KJ9PiBdPHs7WB5Hdf+klDcyefyEuOAcfhihIv7pS+JFknJLUiNQbm1AJYKm0c9QOlQS/Q== cardinal@^2.1.1: version "2.1.1" @@ -4303,9 +4255,9 @@ color-support@^1.1.3: integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== columnify@^1.6.0: version "1.6.0" @@ -4315,11 +4267,16 @@ columnify@^1.6.0: strip-ansi "^6.0.1" wcwidth "^1.0.0" -commander@10.0.0, commander@^10.0.0: +commander@10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + common-ancestor-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" @@ -4429,9 +4386,9 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-pure@^3.25.1: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.0.tgz#41b6c42e5f363bd53d79999bd35093b17e42e1bf" - integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec" + integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg== core-util-is@~1.0.0: version "1.0.3" @@ -4747,9 +4704,9 @@ editorconfig@1.0.2: semver "^7.3.8" electron-to-chromium@^1.4.284: - version "1.4.356" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz#b75a8a8c31d571f6024310cc980a08cd6c15a8c5" - integrity sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A== + version "1.4.365" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.365.tgz#ccd9e352d4493aa288d87e6ea36f3edf350c045e" + integrity sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg== email-addresses@5.0.0: version "5.0.0" @@ -4821,9 +4778,9 @@ enhanced-resolve@^5.12.0: tapable "^2.2.0" entities@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@~3.0.1: version "3.0.1" @@ -5002,9 +4959,9 @@ eslint-import-resolver-typescript@3.5.5: synckit "^0.8.5" eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -5062,9 +5019,9 @@ eslint-scope@^5.1.1: estraverse "^4.1.1" eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -5696,7 +5653,7 @@ globalyzer@0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== -globby@13.1.3, globby@^13.1.3: +globby@13.1.3: version "13.1.3" resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== @@ -5719,6 +5676,17 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + globrex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" @@ -6160,10 +6128,10 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" @@ -7323,9 +7291,9 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== lru-cache@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.0.0.tgz#daece36a9fc332e93f8e75f3fcfd17900253567c" - integrity sha512-9AEKXzvOZc4BMacFnYiTOlDH/197LNnQIK9wZ6iMB5NXPzuv4bWR/Msv7iUMplkiMQ1qQL+KSv/JF1mZAB5Lrg== + version "9.0.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.0.3.tgz#8a04f282df5320227bb7215c55df2660d3e4e25b" + integrity sha512-cyjNRew29d4kbgnz1sjDqxg7qg8NW4s+HQzCGjeon7DV5T2yDije16W9HaUFV1dhVEMh+SjrOcK0TomBmf3Egg== luxon@3.3.0, luxon@^3.3.0: version "3.3.0" @@ -7367,9 +7335,9 @@ make-fetch-happen@^10.0.3: ssri "^9.0.0" make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz#ed83dd3685b97f75607156d2721848f6eca561b9" - integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== + version "11.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz#f26b05e89317e960b75fd5e080e40d40f8d7b2a5" + integrity sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA== dependencies: agentkeepalive "^4.2.1" cacache "^17.0.0" @@ -7692,9 +7660,9 @@ minipass-fetch@^2.0.3: encoding "^0.1.13" minipass-fetch@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.1.tgz#bae3789f668d82ffae3ea47edc6b78b8283b3656" - integrity sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw== + version "3.0.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.2.tgz#2f7275ae13f2fb0f2a469cee4f78250c25c80ab3" + integrity sha512-/ZpF1CQaWYqjbhfFgKNt3azxztEpc/JUPuMkqOgrnMQqcU8CbE409AUdJYTIWryl3PP5CBaTJZT71N49MXP/YA== dependencies: minipass "^4.0.0" minipass-sized "^1.0.3" @@ -7738,12 +7706,7 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0, minipass@^4.2.4: - version "4.2.7" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.7.tgz#14c6fc0dcab54d9c4dd64b2b7032fef04efec218" - integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== - -minipass@^4.2.5: +minipass@^4.0.0, minipass@^4.2.4, minipass@^4.2.5: version "4.2.8" resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== @@ -8070,9 +8033,9 @@ npm-profile@^7.0.1: proc-log "^3.0.0" npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: - version "14.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" - integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== + version "14.0.4" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.4.tgz#43dfa55ce7c0d0c545d625c7a916bab5b95f7038" + integrity sha512-pMS2DRkwg+M44ct65zrN/Cr9IHK1+n6weuefAo6Er4lc+/8YBCU0Czq04H3ZiSigluh7pb2rMM5JpgcytctB+Q== dependencies: make-fetch-happen "^11.0.0" minipass "^4.0.0" @@ -8588,9 +8551,9 @@ path-parse@^1.0.7: integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.6.1: - version "1.6.4" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.6.4.tgz#020a9449e5382a4acb684f9c7e1283bc5695de66" - integrity sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" + integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== dependencies: lru-cache "^9.0.0" minipass "^5.0.0" @@ -8954,9 +8917,9 @@ read-yaml-file@^2.1.0: strip-bom "^4.0.0" read@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read/-/read-2.0.0.tgz#1d469a7321088e53b86ca77bf60a609e02f4eed8" - integrity sha512-88JMmpeeRYzW9gvIpYyXlYadWanW4vB2CYtDDVBfbRpbSogUNjTWEBXxJXMIVFSLjWVdCcdcIjI3+VV3Z2e9mw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: mute-stream "~1.0.0" @@ -9140,11 +9103,11 @@ resolve.exports@^2.0.0: integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.12.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -9337,13 +9300,20 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.8, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9620,14 +9590,7 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.2.tgz#3791753e5e119274a83e5af7cac2f615528db3d6" - integrity sha512-LWMXUSh7fEfCXNBq4UnRzC4Qc5Y1PPg5ogmb+6HX837i2cKzjB133aYmQ4lgO0shVTcTQHquKp3v5bn898q3Sw== - dependencies: - minipass "^4.0.0" - -ssri@^10.0.1, ssri@^10.0.2: +ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.2: version "10.0.3" resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.3.tgz#7f83da39058ca1d599d174e9eee4237659710bf4" integrity sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg== @@ -10312,9 +10275,9 @@ upath@2.0.1: integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" From 7a2376b05c0c66a1a38f569b25a3fa151e0bd6bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:04:33 +0000 Subject: [PATCH 045/122] chore(deps): lock file maintenance (#21544) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 2125ba2858a49d5573411f78e966e04311e21f2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:36:45 +0000 Subject: [PATCH 046/122] chore(deps): lock file maintenance (#21545) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 0ca8d8a891653ea1d5b78a8bbace3980ba3dd077 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 02:12:01 +0000 Subject: [PATCH 047/122] chore(deps): lock file maintenance (#21546) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 5b4f7e98db780a20bac7095fdb029ac88f1dfb0e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 08:11:21 +0200 Subject: [PATCH 048/122] chore(deps): lock file maintenance (#21547) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 94b42c5123a89574118f00dc6b524ea7fcaea9cd Mon Sep 17 00:00:00 2001 From: Johannes Feichtner <343448+Churro@users.noreply.github.com> Date: Mon, 17 Apr 2023 08:13:31 +0200 Subject: [PATCH 049/122] refactor(gradle/manager): introduce method to resolve variables (#21531) --- .../manager/gradle/parser/common.spec.ts | 19 ++++++-- lib/modules/manager/gradle/parser/common.ts | 20 ++++++-- lib/modules/manager/gradle/parser/handlers.ts | 46 +++++++++---------- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/lib/modules/manager/gradle/parser/common.spec.ts b/lib/modules/manager/gradle/parser/common.spec.ts index c2742363c049a7..9b2c2339dead2f 100644 --- a/lib/modules/manager/gradle/parser/common.spec.ts +++ b/lib/modules/manager/gradle/parser/common.spec.ts @@ -1,9 +1,10 @@ import type { lexer } from 'good-enough-parser'; import { partial } from '../../../../../test/util'; -import type { Ctx, PackageVariables } from '../types'; +import type { Ctx } from '../types'; import { cleanupTempVars, coalesceVariable, + findVariable, increaseNestingDepth, interpolateString, loadFromTokenMap, @@ -112,8 +113,17 @@ describe('modules/manager/gradle/parser/common', () => { expect(ctx.varTokens).toStrictEqual([{ value: 'foo.bar.baz.qux' }]); }); + it('findVariable', () => { + ctx.globalVars = { + foo: { key: 'foo', value: 'bar' }, + }; + + expect(findVariable('unknown-global-var', ctx)).toBeUndefined(); + expect(findVariable('foo', ctx)).toStrictEqual(ctx.globalVars['foo']); + }); + it('interpolateString', () => { - expect(interpolateString([], {})).toBeEmptyString(); + expect(interpolateString([], ctx)).toBeEmptyString(); expect( interpolateString( partial([ @@ -121,6 +131,7 @@ describe('modules/manager/gradle/parser/common', () => { { type: 'symbol', value: 'bar' }, { type: 'string-value', value: 'baz' }, ]), + ctx, { bar: { key: '', value: 'BAR' }, } @@ -129,13 +140,13 @@ describe('modules/manager/gradle/parser/common', () => { expect( interpolateString( partial([{ type: 'symbol', value: 'foo' }]), - partial() + ctx ) ).toBeNull(); expect( interpolateString( partial([{ type: '_', value: 'foo' }]), - partial() + ctx ) ).toBeNull(); }); diff --git a/lib/modules/manager/gradle/parser/common.ts b/lib/modules/manager/gradle/parser/common.ts index 4693da32c294f6..43a1032311811d 100644 --- a/lib/modules/manager/gradle/parser/common.ts +++ b/lib/modules/manager/gradle/parser/common.ts @@ -1,7 +1,12 @@ import { lexer, parser, query as q } from 'good-enough-parser'; import { clone } from '../../../../util/clone'; import { regEx } from '../../../../util/regex'; -import type { Ctx, NonEmptyArray, PackageVariables } from '../types'; +import type { + Ctx, + NonEmptyArray, + PackageVariables, + VariableData, +} from '../types'; export const REGISTRY_URLS = { google: 'https://dl.google.com/android/maven2/', @@ -114,9 +119,18 @@ export function coalesceVariable(ctx: Ctx): Ctx { return ctx; } +export function findVariable( + name: string, + ctx: Ctx, + variables: PackageVariables = ctx.globalVars +): VariableData | undefined { + return variables[name]; +} + export function interpolateString( childTokens: lexer.Token[], - variables: PackageVariables + ctx: Ctx, + variables: PackageVariables = ctx.globalVars ): string | null { const resolvedSubstrings: string[] = []; for (const childToken of childTokens) { @@ -124,7 +138,7 @@ export function interpolateString( if (type === 'string-value') { resolvedSubstrings.push(childToken.value); } else if (type === 'symbol') { - const varData = variables[childToken.value]; + const varData = findVariable(childToken.value, ctx, variables); if (varData) { resolvedSubstrings.push(varData.value); } else { diff --git a/lib/modules/manager/gradle/parser/handlers.ts b/lib/modules/manager/gradle/parser/handlers.ts index 972322435b479f..4ffbb70a0e319e 100644 --- a/lib/modules/manager/gradle/parser/handlers.ts +++ b/lib/modules/manager/gradle/parser/handlers.ts @@ -11,6 +11,7 @@ import { ANNOYING_METHODS, GRADLE_PLUGINS, REGISTRY_URLS, + findVariable, interpolateString, loadFromTokenMap, } from './common'; @@ -32,7 +33,7 @@ export function handleAssignment(ctx: Ctx): Ctx { delete ctx.tokenMap.templateStringTokens; } else if (valTokens[0].type === 'symbol') { // foo = bar || foo = "${bar}" - const varData = ctx.globalVars[valTokens[0].value]; + const varData = findVariable(valTokens[0].value, ctx); if (varData) { ctx.globalVars[key] = { ...varData }; } @@ -62,7 +63,7 @@ export function handleAssignment(ctx: Ctx): Ctx { export function handleDepString(ctx: Ctx): Ctx { const stringTokens = loadFromTokenMap(ctx, 'templateStringTokens'); - const templateString = interpolateString(stringTokens, ctx.globalVars); + const templateString = interpolateString(stringTokens, ctx); if (!templateString) { return ctx; } @@ -76,7 +77,7 @@ export function handleDepString(ctx: Ctx): Ctx { let fileReplacePosition: number | undefined; for (const token of stringTokens) { if (token.type === 'symbol') { - const varData = ctx.globalVars[token.value]; + const varData = findVariable(token.value, ctx); if (varData) { packageFile = varData.packageFile; fileReplacePosition = varData.fileReplacePosition; @@ -118,8 +119,8 @@ export function handleKotlinShortNotationDep(ctx: Ctx): Ctx { const moduleNameTokens = loadFromTokenMap(ctx, 'artifactId'); const versionTokens = loadFromTokenMap(ctx, 'version'); - const moduleName = interpolateString(moduleNameTokens, ctx.globalVars); - const versionValue = interpolateString(versionTokens, ctx.globalVars); + const moduleName = interpolateString(moduleNameTokens, ctx); + const versionValue = interpolateString(versionTokens, ctx); if (!moduleName || !versionValue) { return ctx; } @@ -141,7 +142,7 @@ export function handleKotlinShortNotationDep(ctx: Ctx): Ctx { // = template string with multiple variables dep.skipReason = 'unknown-version'; } else if (versionTokens[0].type === 'symbol') { - const varData = ctx.globalVars[versionTokens[0].value]; + const varData = findVariable(versionTokens[0].value, ctx); if (varData) { dep.groupName = varData.key; dep.currentValue = varData.value; @@ -162,9 +163,9 @@ export function handleLongFormDep(ctx: Ctx): Ctx { const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId'); const versionTokens = loadFromTokenMap(ctx, 'version'); - const groupId = interpolateString(groupIdTokens, ctx.globalVars); - const artifactId = interpolateString(artifactIdTokens, ctx.globalVars); - const version = interpolateString(versionTokens, ctx.globalVars); + const groupId = interpolateString(groupIdTokens, ctx); + const artifactId = interpolateString(artifactIdTokens, ctx); + const version = interpolateString(versionTokens, ctx); if (!groupId || !artifactId || !version) { return ctx; } @@ -179,7 +180,7 @@ export function handleLongFormDep(ctx: Ctx): Ctx { // = template string with multiple variables dep.skipReason = 'unknown-version'; } else if (versionTokens[0].type === 'symbol') { - const varData = ctx.globalVars[versionTokens[0].value]; + const varData = findVariable(versionTokens[0].value, ctx); if (varData) { dep.groupName = varData.key; dep.managerData = { @@ -233,7 +234,7 @@ export function handlePlugin(ctx: Ctx): Ctx { // = template string with multiple variables dep.skipReason = 'unknown-version'; } else if (pluginVersion[0].type === 'symbol') { - const varData = ctx.globalVars[pluginVersion[0].value]; + const varData = findVariable(pluginVersion[0].value, ctx); if (varData) { dep.groupName = varData.key; dep.currentValue = varData.value; @@ -276,7 +277,7 @@ export function handleCustomRegistryUrl(ctx: Ctx): Ctx { if (ctx.tokenMap.name) { const nameTokens = loadFromTokenMap(ctx, 'name'); - const nameValue = interpolateString(nameTokens, localVariables); + const nameValue = interpolateString(nameTokens, ctx, localVariables); if (nameValue) { localVariables = { ...localVariables, @@ -290,6 +291,7 @@ export function handleCustomRegistryUrl(ctx: Ctx): Ctx { let registryUrl = interpolateString( loadFromTokenMap(ctx, 'registryUrl'), + ctx, localVariables ); if (registryUrl) { @@ -314,8 +316,8 @@ export function handleLibraryDep(ctx: Ctx): Ctx { const groupIdTokens = loadFromTokenMap(ctx, 'groupId'); const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId'); - const groupId = interpolateString(groupIdTokens, ctx.globalVars); - const artifactId = interpolateString(artifactIdTokens, ctx.globalVars); + const groupId = interpolateString(groupIdTokens, ctx); + const artifactId = interpolateString(artifactIdTokens, ctx); if (!groupId || !artifactId) { return ctx; } @@ -331,10 +333,7 @@ export function handleLibraryDep(ctx: Ctx): Ctx { }; if (ctx.tokenMap.version) { - const version = interpolateString( - loadFromTokenMap(ctx, 'version'), - ctx.globalVars - ); + const version = interpolateString(loadFromTokenMap(ctx, 'version'), ctx); if (version) { handleLongFormDep(ctx); } @@ -344,10 +343,7 @@ export function handleLibraryDep(ctx: Ctx): Ctx { } export function handleApplyFrom(ctx: Ctx): Ctx { - let scriptFile = interpolateString( - loadFromTokenMap(ctx, 'scriptFile'), - ctx.globalVars - ); + let scriptFile = interpolateString(loadFromTokenMap(ctx, 'scriptFile'), ctx); if (!scriptFile) { return ctx; } @@ -355,7 +351,7 @@ export function handleApplyFrom(ctx: Ctx): Ctx { if (ctx.tokenMap.parentPath) { const parentPath = interpolateString( loadFromTokenMap(ctx, 'parentPath'), - ctx.globalVars + ctx ); if (parentPath && scriptFile) { scriptFile = upath.join(parentPath, scriptFile); @@ -397,7 +393,7 @@ export function handleApplyFrom(ctx: Ctx): Ctx { export function handleImplicitGradlePlugin(ctx: Ctx): Ctx { const pluginName = loadFromTokenMap(ctx, 'pluginName')[0].value; const versionTokens = loadFromTokenMap(ctx, 'version'); - const versionValue = interpolateString(versionTokens, ctx.globalVars); + const versionValue = interpolateString(versionTokens, ctx); if (!versionValue) { return ctx; } @@ -420,7 +416,7 @@ export function handleImplicitGradlePlugin(ctx: Ctx): Ctx { // = template string with multiple variables dep.skipReason = 'unknown-version'; } else if (versionTokens[0].type === 'symbol') { - const varData = ctx.globalVars[versionTokens[0].value]; + const varData = findVariable(versionTokens[0].value, ctx); if (varData) { dep.groupName = varData.key; dep.currentValue = varData.value; From 62b57aa27c890c4ebfe25822bc2df6b76ac0fcf4 Mon Sep 17 00:00:00 2001 From: DjordyKoert Date: Mon, 17 Apr 2023 08:16:02 +0200 Subject: [PATCH 050/122] feat: disable setting COMPOSER_AUTH for gitlab (#20634) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- docs/usage/configuration-options.md | 25 ++ lib/config/options/index.ts | 14 + .../manager/composer/artifacts.spec.ts | 323 ++++++++++++++++++ lib/modules/manager/composer/artifacts.ts | 50 ++- lib/modules/manager/composer/utils.spec.ts | 43 +-- lib/modules/manager/composer/utils.ts | 12 +- lib/types/host-rules.ts | 1 + 7 files changed, 428 insertions(+), 40 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index a37bd906c287fd..d9ed849b8e73de 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1348,6 +1348,31 @@ Example: If enabled, this allows a single TCP connection to remain open for multiple HTTP(S) requests/responses. +### artifactAuth + +You may use this field whenever it is needed to only enable authentication for a specific set of managers. + +For example, using this option could be used whenever authentication using Git for private composer packages is already being handled through the use of SSH keys, which results in no need for also setting up authentication using tokens. + +```json +{ + "hostRules": [ + { + "hostType": "gitlab", + "matchHost": "gitlab.myorg.com", + "token": "abc123", + "artifactAuth": ["composer"] + } + ] +} +``` + +Supported artifactAuth and hostType combinations: + +| artifactAuth | hostTypes | +| ------------ | ------------------------------------------- | +| `composer` | `gitlab`, `packagist`, `github`, `git-tags` | + ### matchHost This can be a base URL (e.g. `https://api.github.com`) or a hostname like `github.com` or `api.github.com`. diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 233ba616f235a9..4702833112fe32 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -2302,6 +2302,20 @@ const options: RenovateOptions[] = [ env: false, experimental: true, }, + { + name: 'artifactAuth', + description: + 'A list of package managers to enable artifact auth. Only managers on the list are enabled. All are enabled if `null`', + experimental: true, + type: 'array', + subType: 'string', + stage: 'repository', + parent: 'hostRules', + allowedValues: ['composer'], + default: null, + cli: false, + env: false, + }, { name: 'cacheHardTtlMinutes', description: diff --git a/lib/modules/manager/composer/artifacts.spec.ts b/lib/modules/manager/composer/artifacts.spec.ts index d7486171970396..bd197b7233d21c 100644 --- a/lib/modules/manager/composer/artifacts.spec.ts +++ b/lib/modules/manager/composer/artifacts.spec.ts @@ -292,6 +292,329 @@ describe('modules/manager/composer/artifacts', () => { ]); }); + it('does set github COMPOSER_AUTH for github when only hostType git-tags artifactAuth does not include composer', async () => { + hostRules.add({ + hostType: 'github', + matchHost: 'api.github.com', + token: 'ghs_token', + }); + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + artifactAuth: [], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: '{"github-oauth":{"github.com":"ghs_token"}}', + }, + }, + }, + ]); + }); + + it('does set github COMPOSER_AUTH for git-tags when only hostType github artifactAuth does not include composer', async () => { + hostRules.add({ + hostType: 'github', + matchHost: 'api.github.com', + token: 'ghs_token', + artifactAuth: [], + }); + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: '{"github-oauth":{"github.com":"ghp_token"}}', + }, + }, + }, + ]); + }); + + it('does not set github COMPOSER_AUTH when artifactAuth does not include composer, for both hostType github & git-tags', async () => { + hostRules.add({ + hostType: 'github', + matchHost: 'api.github.com', + token: 'ghs_token', + artifactAuth: [], + }); + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + artifactAuth: [], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + expect(execSnapshots[0].options?.env).not.toContainKey('COMPOSER_AUTH'); + }); + + it('does not set gitlab COMPOSER_AUTH when artifactAuth does not include composer', async () => { + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + }); + hostRules.add({ + hostType: 'gitlab', + matchHost: 'gitlab.com', + token: 'gitlab-token', + artifactAuth: [], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + postUpdateOptions: ['composerGitlabToken'], + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: '{"github-oauth":{"github.com":"ghp_token"}}', + }, + }, + }, + ]); + }); + + it('does not set packagist COMPOSER_AUTH when artifactAuth does not include composer', async () => { + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'packagist.renovatebot.com', + username: 'some-username', + password: 'some-password', + artifactAuth: [], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'https://artifactory.yyyyyyy.com/artifactory/api/composer/', + username: 'some-other-username', + password: 'some-other-password', + artifactAuth: [], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + username: 'some-other-username', + password: 'some-other-password', + artifactAuth: [], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'https://packages-bearer.example.com/', + token: 'abcdef0123456789', + artifactAuth: [], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + postUpdateOptions: ['composerGitlabToken'], + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: '{"github-oauth":{"github.com":"ghp_token"}}', + }, + }, + }, + ]); + }); + + it('does set gitlab COMPOSER_AUTH when artifactAuth does include composer', async () => { + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + }); + hostRules.add({ + hostType: 'gitlab', + matchHost: 'gitlab.com', + token: 'gitlab-token', + artifactAuth: ['composer'], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + postUpdateOptions: ['composerGitlabToken'], + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: + '{"github-oauth":{"github.com":"ghp_token"},' + + '"gitlab-token":{"gitlab.com":"gitlab-token"},' + + '"gitlab-domains":["gitlab.com"]}', + }, + }, + }, + ]); + }); + + it('does set packagist COMPOSER_AUTH when artifactAuth does include composer', async () => { + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + token: 'ghp_token', + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'packagist.renovatebot.com', + username: 'some-username', + password: 'some-password', + artifactAuth: ['composer'], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'https://artifactory.yyyyyyy.com/artifactory/api/composer/', + username: 'some-other-username', + password: 'some-other-password', + artifactAuth: ['composer'], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + username: 'some-other-username', + password: 'some-other-password', + artifactAuth: ['composer'], + }); + hostRules.add({ + hostType: PackagistDatasource.id, + matchHost: 'https://packages-bearer.example.com/', + token: 'abcdef0123456789', + artifactAuth: ['composer'], + }); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce('{}'); + const authConfig = { + ...config, + postUpdateOptions: ['composerGitlabToken'], + registryUrls: ['https://packagist.renovatebot.com'], + }; + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: authConfig, + }) + ).toBeNull(); + + expect(execSnapshots).toMatchObject([ + { + options: { + env: { + COMPOSER_AUTH: + '{"github-oauth":{"github.com":"ghp_token"},' + + '"http-basic":{' + + '"packagist.renovatebot.com":{"username":"some-username","password":"some-password"},' + + '"artifactory.yyyyyyy.com":{"username":"some-other-username","password":"some-other-password"}' + + '},' + + '"bearer":{"packages-bearer.example.com":"abcdef0123456789"}}', + }, + }, + }, + ]); + }); + it('returns updated composer.lock', async () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(); diff --git a/lib/modules/manager/composer/artifacts.ts b/lib/modules/manager/composer/artifacts.ts index 0eae7fefdefad1..cc6acbbf266ff0 100644 --- a/lib/modules/manager/composer/artifacts.ts +++ b/lib/modules/manager/composer/artifacts.ts @@ -27,6 +27,7 @@ import { findGithubToken, getComposerArguments, getPhpConstraint, + isArtifactAuthEnabled, requireComposerDependencyInstallation, takePersonalAccessTokenIfPossible, } from './utils'; @@ -34,27 +35,36 @@ import { function getAuthJson(): string | null { const authJson: AuthJson = {}; - const githubToken = findGithubToken({ + const githubHostRule = hostRules.find({ hostType: 'github', url: 'https://api.github.com/', }); - const gitTagsGithubToken = findGithubToken({ + const gitTagsHostRule = hostRules.find({ hostType: GitTagsDatasource.id, url: 'https://github.com', }); const selectedGithubToken = takePersonalAccessTokenIfPossible( - githubToken, - gitTagsGithubToken + isArtifactAuthEnabled(githubHostRule) + ? findGithubToken(githubHostRule) + : undefined, + isArtifactAuthEnabled(gitTagsHostRule) + ? findGithubToken(gitTagsHostRule) + : undefined ); + if (selectedGithubToken) { authJson['github-oauth'] = { 'github.com': selectedGithubToken, }; } - hostRules.findAll({ hostType: 'gitlab' })?.forEach((gitlabHostRule) => { + for (const gitlabHostRule of hostRules.findAll({ hostType: 'gitlab' })) { + if (!isArtifactAuthEnabled(gitlabHostRule)) { + continue; + } + if (gitlabHostRule?.token) { const host = gitlabHostRule.resolvedHost ?? 'gitlab.com'; authJson['gitlab-token'] = authJson['gitlab-token'] ?? {}; @@ -65,20 +75,24 @@ function getAuthJson(): string | null { ...(authJson['gitlab-domains'] ?? []), ]; } - }); + } - hostRules - .findAll({ hostType: PackagistDatasource.id }) - ?.forEach((hostRule) => { - const { resolvedHost, username, password, token } = hostRule; - if (resolvedHost && username && password) { - authJson['http-basic'] = authJson['http-basic'] ?? {}; - authJson['http-basic'][resolvedHost] = { username, password }; - } else if (resolvedHost && token) { - authJson.bearer = authJson.bearer ?? {}; - authJson.bearer[resolvedHost] = token; - } - }); + for (const packagistHostRule of hostRules.findAll({ + hostType: PackagistDatasource.id, + })) { + if (!isArtifactAuthEnabled(packagistHostRule)) { + continue; + } + + const { resolvedHost, username, password, token } = packagistHostRule; + if (resolvedHost && username && password) { + authJson['http-basic'] = authJson['http-basic'] ?? {}; + authJson['http-basic'][resolvedHost] = { username, password }; + } else if (resolvedHost && token) { + authJson.bearer = authJson.bearer ?? {}; + authJson.bearer[resolvedHost] = token; + } + } return is.emptyObject(authJson) ? null : JSON.stringify(authJson); } diff --git a/lib/modules/manager/composer/utils.spec.ts b/lib/modules/manager/composer/utils.spec.ts index c591825be75663..481df517e6f260 100644 --- a/lib/modules/manager/composer/utils.spec.ts +++ b/lib/modules/manager/composer/utils.spec.ts @@ -308,21 +308,26 @@ describe('modules/manager/composer/utils', () => { matchHost: 'github.com', token: TOKEN_STRING, }); - expect( - findGithubToken({ - hostType: GitTagsDatasource.id, - url: 'https://github.com', - }) - ).toEqual(TOKEN_STRING); + + const foundHostRule = hostRules.find({ + hostType: GitTagsDatasource.id, + url: 'https://github.com', + }); + + expect(findGithubToken(foundHostRule)).toEqual(TOKEN_STRING); }); - it('returns undefined when no hostRule match search', () => { - expect( - findGithubToken({ - hostType: GitTagsDatasource.id, - url: 'https://github.com', - }) - ).toBeUndefined(); + it('returns undefined when no token is defined', () => { + hostRules.add({ + hostType: GitTagsDatasource.id, + matchHost: 'github.com', + }); + + const foundHostRule = hostRules.find({ + hostType: GitTagsDatasource.id, + url: 'https://github.com', + }); + expect(findGithubToken(foundHostRule)).toBeUndefined(); }); it('remove x-access-token token prefix', () => { @@ -333,12 +338,12 @@ describe('modules/manager/composer/utils', () => { matchHost: 'github.com', token: TOKEN_STRING_WITH_PREFIX, }); - expect( - findGithubToken({ - hostType: GitTagsDatasource.id, - url: 'https://github.com', - }) - ).toEqual(TOKEN_STRING); + + const foundHostRule = hostRules.find({ + hostType: GitTagsDatasource.id, + url: 'https://github.com', + }); + expect(findGithubToken(foundHostRule)).toEqual(TOKEN_STRING); }); }); diff --git a/lib/modules/manager/composer/utils.ts b/lib/modules/manager/composer/utils.ts index 330f50bc713892..8342798971adb7 100644 --- a/lib/modules/manager/composer/utils.ts +++ b/lib/modules/manager/composer/utils.ts @@ -3,8 +3,8 @@ import { quote } from 'shlex'; import { GlobalConfig } from '../../../config/global'; import { logger } from '../../../logger'; +import type { HostRuleSearchResult } from '../../../types'; import type { ToolConstraint } from '../../../util/exec/types'; -import { HostRuleSearch, find as findHostRule } from '../../../util/host-rules'; import { api, id as composerVersioningId } from '../../versioning/composer'; import type { UpdateArtifactsConfig } from '../types'; import type { ComposerConfig, ComposerLock } from './types'; @@ -111,8 +111,10 @@ export function extractConstraints( return res; } -export function findGithubToken(search: HostRuleSearch): string | undefined { - return findHostRule(search)?.token?.replace('x-access-token:', ''); +export function findGithubToken( + searchResult: HostRuleSearchResult +): string | undefined { + return searchResult?.token?.replace('x-access-token:', ''); } export function isGithubPersonalAccessToken(token: string): boolean { @@ -173,3 +175,7 @@ export function takePersonalAccessTokenIfPossible( return githubToken; } + +export function isArtifactAuthEnabled(rule: HostRuleSearchResult): boolean { + return !rule.artifactAuth || rule.artifactAuth.includes('composer'); +} diff --git a/lib/types/host-rules.ts b/lib/types/host-rules.ts index d5b23a80ac246b..ac02a813c38a0b 100644 --- a/lib/types/host-rules.ts +++ b/lib/types/host-rules.ts @@ -14,6 +14,7 @@ export interface HostRuleSearchResult { dnsCache?: boolean; keepalive?: boolean; + artifactAuth?: string[] | null; } export interface HostRule extends HostRuleSearchResult { From e9adc3d23f0ee796cc6db25a7bd74a1eda09c40e Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 17 Apr 2023 11:01:23 +0300 Subject: [PATCH 051/122] feat(schema): Better utility for JSON parsing (#21536) --- lib/util/schema-utils.spec.ts | 166 +++++++++++++++++++++++++--------- lib/util/schema-utils.ts | 37 ++++---- 2 files changed, 139 insertions(+), 64 deletions(-) diff --git a/lib/util/schema-utils.spec.ts b/lib/util/schema-utils.spec.ts index f8ae991b26b53a..9d1dfe47d3b99f 100644 --- a/lib/util/schema-utils.spec.ts +++ b/lib/util/schema-utils.spec.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; import { + Json, + Json5, looseArray, looseRecord, looseValue, - parseJson, - safeParseJson, } from './schema-utils'; describe('util/schema-utils', () => { @@ -99,57 +99,135 @@ describe('util/schema-utils', () => { }); }); - describe('parseJson', () => { + describe('Json', () => { it('parses json', () => { - const res = parseJson('{"foo": "bar"}', z.object({ foo: z.string() })); - expect(res).toEqual({ foo: 'bar' }); - }); + const Schema = Json.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, + }); - it('throws on invalid json', () => { - expect(() => - parseJson('{"foo": "bar"', z.object({ foo: z.string() })) - ).toThrow(SyntaxError); - }); + 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, + }); - it('throws on invalid schema', () => { - expect(() => - parseJson('{"foo": "bar"}', z.object({ foo: z.number() })) - ).toThrow(z.ZodError); - }); - }); + expect(Schema.safeParse('["foo", "bar"]')).toMatchObject({ + error: { + issues: [ + { + message: 'Expected object, received array', + code: 'invalid_type', + expected: 'object', + received: 'array', + path: [], + }, + ], + }, + success: false, + }); - describe('safeParseJson', () => { - it('parses json', () => { - const res = safeParseJson( - '{"foo": "bar"}', - z.object({ foo: z.string() }) - ); - expect(res).toEqual({ foo: 'bar' }); + expect(Schema.safeParse('{{{}}}')).toMatchObject({ + error: { + issues: [ + { + message: 'Invalid JSON', + code: 'custom', + path: [], + }, + ], + }, + success: false, + }); }); + }); - it('returns null on invalid json', () => { - const res = safeParseJson('{"foo": "bar"', z.object({ foo: z.string() })); - expect(res).toBeNull(); - }); + describe('Json5', () => { + it('parses JSON5', () => { + const Schema = Json5.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, + }); - it('returns null on invalid schema', () => { - const res = safeParseJson( - '{"foo": "bar"}', - z.object({ foo: z.number() }) - ); - expect(res).toBeNull(); - }); + 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, + }); - it('runs callback on invalid json', () => { - const callback = jest.fn(); - safeParseJson('{"foo": "bar"', z.object({ foo: z.string() }), callback); - expect(callback).toHaveBeenCalledWith(expect.any(SyntaxError)); - }); + expect(Schema.safeParse('["foo", "bar"]')).toMatchObject({ + error: { + issues: [ + { + message: 'Expected object, received array', + code: 'invalid_type', + expected: 'object', + received: 'array', + path: [], + }, + ], + }, + success: false, + }); - it('runs callback on invalid schema', () => { - const callback = jest.fn(); - safeParseJson('{"foo": "bar"}', z.object({ foo: z.number() }), callback); - expect(callback).toHaveBeenCalledWith(expect.any(z.ZodError)); + expect(Schema.safeParse('{{{}}}')).toMatchObject({ + error: { + issues: [ + { + message: 'Invalid JSON5', + code: 'custom', + path: [], + }, + ], + }, + success: false, + }); }); }); }); diff --git a/lib/util/schema-utils.ts b/lib/util/schema-utils.ts index d8996cb2a9e7ff..6473f0d6db8fce 100644 --- a/lib/util/schema-utils.ts +++ b/lib/util/schema-utils.ts @@ -1,3 +1,5 @@ +import JSON5 from 'json5'; +import type { JsonValue } from 'type-fest'; import { z } from 'zod'; export function looseArray( @@ -91,26 +93,21 @@ export function looseValue( return schemaWithFallback; } -export function parseJson< - T = unknown, - Schema extends z.ZodType = z.ZodType ->(input: string, schema: Schema): z.infer { - const parsed = JSON.parse(input); - return schema.parse(parsed); -} +export const Json = z.string().transform((str, ctx): JsonValue => { + try { + return JSON.parse(str); + } catch (e) { + ctx.addIssue({ code: 'custom', message: 'Invalid JSON' }); + return z.NEVER; + } +}); +type Json = z.infer; -export function safeParseJson< - T = unknown, - Schema extends z.ZodType = z.ZodType ->( - input: string, - schema: Schema, - catchCallback?: (e: SyntaxError | z.ZodError) => void -): z.infer | null { +export const Json5 = z.string().transform((str, ctx): JsonValue => { try { - return parseJson(input, schema); - } catch (err) { - catchCallback?.(err); - return null; + return JSON5.parse(str); + } catch (e) { + ctx.addIssue({ code: 'custom', message: 'Invalid JSON5' }); + return z.NEVER; } -} +}); From 2ac8f1b6d9949fccef8fffd561060e7c25a40a40 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 17 Apr 2023 14:40:07 +0200 Subject: [PATCH 052/122] chore(devcontainer): unpin docker image (#21553) --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 740cdb0db6a8b6..ebe7805c7bb5c3 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/containerbase/node:18.16.0@sha256:b6efb2ad8c2e8f36449c103d337fd398e70c7bec2c0da39fe3c185ca8a4f38bd +FROM ghcr.io/containerbase/node:18.16.0 USER root From 07930b1393d63457abfee7dca2bb75dfcbae4039 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:52:42 +0200 Subject: [PATCH 053/122] build(deps): update aws-sdk-js-v3 monorepo (#21549) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Michael Kriese --- .../platform/codecommit/codecommit-client.ts | 2 +- package.json | 12 +- yarn.lock | 1834 ++++++++--------- 3 files changed, 913 insertions(+), 935 deletions(-) diff --git a/lib/modules/platform/codecommit/codecommit-client.ts b/lib/modules/platform/codecommit/codecommit-client.ts index 38ac15f69e78eb..42a5af5d670e99 100644 --- a/lib/modules/platform/codecommit/codecommit-client.ts +++ b/lib/modules/platform/codecommit/codecommit-client.ts @@ -147,7 +147,7 @@ export async function createPrComment( export async function updatePrStatus( pullRequestId: string, - pullRequestStatus: PullRequestStatusEnum.CLOSED | PullRequestStatusEnum.OPEN + pullRequestStatus: PullRequestStatusEnum ): Promise { const input: UpdatePullRequestStatusInput = { pullRequestId, diff --git a/package.json b/package.json index b524c13ef9960a..023c0474ea3a70 100644 --- a/package.json +++ b/package.json @@ -136,12 +136,12 @@ "node": ">=18.12.0" }, "dependencies": { - "@aws-sdk/client-codecommit": "3.290.0", - "@aws-sdk/client-ec2": "3.291.0", - "@aws-sdk/client-ecr": "3.290.0", - "@aws-sdk/client-iam": "3.291.0", - "@aws-sdk/client-rds": "3.290.0", - "@aws-sdk/client-s3": "3.290.0", + "@aws-sdk/client-codecommit": "3.312.0", + "@aws-sdk/client-ec2": "3.312.0", + "@aws-sdk/client-ecr": "3.312.0", + "@aws-sdk/client-iam": "3.312.0", + "@aws-sdk/client-rds": "3.314.0", + "@aws-sdk/client-s3": "3.312.0", "@breejs/later": "4.1.0", "@cheap-glitch/mi-cron": "1.0.1", "@iarna/toml": "3.0.0", diff --git a/yarn.lock b/yarn.lock index a59c1f9f442f7e..efa3aea97298e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -109,1041 +109,1019 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" -"@aws-sdk/abort-controller@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.290.0.tgz#c8279257e4be8cd84144e1a16dca52f3371d31cc" - integrity sha512-Q4AqucQnhcsauH6tDf1bSRuOW/Ejwjs1qHPLlvknwX1IoxZettP3lXz9LLd8KZnEMFQLHPmBTbFIW+Ivpzl+vw== - dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" - -"@aws-sdk/chunked-blob-reader-native@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz#cdbd12c89a4f3ddd91bf707da8bb4af311487cc5" - integrity sha512-JeOZ95PW+fJ6bbuqPySYqLqHk1n4+4ueEEraJsiUrPBV0S1ZtyvOGHcnGztKUjr2PYNaiexmpWuvUve9K12HRA== +"@aws-sdk/abort-controller@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz#0da2d29b823daa03b7c1f0b43de1f030583b4f51" + integrity sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g== dependencies: - "@aws-sdk/util-base64" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/chunked-blob-reader@3.188.0": - version "3.188.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.188.0.tgz#18181b27511ab512e56b9f2cef30d2abbef639dc" - integrity sha512-zkPRFZZPL3eH+kH86LDYYXImiClA1/sW60zYOjse9Pgka+eDJlvBN6hcYxwDEKjcwATYiSRR1aVQHcfCinlGXg== +"@aws-sdk/chunked-blob-reader@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz#2ada1b024a2745c2fe7e869606fab781325f981e" + integrity sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/client-codecommit@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-codecommit/-/client-codecommit-3.290.0.tgz#5a87dc72b7c262db132f057907c959683cd5cac4" - integrity sha512-FRsCC5yAtXofxrJUtuKR67Ozd7yHTTKy47eaCCBotuQ3eIA5ATuArPFRFpySMQGRmC0/kOjY/WL3ZChKHZFgKA== +"@aws-sdk/client-codecommit@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-codecommit/-/client-codecommit-3.312.0.tgz#e29c3d504b2d65aaccb4a4e8d12e736115ad5893" + integrity sha512-DZ8Ci6REIqBKJLeDN1qk+MgRs0KBPnNvfT0Ktw+3dyykbpo20X8xabcUDpV7l1C1qwTYFAg2vC0xbdbx9O2LOg== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" uuid "^8.3.2" -"@aws-sdk/client-ec2@3.291.0": - version "3.291.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.291.0.tgz#1bedbf384a8eb76a2ed2b9fa56047dd8c0079bff" - integrity sha512-nVw92++iwDB5RzBe7hCK+HiY/4hHFBd/tXBJlSg7rD6TGHyskv3Qn+n2ikpxPVSRYJgnZr/g9JYYQzm3r6RFxQ== +"@aws-sdk/client-ec2@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.312.0.tgz#df61677afcade8069221e13f4e94dd8f85aec246" + integrity sha512-WybuBygd5v9MfZ1gNnzRkS5ArnoG4wclkHhC1gUb4ylNqptzN9gezUgTR1l9Nfr9V6487r/O0yao2VcdUApAZg== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-sdk-ec2" "3.291.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - "@aws-sdk/util-waiter" "3.290.0" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-sdk-ec2" "3.311.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.310.0" fast-xml-parser "4.1.2" - tslib "^2.3.1" + tslib "^2.5.0" uuid "^8.3.2" -"@aws-sdk/client-ecr@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-ecr/-/client-ecr-3.290.0.tgz#7998247388e93305ef7d91e6cb1e2411d3e729a8" - integrity sha512-GQXKV0QGi2KbhrxU9soXBMqfTmjMdsog2/yf19u7LXKR91Xhq5KNyz6WlavZy+lE5nPa1yartczB+2pZMildhQ== +"@aws-sdk/client-ecr@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ecr/-/client-ecr-3.312.0.tgz#8425c3305e8e2353f9ec39468bed88e21b44bb15" + integrity sha512-MeVhOOm73m9WPXT+6RIQqrHermOtf6S3QmpdZRHOBj5IVZ+004e+Hxe1sbJZY2TG/r90vDtcU9LwTwQQhbyLKQ== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - "@aws-sdk/util-waiter" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/client-iam@3.291.0": - version "3.291.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.291.0.tgz#e3673e2ff9a3ef114bfd561cb3b07b842d590276" - integrity sha512-NbQbigFSQLzdx/8vz0FqMh7QVPH4UnzrGTxHKJxgRlasjPVs6hq2jrBr/ym3vtsYUHEEazbdRzTkXaj/uwOyeA== +"@aws-sdk/client-iam@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.312.0.tgz#dd66540cd5ecbdf65bb4853c2511159d0bc4a1a7" + integrity sha512-x2jF7teKZ/DbrRreVdLTddJOKDDJ81TVKGklJyB4YJgARAlrwfxxC7jAp9sF+T/HlnZ2HmLkdn1Tan4rVTetEA== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - "@aws-sdk/util-waiter" "3.290.0" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.310.0" fast-xml-parser "4.1.2" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/client-rds@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-rds/-/client-rds-3.290.0.tgz#9d10c160a366c3e7e762dbd6df3184df89525d72" - integrity sha512-oysKCy3e5b/U4EdohVRbgUEYeHjQggg/KjSauSnuGAHohs5Dz07FxgltkhzpVJEDmaQvjIzrrm+chI4LIgZCGQ== +"@aws-sdk/client-rds@3.314.0": + version "3.314.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-rds/-/client-rds-3.314.0.tgz#8e9cc272a2acfbbc3c976dec1db13f84c4b2fc44" + integrity sha512-+jvimITTzmDkMNwAh2vV4+r22GZWF1TCdCiQqB1+djApmfifUFSEGyDrNRpHOKYeBhDR6mHPVC+qW5hs8XWr6A== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-sdk-rds" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - "@aws-sdk/util-waiter" "3.290.0" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-sdk-rds" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.310.0" fast-xml-parser "4.1.2" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/client-s3@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.290.0.tgz#c887859ae8b275b3e6cef0f1263ef833268e38c8" - integrity sha512-3QVUyE5rvvM1Td9/5DS9iEZMXQsbqOuV1CMskDgD1/6Iav3OeGsBzDswifova5Tn6gRtDRxmNOZG1UH//7QZMw== +"@aws-sdk/client-s3@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.312.0.tgz#d5f286f38db04612dad46407d0115e7a5755e8a1" + integrity sha512-aqlll2g7eKwV0j+IAK4Ly7c0CRVSI712VTdItAWpLSQPw1VVUP9IKaIsBTiigoOBCJq+fb2+ufFrSTUAPdEzPQ== dependencies: "@aws-crypto/sha1-browser" "3.0.0" "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.290.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/eventstream-serde-browser" "3.290.0" - "@aws-sdk/eventstream-serde-config-resolver" "3.290.0" - "@aws-sdk/eventstream-serde-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-blob-browser" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/hash-stream-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/md5-js" "3.290.0" - "@aws-sdk/middleware-bucket-endpoint" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-expect-continue" "3.290.0" - "@aws-sdk/middleware-flexible-checksums" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-location-constraint" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-sdk-s3" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-ssec" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4-multi-region" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-stream-browser" "3.290.0" - "@aws-sdk/util-stream-node" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - "@aws-sdk/util-waiter" "3.290.0" - "@aws-sdk/xml-builder" "3.201.0" + "@aws-sdk/client-sts" "3.312.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/eventstream-serde-browser" "3.310.0" + "@aws-sdk/eventstream-serde-config-resolver" "3.310.0" + "@aws-sdk/eventstream-serde-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-blob-browser" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/hash-stream-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/md5-js" "3.310.0" + "@aws-sdk/middleware-bucket-endpoint" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-expect-continue" "3.310.0" + "@aws-sdk/middleware-flexible-checksums" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-location-constraint" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-sdk-s3" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-ssec" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/signature-v4-multi-region" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-stream-browser" "3.310.0" + "@aws-sdk/util-stream-node" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.310.0" + "@aws-sdk/xml-builder" "3.310.0" fast-xml-parser "4.1.2" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/client-sso-oidc@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.290.0.tgz#99e8fb91d30cea91f11f193c5953c395b42af4eb" - integrity sha512-/+OSYCjyf2TjA57beWLBjG05yPwWlpqK4gO3GwpVqfygaRh6g5jS0CBVQs+z+xc7gmI0weC/nhc+BXR9qcJJAA== +"@aws-sdk/client-sso-oidc@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.310.0.tgz#f71eeb9cc73c13661728cf88d8513b0209b6d265" + integrity sha512-3GKaRSfMD3OiYWGa+qg5KvJw0nLV0Vu7zRiulLuKDvgmWw3SNJKn3frWlmq/bKFUKahLsV8zozbeJItxtKAD6g== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/client-sso@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.290.0.tgz#59e4b1cb9644fd98cf0d428dd34b23bb91ca4037" - integrity sha512-FUFAbptuJSRKnzBgFJqXxusSG7PzECSqX0FnMh2vxCVu2PifaAE4stiMW8Myj8ABQAbfIrAWM+17upcrfmudoA== +"@aws-sdk/client-sso@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.310.0.tgz#1ead31442c34ed660479ea9317faab4f1fa47130" + integrity sha512-netFap3Mp9I7bzAjsswHPA5WEbQtNMmXvW9/IVb7tmf85/esXCWindtyI43e/Xerut9ZVyEACPBFn30CLLE2xQ== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/client-sts@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.290.0.tgz#ed5f88379e2c3740b095d8e3a9ce13b806a244f7" - integrity sha512-E2X/7tZLziKLgi/owYoUL5gcorGJrbM2tANJdJmaqVUPhPvoY4wU8P91pGPKon9nQj0RQexre5ClZawYD6lTzA== +"@aws-sdk/client-sts@3.312.0": + version "3.312.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.312.0.tgz#7b49a04bab2d12a8ca566ef579fd887b71986498" + integrity sha512-t0U7vRvWaMjrzBUo6tPrHe6HE97Blqx+b4GOjFbcbLtzxLlcRfhnWJik0Lp8hJtVqzNoN5mL4OeYgK7CRpL/Sw== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-node" "3.290.0" - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/hash-node" "3.290.0" - "@aws-sdk/invalid-dependency" "3.290.0" - "@aws-sdk/middleware-content-length" "3.290.0" - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/middleware-host-header" "3.290.0" - "@aws-sdk/middleware-logger" "3.290.0" - "@aws-sdk/middleware-recursion-detection" "3.290.0" - "@aws-sdk/middleware-retry" "3.290.0" - "@aws-sdk/middleware-sdk-sts" "3.290.0" - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/middleware-user-agent" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/smithy-client" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.290.0" - "@aws-sdk/util-defaults-mode-node" "3.290.0" - "@aws-sdk/util-endpoints" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - "@aws-sdk/util-user-agent-browser" "3.290.0" - "@aws-sdk/util-user-agent-node" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-node" "3.310.0" + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/hash-node" "3.310.0" + "@aws-sdk/invalid-dependency" "3.310.0" + "@aws-sdk/middleware-content-length" "3.310.0" + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/middleware-host-header" "3.310.0" + "@aws-sdk/middleware-logger" "3.310.0" + "@aws-sdk/middleware-recursion-detection" "3.310.0" + "@aws-sdk/middleware-retry" "3.310.0" + "@aws-sdk/middleware-sdk-sts" "3.310.0" + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/middleware-user-agent" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.310.0" + "@aws-sdk/util-defaults-mode-node" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + "@aws-sdk/util-user-agent-browser" "3.310.0" + "@aws-sdk/util-user-agent-node" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" fast-xml-parser "4.1.2" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/config-resolver@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.290.0.tgz#400155b7d5e0a0215889f58e601ec334615585e1" - integrity sha512-Ovskri6IR4iBK0+3ttgjPSgOUEC+fd5tqRN5JlPCCZ9VwqwF/z26yYC4fAPaMUAJwPVRFeYYzQoszXGoxPyG7g== +"@aws-sdk/config-resolver@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz#c02dce96546d5cd25551bc89907b27224e16ca7f" + integrity sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g== dependencies: - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-config-provider" "3.310.0" + "@aws-sdk/util-middleware" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-env@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.290.0.tgz#da262156d7679f33c0edd75578221b64f3314266" - integrity sha512-gWsllElBm4DWZcc42Zb6sxaw77KBf6cY9iEezbVzVbJioqR9hIr1Pq3Nx30z1Q+1KiHSnt/Wl9cYYHOoNw2DnQ== +"@aws-sdk/credential-provider-env@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz#c52694fb276341db6ce4e816cf9ca90fa5830dad" + integrity sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A== dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-imds@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.290.0.tgz#3cf65860defad4cd9af266c1a96193a6dce94075" - integrity sha512-PkYEs7zzUVWnhkR9TlU1ORDcCnkD7qoqR1loXXSZc+EIOX9M7f+sXGLtCXVl9wV1Ekx3a5Tjud+aQcOJjjFePA== +"@aws-sdk/credential-provider-imds@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz#d8fb1223fee7e289a81e28177fe55dedf4d2745e" + integrity sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w== dependencies: - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-ini@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.290.0.tgz#7062a952d57310c721fb09d1468333777f63e375" - integrity sha512-n3OGvkvNgMS6Kb2fuFrmNeCI8CP7DGOsEvcfYPMiXsQWx9hHAh/XIv7ksD3TL5Mn8Dr0NHmB6uY5WgUZDatqfw== - dependencies: - "@aws-sdk/credential-provider-env" "3.290.0" - "@aws-sdk/credential-provider-imds" "3.290.0" - "@aws-sdk/credential-provider-process" "3.290.0" - "@aws-sdk/credential-provider-sso" "3.290.0" - "@aws-sdk/credential-provider-web-identity" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/credential-provider-ini@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.310.0.tgz#c317c803b78d6b322a440de15069b35b88c737e5" + integrity sha512-gtRz7I+4BBpwZ3tc6UIt5lQuiAFnkpOibxHh95x1M6HDxBjm+uqD6RPZYVH+dULZPYXOtOTsHV0IGjrcV0sSRg== + dependencies: + "@aws-sdk/credential-provider-env" "3.310.0" + "@aws-sdk/credential-provider-imds" "3.310.0" + "@aws-sdk/credential-provider-process" "3.310.0" + "@aws-sdk/credential-provider-sso" "3.310.0" + "@aws-sdk/credential-provider-web-identity" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.290.0.tgz#d9444ae189d545b8cac8a52f578e79b2687a2b38" - integrity sha512-snLmeD7yAYq1x7lngCTM1VGmHYCZ4iUW5JRG9XPr7Npl7VWVdnNqaf5XBYEANgaFoWxjN3dNyDPg05+5Ew6QCA== - dependencies: - "@aws-sdk/credential-provider-env" "3.290.0" - "@aws-sdk/credential-provider-imds" "3.290.0" - "@aws-sdk/credential-provider-ini" "3.290.0" - "@aws-sdk/credential-provider-process" "3.290.0" - "@aws-sdk/credential-provider-sso" "3.290.0" - "@aws-sdk/credential-provider-web-identity" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/credential-provider-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.310.0.tgz#e4f69cf95e839c626c41e23b1d8b3cd24c667d8e" + integrity sha512-FrOztUcOq2Sp32xGtJvxfvdlmuAeoxIu/AElHzV1bkx6Pzo9DkQBhXrSQ+JFSpI++weOD4ZGFhAvgbgUOT4VAg== + dependencies: + "@aws-sdk/credential-provider-env" "3.310.0" + "@aws-sdk/credential-provider-imds" "3.310.0" + "@aws-sdk/credential-provider-ini" "3.310.0" + "@aws-sdk/credential-provider-process" "3.310.0" + "@aws-sdk/credential-provider-sso" "3.310.0" + "@aws-sdk/credential-provider-web-identity" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-process@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.290.0.tgz#aaae9f198810c2b4f586689fb359a2382723d737" - integrity sha512-PNnWDYSaE8dMepH59cyrXs45Ucdmzdnyuhcn/fVwQ0Nc7FzESxw1G7SgJZhYF4tMRDiepu6lbFEN0QXsTIM8Iw== +"@aws-sdk/credential-provider-process@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz#0b2ee77f0c48262442d2768044d72332a4ad8884" + integrity sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA== dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-sso@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.290.0.tgz#02d5bdf54f6611169a07656b58a026927f9c33a7" - integrity sha512-tX5Ez3EiMrXDx6Vsn2gMq7ga3y4iyPneenCNToRUlmZrhF61DhMfA22gRwdwuP8hlFKXY4LRg51pBfJeq0ga8w== - dependencies: - "@aws-sdk/client-sso" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/token-providers" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/credential-provider-sso@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.310.0.tgz#86ab095ede5024a4e16aabaf3b2fa92d61656b8d" + integrity sha512-nXkpT8mrM/wRqSiz/a4p9U2UrOKyfZXhbPHIHyQj8K+uLjsYS+WPuH287J4A5Q57A6uarTrj5RjHmVeZVLaHmg== + dependencies: + "@aws-sdk/client-sso" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/token-providers" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/credential-provider-web-identity@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.290.0.tgz#4aecad2bcc4e4dbc56ad52872b332ec3ce10ae22" - integrity sha512-Apv6AnYtb5LTUreDVsqlXFNgiU0TQAZ8sfPg23pGrBGZvZU3KfDhF9n5j0i9Uca44O+/vB7UvbbvNAZS200vsQ== +"@aws-sdk/credential-provider-web-identity@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz#c9fa09b0068027e58d31178e3fa06bf4e9ae9d36" + integrity sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw== dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/eventstream-codec@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.290.0.tgz#fb8f337da457a17ba89fafc5850de89199ccb84f" - integrity sha512-rUIEOTJhB/Up7FSUkrjmIExdJcmDP9Y1uMtnuhFcLhVXlELZ+tB0AfYCcbUBt8ZeMvrULlb+OkxWwHPyh8qkAA== +"@aws-sdk/eventstream-codec@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.310.0.tgz#a5def3633f7ccdc3d477fd0b05e2eb31c5598ed9" + integrity sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A== dependencies: "@aws-crypto/crc32" "3.0.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-hex-encoding" "3.201.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/eventstream-serde-browser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.290.0.tgz#126636883c0ba8a8dacfb2aa424df6926b67e5ad" - integrity sha512-6XOtQh8Zj8AoEiF7oA+4iN4KsrtFFggkKzY+5g+NMNE9Z0vyQlc1Vo7MngicmxlX1l35KUW9Xe1DfAvCVzNUBQ== +"@aws-sdk/eventstream-serde-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.310.0.tgz#02aef0262b5f740a1c8ffbdeb8459542f90c14dd" + integrity sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA== dependencies: - "@aws-sdk/eventstream-serde-universal" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/eventstream-serde-universal" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/eventstream-serde-config-resolver@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.290.0.tgz#b9a89d405338fed549a51e26d6debfa374a06d85" - integrity sha512-nmHvgc21x79Q7ATMU2d3POKOjfs5zA2s407JAek6JAK4dpq+XO8B7sX9HcHlZc8+81z4LkWfdfsOC7fcgUaTPA== +"@aws-sdk/eventstream-serde-config-resolver@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.310.0.tgz#e4e2358f36b9eb6d37da0a0f0d3fc32da91ad6b4" + integrity sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/eventstream-serde-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.290.0.tgz#f20457ba5faecb89226c88f3888164bc6d86ca18" - integrity sha512-iD7tkWSf5I9ah6S5iL/Tc93fAC0QYZqyhKd2qKaNjF0o8draNjXWX2Bq16YrWH1H3eJBAAYAQZI7ldEP+mwccw== +"@aws-sdk/eventstream-serde-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.310.0.tgz#6e0fbc400bac677c77b946fd2a5cb00b57503c0e" + integrity sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA== dependencies: - "@aws-sdk/eventstream-serde-universal" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/eventstream-serde-universal" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/eventstream-serde-universal@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.290.0.tgz#8f3040ced8d5425f3624eefdac40f7cf6617015a" - integrity sha512-5Rz1Z+Oj9WR/NpazjgQBSapPCGUX63PHXprdv9FPeZdwkRH/ZBF1Bs4lOqixiZOcz9YX8UFtBBgrKCYH9JjtnQ== +"@aws-sdk/eventstream-serde-universal@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.310.0.tgz#d0f95eaafb8fd09d9a21aec8f23b7f3cee2bb19a" + integrity sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw== dependencies: - "@aws-sdk/eventstream-codec" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/eventstream-codec" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/fetch-http-handler@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.290.0.tgz#53265b0f463f7e4c0266c1c7ad1233d0df88f5b4" - integrity sha512-hehbIxcqyJeiUBTbbP3C4tmY2p9UIh7bnLTKhocqaUcdEXQwlIRiQlnnA+TrQ5Uyoe+W3fAmv25tq08rB9ddhw== +"@aws-sdk/fetch-http-handler@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz#f31006b7b3103683d72e177cd27d80354f7a37c4" + integrity sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/querystring-builder" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/querystring-builder" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/hash-blob-browser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.290.0.tgz#20a7db4810201dccaa9aeac4391f3b4320df381d" - integrity sha512-unKp9whdBAomUEHTfAYd/qloNNQG60eEw13RHysWdrN44Megaqu8y4HHRQEkfNxqXss5ERHpMja8uBj9gE7kEA== +"@aws-sdk/hash-blob-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.310.0.tgz#762a56ae655e3bcd0ba46bbc39e8b370b1067629" + integrity sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A== dependencies: - "@aws-sdk/chunked-blob-reader" "3.188.0" - "@aws-sdk/chunked-blob-reader-native" "3.208.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/chunked-blob-reader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/hash-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.290.0.tgz#bce2a6d79c13a07db7240b3df4f5daebb419a78f" - integrity sha512-ayqJBOPoMa3H3eUhZHPu9ikNjoydu3nxj+R6tp8nMrKfFYDUu0XCdkpB0Wk/EBpMyWA2ZeyyfgXEUtQkqkAWBA== +"@aws-sdk/hash-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz#4c1c89b9a2da3bb9783de84f0b762cc055b90d67" + integrity sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ== dependencies: - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-buffer-from" "3.208.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-buffer-from" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/hash-stream-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.290.0.tgz#78bb68726f52848c3facf8b9ccabc4362daa202b" - integrity sha512-6IjHrcD9qi3QIPNT8yGWNiMGdqvPru9lJX5tDSuZSe8cNOIRKFRSLkpQIRPdQLBQLbyJSX0MkwZ+apo6K7H09g== +"@aws-sdk/hash-stream-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.310.0.tgz#3845d813a7de476c56fac492a50ffa8af265f120" + integrity sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw== dependencies: - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/invalid-dependency@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.290.0.tgz#2952ce8322be4cce75d8f82756f70e9b7f409b3d" - integrity sha512-plJpEJ+PPTrpaMfg5KKsAfdXUi6iUZTc/PgP0/CPqCe3kuiWb1xb2GeTxOL5InzfBffVdHWeTanYu9+V0MIxVw== +"@aws-sdk/invalid-dependency@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz#b96da9b9f63b12d1c390f9a06eeb28840fcb5b3c" + integrity sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/is-array-buffer@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz#06e557adc284fac2f26071c2944ae01f61b95854" - integrity sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg== +"@aws-sdk/is-array-buffer@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz#f87a79f1b858c88744f07e8d8d0a791df204017e" + integrity sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/md5-js@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.290.0.tgz#c9cb2898139bd4ef98947666ee0bb534ab2db699" - integrity sha512-5JQfZObsehgX0S81j3nxS/X0wiXESisETQVG75HAUHfDiScojClfjc2WuOXCwChy3S6VZgjLpEbqEQ3CaFQKWg== +"@aws-sdk/md5-js@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.310.0.tgz#14e3d570d92808e68ccc0db8d7492ebdb93f15b5" + integrity sha512-x5sRBUrEfLWAS1EhwbbDQ7cXq6uvBxh3qR2XAsnGvFFceTeAadk7cVogWxlk3PC+OCeeym7c3/6Bv2HQ2f1YyQ== dependencies: - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-bucket-endpoint@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.290.0.tgz#fe9dd4d6eeef9f0e674689aec6689cdd34f6288d" - integrity sha512-jFHcAdIXfyqcHFzldqDDEZ2qPi9GNsWMDCiKqMumOqWJvwzCzkzsNa0A+6nUnOd/eDLDslvbktrD296Qy8oLKA== +"@aws-sdk/middleware-bucket-endpoint@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.310.0.tgz#5dd9b028498a0492c3e773c0aca10d6ded929fc6" + integrity sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-arn-parser" "3.208.0" - "@aws-sdk/util-config-provider" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-arn-parser" "3.310.0" + "@aws-sdk/util-config-provider" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-content-length@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.290.0.tgz#f304325c741e91303f2380c9c5e4000cdb9c3d11" - integrity sha512-9I+vnGSe/S0U98ZRCbOAdQngYfO7kYvXb5gjjX08XUQDfbB+ooIM1VdKngHhzUCTAs48z/43PzpBCjGJvGjB9w== +"@aws-sdk/middleware-content-length@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz#cc9b6c25c10736cec41d0219c94b57cfdb4582a3" + integrity sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-endpoint@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.290.0.tgz#f1ccfd7dbb1675f749e827512715d3f33a2b7802" - integrity sha512-A7wIujIHHoQaQaqjlRynqoZ3S4S8ExYDReXUBwf4Dzx0wZ5A50owLMY9MKFyd9uukirZs8mDnPPYZuwUI4wR7w== - dependencies: - "@aws-sdk/middleware-serde" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/url-parser" "3.290.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/middleware-endpoint@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz#d4bf8ac3cd4800af789d6bcb469b7e8cfa10badb" + integrity sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg== + dependencies: + "@aws-sdk/middleware-serde" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/url-parser" "3.310.0" + "@aws-sdk/util-middleware" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-expect-continue@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.290.0.tgz#84e36331599220328605b7f76bc977c589aa6677" - integrity sha512-MFRedBoLksB1kPJ/ffL1JD9D07Q7jQKEcEuxyGxj25eDiLbA4lxKuJIZI3Sj8P5XO0Lx6pguoxisnhLhp9EWtQ== +"@aws-sdk/middleware-expect-continue@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.310.0.tgz#0b5421d5fddb2c0ebf8e5c9c6122d01b159dad45" + integrity sha512-l3d1z2gt+gINJDnPSyu84IxfzjzPfCQrqC1sunw2cZGo/sXtEiq698Q3SiTcO2PGP4LBQAy2RHb5wVBJP708CQ== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-flexible-checksums@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.290.0.tgz#ceb25cafd23860cf59e04ed31cd76a7ccd3095b7" - integrity sha512-E621IkVQ4SMQMnkWeawlF0GqaZEHq0KvzAlprlCufktYD7OVxd1jQc0Epa7Pd3/b+rogSNiAdEihZbp7sfQsZg== +"@aws-sdk/middleware-flexible-checksums@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.310.0.tgz#1bebffe42c4109e255716507b63dc964f84b16a5" + integrity sha512-5ndnLgzgGVpWkmHBAiYkagHqiSuow8q62J4J6E2PzaQ77+fm8W3nfdy7hK5trHokEyouCZdxT/XK/IRhgj/4PA== dependencies: "@aws-crypto/crc32" "3.0.0" "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/is-array-buffer" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-host-header@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.290.0.tgz#82ad8185f00fb1c9583408d7d03c8140873345fd" - integrity sha512-j1ss8pjSJyG0aB+X0VPYgTfoieB8m5c+PrWw85JRM/qgbQeurkyD3d/F00V1hkZI42gygOaPlmYMik3kQnmITw== +"@aws-sdk/middleware-host-header@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz#bdd4fbffb58b331bda517df8340aa8b44ce55550" + integrity sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-location-constraint@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.290.0.tgz#4546380e2cb7ffc20463265737a79368884e82d8" - integrity sha512-9DjPlNCPChmXP37vYonsAhBKPLk3HPQPK/aBTGkIwGhL1LE811Vzm1PoVCwN12zaB8JCt01yEVmStH9SWHEOIQ== +"@aws-sdk/middleware-location-constraint@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.310.0.tgz#6a24fa717bff47932d22071861c55421766ecca7" + integrity sha512-LFm0JTQWwTPWL/tZU2wsQTl8J5PpDEkXjEhaXVKamtyH0xhysRqd+0n92n65dc8oztAuQkb9xUbErGn5b6gsew== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-logger@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.290.0.tgz#a12945c7c125764d930f69c56d6dee70263325a4" - integrity sha512-wJOK31t/Y/Km6B5ULF/k2RmQB/6MXSN/hMuCiYsLMapFT+86mBlY8cXytYXtLS8afRKpuNy29EY+O6ovfjz6Ig== +"@aws-sdk/middleware-logger@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz#8cc6381f49ef867cae1364b8517f939629e4dd9d" + integrity sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-recursion-detection@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.290.0.tgz#76474668ccbe2fbc17535c948430ccec8aaf083d" - integrity sha512-m8Y7SE3NfVTyGubiRhueyHF7uqC5dCbD1bSLgVjvrSjO2yEL0Dv9QR1ad7a+p5ilS+Fq3RnOu1VeujfTHy0qRQ== +"@aws-sdk/middleware-recursion-detection@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz#020c986ed8da751bd613fd84c8c8a805c89e0952" + integrity sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-retry@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.290.0.tgz#aa644026ecf1c718eeed5f2d6c3acc79844a503d" - integrity sha512-mvXvYd/3L/f5ZcnFI1Q2hwk0OtzKMmkDfWW1BcoVzK0XHf2aeehbs7xgI92ICEi/5Ali0IG5krv5LqfgO154Sw== - dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/service-error-classification" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-middleware" "3.290.0" - "@aws-sdk/util-retry" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/middleware-retry@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz#12e95e962875d44af4acbdebe02db337a1ad5c35" + integrity sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g== + dependencies: + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/service-error-classification" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-middleware" "3.310.0" + "@aws-sdk/util-retry" "3.310.0" + tslib "^2.5.0" uuid "^8.3.2" -"@aws-sdk/middleware-sdk-ec2@3.291.0": - version "3.291.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.291.0.tgz#f5b88149d0680a84b2a35f8fb36fbd8337f32195" - integrity sha512-pWNJFp0hnXsAx0DIZ5Eti93SoVKHLteKQUyRSWWhw+Ebq4frqBL3JM2J6cxl2awXVVuIXQAWdmdGX3rcT3PlVw== - dependencies: - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-format-url" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/middleware-sdk-ec2@3.311.0": + version "3.311.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.311.0.tgz#313f7e4874be5a0dd07e65c7d2fb9df4807ae230" + integrity sha512-q4VjgBxJCBYpJAV7MDFP8JIvvhMcc2k1mm8RmFkl0YQj0iBQIa6i4+sQ+yoJ/jfwiCrPwSzN7TMrGFcq7fmPDw== + dependencies: + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/signature-v4" "3.310.0" + "@aws-sdk/smithy-client" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-format-url" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-sdk-rds@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-rds/-/middleware-sdk-rds-3.290.0.tgz#06776c640d872c5702edd615dc54b47e2a2a092a" - integrity sha512-2y89X3sDG1rd9rORvJn3gbw/D/JrUq04R4ibXcL1IOawmXxmJaxe0cqQrU9Aecsoae42W7wvWIvDHwS+ufmwsQ== - dependencies: - "@aws-sdk/middleware-endpoint" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-format-url" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/middleware-sdk-rds@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-rds/-/middleware-sdk-rds-3.310.0.tgz#2ecf880063ade9bae8abcfd4fefb386ab29ceb50" + integrity sha512-V1nUsjggGLjy+Hx/z/7tb6bnfzZ1Kx4ikOdYVlTidnSCWZdh+kFE5Em16f5Q3erwG5Sil4Uxk0vpj+MSFP5MKA== + dependencies: + "@aws-sdk/middleware-endpoint" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/signature-v4" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-format-url" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-sdk-s3@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.290.0.tgz#c6e61e3f1b88d928b45f8a3f75e63d5a4cf852d2" - integrity sha512-6sks5cu5b2LVHFp2RviPZRsVrgeDyRfVExx9D9E18VCad+eejnXsFwx6yvoYFSV8J7mc2E1mCTSSSwKsaC+KBg== +"@aws-sdk/middleware-sdk-s3@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.310.0.tgz#9f060e961ccc462ea5ca8c24cb0845d655b00d24" + integrity sha512-QK9x9g2ksg0hOjjYgqddeFcn5ctUEGdxJVu4OumPXceulefMcSO2jyH2qTybYSA93nqNQFdFmg5wQfvIRUWFCQ== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-arn-parser" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-arn-parser" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-sdk-sts@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.290.0.tgz#850d03682dc9b7f37e958090b84b2311477811fb" - integrity sha512-NaYnDhFtmz/e9jNBNeY10A4AldCvjF46ZfeIWoBUsk/4qDlSP9kaCjTufEjNf/zMTtYzGiP/FUtLS7T6tfXdoQ== +"@aws-sdk/middleware-sdk-sts@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz#2001b421f317404ca98d4a1cfea408b7a64c35f5" + integrity sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ== dependencies: - "@aws-sdk/middleware-signing" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/middleware-signing" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-serde@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.290.0.tgz#4f7e616dfeb2820c5eb90a5ff770914d0f03e6e3" - integrity sha512-lZCKlfJzosi3cVx02RKRTVvbAijHTfd16EiSyKRsQOF2rCu7Qt4LzygIlqUonCeHG6eSqOMMf7LAJ22IHafBbw== +"@aws-sdk/middleware-serde@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz#e334031b66a1a155375ec901478b26570fbe1783" + integrity sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-signing@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.290.0.tgz#e7e43e4a1697f135c544c75c5d07a4fcdf42b062" - integrity sha512-mEJZQrbXkOTI+BdFlpAd1CleVJL8B7qayANMNj9nrZqvZ7HzVDLEkNaJqFz9JFizYTfZC2ZjtATPrSiYDvFEfg== - dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-middleware" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/middleware-signing@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz#bd62d5623c80f6318b0d738c44780875500c911a" + integrity sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ== + dependencies: + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/signature-v4" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-middleware" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-ssec@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.290.0.tgz#be0283275bb12e9f71bd34145ddc1103b601304f" - integrity sha512-HRDYawju2mWMF0RObsskEZu9eaDlABVZn9y4quutVYY0EUOWBTvfXmNBiX0YSn7sfFEElFIVqdzsbCCmxoXXBg== +"@aws-sdk/middleware-ssec@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.310.0.tgz#6a1da92cbc1734604295149c0d8cfed47f6e0fd3" + integrity sha512-CnEwNKVpd5bXnrCKPaePF8mWTA9ET21OMBb54y9b0fd8K02zoOcdBz4DWfh1SjFD4HkgCdja4egd8l2ivyvqmw== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/middleware-stack@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.290.0.tgz#a6b5cecdaa0d75f54d958f15d5f6a71143cc5c6c" - integrity sha512-25iC/7oAokRfxixGkDjBSIAkNwtx2kcO+xMoDczFus9UrlOr2pBY0IXbPn6bB56q2zwsBTHcmMTn0H7FJSIQmw== +"@aws-sdk/middleware-stack@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz#06c83963998fbdc83e99b67a7a138529312a6224" + integrity sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/middleware-user-agent@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.290.0.tgz#bd30eabe626f4a9b282eff075b71de017c48b7ef" - integrity sha512-ZR49PPra3LtqZBmXAtV8YrUSrkVG0hPBICE8cma/wMwbKGHa0G+Xu4pOZP0oQXs5XeGu1cs/Nx3AOJ2fgaMjhQ== +"@aws-sdk/middleware-user-agent@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.310.0.tgz#2aa3982cbc5e9c137024cec47914e86610ab0a09" + integrity sha512-x3IOwSwSbwKidlxRk3CNVHVUb06SRuaELxggCaR++QVI8NU6qD/l4VHXKVRvbTHiC/cYxXE/GaBDgQVpDR7V/g== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-endpoints" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/node-config-provider@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.290.0.tgz#0cce75d9692640bd45e5cb37b2db34a84625ca63" - integrity sha512-dQLnyCy5iT7Q5Ot2JOciNH9WkaixWwmEnvW6nBa6febzAYZVy78sfJOOP1EZ7ClG1aIhrsAN7/7wPebpn/Peiw== +"@aws-sdk/node-config-provider@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz#ba8fb41af2db0316291ba9002267627553ec65ac" + integrity sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng== dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/node-http-handler@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.290.0.tgz#90cd7a44fda8506eaa5a62d00e88efd6b09900df" - integrity sha512-HfzuzdpAJpO/ob9DQ3aEB/WmPCS5vZOic9T4TtSCmRd5e3+xdMtK/MQUizp8XkbUGBat7jPmcV13Gy4YmwfAuw== +"@aws-sdk/node-http-handler@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.310.0.tgz#bd8e72c1c7cf4b48c2a21851f638ad5e63001787" + integrity sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg== dependencies: - "@aws-sdk/abort-controller" "3.290.0" - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/querystring-builder" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/abort-controller" "3.310.0" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/querystring-builder" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/property-provider@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.290.0.tgz#b6edda6c713e8e7ef53691bdc42a0785c37ad93e" - integrity sha512-2Zrh6/KecmiZ/cKVaeDtHRAfyOnAEfwJsgxfFugs3RxjJtYr0AbYJTF+mYp3f8Xc7DCjdxR055axo9TCTBSrwg== +"@aws-sdk/property-provider@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz#5fae8a4c11bda052afa9747d47b031f1c4f0f246" + integrity sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/protocol-http@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.290.0.tgz#50c2a9edaede4178b01805fd5c45d4437a52b869" - integrity sha512-3VHbfmo7vaA/0ugJedjwyK85MT+OKQanz7ktUnAONH5KdG2/gPpa9ZSTyfK9kCVFin93YzC3pznZgr6oNYgGgg== +"@aws-sdk/protocol-http@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz#855c3314cba7ff3024a9a9701ca3c641691d997e" + integrity sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/querystring-builder@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.290.0.tgz#a126788e8f934f9550d9ad79f0da92d597087ada" - integrity sha512-7q8x8ux1RCUxUolqxsXfSbCObyMzvSwfJb9GgZ8rDi2U61l8W760a9ejHzizfQJvdldRSwFqmynkRAqYbvKixg== +"@aws-sdk/querystring-builder@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz#5307ea52c3a4a1ae6818bbb6987cc6fce68b043f" + integrity sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A== dependencies: - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-uri-escape" "3.201.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-uri-escape" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/querystring-parser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.290.0.tgz#d089c8c83cb19b07557d1f09e36dc5ec37ff8c0d" - integrity sha512-8QPDihJKSFYFphxUl5+FfXMQowhAoHuDeoqd1ce3byL0bm7k8emcGfiYD6QGxuDlpno+F4O1/Mz+e+cwNCdPVA== +"@aws-sdk/querystring-parser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz#438183927e0b06e7c2ee004a1681b8d37c22e104" + integrity sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/service-error-classification@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.290.0.tgz#4e9cc43da87b4a87dbad781f303dd92d7deed320" - integrity sha512-QP+QgL5Gm6RKl4KGwTRyG1kw0SxBbcmp/a/yhywVHmRI0/+4VsL+cooTqtjFr3xVmKoCX+/JZZ8P96VGFvRSZA== +"@aws-sdk/service-error-classification@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz#352c1db426dcf54a44393bc9a0607dde796b2abb" + integrity sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw== -"@aws-sdk/shared-ini-file-loader@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.290.0.tgz#e7a76ad15560faabd0603adf752f8732da73a00b" - integrity sha512-kvLW5rwr4lwHdwkYnoHYpFVfWwZYwQO44eRnkrDnyvvhZTcCH3rBLApu6uvomnL+Ep4bEJ1anDKt3WywlGg5Qw== +"@aws-sdk/shared-ini-file-loader@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz#07e9c8e8e8bb0de7ed19b8cea908c920a493c9c9" + integrity sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/signature-v4-multi-region@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.290.0.tgz#89fa6c6216916d28a27fb056ea39316fb603c4a9" - integrity sha512-kkFExt8MlQWnYytDuqUNLJvGhiE/stHMK8U0s1AjG+xy+wi3Atq9q3mGXbdsWatDhpuzaMhwBSttrvKOfWLnmw== +"@aws-sdk/signature-v4-multi-region@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.310.0.tgz#36eb96aa9170994ed1c5551952d2ec2d5e40c4c7" + integrity sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng== dependencies: - "@aws-sdk/protocol-http" "3.290.0" - "@aws-sdk/signature-v4" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-arn-parser" "3.208.0" - tslib "^2.3.1" - -"@aws-sdk/signature-v4@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.290.0.tgz#9b73d9de8328d6401e5399cd6021bb5addee3031" - integrity sha512-SUMflc8b8PC0ITV3AdYBSlTcn4oFjumBAPNNXBLKIpifQ1l7ZufFIulDPlqeouXTDwsuCVINAwE0DbItDe/7Qw== - dependencies: - "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-hex-encoding" "3.201.0" - "@aws-sdk/util-middleware" "3.290.0" - "@aws-sdk/util-uri-escape" "3.201.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" + "@aws-sdk/protocol-http" "3.310.0" + "@aws-sdk/signature-v4" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/smithy-client@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.290.0.tgz#0c05c305dc276b6c5bc9a9e35c2b07b447f62fb1" - integrity sha512-MDa+BJqM1FP2HYugVAscufoLJuapEdUTZPoyERVGfUEznKfKH33QXRoeqW1wzUNyhcxFONHLnXp1aYFBtnLx7g== - dependencies: - "@aws-sdk/middleware-stack" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/signature-v4@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz#ad26426d3f72fa18e6808a36f827beb72d12bf2d" + integrity sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q== + dependencies: + "@aws-sdk/is-array-buffer" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + "@aws-sdk/util-middleware" "3.310.0" + "@aws-sdk/util-uri-escape" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/token-providers@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.290.0.tgz#1728b78987b8c5feb2b05440a415e793d89222b9" - integrity sha512-fc5y8WH7RVwoaUaEdK3cRanxgHShZKAPZ0rCtHjoLURF8IjZIrn3AaZqV8YTgAAmIKNVC+argpj1G+suqXEB/Q== +"@aws-sdk/smithy-client@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.310.0.tgz#04fca042ffc120c35eeea1335fa055d39f1bd7bd" + integrity sha512-UHMFvhoB2RLzsTb0mQe1ofvBUg/+/JEu1uptavxf/hEpEKZnRAaHH5FNkTG+mbFd/olay/QFjqNcMD6t8LcsNQ== dependencies: - "@aws-sdk/client-sso-oidc" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/shared-ini-file-loader" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/middleware-stack" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/types@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.290.0.tgz#06a14cf61c2e93d8d789665d2034260229a4de8f" - integrity sha512-uQLD9tLv8Q87CwrSB/taUoQ8wkGeFb1Gygc+kt5oClfMFP9HYzu944kW/1R7/J5LtBLT1QFYccd4gz6eOUNlsw== +"@aws-sdk/token-providers@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.310.0.tgz#2d0b0d3ef729f6cdc6a0cc859e80bb9efea2d8fa" + integrity sha512-G1JvB+2v8k900VJFkKVQXgLGF50ShOEIPxfK1gSQLkSU85vPwGIAANs1KvnlW08FsNbWp3+sKca4kfYKsooXMw== dependencies: - tslib "^2.3.1" + "@aws-sdk/client-sso-oidc" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/shared-ini-file-loader" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/types@^3.222.0": +"@aws-sdk/types@3.310.0", "@aws-sdk/types@^3.222.0": version "3.310.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.310.0.tgz#b83a0580feb38b58417abb8b4ed3eae1a0cb7bc1" integrity sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A== dependencies: tslib "^2.5.0" -"@aws-sdk/url-parser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.290.0.tgz#de41d3e0f8178a01b3424c8163b6868d4210a2aa" - integrity sha512-19EAlyH4LyNMbAROE6KSuhFKhOwl67kciDavPjS8gFiHr6slon3oqXfz10+uzKf/pJKuY6qOpkUb9h7LnF4bFQ== +"@aws-sdk/url-parser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz#928c9eac2e3d74c3c5db4c6e364a1de00185dcaa" + integrity sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw== dependencies: - "@aws-sdk/querystring-parser" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/querystring-parser" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-arn-parser@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz#56b6ae4699c3140bb27dcede5146876fef04e823" - integrity sha512-QV4af+kscova9dv4VuHOgH8wEr/IIYHDGcnyVtkUEqahCejWr1Kuk+SBK0xMwnZY5LSycOtQ8aeqHOn9qOjZtA== +"@aws-sdk/util-arn-parser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz#861ff8810851be52a320ec9e4786f15b5fc74fba" + integrity sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-base64@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz#36b430e5396251f761590f7c2f0c5c12193f353c" - integrity sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg== +"@aws-sdk/util-base64@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz#d0fd49aff358c5a6e771d0001c63b1f97acbe34c" + integrity sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg== dependencies: - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-body-length-browser@3.188.0": - version "3.188.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz#e1d949318c10a621b38575a9ef01e39f9857ddb0" - integrity sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg== +"@aws-sdk/util-body-length-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz#3fca9d2f73c058edf1907e4a1d99a392fdd23eca" + integrity sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-body-length-node@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz#baabd1fa1206ff2bd4ce3785122d86eb3258dd20" - integrity sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg== +"@aws-sdk/util-body-length-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz#4846ae72834ab0636f29f89fc1878520f6543fed" + integrity sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-buffer-from@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz#285e86f6dc9030148a4147d65239e75cb254a1b0" - integrity sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw== +"@aws-sdk/util-buffer-from@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz#7a72cb965984d3c6a7e256ae6cf1621f52e54a57" + integrity sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw== dependencies: - "@aws-sdk/is-array-buffer" "3.201.0" - tslib "^2.3.1" + "@aws-sdk/is-array-buffer" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-config-provider@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz#c485fd83fbac051337e5f6be60ea3f9fa61c0139" - integrity sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg== +"@aws-sdk/util-config-provider@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz#ff21f73d4774cfd7bd16ae56f905828600dda95f" + integrity sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-defaults-mode-browser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.290.0.tgz#2abe74057eaf49c14c9557b2181c806a1d91bfd1" - integrity sha512-8Mt6/OA465uw1wSA/LCCd+6IjeIUTAbg2GiqfSBCBMNJNuqPwPXuWVjg6kBd1eEChyEtAuoLTygMefaBywg4HQ== +"@aws-sdk/util-defaults-mode-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.310.0.tgz#db82bfdf339eea0bc8b1b059dfe9b62e5d3adbf4" + integrity sha512-Mr2AoQsjAYNM5oAS2YJlYJqhiCvkFV/hu48slOZgbY4G7ueW4cM0DPkR16wqjcRCGqZ4JmAZB8Q5R0DMrLjhOQ== dependencies: - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" bowser "^2.11.0" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-defaults-mode-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.290.0.tgz#0efff7937241f89dd70f1acf6f7697181352400f" - integrity sha512-9c0jS7w1aZxfKkFXlTjp80QaKYKnutMmlsfP+/YXN9+s3yvwFcnsENMTNg5YVvkZa9e+Rhw/ySxVKTEJ7n/SOA== - dependencies: - "@aws-sdk/config-resolver" "3.290.0" - "@aws-sdk/credential-provider-imds" "3.290.0" - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/property-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" +"@aws-sdk/util-defaults-mode-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.310.0.tgz#aee459c2da09e2c6e85c6db0406565312f45ccbb" + integrity sha512-JyBlvhQGR8w8NpFRZZXRVTDesafFKTu/gTWjcoxP7twa+fYHSIgPPFGnlcJ/iHaucjamSaWi5EQ+YQmnSZ8yHA== + dependencies: + "@aws-sdk/config-resolver" "3.310.0" + "@aws-sdk/credential-provider-imds" "3.310.0" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/property-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-endpoints@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.290.0.tgz#ab2c56b2814614c40c045ea2b4098ab03af24c6a" - integrity sha512-nDdSyWdxYEPE84qABQKasIFhm6oWjhiyM92g8zsHTqzrn67a4caA72FTL6cztgJOEd5GWvHn6r1BnRVhkG68Qw== +"@aws-sdk/util-endpoints@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.310.0.tgz#fea8757038b62d49dacd653061ba04a2ea102a36" + integrity sha512-zG+/d/O5KPmAaeOMPd6bW1abifdT0H03f42keLjYEoRZzYtHPC5DuPE0UayiWGckI6BCDgy0sRKXCYS49UNFaQ== dependencies: - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-format-url@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.290.0.tgz#af9372b91576998d1e93af23caa45177490c0ad2" - integrity sha512-MHeiyc8HIYvjeom0DF0OimBQ8oYvIqsG1wyfwDoFFA5A3gM6r8cl3VUg+t/KOXL+A85Ax4iALuG2ViT6zteKhg== +"@aws-sdk/util-format-url@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.310.0.tgz#4f89c18a23ec6515f50100deced5f236512c4e15" + integrity sha512-NBOvmvvVR3ydquHmznfgtakiSgDhq8Ww6fq8TUaEjM+Es6+iqY4AwZo0rZ9xTX3GpCcoZy391HUi6kiXRAFzuA== dependencies: - "@aws-sdk/querystring-builder" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/querystring-builder" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-hex-encoding@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz#21d7ec319240ee68c33d938e71cb79830bea315d" - integrity sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA== +"@aws-sdk/util-hex-encoding@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz#19294c78986c90ae33f04491487863dc1d33bd87" + integrity sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" "@aws-sdk/util-locate-window@^3.0.0": version "3.310.0" @@ -1152,67 +1130,67 @@ dependencies: tslib "^2.5.0" -"@aws-sdk/util-middleware@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.290.0.tgz#3353405daddd38ec98242abee0fc946c76976df1" - integrity sha512-lXGM9YSqwZgCeEPltc++jiGyZ/FLuh62IjrWSIVSL/FvkL6D8KSKNBd7Ab/KDDu5jt4iP5UZ4k3SGVk6monUZg== +"@aws-sdk/util-middleware@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz#713c5bfa296f4cf707150a0a1e911afd50dcf939" + integrity sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-retry@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.290.0.tgz#ea521ae287b34fdd943f4e2d87d69a9aa7006fc7" - integrity sha512-UjyUEguu2upaBvDJkeSUQPE4ryBTA7JhPyl6M7XA6rFSRtU5+1NI8KknSNw46buviNit0Yu0E6TzxNQyS70hKA== +"@aws-sdk/util-retry@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz#4cdc35e2dfdacf2d928ab474ba8b67bbadd6be3c" + integrity sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA== dependencies: - "@aws-sdk/service-error-classification" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/service-error-classification" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-stream-browser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.290.0.tgz#33b7098055285dd04a24b4b02429f794dd543989" - integrity sha512-mDfGVSZbostSM+kQPEeiDB57mt2oMywtuOtLmv8+iXRZmCBwaHrHZLWguEV+hy/DSKD0e9yAzPja6PbI0/maNA== - dependencies: - "@aws-sdk/fetch-http-handler" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-hex-encoding" "3.201.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" +"@aws-sdk/util-stream-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.310.0.tgz#223e60f7711f7a20fdc944e1b72c8dd4c1da28cf" + integrity sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w== + dependencies: + "@aws-sdk/fetch-http-handler" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-stream-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-node/-/util-stream-node-3.290.0.tgz#c122a5339aa294ca3b40c91d2fb6dde1504ee95c" - integrity sha512-LUrJAt5knKvkJa3ZjOvAFf5bDKqT3DXM8l+KIYSwj9WM7a4rX+gAACILWQZLNvlzQAy+KEjPfhT7p0LZf6Os2w== +"@aws-sdk/util-stream-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-node/-/util-stream-node-3.310.0.tgz#088c59b7f346669f501ce0ad08cda7e88de0ba1f" + integrity sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q== dependencies: - "@aws-sdk/node-http-handler" "3.290.0" - "@aws-sdk/types" "3.290.0" - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/node-http-handler" "3.310.0" + "@aws-sdk/types" "3.310.0" + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-uri-escape@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz#5e708d4cde001a4558ee616f889ceacfadd2ab03" - integrity sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA== +"@aws-sdk/util-uri-escape@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz#9f942f09a715d8278875013a416295746b6085ba" + integrity sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-user-agent-browser@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.290.0.tgz#e0b7585808fd5bd9be20057b41d3a4c2a4dd8f75" - integrity sha512-I+B5ooKRYQ9jHcdg7TOf20LlTfcBUlCJQ2AAqI1ukmJqal22OD1CtC1E+/XbplpU5mxRs4s2UQbxNaPA0yIrBA== +"@aws-sdk/util-user-agent-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz#48d463a93351b78b678df324f3518a9798029c44" + integrity sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw== dependencies: - "@aws-sdk/types" "3.290.0" + "@aws-sdk/types" "3.310.0" bowser "^2.11.0" - tslib "^2.3.1" + tslib "^2.5.0" -"@aws-sdk/util-user-agent-node@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.290.0.tgz#94dec6201da61f6b56cbb40b2768fa95addd91a3" - integrity sha512-7juKgEMqpa0il6jZmiBKGDJslM4UIKX1bvhlqkSvvPfV3zFdfi0V2xavh68GfelWduBBkYLGRjsLunqzw64f8A== +"@aws-sdk/util-user-agent-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz#ebefbedc5a4759adc958885741628ec0de1ab197" + integrity sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg== dependencies: - "@aws-sdk/node-config-provider" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/node-config-provider" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" @@ -1221,29 +1199,29 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-utf8@3.254.0": - version "3.254.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz#909af9c6549833a9a9bf77004b7484bfc96b2c35" - integrity sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw== +"@aws-sdk/util-utf8@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz#4a7b9dcebb88e830d3811aeb21e9a6df4273afb4" + integrity sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA== dependencies: - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/util-waiter@3.290.0": - version "3.290.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.290.0.tgz#48ed39903578ac186f99c7875243090a0ed86300" - integrity sha512-8dD1CN5uKAXvRybwk+U6XHPirmVFkHyqu/n20tKB7M/cSoSEM/S5WmaaAqyW3Y0Kv+RIRGcQJb4goYqm7pfZkA== +"@aws-sdk/util-waiter@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.310.0.tgz#a410739cfc637af9ccea21de079d00652e9b8363" + integrity sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw== dependencies: - "@aws-sdk/abort-controller" "3.290.0" - "@aws-sdk/types" "3.290.0" - tslib "^2.3.1" + "@aws-sdk/abort-controller" "3.310.0" + "@aws-sdk/types" "3.310.0" + tslib "^2.5.0" -"@aws-sdk/xml-builder@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.201.0.tgz#acf0869855460528114bec17f290b224fe19a3e2" - integrity sha512-brRdB1wwMgjWEnOQsv7zSUhIQuh7DEicrfslAqHop4S4FtSI3GQAShpQqgOpMTNFYcpaWKmE/Y1MJmNY7xLCnw== +"@aws-sdk/xml-builder@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz#f0236f2103b438d16117e0939a6305ad69b7ff76" + integrity sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": version "7.21.4" From e8c5fa6e57c7904f0a8f356075fb8a54e8ba2c09 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:59:21 +0200 Subject: [PATCH 054/122] docs: explain how to use presets (#21534) Co-authored-by: Michael Kriese --- docs/usage/config-presets.md | 5 ++++- docs/usage/configuration-options.md | 3 ++- docs/usage/key-concepts/presets.md | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index b70a8f48bbabad..0afcd775de8299 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -164,7 +164,7 @@ In short, the number of `{{argx}}` parameters in the definition is how many para Parameters must be strings, non-quoted, and separated by commas if there are more than one. If you find that you are repeating config a lot, you might consider publishing one of these types of parameterised presets yourself. -Or if you think your preset would be valuable for others, please contribute a PR to the Renovate repository. +Or if you think your preset would be valuable for others, please contribute a PR to the Renovate repository, see [Contributing to presets](#contributing-to-presets). ## GitHub-hosted Presets @@ -213,6 +213,9 @@ Renovate will determine the current platform and look up the preset from there. Have you configured a rule that you think others might benefit from? Please consider contributing it to the [Renovate repository](https://github.com/renovatebot/renovate/tree/main/lib/config/presets/internal) so that it gains higher visibility and saves others from reinventing the same thing. +Create a [discussion](https://github.com/renovatebot/renovate/discussions) to propose your preset to the Renovate maintainers. +The maintainers can also help improve the preset, and let you know where to put it in the code. + ## Organization level presets Whenever repository onboarding happens, Renovate checks if the current user/group/org has a default config to extend. diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d9ed849b8e73de..775d6aad22d333 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -854,7 +854,8 @@ The above would mean Renovate would not include files matching the above glob pa ## extends -See [shareable config presets](https://docs.renovatebot.com/config-presets) for details. +See [shareable config presets](./config-presets.md) for details. +Learn how to use presets by reading the [Key concepts, Presets](./key-concepts/presets.md/#how-to-use-presets) page. ## extractVersion diff --git a/docs/usage/key-concepts/presets.md b/docs/usage/key-concepts/presets.md index f6bf06d9b5991f..f786f901e18730 100644 --- a/docs/usage/key-concepts/presets.md +++ b/docs/usage/key-concepts/presets.md @@ -16,6 +16,21 @@ Use presets to: - Share your configuration with others - Use somebody else's configuration and extend it with your own rules +## How to use presets + +Let's say you're using the `config:base` preset, and want to pin your GitHub Action digests. +Instead of writing your own Renovate config, you search through Renovate's built-in presets. +You find the the `helpers:pinGitHubActionDigests` preset and add it to the `extends` array: + +```json +{ + "extends": ["config:base", "helpers:pinGitHubActionDigests"] +} +``` + +Renovate now follows the rules for `config:base` plus the rules for `helpers:pinGitHubActionDigests`. +If there is a logical conflict between presets, then the last preset in the array wins. + ## Managing config for many repositories If you manage Renovate for many repositories, then you should create a global preset configuration. @@ -32,6 +47,12 @@ Renovate comes with a lot of built-in presets that you can use. Browse [Renovate's default presets](https://docs.renovatebot.com/presets-default/) to find any that are useful to you. Once you find a preset you like, put it in an `extends` array in your config file. +### Contributing a new built-in preset + +If you have a Renovate config that may help others, you can put it into Renovate's built-in presets. + +Read [Contributing to presets](./config-presets.md#contributing-to-presets) to learn how. + ## Summary In short: From 93e8bda4ec37fdc0cf9f48639028e8663237f0db Mon Sep 17 00:00:00 2001 From: Liora Milbaum Date: Mon, 17 Apr 2023 17:19:14 +0300 Subject: [PATCH 055/122] chore(devcontainer): Fixed errors and added CI workflow (#21515) Co-authored-by: Michael Kriese Co-authored-by: Jamie Magee --- .devcontainer/Dockerfile | 5 +++++ .devcontainer/devcontainer.json | 27 +++++++++++++++++---------- .github/workflows/devcontainer.yml | 17 +++++++++++++++++ docs/development/local-development.md | 10 ++++++++-- 4 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/devcontainer.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index ebe7805c7bb5c3..f2d00f11fdb4bf 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -2,5 +2,10 @@ FROM ghcr.io/containerbase/node:18.16.0 USER root +RUN install-apt make g++ + +# renovate: datasource=github-releases packageName=containerbase/python-prebuild +RUN install-tool python 3.11.3 + # renovate: datasource=npm RUN install-tool yarn 1.22.19 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 306cb29b34a443..ff52204e6e3a68 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,21 +1,28 @@ { + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json", "hostRequirements": { "cpus": 4, - "memory": "8gb", + "memory": "7gb", "storage": "32gb" }, "name": "Renovate", "dockerFile": "Dockerfile", - "settings": { - "terminal.integrated.profiles.linux": { "bash": { "path": "/bin/bash" } }, - "terminal.integrated.defaultProfile.linux": "bash" + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.profiles.linux": { + "bash": { "path": "/bin/bash" } + }, + "terminal.integrated.defaultProfile.linux": "bash" + }, + "extensions": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "orta.vscode-jest", + "EditorConfig.editorconfig" + ] + } }, - "extensions": [ - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - "orta.vscode-jest", - "EditorConfig.editorconfig" - ], "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml new file mode 100644 index 00000000000000..094242aa40946f --- /dev/null +++ b/.github/workflows/devcontainer.yml @@ -0,0 +1,17 @@ +name: devcontainer +on: + pull_request: + branches: + - main + +jobs: + devcontainer-test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + + - name: Build and run dev container task + uses: devcontainers/ci@v0.3.1900000328 + with: + runCmd: yarn build diff --git a/docs/development/local-development.md b/docs/development/local-development.md index a141a9b3a537aa..d1714fe95a8132 100644 --- a/docs/development/local-development.md +++ b/docs/development/local-development.md @@ -47,9 +47,9 @@ If you already installed a part, skip the corresponding step. PS C:\Windows\system32> yarn --version ``` -#### VS Code Remote Development +#### VS Code Dev Containers -If you are using [VS Code](https://code.visualstudio.com/) you can skip installing [the prerequisites](#prerequisites) and work in a [development container](https://code.visualstudio.com/docs/remote/containers) instead. +If you are using [VS Code](https://code.visualstudio.com/) you can skip installing [the prerequisites](#prerequisites) and work in a [development container](https://code.visualstudio.com/docs/devcontainers/containers) instead. - Install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) and [check its system requirements](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers#system-requirements) - Open the repository folder in VS Code @@ -57,6 +57,12 @@ If you are using [VS Code](https://code.visualstudio.com/) you can skip installi The VS Code [integrated terminal](https://code.visualstudio.com/docs/editor/integrated-terminal) is now running in the container and can be used to run additional commands. +To build inside the container: + +```shell +yarn build +``` + #### Local Docker If, for some reason, you can't run the relevant versions on your local machine, you can run everything from a Docker image. From 4487951257e20da00efe978b6dc9b1a4af652163 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:55:49 +0000 Subject: [PATCH 056/122] chore(deps): pin dependencies (#21557) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/devcontainer.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index 094242aa40946f..251c7365156579 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3.5.2 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Build and run dev container task - uses: devcontainers/ci@v0.3.1900000328 + uses: devcontainers/ci@72700878095f87b851a6c4405a16056caffdc577 # v0.3.1900000328 with: runCmd: yarn build From a6a50b60c717399cac7bfdacb94dca8e3ce201ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 23:34:50 +0000 Subject: [PATCH 057/122] chore(deps): update devcontainers/ci action to v0.3.1900000329 (#21563) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/devcontainer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index 251c7365156579..98463b0240c10b 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -12,6 +12,6 @@ jobs: uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Build and run dev container task - uses: devcontainers/ci@72700878095f87b851a6c4405a16056caffdc577 # v0.3.1900000328 + uses: devcontainers/ci@57eaf0c9b518a76872bc429cdceefd65a912309b # v0.3.1900000329 with: runCmd: yarn build From 60ac8c7d22886cb5be5da80a465f6e635c17cec3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 23:41:11 +0000 Subject: [PATCH 058/122] build(deps): update dependency semver to v7.4.0 (#21564) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 023c0474ea3a70..257ce6d80f8fe4 100644 --- a/package.json +++ b/package.json @@ -226,7 +226,7 @@ "remark": "13.0.0", "remark-github": "10.1.0", "safe-stable-stringify": "2.4.3", - "semver": "7.3.8", + "semver": "7.4.0", "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.2", diff --git a/yarn.lock b/yarn.lock index efa3aea97298e0..3d48013594f03e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9278,14 +9278,7 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@7.4.0, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.4.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== From 4fa199e20d2cce63b269b30f3eee8f6a2e4bac79 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 18 Apr 2023 04:33:30 +0200 Subject: [PATCH 059/122] feat(versioning/regex): add `revision` as fifth capture group (#21555) --- lib/modules/versioning/regex/index.spec.ts | 20 +++++++++++++++----- lib/modules/versioning/regex/index.ts | 6 +++++- lib/modules/versioning/regex/readme.md | 5 +++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/modules/versioning/regex/index.spec.ts b/lib/modules/versioning/regex/index.spec.ts index e8dd5e3dfab6c9..e9070d7de7fc1c 100644 --- a/lib/modules/versioning/regex/index.spec.ts +++ b/lib/modules/versioning/regex/index.spec.ts @@ -1,9 +1,9 @@ -import { VersioningApi, get } from '..'; +import { get } from '..'; import { CONFIG_VALIDATION } from '../../../constants/error-messages'; describe('modules/versioning/regex/index', () => { describe('regex versioning', () => { - const regex: VersioningApi = get( + const regex = get( 'regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(?[^.-]+)?(?:-(?.*))?$' ); @@ -11,6 +11,16 @@ describe('modules/versioning/regex/index', () => { expect(() => get('regex:not a regex')).toThrow(); }); + it('works without config', () => { + const re = get('regex'); + expect(re.isValid('alpine')).toBeFalse(); + }); + + it('works with missing version', () => { + const re = get('regex:^(?\\d+)?(?.+)'); + expect(re.isValid('alpine')).toBeTrue(); + }); + describe('throws', () => { for (const re of [ '^(?\\d+)(', @@ -43,7 +53,7 @@ describe('modules/versioning/regex/index', () => { ${'1.2.aardvark-foo'} | ${false} ${'1.2a2.3'} | ${false} `('isValid("$version") === $expected', ({ version, expected }) => { - expect(!!regex.isValid(version)).toBe(expected); + expect(regex.isValid(version)).toBe(expected); }); test.each` @@ -342,9 +352,9 @@ describe('modules/versioning/regex/index', () => { ); }); - describe('Supported 4th number as build', () => { + describe('Supported 4th number as build and 5th as revision', () => { const re = get( - 'regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.*-r)(?\\d+))?$' + 'regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.+)(?\\d+)-r(?\\d+))?$' ); test.each` diff --git a/lib/modules/versioning/regex/index.ts b/lib/modules/versioning/regex/index.ts index c77ee139a83c90..a11369635d4817 100644 --- a/lib/modules/versioning/regex/index.ts +++ b/lib/modules/versioning/regex/index.ts @@ -71,7 +71,8 @@ export class RegExpVersioningApi extends GenericVersioningApi { return null; } - const { major, minor, patch, build, prerelease, compatibility } = groups; + const { major, minor, patch, build, revision, prerelease, compatibility } = + groups; const release = [ typeof major === 'undefined' ? 0 : Number.parseInt(major, 10), typeof minor === 'undefined' ? 0 : Number.parseInt(minor, 10), @@ -80,6 +81,9 @@ export class RegExpVersioningApi extends GenericVersioningApi { if (build) { release.push(Number.parseInt(build, 10)); + if (revision) { + release.push(Number.parseInt(revision, 10)); + } } return { diff --git a/lib/modules/versioning/regex/readme.md b/lib/modules/versioning/regex/readme.md index cabd8e88b08db6..9d7f3e17066a59 100644 --- a/lib/modules/versioning/regex/readme.md +++ b/lib/modules/versioning/regex/readme.md @@ -5,6 +5,7 @@ The valid capture groups for `regex` versioning are: - `major`, `minor`, and `patch`: at least one of these must be provided. When determining whether a package has updates, these values will be compared in the standard semantic versioning fashion. If any of these fields are omitted, they will be treated as if they were `0` -- in this way, you can describe versioning schemes with up to three incrementing values. - `build`: this capture group can be used after you've already used the `major`, `minor` and `patch` capture groups and need a fourth version part. `build` updates are handled like `patch` updates. +- `revision`: this capture group can be used after you've already used the `build` capture groups and need a fifth version part. `revision` updates are handled like `patch` updates. - `prerelease`: this value, if captured, will mark a given release as a prerelease (e.g. unstable). If this value is captured and you have configured `"ignoreUnstable": true`, the given release will be skipped. - `compatibility`: this value defines the "build compatibility" of a given dependency. A proposed Renovate update will never change the specified compatibility value. For example, if you are pinning to `1.2.3-linux` (and `linux` is captured as the compatibility value), Renovate will not update you to `1.2.4-osx`. @@ -37,7 +38,7 @@ Here is another example, this time for handling `python` Docker images, which us } ``` -Here is another example, this time for handling Bitnami Docker images, which use build indicators as well as version suffixes for compatibility: +Here is another example, this time for handling Bitnami Docker images, which use `build` and `revision` indicators as well as version suffixes for compatibility: ```json { @@ -45,7 +46,7 @@ Here is another example, this time for handling Bitnami Docker images, which use { "matchDatasources": ["docker"], "matchPackagePrefixes": ["bitnami/"], - "versioning": "regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.*-r)(?\\d+))?$" + "versioning": "regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.+)(?\\d+)-r(?\\d+))?$" } ] } From e5fd6ce2a5dca4249ed6f8fc4c8f18b540600b42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 05:37:27 +0200 Subject: [PATCH 060/122] build(deps): update dependency semver to v7.5.0 (#21565) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 257ce6d80f8fe4..30bc20e1c6b02c 100644 --- a/package.json +++ b/package.json @@ -226,7 +226,7 @@ "remark": "13.0.0", "remark-github": "10.1.0", "safe-stable-stringify": "2.4.3", - "semver": "7.4.0", + "semver": "7.5.0", "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.2", diff --git a/yarn.lock b/yarn.lock index 3d48013594f03e..5b8d27110e9d18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9278,7 +9278,14 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.4.0, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.4.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== From 91812d025da748722777156da936d07e205cf0d9 Mon Sep 17 00:00:00 2001 From: Jorge Silva Date: Tue, 18 Apr 2023 05:55:28 +0100 Subject: [PATCH 061/122] feat(manager/gomod): add `goGetDirs` option (#20156) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese Co-authored-by: Sebastian Poxhofer --- docs/usage/configuration-options.md | 11 ++ docs/usage/golang.md | 2 +- lib/config/options/index.ts | 8 ++ lib/modules/manager/gomod/artifacts.spec.ts | 110 +++++++++++++++++++- lib/modules/manager/gomod/artifacts.ts | 22 +++- lib/modules/manager/types.ts | 1 + 6 files changed, 151 insertions(+), 3 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 775d6aad22d333..690946388fb538 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1040,6 +1040,17 @@ Under the hood, it creates a MR-level approval rule where `approvals_required` i This option works only when `automerge=true`, `automergeType=pr` or `automergeType=branch`, and `platformAutomerge=true`. Also, approval rules overriding should not be [prevented in GitLab settings](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/settings.html#prevent-editing-approval-rules-in-merge-requests). +## goGetDirs + +By default, Renovate will run `go get -d -t ./...` to update the `go.sum`. +If you need to modify this path, for example in order to ignore directories, you can override the default `./...` value using this option: + +```json +{ + "goGetDirs": ["./some-project/", "./tools/..."] +} +``` + ## golang Configuration added here applies for all Go-related updates. diff --git a/docs/usage/golang.md b/docs/usage/golang.md index 705e294f208096..fd560949a99308 100644 --- a/docs/usage/golang.md +++ b/docs/usage/golang.md @@ -13,7 +13,7 @@ Renovate supports upgrading dependencies in `go.mod` files and their accompanyin 1. Renovate extracts existing dependencies from `require` statements 1. Renovate resolves the dependency's source repository and checks for SemVer tags if found. Otherwise commits and `v0.0.0-....` syntax will be used 1. If Renovate finds an update, Renovate will update `go.mod` to the new value -1. Renovate runs `go get` to update the `go.sum` files +1. Renovate runs `go get` to update the `go.sum` files (you can configure which directory are included using the `goGetDirs` option) 1. If the user has enabled the option `gomodUpdateImportPaths` in the [`postUpdateOptions`](https://docs.renovatebot.com/configuration-options/#postupdateoptions) array, then Renovate uses [mod](https://github.com/marwan-at-work/mod) to update import paths on major updates, which can update any Go source file 1. If the user has any of the available `gomodTidy` options (e.g. `gomodTidy1.17`) in the [`postUpdateOptions`](https://docs.renovatebot.com/configuration-options/#postupdateoptions), then Renovate runs `go mod tidy` with the respective options (multiple options are allowed). 1. `go mod vendor` is run if vendored modules are detected diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 4702833112fe32..ae357e8d09f572 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -366,6 +366,14 @@ const options: RenovateOptions[] = [ subType: 'string', default: [], }, + { + name: 'goGetDirs', + description: 'Directory pattern to run `go get` on', + type: 'array', + subType: 'string', + default: ['./...'], + supportedManagers: ['gomod'], + }, // Log options { name: 'logFile', diff --git a/lib/modules/manager/gomod/artifacts.spec.ts b/lib/modules/manager/gomod/artifacts.spec.ts index 667eee6bdd7a3d..22cfc117b74df2 100644 --- a/lib/modules/manager/gomod/artifacts.spec.ts +++ b/lib/modules/manager/gomod/artifacts.spec.ts @@ -15,7 +15,17 @@ jest.mock('../../../util/exec/env'); jest.mock('../../../util/git'); jest.mock('../../../util/host-rules'); jest.mock('../../../util/http'); -jest.mock('../../../util/fs'); +jest.mock('../../../util/fs', () => { + // restore + return { + __esModules: true, + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + ...(jest.createMockFromModule('../../../util/fs') as any), + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + isValidLocalPath: (jest.requireActual('../../../util/fs') as any) + .isValidLocalPath, + }; +}); jest.mock('../../datasource'); process.env.BUILDPACK = 'true'; @@ -1939,4 +1949,102 @@ describe('modules/manager/gomod/artifacts', () => { ]; expect(execSnapshots).toMatchObject(expectedResult); }); + + it('handles goGetDirs configuration correctly', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current go.sum'); + fs.readLocalFile.mockResolvedValueOnce(null); // vendor modules filename + const execSnapshots = mockExecAll(); + git.getRepoStatus.mockResolvedValueOnce( + partial({ + modified: [], + }) + ); + + expect( + await gomod.updateArtifacts({ + packageFileName: 'go.mod', + updatedDeps: [], + newPackageFileContent: gomod1, + config: { + ...config, + goGetDirs: ['.', 'foo', '.bar/...', '&&', 'cat', '/etc/passwd'], + }, + }) + ).toBeNull(); + expect(execSnapshots).toMatchObject([ + { + cmd: 'go get -d -t . foo .bar/... cat', + options: { + cwd: '/tmp/github/some/repo', + }, + }, + ]); + }); + + it('returns updated go.sum when goGetDirs is specified', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current go.sum'); + fs.readLocalFile.mockResolvedValueOnce(null); // vendor modules filename + const execSnapshots = mockExecAll(); + git.getRepoStatus.mockResolvedValueOnce( + partial({ + modified: ['go.sum'], + }) + ); + fs.readLocalFile.mockResolvedValueOnce('New go.sum'); + fs.readLocalFile.mockResolvedValueOnce(gomod1); + expect( + await gomod.updateArtifacts({ + packageFileName: 'go.mod', + updatedDeps: [], + newPackageFileContent: gomod1, + config: { + ...config, + goGetDirs: ['.'], + }, + }) + ).toEqual([ + { + file: { + contents: 'New go.sum', + path: 'go.sum', + type: 'addition', + }, + }, + ]); + expect(execSnapshots).toMatchObject([ + { + cmd: 'go get -d -t .', + options: { + cwd: '/tmp/github/some/repo', + }, + }, + ]); + }); + + it('errors when goGetDirs is specified with all invalid paths', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current go.sum'); + fs.readLocalFile.mockResolvedValueOnce(null); // vendor modules filename + const execSnapshots = mockExecAll(); + git.getRepoStatus.mockResolvedValueOnce( + partial({ + modified: ['go.sum'], + }) + ); + fs.readLocalFile.mockResolvedValueOnce('New go.sum'); + fs.readLocalFile.mockResolvedValueOnce(gomod1); + expect( + await gomod.updateArtifacts({ + packageFileName: 'go.mod', + updatedDeps: [], + newPackageFileContent: gomod1, + config: { + ...config, + goGetDirs: ['&&', '||'], + }, + }) + ).toEqual([ + { artifactError: { lockFile: 'go.sum', stderr: 'Invalid goGetDirs' } }, + ]); + expect(execSnapshots).toMatchObject([]); + }); }); diff --git a/lib/modules/manager/gomod/artifacts.ts b/lib/modules/manager/gomod/artifacts.ts index 6ef9025014685b..0b6de5e39d2d0c 100644 --- a/lib/modules/manager/gomod/artifacts.ts +++ b/lib/modules/manager/gomod/artifacts.ts @@ -1,5 +1,6 @@ import is from '@sindresorhus/is'; import semver from 'semver'; +import { quote } from 'shlex'; import upath from 'upath'; import { GlobalConfig } from '../../../config/global'; import type { PlatformId } from '../../../constants'; @@ -10,6 +11,7 @@ import { exec } from '../../../util/exec'; import type { ExecOptions } from '../../../util/exec/types'; import { ensureCacheDir, + isValidLocalPath, readLocalFile, writeLocalFile, } from '../../../util/fs'; @@ -296,7 +298,25 @@ export async function updateArtifacts({ const execCommands: string[] = []; - let args = 'get -d -t ./...'; + let goGetDirs: string | undefined; + if (config.goGetDirs) { + goGetDirs = config.goGetDirs + .filter((dir) => { + const isValid = isValidLocalPath(dir); + if (!isValid) { + logger.warn({ dir }, 'Invalid path in goGetDirs'); + } + return isValid; + }) + .map(quote) + .join(' '); + + if (goGetDirs === '') { + throw new Error('Invalid goGetDirs'); + } + } + + let args = `get -d -t ${goGetDirs ?? './...'}`; logger.trace({ cmd, args }, 'go get command included'); execCommands.push(`${cmd} ${args}`); diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index abd361b4b15006..c81b729d1c8470 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -33,6 +33,7 @@ export interface UpdateArtifactsConfig { isLockFileMaintenance?: boolean; constraints?: Record; composerIgnorePlatformReqs?: string[]; + goGetDirs?: string[]; currentValue?: string; postUpdateOptions?: string[]; ignorePlugins?: boolean; From 288ad1f9bd352c451941102b3d4b979f27f2a1c3 Mon Sep 17 00:00:00 2001 From: Emil Davtyan Date: Tue, 18 Apr 2023 07:01:29 +0200 Subject: [PATCH 062/122] feat: support depth URL argument in Terragrunt modules (#21494) Co-authored-by: Sebastian Poxhofer --- .../manager/terragrunt/__fixtures__/2.hcl | 6 +- .../manager/terragrunt/__fixtures__/3.hcl | 166 ++++++ .../manager/terragrunt/__fixtures__/4.hcl | 166 ++++++ .../__snapshots__/extract.spec.ts.snap | 171 ------ .../manager/terragrunt/extract.spec.ts | 494 +++++++++++++++++- lib/modules/manager/terragrunt/modules.ts | 4 +- 6 files changed, 828 insertions(+), 179 deletions(-) create mode 100644 lib/modules/manager/terragrunt/__fixtures__/3.hcl create mode 100644 lib/modules/manager/terragrunt/__fixtures__/4.hcl delete mode 100644 lib/modules/manager/terragrunt/__snapshots__/extract.spec.ts.snap diff --git a/lib/modules/manager/terragrunt/__fixtures__/2.hcl b/lib/modules/manager/terragrunt/__fixtures__/2.hcl index 29d30085460cf2..b99906d626d704 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/2.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/2.hcl @@ -33,9 +33,9 @@ terraform { source = "github.com/hashicorp/example?ref=next" } -#hostname +#IP terraform { - source = "https://104.196.242.174"example?ref=next" + source = "https://104.196.242.174/example?ref=next" } #local hostname @@ -63,7 +63,7 @@ terraform { source = "my.host.local/sources/example?ref=v1.2.1" } -#ip +#hostname terraform { source = "my.host/example?ref=next" } diff --git a/lib/modules/manager/terragrunt/__fixtures__/3.hcl b/lib/modules/manager/terragrunt/__fixtures__/3.hcl new file mode 100644 index 00000000000000..bfb076653db875 --- /dev/null +++ b/lib/modules/manager/terragrunt/__fixtures__/3.hcl @@ -0,0 +1,166 @@ +#real +terraform { + extra_arguments "common_vars" { + commands = ["plan", "apply"] + + arguments = [ + "-var-file=../../common.tfvars", + "-var-file=../region.tfvars" + ] + } + + before_hook "before_hook" { + commands = ["apply", "plan"] + execute = ["echo", "Running Terraform"] + } + + source = "github.com/myuser/myrepo//folder/modules/moduleone?ref=v0.0.9&depth=1" + + after_hook "after_hook" { + commands = ["apply", "plan"] + execute = ["echo", "Finished running Terraform"] + run_on_error = true + } +} + +#foo +terraform { + source = "github.com/hashicorp/example?ref=v1.0.0&depth=1" +} + +#bar +terraform { + source = "github.com/hashicorp/example?ref=next&depth=3" +} + +#IP +terraform { + source = "https://104.196.242.174/example?ref=next&depth=1" +} + +#local hostname +terraform { + source = "my.host.local/example?ref=v1.2.1&depth=1" +} + +#local hostname +terraform { + source = "my.host/modules/test" +} + +#local hostname +terraform { + source = "my.host/modules/test?ref=v1.2.1&depth=1" +} + +#local hostname +terraform { + source = "my.host" +} + +#local hostname +terraform { + source = "my.host.local/sources/example?ref=v1.2.1&depth=1" +} + +#hostname +terraform { + source = "my.host/example?ref=next&depth=1" +} + +#invalid +terraform { + source = "//terraform/module/test?ref=next&depth=1" +} + +#repo-with-non-semver-ref +terraform { + source = "github.com/githubuser/myrepo//terraform/modules/moduleone?ref=tfmodule_one-v0.0.9&depth=1" +} + +#repo-with-dot +terraform { + source = "github.com/hashicorp/example.2.3?ref=v1.0.0&depth=1" +} + +#repo-with-dot-and-git-suffix +terraform { + source = "github.com/hashicorp/example.2.3.git?ref=v1.0.0&depth=1" +} + +#source without pinning +terraform { + source = "hashicorp/consul/aws" +} + +# source with double-slash +terraform { + source = "github.com/tieto-cem/terraform-aws-ecs-task-definition//modules/container-definition?ref=v0.1.0&depth=1" +} + +# regular sources +terraform { + source = "github.com/tieto-cem/terraform-aws-ecs-task-definition?ref=v0.1.0&depth=1" +} + +terraform { + source = "git@github.com:hashicorp/example.git?ref=v2.0.0&depth=1" +} + +terraform { + source = "terraform-aws-modules/security-group/aws//modules/http-80" + +} + +terraform { + source = "terraform-aws-modules/security-group/aws" +} + +terraform { + source = "../../terraforms/fe" +} + +# nosource, ignored by test since it does not have source on the next line +terraform { + foo = "bar" +} + +# foobar +terraform { + source = "https://bitbucket.com/hashicorp/example?ref=v1.0.0&depth=1" +} + +# gittags +terraform { + source = "git::https://bitbucket.com/hashicorp/example?ref=v1.0.0&depth=1" +} + +# gittags_badversion +terraform { + source = "git::https://bitbucket.com/hashicorp/example?ref=next&depth=1" +} + +# gittags_subdir +terraform { + source = "git::https://bitbucket.com/hashicorp/example//subdir/test?ref=v1.0.1&depth=1" +} + +# gittags_http +terraform { + source = "git::http://bitbucket.com/hashicorp/example?ref=v1.0.2&depth=1" +} + +# gittags_ssh +terraform { + source = "git::ssh://git@bitbucket.com/hashicorp/example?ref=v1.0.3&depth=1" +} + +# invalid, ignored by test since it does not have source on the next line +terraform { +} + +# unsupported terragrunt, ignored by test since it does not have source on the next line +terraform { + name = "foo" + dummy = "true" +} diff --git a/lib/modules/manager/terragrunt/__fixtures__/4.hcl b/lib/modules/manager/terragrunt/__fixtures__/4.hcl new file mode 100644 index 00000000000000..72889fb6aed347 --- /dev/null +++ b/lib/modules/manager/terragrunt/__fixtures__/4.hcl @@ -0,0 +1,166 @@ +#real +terraform { + extra_arguments "common_vars" { + commands = ["plan", "apply"] + + arguments = [ + "-var-file=../../common.tfvars", + "-var-file=../region.tfvars" + ] + } + + before_hook "before_hook" { + commands = ["apply", "plan"] + execute = ["echo", "Running Terraform"] + } + + source = "github.com/myuser/myrepo//folder/modules/moduleone?depth=1&ref=v0.0.9" + + after_hook "after_hook" { + commands = ["apply", "plan"] + execute = ["echo", "Finished running Terraform"] + run_on_error = true + } +} + +#foo +terraform { + source = "github.com/hashicorp/example?depth=5&ref=v1.0.0" +} + +#bar +terraform { + source = "github.com/hashicorp/example?depth=1&ref=next" +} + +#IP +terraform { + source = "https://104.196.242.174/example?depth=1&ref=next" +} + +#local hostname +terraform { + source = "my.host.local/example?depth=1&ref=v1.2.1" +} + +#local hostname +terraform { + source = "my.host/modules/test" +} + +#local hostname +terraform { + source = "my.host/modules/test?depth=1&ref=v1.2.1" +} + +#local hostname +terraform { + source = "my.host" +} + +#local hostname +terraform { + source = "my.host.local/sources/example?depth=1&ref=v1.2.1" +} + +#hostname +terraform { + source = "my.host/example?depth=1&ref=next" +} + +#invalid +terraform { + source = "//terraform/module/test?depth=1&ref=next" +} + +#repo-with-non-semver-ref +terraform { + source = "github.com/githubuser/myrepo//terraform/modules/moduleone?depth=1&ref=tfmodule_one-v0.0.9" +} + +#repo-with-dot +terraform { + source = "github.com/hashicorp/example.2.3?depth=1&ref=v1.0.0" +} + +#repo-with-dot-and-git-suffix +terraform { + source = "github.com/hashicorp/example.2.3.git?depth=1&ref=v1.0.0" +} + +#source without pinning +terraform { + source = "hashicorp/consul/aws" +} + +# source with double-slash +terraform { + source = "github.com/tieto-cem/terraform-aws-ecs-task-definition//modules/container-definition?depth=1&ref=v0.1.0" +} + +# regular sources +terraform { + source = "github.com/tieto-cem/terraform-aws-ecs-task-definition?depth=1&ref=v0.1.0" +} + +terraform { + source = "git@github.com:hashicorp/example.git?depth=1&ref=v2.0.0" +} + +terraform { + source = "terraform-aws-modules/security-group/aws//modules/http-80" + +} + +terraform { + source = "terraform-aws-modules/security-group/aws" +} + +terraform { + source = "../../terraforms/fe" +} + +# nosource, ignored by test since it does not have source on the next line +terraform { + foo = "bar" +} + +# foobar +terraform { + source = "https://bitbucket.com/hashicorp/example?depth=1&ref=v1.0.0" +} + +# gittags +terraform { + source = "git::https://bitbucket.com/hashicorp/example?depth=1&ref=v1.0.0" +} + +# gittags_badversion +terraform { + source = "git::https://bitbucket.com/hashicorp/example?depth=1&ref=next" +} + +# gittags_subdir +terraform { + source = "git::https://bitbucket.com/hashicorp/example//subdir/test?depth=1&ref=v1.0.1" +} + +# gittags_http +terraform { + source = "git::http://bitbucket.com/hashicorp/example?depth=1&ref=v1.0.2" +} + +# gittags_ssh +terraform { + source = "git::ssh://git@bitbucket.com/hashicorp/example?depth=1&ref=v1.0.3" +} + +# invalid, ignored by test since it does not have source on the next line +terraform { +} + +# unsupported terragrunt, ignored by test since it does not have source on the next line +terraform { + name = "foo" + dummy = "true" +} diff --git a/lib/modules/manager/terragrunt/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/terragrunt/__snapshots__/extract.spec.ts.snap deleted file mode 100644 index 84d85982b1cb2a..00000000000000 --- a/lib/modules/manager/terragrunt/__snapshots__/extract.spec.ts.snap +++ /dev/null @@ -1,171 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`modules/manager/terragrunt/extract extractPackageFile() extracts terragrunt sources 1`] = ` -{ - "deps": [ - { - "currentValue": "v0.0.9", - "datasource": "github-tags", - "depName": "github.com/myuser/myrepo", - "depType": "github", - "packageName": "myuser/myrepo", - }, - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "github", - "packageName": "hashicorp/example", - }, - { - "currentValue": "next", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "github", - "packageName": "hashicorp/example", - }, - { - "skipReason": "no-source", - }, - {}, - { - "datasource": "terraform-module", - "depName": "my.host/modules/test", - "depType": "terragrunt", - "registryUrls": [ - "https://my.host", - ], - }, - { - "datasource": "terraform-module", - "depName": "my.host/modules/test?ref=v1.2.1", - "depType": "terragrunt", - "registryUrls": [ - "https://my.host", - ], - }, - {}, - { - "datasource": "terraform-module", - "depName": "my.host.local/sources/example?ref=v1.2.1", - "depType": "terragrunt", - "registryUrls": [ - "https://my.host.local", - ], - }, - {}, - {}, - { - "currentValue": "tfmodule_one-v0.0.9", - "datasource": "github-tags", - "depName": "github.com/githubuser/myrepo", - "depType": "github", - "packageName": "githubuser/myrepo", - }, - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example.2.3", - "depType": "github", - "packageName": "hashicorp/example.2.3", - }, - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example.2.3", - "depType": "github", - "packageName": "hashicorp/example.2.3", - }, - { - "datasource": "terraform-module", - "depName": "hashicorp/consul/aws", - "depType": "terragrunt", - }, - { - "currentValue": "v0.1.0", - "datasource": "github-tags", - "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition", - "depType": "github", - "packageName": "tieto-cem/terraform-aws-ecs-task-definition", - }, - { - "currentValue": "v0.1.0", - "datasource": "github-tags", - "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition", - "depType": "github", - "packageName": "tieto-cem/terraform-aws-ecs-task-definition", - }, - { - "currentValue": "v2.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "github", - "packageName": "hashicorp/example", - }, - { - "datasource": "terraform-module", - "depName": "terraform-aws-modules/security-group/aws", - "depType": "terragrunt", - }, - { - "datasource": "terraform-module", - "depName": "terraform-aws-modules/security-group/aws", - "depType": "terragrunt", - }, - { - "skipReason": "local", - }, - { - "skipReason": "no-source", - }, - { - "currentValue": "v1.0.0", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "https://bitbucket.com/hashicorp/example", - }, - { - "currentValue": "v1.0.0", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "https://bitbucket.com/hashicorp/example", - }, - { - "currentValue": "next", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "https://bitbucket.com/hashicorp/example", - }, - { - "currentValue": "v1.0.1", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "https://bitbucket.com/hashicorp/example", - }, - { - "currentValue": "v1.0.2", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "http://bitbucket.com/hashicorp/example", - }, - { - "currentValue": "v1.0.3", - "datasource": "git-tags", - "depName": "bitbucket.com/hashicorp/example", - "depType": "gitTags", - "packageName": "ssh://git@bitbucket.com/hashicorp/example", - }, - { - "skipReason": "no-source", - }, - { - "skipReason": "no-source", - }, - ], -} -`; diff --git a/lib/modules/manager/terragrunt/extract.spec.ts b/lib/modules/manager/terragrunt/extract.spec.ts index 9d9a201e1e9681..d4720df6168e5a 100644 --- a/lib/modules/manager/terragrunt/extract.spec.ts +++ b/lib/modules/manager/terragrunt/extract.spec.ts @@ -8,10 +8,498 @@ describe('modules/manager/terragrunt/extract', () => { }); it('extracts terragrunt sources', () => { - const res = extractPackageFile(Fixtures?.get('2.hcl')); - expect(res).toMatchSnapshot(); + const res = extractPackageFile(Fixtures.get('2.hcl')); + expect(res).toEqual({ + deps: [ + { + currentValue: 'v0.0.9', + datasource: 'github-tags', + depName: 'github.com/myuser/myrepo', + depType: 'github', + packageName: 'myuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + {}, + {}, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test?ref=v1.2.1', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + {}, + { + datasource: 'terraform-module', + depName: 'my.host.local/sources/example?ref=v1.2.1', + depType: 'terragrunt', + registryUrls: ['https://my.host.local'], + }, + {}, + {}, + { + currentValue: 'tfmodule_one-v0.0.9', + datasource: 'github-tags', + depName: 'github.com/githubuser/myrepo', + depType: 'github', + packageName: 'githubuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + datasource: 'terraform-module', + depName: 'hashicorp/consul/aws', + depType: 'terragrunt', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v2.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + skipReason: 'local', + }, + { + skipReason: 'no-source', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.1', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.2', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'http://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.3', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@bitbucket.com/hashicorp/example', + }, + { + skipReason: 'no-source', + }, + { + skipReason: 'no-source', + }, + ], + }); expect(res?.deps).toHaveLength(30); - expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(5); + expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); + }); + + it('extracts terragrunt sources with depth specified after the branch', () => { + const res = extractPackageFile(Fixtures.get('3.hcl')); + expect(res).toEqual({ + deps: [ + { + currentValue: 'v0.0.9', + datasource: 'github-tags', + depName: 'github.com/myuser/myrepo', + depType: 'github', + packageName: 'myuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + {}, + {}, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test?ref=v1.2.1&depth=1', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + {}, + { + datasource: 'terraform-module', + depName: 'my.host.local/sources/example?ref=v1.2.1&depth=1', + depType: 'terragrunt', + registryUrls: ['https://my.host.local'], + }, + {}, + {}, + { + currentValue: 'tfmodule_one-v0.0.9', + datasource: 'github-tags', + depName: 'github.com/githubuser/myrepo', + depType: 'github', + packageName: 'githubuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + datasource: 'terraform-module', + depName: 'hashicorp/consul/aws', + depType: 'terragrunt', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v2.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + skipReason: 'local', + }, + { + skipReason: 'no-source', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.1', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.2', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'http://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.3', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@bitbucket.com/hashicorp/example', + }, + { + skipReason: 'no-source', + }, + { + skipReason: 'no-source', + }, + ], + }); + expect(res?.deps).toHaveLength(30); + expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); + }); + + it('extracts terragrunt sources with depth specified before the branch', () => { + const res = extractPackageFile(Fixtures.get('4.hcl')); + expect(res).toEqual({ + deps: [ + { + currentValue: 'v0.0.9', + datasource: 'github-tags', + depName: 'github.com/myuser/myrepo', + depType: 'github', + packageName: 'myuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + {}, + {}, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + { + datasource: 'terraform-module', + depName: 'my.host/modules/test?depth=1&ref=v1.2.1', + depType: 'terragrunt', + registryUrls: ['https://my.host'], + }, + {}, + { + datasource: 'terraform-module', + depName: 'my.host.local/sources/example?depth=1&ref=v1.2.1', + depType: 'terragrunt', + registryUrls: ['https://my.host.local'], + }, + {}, + {}, + { + currentValue: 'tfmodule_one-v0.0.9', + datasource: 'github-tags', + depName: 'github.com/githubuser/myrepo', + depType: 'github', + packageName: 'githubuser/myrepo', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + currentValue: 'v1.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example.2.3', + depType: 'github', + packageName: 'hashicorp/example.2.3', + }, + { + datasource: 'terraform-module', + depName: 'hashicorp/consul/aws', + depType: 'terragrunt', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v0.1.0', + datasource: 'github-tags', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + depType: 'github', + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + }, + { + currentValue: 'v2.0.0', + datasource: 'github-tags', + depName: 'github.com/hashicorp/example', + depType: 'github', + packageName: 'hashicorp/example', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + datasource: 'terraform-module', + depName: 'terraform-aws-modules/security-group/aws', + depType: 'terragrunt', + }, + { + skipReason: 'local', + }, + { + skipReason: 'no-source', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.0', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'next', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.1', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'https://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.2', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'http://bitbucket.com/hashicorp/example', + }, + { + currentValue: 'v1.0.3', + datasource: 'git-tags', + depName: 'bitbucket.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@bitbucket.com/hashicorp/example', + }, + { + skipReason: 'no-source', + }, + { + skipReason: 'no-source', + }, + ], + }); + expect(res?.deps).toHaveLength(30); + expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); it('returns null if only local terragrunt deps', () => { diff --git a/lib/modules/manager/terragrunt/modules.ts b/lib/modules/manager/terragrunt/modules.ts index e4bd9901a739b9..43a0987735f3ef 100644 --- a/lib/modules/manager/terragrunt/modules.ts +++ b/lib/modules/manager/terragrunt/modules.ts @@ -8,10 +8,10 @@ import { extractTerragruntProvider } from './providers'; import type { ExtractionResult, TerraformManagerData } from './types'; export const githubRefMatchRegex = regEx( - /github\.com([/:])(?[^/]+\/[a-z0-9-_.]+).*\?ref=(?.*)$/i + /github\.com([/:])(?[^/]+\/[a-z0-9-_.]+).*\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/i ); export const gitTagsRefMatchRegex = regEx( - /(?:git::)?(?(?:http|https|ssh):\/\/(?:.*@)?(?.*.*\/(?.*\/.*)))\?ref=(?.*)$/ + /(?:git::)?(?(?:http|https|ssh):\/\/(?:.*@)?(?.*.*\/(?.*\/.*)))\?(depth=\d+&)?ref=(?.*?)(&depth=\d+)?$/ ); const hostnameMatchRegex = regEx(/^(?([\w|\d]+\.)+[\w|\d]+)/); From b00acdd954ce18d718d22bd48eb70adfcdadf654 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 18 Apr 2023 07:07:00 +0200 Subject: [PATCH 063/122] docs(contributing): update bug/feature request rules (#21551) --- .github/contributing.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/contributing.md b/.github/contributing.md index 1bc968d73d2ed8..e04325a2f3df35 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -14,7 +14,12 @@ If you want help with your Renovate configuration, go to the [discussions tab in ## Bug Reports and Feature Requests -If you've found a **bug** or have a **feature request** then please create an issue in this repository (but search first in case a similar issue already exists). +**Bugs**: First search for related bugs in the issues and discussions, if you don't find anything then: + +1. Create a [minimal reproduction](https://github.com/renovatebot/renovate/blob/main/docs/development/minimal-reproductions.md) +1. Open a new _discussion_ and link to the minimal reproduction + +For **feature requests**: first search for related requests in the issues and discussions, if you don't find anything: create a _discussion_. ## Code From ce96324ab77602e495097c76c2ebd068c5509969 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 18 Apr 2023 09:24:30 +0200 Subject: [PATCH 064/122] docs: fix broken relative link (#21572) --- docs/usage/key-concepts/presets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/key-concepts/presets.md b/docs/usage/key-concepts/presets.md index f786f901e18730..778d3f288f0aed 100644 --- a/docs/usage/key-concepts/presets.md +++ b/docs/usage/key-concepts/presets.md @@ -51,7 +51,7 @@ Once you find a preset you like, put it in an `extends` array in your config fil If you have a Renovate config that may help others, you can put it into Renovate's built-in presets. -Read [Contributing to presets](./config-presets.md#contributing-to-presets) to learn how. +Read [Contributing to presets](../config-presets.md#contributing-to-presets) to learn how. ## Summary From 7d6438b16f248d3cf159a804aa9e3705b1af25da Mon Sep 17 00:00:00 2001 From: cjtim <47479090+cjtim@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:07:25 +0700 Subject: [PATCH 065/122] chore(managers/sbt): remove unused types (#21570) Signed-off-by: Jinna C --- lib/modules/manager/sbt/types.ts | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 lib/modules/manager/sbt/types.ts diff --git a/lib/modules/manager/sbt/types.ts b/lib/modules/manager/sbt/types.ts deleted file mode 100644 index 340f93b2047374..00000000000000 --- a/lib/modules/manager/sbt/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface ParseContext { - scalaVersion?: string | null; - variables: Record; - depType?: string; -} - -export interface ParseOptions { - isMultiDeps?: boolean; - scalaVersion?: string | null; - variables?: Record; -} From 2a72f85cc2b2d6e94c7ace9d05f0ecb089f6f88f Mon Sep 17 00:00:00 2001 From: Tom Fay Date: Tue, 18 Apr 2023 09:49:24 +0100 Subject: [PATCH 066/122] feat(manager/cargo): support private registry index env var (#20379) Co-authored-by: Rhys Arkins Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Co-authored-by: Sebastian Poxhofer --- docs/usage/rust.md | 12 +++++- lib/modules/manager/cargo/extract.spec.ts | 46 +++++++++++++++++++++++ lib/modules/manager/cargo/extract.ts | 9 ++++- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/docs/usage/rust.md b/docs/usage/rust.md index cf7494e0b41293..45365bbfa46c76 100644 --- a/docs/usage/rust.md +++ b/docs/usage/rust.md @@ -11,7 +11,7 @@ Renovate supports upgrading dependencies in `Cargo.toml` files and their accompa 1. Renovate searches in each repository for any `Cargo.toml` files 1. Renovate extracts existing dependencies from `[dependencies]`, `[dev-dependencies]`, `[build-dependencies]` and `[workspace.dependencies]` -1. Renovate tries to find and parse a `.cargo/config.toml` file to discover index URLs for private registries +1. Renovate looks up Cargo configuration to find index URLs for private registries 1. Renovate resolves the dependency's version using the crates.io API or by cloning the index URL 1. If Renovate finds an update, Renovate will use `cargo update` to update both `Cargo.toml` and `Cargo.lock` @@ -19,6 +19,16 @@ Renovate supports upgrading dependencies in `Cargo.toml` files and their accompa Renovate updates Rust crates by default. +## Cargo configuration and private registry discovery + +Renovate can find private registry URLs in these Cargo configuration files: + +- `.cargo/config.toml` +- `.cargo/config` (legacy) + +Renovate can also find private registry URLs via a `CARGO_REGISTRIES__INDEX` environment variable. +Read the [Rust environment variables docs](https://doc.rust-lang.org/cargo/reference/environment-variables.html#configuration-environment-variables) to learn more. + ## Private crate registries and private Git dependencies If any dependencies are hosted in private Git repositories, [Git Authentication for cargo](https://doc.rust-lang.org/cargo/appendix/git-authentication.html) must be set up. diff --git a/lib/modules/manager/cargo/extract.spec.ts b/lib/modules/manager/cargo/extract.spec.ts index 1800fc57da3d29..457e92ef8716ed 100644 --- a/lib/modules/manager/cargo/extract.spec.ts +++ b/lib/modules/manager/cargo/extract.spec.ts @@ -31,6 +31,8 @@ describe('modules/manager/cargo/extract', () => { }; GlobalConfig.set(adminConfig); + delete process.env.CARGO_REGISTRIES_PRIVATE_CRATES_INDEX; + delete process.env.CARGO_REGISTRIES_MCORBIN_INDEX; }); afterEach(async () => { @@ -113,6 +115,50 @@ describe('modules/manager/cargo/extract', () => { expect(res?.deps).toHaveLength(3); }); + it('extracts registry urls from environment', async () => { + process.env.CARGO_REGISTRIES_PRIVATE_CRATES_INDEX = + 'https://dl.cloudsmith.io/basic/my-org/my-repo/cargo/index.git'; + process.env.CARGO_REGISTRIES_MCORBIN_INDEX = + 'https://github.com/mcorbin/testregistry'; + const res = await extractPackageFile(cargo6toml, 'Cargo.toml', { + ...config, + }); + + expect(res?.deps).toEqual([ + { + currentValue: '0.1.0', + datasource: 'crate', + depName: 'proprietary-crate', + depType: 'dependencies', + managerData: { + nestedVersion: true, + }, + registryUrls: [ + 'https://dl.cloudsmith.io/basic/my-org/my-repo/cargo/index.git', + ], + }, + { + currentValue: '3.0.0', + datasource: 'crate', + depName: 'mcorbin-test', + depType: 'dependencies', + managerData: { + nestedVersion: true, + }, + registryUrls: ['https://github.com/mcorbin/testregistry'], + }, + { + currentValue: '0.2', + datasource: 'crate', + depName: 'tokio', + depType: 'dependencies', + managerData: { + nestedVersion: false, + }, + }, + ]); + }); + it('extracts workspace dependencies', async () => { const cargoToml = codeBlock` [package] diff --git a/lib/modules/manager/cargo/extract.ts b/lib/modules/manager/cargo/extract.ts index 4da8fa5e4939ae..89ea94bee4c842 100644 --- a/lib/modules/manager/cargo/extract.ts +++ b/lib/modules/manager/cargo/extract.ts @@ -15,6 +15,11 @@ import type { CargoSection, } from './types'; +function getCargoIndexEnv(registryName: string): string | null { + const registry = registryName.toUpperCase().replaceAll('-', '_'); + return process.env[`CARGO_REGISTRIES_${registry}_INDEX`] ?? null; +} + function extractFromSection( parsedContent: CargoSection, section: keyof CargoSection, @@ -47,7 +52,9 @@ function extractFromSection( currentValue = version; nestedVersion = true; if (registryName) { - const registryUrl = cargoRegistries[registryName]; + const registryUrl = + cargoRegistries[registryName] ?? getCargoIndexEnv(registryName); + if (registryUrl) { registryUrls = [registryUrl]; } else { From 75a1ab04eb7d2cd05f995f930458761b62666152 Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Tue, 18 Apr 2023 11:07:36 +0200 Subject: [PATCH 067/122] refactor(vulnerabilities): return interface for Vulnerabilities (#21310) --- lib/workers/repository/process/types.ts | 19 +++ .../process/vulnerabilities.spec.ts | 83 +++++++++ .../repository/process/vulnerabilities.ts | 160 +++++++++++------- 3 files changed, 201 insertions(+), 61 deletions(-) create mode 100644 lib/workers/repository/process/types.ts diff --git a/lib/workers/repository/process/types.ts b/lib/workers/repository/process/types.ts new file mode 100644 index 00000000000000..fd739b99a7d1c3 --- /dev/null +++ b/lib/workers/repository/process/types.ts @@ -0,0 +1,19 @@ +import type { Osv } from '@renovatebot/osv-offline'; +import type { RenovateConfig } from '../../../config/types'; +import type { PackageFile } from '../../../modules/manager/types'; +import type { VersioningApi } from '../../../modules/versioning'; + +export interface Vulnerability { + packageFileConfig: RenovateConfig & PackageFile; + packageName: string; + depVersion: string; + fixedVersion: string | null; + datasource: string; + vulnerability: Osv.Vulnerability; + affected: Osv.Affected; +} + +export interface DependencyVulnerabilities { + versioningApi: VersioningApi; + vulnerabilities: Vulnerability[]; +} diff --git a/lib/workers/repository/process/vulnerabilities.spec.ts b/lib/workers/repository/process/vulnerabilities.spec.ts index dd075106105528..acfb0424435dba 100644 --- a/lib/workers/repository/process/vulnerabilities.spec.ts +++ b/lib/workers/repository/process/vulnerabilities.spec.ts @@ -36,6 +36,89 @@ describe('workers/repository/process/vulnerabilities', () => { describe('fetchVulnerabilities()', () => { let config: RenovateConfig; let vulnerabilities: Vulnerabilities; + + beforeAll(async () => { + createMock.mockResolvedValue({ + getVulnerabilities: getVulnerabilitiesMock, + }); + vulnerabilities = await Vulnerabilities.create(); + }); + + beforeEach(() => { + config = getConfig(); + config.packageRules = []; + }); + + it('return list of Vulnerabilities', async () => { + const packageFiles: Record = { + poetry: [ + { + deps: [ + { depName: 'django', currentValue: '3.2', datasource: 'pypi' }, + ], + packageFile: 'some-file', + }, + ], + }; + getVulnerabilitiesMock.mockResolvedValueOnce([ + { + id: 'GHSA-qrw5-5h28-modded', + modified: '', + affected: [ + { + package: { + name: 'django', + ecosystem: 'PyPI', + purl: 'pkg:pypi/django', + }, + ranges: [ + { + type: 'ECOSYSTEM', + events: [{ introduced: '3.0' }, { fixed: '3.3.8' }], + }, + ], + }, + { + package: { + name: 'django', + ecosystem: 'PyPI', + purl: 'pkg:pypi/django', + }, + ranges: [ + { + type: 'ECOSYSTEM', + events: [{ introduced: '3.2' }, { fixed: '3.2.16' }], + }, + ], + }, + ], + }, + ]); + + const vulnerabilityList = await vulnerabilities.fetchVulnerabilities( + config, + packageFiles + ); + expect(vulnerabilityList).toMatchObject([ + { + packageName: 'django', + depVersion: '3.2', + fixedVersion: '==3.3.8', + datasource: 'pypi', + }, + { + packageName: 'django', + depVersion: '3.2', + fixedVersion: '==3.2.16', + datasource: 'pypi', + }, + ]); + }); + }); + + describe('appendVulnerabilityPackageRules()', () => { + let config: RenovateConfig; + let vulnerabilities: Vulnerabilities; const lodashVulnerability: Osv.Vulnerability = { id: 'GHSA-x5rq-j2xg-h7qm', modified: '', diff --git a/lib/workers/repository/process/vulnerabilities.ts b/lib/workers/repository/process/vulnerabilities.ts index 3651d838348a62..b3745a7692d463 100644 --- a/lib/workers/repository/process/vulnerabilities.ts +++ b/lib/workers/repository/process/vulnerabilities.ts @@ -18,6 +18,7 @@ import { import { sanitizeMarkdown } from '../../../util/markdown'; import * as p from '../../../util/promises'; import { regEx } from '../../../util/regex'; +import type { DependencyVulnerabilities, Vulnerability } from './types'; export class Vulnerabilities { private osvOffline: OsvOffline | undefined; @@ -54,67 +55,104 @@ export class Vulnerabilities { config: RenovateConfig, packageFiles: Record ): Promise { + const dependencyVulnerabilities = await this.fetchDependencyVulnerabilities( + config, + packageFiles + ); + + config.packageRules ??= []; + for (const { + vulnerabilities, + versioningApi, + } of dependencyVulnerabilities) { + const groupPackageRules: PackageRule[] = []; + for (const vulnerability of vulnerabilities) { + const rule = this.vulnerabilityToPackageRules(vulnerability); + if (is.nullOrUndefined(rule)) { + continue; + } + groupPackageRules.push(rule); + } + this.sortByFixedVersion(groupPackageRules, versioningApi); + + config.packageRules.push(...groupPackageRules); + } + } + + async fetchVulnerabilities( + config: RenovateConfig, + packageFiles: Record + ): Promise { + const groups = await this.fetchDependencyVulnerabilities( + config, + packageFiles + ); + return groups.flatMap((group) => group.vulnerabilities); + } + + private async fetchDependencyVulnerabilities( + config: RenovateConfig, + packageFiles: Record + ): Promise { const managers = Object.keys(packageFiles); const allManagerJobs = managers.map((manager) => this.fetchManagerVulnerabilities(config, packageFiles, manager) ); - await Promise.all(allManagerJobs); + return (await Promise.all(allManagerJobs)).flat(); } private async fetchManagerVulnerabilities( config: RenovateConfig, packageFiles: Record, manager: string - ): Promise { + ): Promise { const managerConfig = getManagerConfig(config, manager); const queue = packageFiles[manager].map( - (pFile) => (): Promise => - this.fetchManagerPackageFileVulnerabilities( - config, - managerConfig, - pFile - ) + (pFile) => (): Promise => + this.fetchManagerPackageFileVulnerabilities(managerConfig, pFile) ); logger.trace( { manager, queueLength: queue.length }, - 'fetchManagerUpdates starting' + 'fetchManagerVulnerabilities starting' ); - await p.all(queue); - logger.trace({ manager }, 'fetchManagerUpdates finished'); + const result = (await p.all(queue)).flat(); + logger.trace({ manager }, 'fetchManagerVulnerabilities finished'); + return result; } private async fetchManagerPackageFileVulnerabilities( - config: RenovateConfig, managerConfig: RenovateConfig, pFile: PackageFile - ): Promise { + ): Promise { const { packageFile } = pFile; const packageFileConfig = mergeChildConfig(managerConfig, pFile); const { manager } = packageFileConfig; const queue = pFile.deps.map( - (dep) => (): Promise => - this.fetchDependencyVulnerabilities(packageFileConfig, dep) + (dep) => (): Promise => + this.fetchDependencyVulnerability(packageFileConfig, dep) ); logger.trace( { manager, packageFile, queueLength: queue.length }, 'fetchManagerPackageFileVulnerabilities starting with concurrency' ); - config.packageRules?.push(...(await p.all(queue)).flat()); + const result = await p.all(queue); logger.trace( { packageFile }, 'fetchManagerPackageFileVulnerabilities finished' ); + + return result.filter(is.truthy); } - private async fetchDependencyVulnerabilities( + private async fetchDependencyVulnerability( packageFileConfig: RenovateConfig & PackageFile, dep: PackageDependency - ): Promise { + ): Promise { const ecosystem = Vulnerabilities.datasourceEcosystemMap[dep.datasource!]; if (!ecosystem) { logger.trace(`Cannot map datasource ${dep.datasource!} to OSV ecosystem`); - return []; + return null; } let packageName = dep.packageName ?? dep.depName!; @@ -123,20 +161,19 @@ export class Vulnerabilities { packageName = packageName.toLowerCase().replace(regEx(/[_.-]+/g), '-'); } - const packageRules: PackageRule[] = []; try { - const vulnerabilities = await this.osvOffline?.getVulnerabilities( + const osvVulnerabilities = await this.osvOffline?.getVulnerabilities( ecosystem, packageName ); if ( - is.nullOrUndefined(vulnerabilities) || - is.emptyArray(vulnerabilities) + is.nullOrUndefined(osvVulnerabilities) || + is.emptyArray(osvVulnerabilities) ) { logger.trace( `No vulnerabilities found in OSV database for ${packageName}` ); - return []; + return null; } const depVersion = @@ -149,16 +186,19 @@ export class Vulnerabilities { logger.debug( `Skipping vulnerability lookup for package ${packageName} due to unsupported version ${depVersion}` ); - return []; + return null; } - for (const vulnerability of vulnerabilities) { - if (vulnerability.withdrawn) { - logger.trace(`Skipping withdrawn vulnerability ${vulnerability.id}`); + const vulnerabilities: Vulnerability[] = []; + for (const osvVulnerability of osvVulnerabilities) { + if (osvVulnerability.withdrawn) { + logger.trace( + `Skipping withdrawn vulnerability ${osvVulnerability.id}` + ); continue; } - for (const affected of vulnerability.affected ?? []) { + for (const affected of osvVulnerability.affected ?? []) { const isVulnerable = this.isPackageVulnerable( ecosystem, packageName, @@ -171,7 +211,7 @@ export class Vulnerabilities { } logger.debug( - `Vulnerability ${vulnerability.id} affects ${packageName} ${depVersion}` + `Vulnerability ${osvVulnerability.id} affects ${packageName} ${depVersion}` ); const fixedVersion = this.getFixedVersion( ecosystem, @@ -179,39 +219,27 @@ export class Vulnerabilities { affected, versioningApi ); - if (is.nullOrUndefined(fixedVersion)) { - logger.info( - `No fixed version available for vulnerability ${vulnerability.id} in ${packageName} ${depVersion}` - ); - continue; - } - logger.debug( - `Setting allowed version ${fixedVersion} to fix vulnerability ${vulnerability.id} in ${packageName} ${depVersion}` - ); - const rule = this.convertToPackageRule( - packageFileConfig, - dep, + vulnerabilities.push({ packageName, + vulnerability: osvVulnerability, + affected, depVersion, fixedVersion, - vulnerability, - affected - ); - packageRules.push(rule); + datasource: dep.datasource!, + packageFileConfig, + }); } } - this.sortByFixedVersion(packageRules, versioningApi); + return { vulnerabilities, versioningApi }; } catch (err) { logger.warn( { err }, `Error fetching vulnerability information for ${packageName}` ); - return []; + return null; } - - return packageRules; } private sortByFixedVersion( @@ -223,7 +251,6 @@ export class Vulnerabilities { const version = rule.allowedVersions as string; versionsCleaned[version] = version.replace(regEx(/[=> ]+/g), ''); } - packageRules.sort((a, b) => versioningApi.sortVersions( versionsCleaned[a.allowedVersions as string], @@ -407,17 +434,28 @@ export class Vulnerabilities { ); } - private convertToPackageRule( - packageFileConfig: RenovateConfig & PackageFile, - dep: PackageDependency, - packageName: string, - depVersion: string, - fixedVersion: string, - vulnerability: Osv.Vulnerability, - affected: Osv.Affected - ): PackageRule { + private vulnerabilityToPackageRules(vul: Vulnerability): PackageRule | null { + const { + vulnerability, + affected, + packageName, + depVersion, + fixedVersion, + datasource, + packageFileConfig, + } = vul; + if (is.nullOrUndefined(fixedVersion)) { + logger.info( + `No fixed version available for vulnerability ${vulnerability.id} in ${packageName} ${depVersion}` + ); + return null; + } + + logger.debug( + `Setting allowed version ${fixedVersion} to fix vulnerability ${vulnerability.id} in ${packageName} ${depVersion}` + ); return { - matchDatasources: [dep.datasource!], + matchDatasources: [datasource], matchPackageNames: [packageName], matchCurrentVersion: depVersion, allowedVersions: fixedVersion, From bce88c862e4fd7269f2175b698b52c05df6cdbd4 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 18 Apr 2023 11:09:46 +0200 Subject: [PATCH 068/122] feat(config): rename `azureAutoApprove` to `autoApprove` (#21576) --- docs/usage/configuration-options.md | 12 ++++++------ lib/config/migrations/migrations-service.ts | 1 + lib/config/options/index.ts | 4 ++-- lib/modules/platform/azure/index.spec.ts | 2 +- lib/modules/platform/azure/index.ts | 2 +- lib/modules/platform/types.ts | 2 +- lib/workers/repository/update/pr/index.ts | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 690946388fb538..7c3d6da94ed3d3 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -119,6 +119,12 @@ See [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-s If configured, Renovate will take a random sample of given size from assignees and assign them only, instead of assigning the entire list of `assignees` you have configured. +## autoApprove + +Setting this to `true` will automatically approve the PRs. + +You can also configure this using `packageRules` if you want to use it selectively (e.g. per-package). + ## autoReplaceGlobalMatch Setting this to `false` will replace only the first match during replacements updates. @@ -258,12 +264,6 @@ If you prefer that Renovate more silently automerge _without_ Pull Requests at a The final value for `automergeType` is `"pr-comment"`, intended only for users who already have a "merge bot" such as [bors-ng](https://github.com/bors-ng/bors-ng) and want Renovate to _not_ actually automerge by itself and instead tell `bors-ng` to merge for it, by using a comment in the PR. If you're not already using `bors-ng` or similar, don't worry about this option. -## azureAutoApprove - -Setting this to `true` will automatically approve the PRs in Azure DevOps. - -You can also configure this using `packageRules` if you want to use it selectively (e.g. per-package). - ## azureWorkItemId When creating a PR in Azure DevOps, some branches can be protected with branch policies to [check for linked work items](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#check-for-linked-work-items). diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts index 08177481823d1f..1b6c0d357d515f 100644 --- a/lib/config/migrations/migrations-service.ts +++ b/lib/config/migrations/migrations-service.ts @@ -76,6 +76,7 @@ export class MigrationsService { static readonly renamedProperties: ReadonlyMap = new Map([ ['adoptium-java', 'java-version'], + ['azureAutoApprove', 'autoApprove'], ['endpoints', 'hostRules'], ['excludedPackageNames', 'excludePackageNames'], ['exposeEnv', 'exposeAllEnv'], diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index ae357e8d09f572..bc8561377fbd7b 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -925,8 +925,8 @@ const options: RenovateOptions[] = [ supportedPlatforms: ['azure'], }, { - name: 'azureAutoApprove', - description: 'Set to `true` to automatically approve Azure DevOps PRs.', + name: 'autoApprove', + description: 'Set to `true` to automatically approve PRs.', type: 'boolean', default: false, supportedPlatforms: ['azure'], diff --git a/lib/modules/platform/azure/index.spec.ts b/lib/modules/platform/azure/index.spec.ts index 511bf8210e4f71..da8a998a7b702e 100644 --- a/lib/modules/platform/azure/index.spec.ts +++ b/lib/modules/platform/azure/index.spec.ts @@ -805,7 +805,7 @@ describe('modules/platform/azure/index', () => { prTitle: 'The Title', prBody: 'Hello world', labels: ['deps', 'renovate'], - platformOptions: { azureAutoApprove: true }, + platformOptions: { autoApprove: true }, }); expect(updateFn).toHaveBeenCalled(); expect(pr).toMatchSnapshot(); diff --git a/lib/modules/platform/azure/index.ts b/lib/modules/platform/azure/index.ts index 73b1a4e23366b2..b1eb1430369d14 100644 --- a/lib/modules/platform/azure/index.ts +++ b/lib/modules/platform/azure/index.ts @@ -472,7 +472,7 @@ export async function createPr({ pr.pullRequestId! ); } - if (platformOptions?.azureAutoApprove) { + if (platformOptions?.autoApprove) { await azureApiGit.createPullRequestReviewer( { reviewerUrl: pr.createdBy!.url, diff --git a/lib/modules/platform/types.ts b/lib/modules/platform/types.ts index d37eae8db6c50a..188e50b125c041 100644 --- a/lib/modules/platform/types.ts +++ b/lib/modules/platform/types.ts @@ -88,7 +88,7 @@ export interface Issue { title?: string; } export type PlatformPrOptions = { - azureAutoApprove?: boolean; + autoApprove?: boolean; azureWorkItemId?: number; bbUseDefaultReviewers?: boolean; gitLabIgnoreApprovals?: boolean; diff --git a/lib/workers/repository/update/pr/index.ts b/lib/workers/repository/update/pr/index.ts index 94292fce88f916..bc3c9b2adebccb 100644 --- a/lib/workers/repository/update/pr/index.ts +++ b/lib/workers/repository/update/pr/index.ts @@ -50,7 +50,7 @@ export function getPlatformPrOptions( ); return { - azureAutoApprove: !!config.azureAutoApprove, + autoApprove: !!config.autoApprove, azureWorkItemId: config.azureWorkItemId ?? 0, bbUseDefaultReviewers: !!config.bbUseDefaultReviewers, gitLabIgnoreApprovals: !!config.gitLabIgnoreApprovals, From 3d19f0a64887c3b9f9cdf3823170389d3d35be20 Mon Sep 17 00:00:00 2001 From: Vladimir Varankin Date: Tue, 18 Apr 2023 14:05:05 +0200 Subject: [PATCH 069/122] docs: fix typo in regex versioning (#21579) --- lib/modules/versioning/regex/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/versioning/regex/readme.md b/lib/modules/versioning/regex/readme.md index 9d7f3e17066a59..bb2310082ed612 100644 --- a/lib/modules/versioning/regex/readme.md +++ b/lib/modules/versioning/regex/readme.md @@ -46,7 +46,7 @@ Here is another example, this time for handling Bitnami Docker images, which use { "matchDatasources": ["docker"], "matchPackagePrefixes": ["bitnami/"], - "versioning": "regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.+)(?\\d+)-r(?\\d+))?$" + "versioning": "regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)(?:-(?.+)(?\\d+)-r(?\\d+))?$" } ] } From 66d1ae94d3b8e20b8bfd91002fd60f554ee4b7ec Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 18 Apr 2023 22:30:05 +0300 Subject: [PATCH 070/122] refactor(git): Rename `fetchCommit` to `fetchBranch` (#21581) --- lib/modules/platform/github/index.spec.ts | 2 +- lib/modules/platform/github/index.ts | 2 +- lib/util/git/error.ts | 4 ++-- lib/util/git/index.spec.ts | 2 +- lib/util/git/index.ts | 13 ++++++------- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/modules/platform/github/index.spec.ts b/lib/modules/platform/github/index.spec.ts index ca15ae314d6da8..9fac0812ddfa15 100644 --- a/lib/modules/platform/github/index.spec.ts +++ b/lib/modules/platform/github/index.spec.ts @@ -3202,7 +3202,7 @@ describe('modules/platform/github/index', () => { files, }) ); - git.fetchCommit.mockImplementation(() => Promise.resolve('0abcdef')); + git.fetchBranch.mockImplementation(() => Promise.resolve('0abcdef')); }); it('returns null if pre-commit phase has failed', async () => { diff --git a/lib/modules/platform/github/index.ts b/lib/modules/platform/github/index.ts index 7162a9749554cf..7c9ac146a375bc 100644 --- a/lib/modules/platform/github/index.ts +++ b/lib/modules/platform/github/index.ts @@ -1836,6 +1836,6 @@ export async function commitFiles( // Replace locally created branch with the remotely created one // and return the remote commit SHA await git.resetToCommit(commitResult.parentCommitSha); - const commitSha = await git.fetchCommit(config); + const commitSha = await git.fetchBranch(branchName); return commitSha; } diff --git a/lib/util/git/error.ts b/lib/util/git/error.ts index 19b8ab6a528103..b006e1f1425bee 100644 --- a/lib/util/git/error.ts +++ b/lib/util/git/error.ts @@ -73,9 +73,9 @@ export function checkForPlatformFailure(err: Error): Error | null { // istanbul ignore next export function handleCommitError( - files: FileChange[], + err: Error, branchName: string, - err: Error + files?: FileChange[] ): null { checkForPlatformFailure(err); if (err.message.includes(`'refs/heads/renovate' exists`)) { diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 1f205f85bd4893..1551fdca230c63 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -500,7 +500,7 @@ describe('util/git/index', () => { message: 'Update something', }; const commitSha = await git.commitFiles(commitConfig); - const remoteSha = await git.fetchCommit(commitConfig); + const remoteSha = await git.fetchBranch(commitConfig.branchName); expect(commitSha).toEqual(remoteSha); }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 2df34dfdcd43b9..806bda394b9889 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -1024,7 +1024,7 @@ export async function prepareCommit({ return result; } catch (err) /* istanbul ignore next */ { - return handleCommitError(files, branchName, err); + return handleCommitError(err, branchName, files); } } @@ -1053,15 +1053,14 @@ export async function pushCommit({ incLimitedValue('Commits'); result = true; } catch (err) /* istanbul ignore next */ { - handleCommitError(files, sourceRef, err); + handleCommitError(err, sourceRef, files); } return result; } -export async function fetchCommit({ - branchName, - files, -}: CommitFilesConfig): Promise { +export async function fetchBranch( + branchName: string +): Promise { await syncGit(); logger.debug(`Fetching branch ${branchName}`); try { @@ -1072,7 +1071,7 @@ export async function fetchCommit({ config.branchIsModified[branchName] = false; return commit; } catch (err) /* istanbul ignore next */ { - return handleCommitError(files, branchName, err); + return handleCommitError(err, branchName); } } From ecf7f40d43115996c9ed71ce5d10e3fd52c05948 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 19 Apr 2023 09:59:03 +0200 Subject: [PATCH 071/122] docs: constraints should work for all managers (#21593) --- docs/usage/configuration-options.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 7c3d6da94ed3d3..55e5b3a5d24498 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -553,7 +553,6 @@ Configure this option to `false` if you prefer Renovate to open a new issue when Constraints are used in package managers which use third-party tools to update "artifacts" like lock files or checksum files. Typically, the constraint is detected automatically by Renovate from files within the repository and there is no need to manually configure it. -Manually specifying constraints is supported for `ruby`, `bundler`, `composer`, `go`, `helmfile`, `npm`, `yarn`, `pnpm`, `python`, `pipenv`, and `poetry`. Constraints are also used to manually restrict which _datasource_ versions are possible to upgrade to based on their language support. For now this datasource constraint feature only supports `python`, other compatibility restrictions will be added in the future. From bd2dba0b01bcdf3472a84811e4e6975382e0dbad Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:55:06 +0200 Subject: [PATCH 072/122] docs: drop link to maven-cmp repository (#21601) --- lib/modules/versioning/maven/readme.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/modules/versioning/maven/readme.md b/lib/modules/versioning/maven/readme.md index 4512769a5d7baf..d014af85a55f5a 100644 --- a/lib/modules/versioning/maven/readme.md +++ b/lib/modules/versioning/maven/readme.md @@ -1,4 +1,5 @@ -Maven versioning is similar to SemVer but also very different in places. It's specified by Maven itself. +Maven versioning is similar to SemVer but also very different in places. +It's specified by Maven itself. Ranges are supported using Maven's special syntax. @@ -13,5 +14,3 @@ Display parameters as parsed by Maven (in canonical form) and comparison result: 3.2.4-SNAPSHOT < 3.2.4.0 3. 3.2.4.0 == 3.2.4 ``` - -Also, take a look at [maven-cmp](https://github.com/zharinov/maven-cmp) utility. From 14dbd5ea808241ae95f849eef893be88ddcf8348 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:56:44 +0200 Subject: [PATCH 073/122] docs: convert caution admonition to warning (#21600) --- docs/usage/configuration-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 55e5b3a5d24498..73f310ab2cb4d6 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -531,7 +531,7 @@ After we changed the [`baseBranches`](https://docs.renovatebot.com/configuration ``` -!!! caution +!!! warning The `configMigration` feature writes plain JSON for `.json` files, and JSON5 for `.json5` files. Renovate may downgrade JSON5 content to plain JSON. When downgrading JSON5 to JSON Renovate may also remove the JSON5 comments. From 18d0fbc3aff1512abdf8336fa6c939d7f51f195a Mon Sep 17 00:00:00 2001 From: Dominik Steinbinder Date: Wed, 19 Apr 2023 16:47:12 +0200 Subject: [PATCH 074/122] fix: sanitize special characters in URLs (#21575) --- lib/logger/utils.spec.ts | 1 + lib/logger/utils.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/logger/utils.spec.ts b/lib/logger/utils.spec.ts index 95b02ef5f0a97a..376584700b8f40 100644 --- a/lib/logger/utils.spec.ts +++ b/lib/logger/utils.spec.ts @@ -37,6 +37,7 @@ describe('logger/utils', () => { input | output ${' https://somepw@domain.com/gitlab/org/repo?go-get'} | ${' https://**redacted**@domain.com/gitlab/org/repo?go-get'} ${'https://someuser:somepw@domain.com'} | ${'https://**redacted**@domain.com'} + ${'https://someuser:pass%word_with-speci(a)l&chars@domain.com'} | ${'https://**redacted**@domain.com'} ${'https://someuser:@domain.com'} | ${'https://**redacted**@domain.com'} ${'redis://:somepw@172.32.11.71:6379/0'} | ${'redis://**redacted**@172.32.11.71:6379/0'} ${'some text with\r\n url: https://somepw@domain.com\nand some more'} | ${'some text with\r\n url: https://**redacted**@domain.com\nand some more'} diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index e4b34a13579b3a..d1697686784080 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -244,7 +244,7 @@ export function validateLogLevel(logLevelToCheck: string | undefined): void { } // Can't use `util/regex` because of circular reference to logger -const urlRe = /[a-z]{3,9}:\/\/[-;:&=+$,\w]+@[a-z0-9.-]+/gi; +const urlRe = /[a-z]{3,9}:\/\/[^@/]+@[a-z0-9.-]+/gi; const urlCredRe = /\/\/[^@]+@/g; export function sanitizeUrls(text: string): string { From 1637d13c16804e15a35b472dba6ad674400f1c5a Mon Sep 17 00:00:00 2001 From: "Mr.Hope" Date: Thu, 20 Apr 2023 00:21:52 +0800 Subject: [PATCH 075/122] feat(presets): add vitest to jsUnitTest (#20389) Co-authored-by: Michael Kriese Co-authored-by: Jamie Magee --- lib/config/presets/internal/packages.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/config/presets/internal/packages.ts b/lib/config/presets/internal/packages.ts index 1f1aa638d338e6..740365505b52e8 100644 --- a/lib/config/presets/internal/packages.ts +++ b/lib/config/presets/internal/packages.ts @@ -66,9 +66,11 @@ export const presets: Record = { 'supertest', 'ts-auto-mock', 'ts-jest', + 'vitest', ], matchPackagePrefixes: [ '@testing-library', + '@vitest', 'chai', 'jest', 'mocha', From bf035cb7201a10af074e170f4e8f1ef012fb20ee Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Wed, 19 Apr 2023 11:18:07 -0700 Subject: [PATCH 076/122] feat: sign npm package (#21608) --- .npmrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmrc b/.npmrc index 1dab4ed4c30209..0234a32dfacdba 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ save-exact = true +provenance = true From f61d49f96a64282175902546b18723b2581b8227 Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Wed, 19 Apr 2023 14:02:30 -0700 Subject: [PATCH 077/122] ci: npm publish requires `write` permissions for `id-token` (#21612) --- .github/workflows/release-npm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release-npm.yml b/.github/workflows/release-npm.yml index ae567d2a064cda..f8f32c34c6d8dc 100644 --- a/.github/workflows/release-npm.yml +++ b/.github/workflows/release-npm.yml @@ -25,6 +25,7 @@ env: permissions: contents: read + id-token: write jobs: release-npm: From ac2dea0148f84729859c23a5f4da2d57dcd1ae26 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 06:14:29 +0200 Subject: [PATCH 078/122] chore(deps): update dependency @types/shelljs to v0.8.12 (#21613) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 30bc20e1c6b02c..2fc3f91cdc1b35 100644 --- a/package.json +++ b/package.json @@ -284,7 +284,7 @@ "@types/semver": "7.3.13", "@types/semver-stable": "3.0.0", "@types/semver-utils": "1.1.1", - "@types/shelljs": "0.8.11", + "@types/shelljs": "0.8.12", "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/validate-npm-package-name": "4.0.0", diff --git a/yarn.lock b/yarn.lock index 5b8d27110e9d18..cf79cc2436cd72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2911,12 +2911,12 @@ resolved "https://registry.yarnpkg.com/@types/github-url-from-git/-/github-url-from-git-1.5.1.tgz#73b1b6fa0490b903f50e7d7d9897d91769a15d8d" integrity sha512-B/SvVZMrLRUI9mOoguNNz58gV8A5PDtcGIaUe5PYmzAUTsIJ+ZAn/ujwBIuGIU3mRHY5SfV9dyWfnhOWtOVh6A== -"@types/glob@*": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" - integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== +"@types/glob@~7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: - "@types/minimatch" "^5.1.2" + "@types/minimatch" "*" "@types/node" "*" "@types/global-agent@2.1.1": @@ -3046,7 +3046,7 @@ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== -"@types/minimatch@^5.1.2": +"@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== @@ -3125,12 +3125,12 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@types/shelljs@0.8.11": - version "0.8.11" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.11.tgz#17a5696c825974e96828e96e89585d685646fcb8" - integrity sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw== +"@types/shelljs@0.8.12": + version "0.8.12" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.12.tgz#79dc9632af7d5ca1b5afb65a6bfc1422d79b5fa0" + integrity sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg== dependencies: - "@types/glob" "*" + "@types/glob" "~7.2.0" "@types/node" "*" "@types/sinon@^10.0.10": From c5ac66cf69e968f7b467ad1593069a24fb866f85 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 20 Apr 2023 10:49:39 +0200 Subject: [PATCH 079/122] docs(self-hosted configuration): `globalExtends` can't be private (#21597) Co-authored-by: Rhys Arkins --- docs/usage/self-hosted-configuration.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index 4c3c178ef7c660..e0fb0cc5ed8fec 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -470,6 +470,12 @@ Use the `globalExtends` field if your preset has any global-only configuration o Use the `extends` field instead of this if, for example, you need the ability for a repository config (e.g. `renovate.json`) to be able to use `ignorePresets` for any preset defined in global config. + +!!! warning + `globalExtends` presets can't be private. + When Renovate resolves `globalExtends` it does not fully process the configuration. + This means that Renovate does not have the authentication it needs to fetch private things. + ## logContext `logContext` is included with each log entry only if `logFormat="json"` - it is not included in the pretty log output. From 62d051f2a98c13b4ccbb4982b5f27d1f1ea7ef99 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 20 Apr 2023 13:34:35 +0200 Subject: [PATCH 080/122] docs: remove outdated node/git minimum versions --- docs/usage/getting-started/running.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/usage/getting-started/running.md b/docs/usage/getting-started/running.md index d9da42ae870780..ccdc504552cf95 100644 --- a/docs/usage/getting-started/running.md +++ b/docs/usage/getting-started/running.md @@ -29,8 +29,6 @@ If you need Renovate to support any non-npm lock files like Bundler then you'll The `renovate` npm package is compatible with all of Renovate's supported platforms. -Renovate requires Node.js `>=14.15.0` and Git `>=2.33.0`. - #### Docker image The `renovate` npm package is also distributed via pre-built Node.js images on Docker Hub (`renovate/renovate`). From 58fe0bdc816136385a7402a9cced90a9e1d1be3e Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Thu, 20 Apr 2023 19:52:48 +0300 Subject: [PATCH 081/122] refactor(date): Use Jest fake timers (#21631) --- lib/util/date.spec.ts | 53 ++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/lib/util/date.spec.ts b/lib/util/date.spec.ts index 08d5d102c38898..9aa53a38a4acdf 100644 --- a/lib/util/date.spec.ts +++ b/lib/util/date.spec.ts @@ -1,3 +1,4 @@ +import { DateTime } from 'luxon'; import { getElapsedDays, getElapsedHours, @@ -5,34 +6,40 @@ import { getElapsedMs, } from './date'; -const ONE_MINUTE_MS = 60 * 1000; -const ONE_HOUR_MS = 60 * ONE_MINUTE_MS; -const ONE_DAY_MS = 24 * ONE_HOUR_MS; - describe('util/date', () => { - const Jan1 = new Date(new Date().getFullYear(), 0, 1); + const t0 = DateTime.fromISO('2020-10-10'); + + beforeAll(() => { + jest.useFakeTimers(); + }); + + beforeEach(() => { + jest.setSystemTime(t0.toMillis()); + }); - it('returns elapsed days', () => { - const elapsedDays = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_DAY_MS - ); - expect(getElapsedDays(Jan1.toDateString())).toBe(elapsedDays); + afterAll(() => { + jest.useRealTimers(); }); - it('returns elapsed minutes', () => { - const elapsedMinutes = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_MINUTE_MS - ); - expect(getElapsedMinutes(new Date(Jan1))).toBe(elapsedMinutes); + describe('getElapsedDays', () => { + it('returns elapsed days', () => { + const t = t0.minus({ days: 42 }); + expect(getElapsedDays(t.toISO()!)).toBe(42); + }); + }); + + describe('getElapsedMinutes', () => { + it('returns elapsed minutes', () => { + const t = t0.minus({ minutes: 42 }); + expect(getElapsedMinutes(t.toJSDate())).toBe(42); + }); }); describe('getElapsedHours', () => { it('returns elapsed hours', () => { - const elapsedHours = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_HOUR_MS - ); - expect(getElapsedHours(Jan1.toISOString())).toBe(elapsedHours); // ISOstring - expect(getElapsedHours(Jan1)).toBe(elapsedHours); // JS Date + const t = t0.minus({ hours: 42 }); + expect(getElapsedHours(t.toISO()!)).toBe(42); // ISOstring + expect(getElapsedHours(t.toJSDate())).toBe(42); // JS Date }); it('returns zero when date passed is invalid', () => { @@ -40,10 +47,10 @@ describe('util/date', () => { }); }); - describe('getElapsedMilliseconds', () => { + describe('getElapsedMs', () => { it('returns elapsed time in milliseconds', () => { - const elapsedMs = new Date().getTime() - new Date(Jan1).getTime(); - expect(getElapsedMs(Jan1.toISOString())).toBe(elapsedMs); + const t = t0.minus({ milliseconds: 42 }); + expect(getElapsedMs(t.toISO()!)).toBe(42); }); }); }); From 1adc0777daf6a60918f089d55914ec449e022d9a Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Thu, 20 Apr 2023 20:51:00 +0300 Subject: [PATCH 082/122] fix(platform/github): Fix branch recreation for existing branches (#21629) --- lib/modules/platform/github/index.spec.ts | 13 ++++--- lib/modules/platform/github/index.ts | 43 +++++++++++++---------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/lib/modules/platform/github/index.spec.ts b/lib/modules/platform/github/index.spec.ts index 9fac0812ddfa15..91d35bc7177cf7 100644 --- a/lib/modules/platform/github/index.spec.ts +++ b/lib/modules/platform/github/index.spec.ts @@ -35,7 +35,6 @@ describe('modules/platform/github/index', () => { setBaseUrl(githubApiHost); - git.branchExists.mockReturnValue(true); git.isBranchBehindBase.mockResolvedValue(true); git.getBranchCommit.mockReturnValue( '0d9c7726c3d628b7e28af234595cfd20febdbf8e' @@ -861,6 +860,8 @@ describe('modules/platform/github/index', () => { updated_at: '01-09-2022', }, ]) + .head('/repos/some/repo/git/refs/heads/somebranch') + .reply(404) .post('/repos/some/repo/git/refs') .reply(201) .patch('/repos/some/repo/pulls/91') @@ -950,6 +951,8 @@ describe('modules/platform/github/index', () => { closed_at: DateTime.now().minus({ minutes: 10 }).toISO(), }, ]) + .head('/repos/some/repo/git/refs/heads/somebranch') + .reply(404) .post('/repos/some/repo/git/refs') .reply(201) .patch('/repos/some/repo/pulls/91') @@ -976,7 +979,7 @@ describe('modules/platform/github/index', () => { closed_at: DateTime.now().minus({ minutes: 10 }).toISO(), }, ]) - .post('/repos/some/repo/git/refs') + .head('/repos/some/repo/git/refs/heads/somebranch') .reply(422); await github.initRepo({ repository: 'some/repo' }); @@ -3243,7 +3246,6 @@ describe('modules/platform/github/index', () => { it('commits and returns SHA string', async () => { git.pushCommitToRenovateRef.mockResolvedValueOnce(); git.listCommitTree.mockResolvedValueOnce([]); - git.branchExists.mockReturnValueOnce(false); const scope = httpMock.scope(githubApiHost); @@ -3255,6 +3257,8 @@ describe('modules/platform/github/index', () => { .reply(200, { sha: '111' }) .post('/repos/some/repo/git/commits') .reply(200, { sha: '222' }) + .head('/repos/some/repo/git/refs/heads/foo/bar') + .reply(404) .post('/repos/some/repo/git/refs') .reply(200); @@ -3270,7 +3274,6 @@ describe('modules/platform/github/index', () => { it('performs rebase', async () => { git.pushCommitToRenovateRef.mockResolvedValueOnce(); git.listCommitTree.mockResolvedValueOnce([]); - git.branchExists.mockReturnValueOnce(true); const scope = httpMock.scope(githubApiHost); @@ -3282,6 +3285,8 @@ describe('modules/platform/github/index', () => { .reply(200, { sha: '111' }) .post('/repos/some/repo/git/commits') .reply(200, { sha: '222' }) + .head('/repos/some/repo/git/refs/heads/foo/bar') + .reply(200) .patch('/repos/some/repo/git/refs/heads/foo/bar') .reply(200); diff --git a/lib/modules/platform/github/index.ts b/lib/modules/platform/github/index.ts index 7c9ac146a375bc..ffc5f1ab893144 100644 --- a/lib/modules/platform/github/index.ts +++ b/lib/modules/platform/github/index.ts @@ -742,6 +742,29 @@ export async function findPr({ const REOPEN_THRESHOLD_MILLIS = 1000 * 60 * 60 * 24 * 7; +async function ensureBranchSha(branchName: string, sha: string): Promise { + const refUrl = `/repos/${config.repository}/git/refs/heads/${branchName}`; + + let branchExists = false; + try { + await githubApi.head(refUrl, { useCache: false }); + branchExists = true; + } catch (err) { + if (err.statusCode !== 404) { + throw err; + } + } + + if (branchExists) { + await githubApi.patchJson(refUrl, { body: { sha, force: true } }); + return; + } + + await githubApi.postJson(`/repos/${config.repository}/git/refs`, { + body: { sha, ref: `refs/heads/${branchName}` }, + }); +} + // Returns the Pull Request for a branch. Null if not exists. export async function getBranchPr(branchName: string): Promise { logger.debug(`getBranchPr(${branchName})`); @@ -776,9 +799,7 @@ export async function getBranchPr(branchName: string): Promise { } const { sha, number } = autoclosedPr; try { - await githubApi.postJson(`repos/${config.repository}/git/refs`, { - body: { ref: `refs/heads/${branchName}`, sha }, - }); + await ensureBranchSha(branchName, sha!); logger.debug(`Recreated autoclosed branch ${branchName} with sha ${sha}`); } catch (err) { logger.debug('Could not recreate autoclosed branch - skipping reopen'); @@ -1794,21 +1815,7 @@ async function pushFiles( { body: { message, tree: treeSha, parents: [parentCommitSha] } } ); const remoteCommitSha = commitRes.body.sha; - - // Create branch if it didn't already exist, update it otherwise - if (git.branchExists(branchName)) { - // This is the equivalent of a git force push - // We are using this REST API because the GraphQL API doesn't support force push - await githubApi.patchJson( - `/repos/${config.repository}/git/refs/heads/${branchName}`, - { body: { sha: remoteCommitSha, force: true } } - ); - } else { - await githubApi.postJson(`/repos/${config.repository}/git/refs`, { - body: { ref: `refs/heads/${branchName}`, sha: remoteCommitSha }, - }); - } - + await ensureBranchSha(branchName, remoteCommitSha); return remoteCommitSha; } catch (err) { logger.debug({ branchName, err }, 'Platform-native commit: unknown error'); From 8e8e8a7ea2d6230257272a782589b51327b18675 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 20 Apr 2023 20:13:36 +0200 Subject: [PATCH 083/122] test: remove useless jest fake timer reset (#21633) --- lib/util/date.spec.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/util/date.spec.ts b/lib/util/date.spec.ts index 9aa53a38a4acdf..df5012031209a4 100644 --- a/lib/util/date.spec.ts +++ b/lib/util/date.spec.ts @@ -17,10 +17,6 @@ describe('util/date', () => { jest.setSystemTime(t0.toMillis()); }); - afterAll(() => { - jest.useRealTimers(); - }); - describe('getElapsedDays', () => { it('returns elapsed days', () => { const t = t0.minus({ days: 42 }); From 205e227e63d3bd80bfe00036a14d96587986d765 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 22:50:04 +0000 Subject: [PATCH 084/122] build(deps): update opentelemetry-js monorepo (#21636) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 16 ++--- yarn.lock | 170 +++++++++++++++++++++++++-------------------------- 2 files changed, 93 insertions(+), 93 deletions(-) diff --git a/package.json b/package.json index 2fc3f91cdc1b35..25a613250afde1 100644 --- a/package.json +++ b/package.json @@ -146,15 +146,15 @@ "@cheap-glitch/mi-cron": "1.0.1", "@iarna/toml": "3.0.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.11.0", - "@opentelemetry/exporter-trace-otlp-http": "0.37.0", - "@opentelemetry/instrumentation": "0.37.0", + "@opentelemetry/context-async-hooks": "1.12.0", + "@opentelemetry/exporter-trace-otlp-http": "0.38.0", + "@opentelemetry/instrumentation": "0.38.0", "@opentelemetry/instrumentation-bunyan": "0.31.1", - "@opentelemetry/instrumentation-http": "0.37.0", - "@opentelemetry/resources": "1.11.0", - "@opentelemetry/sdk-trace-base": "1.11.0", - "@opentelemetry/sdk-trace-node": "1.11.0", - "@opentelemetry/semantic-conventions": "1.11.0", + "@opentelemetry/instrumentation-http": "0.38.0", + "@opentelemetry/resources": "1.12.0", + "@opentelemetry/sdk-trace-base": "1.12.0", + "@opentelemetry/sdk-trace-node": "1.12.0", + "@opentelemetry/semantic-conventions": "1.12.0", "@qnighy/marshal": "0.1.3", "@renovatebot/osv-offline": "1.2.4", "@renovatebot/pep440": "2.1.13", diff --git a/yarn.lock b/yarn.lock index cf79cc2436cd72..55a8470a175bb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2208,28 +2208,28 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== -"@opentelemetry/context-async-hooks@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.11.0.tgz#45bbd5f574a8e6aca0cd1af676e906d0626662a7" - integrity sha512-Ao1z7p+Au7A10SvQ6NCo5h2dAb3cujy+1VUZrd6gZuqMTxADYEWw/yjDbkHM/NAAaBphDGhqNg2MxGYIdgQs8w== +"@opentelemetry/context-async-hooks@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.12.0.tgz#3d683dc80787c10ec3d805000267948e7b24b096" + integrity sha512-PmwAanPNWCyS9JYFzhzVzHgviLhc0UHjOwdth+hp3HgQQ9XZZNE635P8JhAUHZmbghW9/qQFafRWOS4VN9VVnQ== -"@opentelemetry/core@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.11.0.tgz#3141a0e96a9ade6ee2dcdd794fd0b014e1013dde" - integrity sha512-aP1wHSb+YfU0pM63UAkizYPuS4lZxzavHHw5KJfFNN2oWQ79HSm6JR3CzwFKHwKhSzHN8RE9fgP1IdVJ8zmo1w== +"@opentelemetry/core@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.12.0.tgz#afa32341b794045c54c979d4561de2f8f00d0da9" + integrity sha512-4DWYNb3dLs2mSCGl65jY3aEgbvPWSHVQV/dmDWiYeWUrMakZQFcymqZOSUNZO0uDrEJoxMu8O5tZktX6UKFwag== dependencies: - "@opentelemetry/semantic-conventions" "1.11.0" + "@opentelemetry/semantic-conventions" "1.12.0" -"@opentelemetry/exporter-trace-otlp-http@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.37.0.tgz#3740a0907a94ec0091e7a05dbf503f027d1d8089" - integrity sha512-+oVV/h6UTLMF4IRtCGkLk2kQImMgC0ARFCfz+XXGNksP+awh/NXsDtJ3mHrn8Gtudrf3+pKVe/FWptBRqicm5Q== +"@opentelemetry/exporter-trace-otlp-http@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.38.0.tgz#93d012fba5f6f345807993aff59c883821d73fde" + integrity sha512-AWpTCyijC7kt2DbLj8FmdlRquA6/rTXZ+3U4MVl4P2YNI7KLUnx/FEhn2BMTB0+rOy7UxSAocqz2tJ/5Ss/6Ng== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/otlp-exporter-base" "0.37.0" - "@opentelemetry/otlp-transformer" "0.37.0" - "@opentelemetry/resources" "1.11.0" - "@opentelemetry/sdk-trace-base" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/otlp-exporter-base" "0.38.0" + "@opentelemetry/otlp-transformer" "0.38.0" + "@opentelemetry/resources" "1.12.0" + "@opentelemetry/sdk-trace-base" "1.12.0" "@opentelemetry/instrumentation-bunyan@0.31.1": version "0.31.1" @@ -2239,20 +2239,20 @@ "@opentelemetry/instrumentation" "^0.35.1" "@types/bunyan" "1.8.7" -"@opentelemetry/instrumentation-http@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.37.0.tgz#f48adafa0fd49037e43d9c79143867894d83e698" - integrity sha512-sEa/yzMypGw3HzgJW+5TayOB7ti3O3Ge+fSAFJSvIDzA9LQAhXGlgt65Uw2l3pn53/b0Js8+QJigqAohnEWz8w== +"@opentelemetry/instrumentation-http@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.38.0.tgz#0226ff67e9f79063aae771bfdb04389da457c828" + integrity sha512-9kpRVnG6oVvt3/WYCzrHwW+s69BW4ap38NWFJLFB+Mcq1wmAcNSoBYUM7j2AfJB4w4y3A6r6mYgnusnxdmPYYg== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/instrumentation" "0.37.0" - "@opentelemetry/semantic-conventions" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/instrumentation" "0.38.0" + "@opentelemetry/semantic-conventions" "1.12.0" semver "^7.3.5" -"@opentelemetry/instrumentation@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.37.0.tgz#8ae3a9a2dfe94e78a6511b665f0e19f25fd52d8a" - integrity sha512-QAHIYTeVHcvP5NcI8r0WbvF5KCojZSzQLO9G73/OpiXLy/t8hIUXHq0nuuSB5zP5dKQ8h9sORi/3suGBNHnsjw== +"@opentelemetry/instrumentation@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.38.0.tgz#e97c6d4ea699006ec2541fd83b26a10f0edaada4" + integrity sha512-wr1WkIbzHGV+oz6SCme88D2c+zNG23COkCjcida8b3jIzX2lJafOpEHPDcbBF38F8ChkRSj/tVnx1wnYAXZvbA== dependencies: require-in-the-middle "^6.0.0" semver "^7.3.2" @@ -2267,79 +2267,79 @@ semver "^7.3.2" shimmer "^1.2.1" -"@opentelemetry/otlp-exporter-base@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.37.0.tgz#5c544ca92b3d77c67059b9184f7d573b7dac25c2" - integrity sha512-dLbv7nr7d14xrHzd+S1eW+RpXh7IC0onktc23pwzETh6J7Ytzf0+QwLV5iRatoNtwPU2hX1VGOipwEnC/BjXxg== +"@opentelemetry/otlp-exporter-base@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.38.0.tgz#803d0e29825023721963384a9c64c5db254d4cf1" + integrity sha512-VWQo7vUDyW/7/FT8RErAtM/29i/fllCc9xMtnK7kDuheAjJU68zrZ88bQOsLamHvOCU3KVpozjfTZVxZKQRYXw== dependencies: - "@opentelemetry/core" "1.11.0" + "@opentelemetry/core" "1.12.0" -"@opentelemetry/otlp-transformer@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.37.0.tgz#5de4bf39da9a14841ca0ebd7ac220801d616de64" - integrity sha512-cIzV9x2DhJ5gN0mld8OqN+XM95sDiuAJJvXsRjVuz9vu8TSNbbao/QCKNfJLOXqe8l3Ge05nKzQ6Q2gDDEN36w== +"@opentelemetry/otlp-transformer@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.38.0.tgz#0e759cf494b9c1cb7ee272ac6e936f9a2abf6514" + integrity sha512-ykQEipby0NVSi2ih5E8J2GNJ6y9zYDPSef0nD8j33XPKxfyVG5184rUrCsh6TIk1d/GlYl8gB9Wy4TdRvwl6kA== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/resources" "1.11.0" - "@opentelemetry/sdk-metrics" "1.11.0" - "@opentelemetry/sdk-trace-base" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/resources" "1.12.0" + "@opentelemetry/sdk-metrics" "1.12.0" + "@opentelemetry/sdk-trace-base" "1.12.0" -"@opentelemetry/propagator-b3@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.11.0.tgz#72c97263b0420178dc4eb9b9351f5bf8adbc3cb1" - integrity sha512-Nnlu2PUSMqB8Lc3OzjznqpwuUdej1LrYYNjHItk9g7jJ9SAjiLdkB1cDALO+xhISTON8VrELh1rh0XIMUts2og== +"@opentelemetry/propagator-b3@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.12.0.tgz#74d3e4b4889b1ae67a5aab0ca08afbce0a867f4d" + integrity sha512-WFcn98075QPc2zE1obhKydJHUehI5/HuLoelPEVwATj+487hjCwjHj9r2fgmQkWpvuNSB7CJaA0ys6qqq1N6lg== dependencies: - "@opentelemetry/core" "1.11.0" + "@opentelemetry/core" "1.12.0" -"@opentelemetry/propagator-jaeger@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.11.0.tgz#9a763db967967d2241ae6ed4e2e50722715648d1" - integrity sha512-/9XDcBnB6Y2INMWACs0UniY+aV7LReMRzPN6Q0SI7SlXZLZPTUnaZt51Tb/TyixjzAkHsj86K27XSCv3ctB2UQ== +"@opentelemetry/propagator-jaeger@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.12.0.tgz#e477e8a63007734d18db6a764a440b37e9f0dd2d" + integrity sha512-ugtWF7GC6X5RIJ0+iMwW2iVAGNs206CAeq8XQ8OkJRg+v0lp4H0/i+gJ4hubTT8NIL5a3IxtIrAENPLIGdLucQ== dependencies: - "@opentelemetry/core" "1.11.0" + "@opentelemetry/core" "1.12.0" -"@opentelemetry/resources@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.11.0.tgz#68e3ca399e63246a6b87bc495f819c5bd9f2c112" - integrity sha512-y0z2YJTqk0ag+hGT4EXbxH/qPhDe8PfwltYb4tXIEsozgEFfut/bqW7H7pDvylmCjBRMG4NjtLp57V1Ev++brA== +"@opentelemetry/resources@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.12.0.tgz#895394c727dc3e7e51d1d2cc50907ec07a626dca" + integrity sha512-gunMKXG0hJrR0LXrqh7BVbziA/+iJBL3ZbXCXO64uY+SrExkwoyJkpiq9l5ismkGF/A20mDEV7tGwh+KyPw00Q== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/semantic-conventions" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/semantic-conventions" "1.12.0" -"@opentelemetry/sdk-metrics@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.11.0.tgz#0fe347fb39a802ec270315cba0eba2e3ce64c4a2" - integrity sha512-knuq3pwU0+46FEMdw9Ses+alXL9cbcLUUTdYBBBsaKkqKwoVMHfhBufW7u6YCu4i+47Wg6ZZTN/eGc4LbTbK5Q== +"@opentelemetry/sdk-metrics@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.12.0.tgz#52c135b8ca6af677a3e93b6721bc866a74c98b4b" + integrity sha512-zOy88Jfk88eTxqu+9ypHLs184dGydJocSWtvWMY10QKVVaxhC3SLKa0uxI/zBtD9S+x0LP65wxrTSfSoUNtCOA== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/resources" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/resources" "1.12.0" lodash.merge "4.6.2" -"@opentelemetry/sdk-trace-base@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.11.0.tgz#a962dbe74ae28442501ce804d4a270892e70d862" - integrity sha512-DV8e5/Qo42V8FMBlQ0Y0Liv6Hl/Pp5bAZ73s7r1euX8w4bpRes1B7ACiA4yujADbWMJxBgSo4fGbi4yjmTMG2A== +"@opentelemetry/sdk-trace-base@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.12.0.tgz#62b895dbb5900048a85e4899c38fec5585447d4b" + integrity sha512-pfCOB3tNDlYVoWuz4D7Ji+Jmy9MHnATWHVpkERdCEiwUGEZ+4IvNPXUcPc37wJVmMpjGLeaWgPPrie0KIpWf1A== dependencies: - "@opentelemetry/core" "1.11.0" - "@opentelemetry/resources" "1.11.0" - "@opentelemetry/semantic-conventions" "1.11.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/resources" "1.12.0" + "@opentelemetry/semantic-conventions" "1.12.0" -"@opentelemetry/sdk-trace-node@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.11.0.tgz#5a1621fff5e9427b5e7557a3b8651ee4c572da35" - integrity sha512-BzcrLl6m10Gc9Za5hNCRAClgpetGd5di5bG4RDChhVfqrecl98ok+BKunWxWxrZUMpXpJqfXteHo0su3SEXvXQ== - dependencies: - "@opentelemetry/context-async-hooks" "1.11.0" - "@opentelemetry/core" "1.11.0" - "@opentelemetry/propagator-b3" "1.11.0" - "@opentelemetry/propagator-jaeger" "1.11.0" - "@opentelemetry/sdk-trace-base" "1.11.0" +"@opentelemetry/sdk-trace-node@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.12.0.tgz#f9f35a44bf662884d49c63473ce8fb34acf7d413" + integrity sha512-PxpDemnNZLLeFNLAu95/K3QubjlaScXVjVQPlwPui65VRxIvxGVysnN7DFfsref+qoh1hI6nlrYSij43vxdm2w== + dependencies: + "@opentelemetry/context-async-hooks" "1.12.0" + "@opentelemetry/core" "1.12.0" + "@opentelemetry/propagator-b3" "1.12.0" + "@opentelemetry/propagator-jaeger" "1.12.0" + "@opentelemetry/sdk-trace-base" "1.12.0" semver "^7.3.5" -"@opentelemetry/semantic-conventions@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.11.0.tgz#b7ed9a601acb6e0aef67564b37e4f9abad449170" - integrity sha512-fG4D0AktoHyHwGhFGv+PzKrZjxbKJfckJauTJdq2A+ej5cTazmNYjJVAODXXkYyrsI10muMl+B1iO2q1R6Lp+w== +"@opentelemetry/semantic-conventions@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.12.0.tgz#19c959bdb900986e74939d4227e757aa16936b91" + integrity sha512-hO+bdeGOlJwqowUBoZF5LyP3ORUFOP1G0GRv8N45W/cztXbT2ZEXaAzfokRS9Xc9FWmYrDj32mF6SzH6wuoIyA== "@pkgr/utils@^2.3.1": version "2.3.1" From 7b3e01f0f7a5f19955fb2e3efd4394fa2687c7f6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 22:52:32 +0000 Subject: [PATCH 085/122] chore(deps): update codecov/codecov-action action to v3.1.3 (#21635) 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 cadf9d4c58b901..b0b1ab49ca4d65 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -93,7 +93,7 @@ jobs: run: yarn jest --ci --coverage ${{ env.coverage }} - name: Codecov - uses: codecov/codecov-action@40a12dcee2df644d47232dde008099a3e9e4f865 # v3.1.2 + uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2 # v3.1.3 if: always() && env.coverage == 'true' - name: E2E Test From 455de72ee7b15ba4bd007eff2dc662bd0234be32 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Fri, 21 Apr 2023 06:13:32 +0200 Subject: [PATCH 086/122] fix(manager/git-submodule): use appropriate hostType for auth (#17400) Co-authored-by: Jamie Magee Co-authored-by: Rhys Arkins --- .../git-submodules/__fixtures__/.gitmodules.5 | 7 ++ .../manager/git-submodules/extract.spec.ts | 64 +++++++++++++++++-- lib/modules/manager/git-submodules/extract.ts | 4 +- 3 files changed, 68 insertions(+), 7 deletions(-) diff --git a/lib/modules/manager/git-submodules/__fixtures__/.gitmodules.5 b/lib/modules/manager/git-submodules/__fixtures__/.gitmodules.5 index eb85ce493d435c..9ae692206fd56c 100644 --- a/lib/modules/manager/git-submodules/__fixtures__/.gitmodules.5 +++ b/lib/modules/manager/git-submodules/__fixtures__/.gitmodules.5 @@ -7,3 +7,10 @@ [submodule "renovate-config"] path = deps/renovate-config url = git@github.com:renovatebot/renovate-config.git +[submodule "some-other"] + path = some-other + url = https://domain.test/some/other.git + +[submodule "some-gitlab"] + path = some-gitlab + url = https://gitlab.com/some/repo.git diff --git a/lib/modules/manager/git-submodules/extract.spec.ts b/lib/modules/manager/git-submodules/extract.spec.ts index 8ea9e76d32ceb0..08776774857ecb 100644 --- a/lib/modules/manager/git-submodules/extract.spec.ts +++ b/lib/modules/manager/git-submodules/extract.spec.ts @@ -18,11 +18,16 @@ const Git = jest.requireActual('simple-git') as SimpleGitFactory; describe('modules/manager/git-submodules/extract', () => { // flaky ci tests - jest.setTimeout(10 * 1000); + //jest.setTimeout(10 * 1000); beforeAll(() => { simpleGit.mockImplementation((basePath: string) => { const git = Git(basePath); + const lsRemote: Record = { + 'https://abc@domain.test/some/other.git': '', + 'https://gitlab-ci-token:xyz@gitlab.com/some/repo.git': + 'ref: refs/heads/dev HEAD\n', + }; return { subModule(): Response { return Promise.resolve( @@ -40,7 +45,13 @@ describe('modules/manager/git-submodules/extract', () => { } return git.raw(options); }, - listRemote(): Response { + listRemote(options: TaskOptions): Response { + if ( + is.array(options, is.string) && + lsRemote[options[1]] !== undefined + ) { + return Promise.resolve(lsRemote[options[1]]) as Response; + } return Promise.resolve( 'ref: refs/heads/main HEAD\n5701164b9f5edba1f6ca114c491a564ffb55a964 HEAD' ) as Response; @@ -54,6 +65,16 @@ describe('modules/manager/git-submodules/extract', () => { it('extracts submodules', async () => { GlobalConfig.set({ localDir: `${__dirname}/__fixtures__` }); hostRules.add({ matchHost: 'github.com', token: '123test' }); + hostRules.add({ + matchHost: 'domain.test', + token: 'abc', + hostType: 'git-refs', + }); + hostRules.add({ + matchHost: 'gitlab.com', + token: 'xyz', + hostType: 'gitlab', + }); let res: PackageFileContent | null; expect(await extractPackageFile('', '.gitmodules.1', {})).toBeNull(); res = await extractPackageFile('', '.gitmodules.2', {}); @@ -64,10 +85,41 @@ describe('modules/manager/git-submodules/extract', () => { res = await extractPackageFile('', '.gitmodules.4', {}); expect(res?.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.5', {}); - expect(res?.deps).toHaveLength(3); - expect(res?.deps[2].packageName).toBe( - 'https://github.com/renovatebot/renovate-config.git' - ); + expect(res).toEqual({ + datasource: 'git-refs', + deps: [ + { + currentDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + currentValue: 'main', + depName: 'deps/renovate', + packageName: 'https://github.com/renovatebot/renovate.git', + }, + { + currentDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + currentValue: 'main', + depName: 'deps/renovate-pro', + packageName: 'https://github.com/renovatebot/pro.git', + }, + { + currentDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + currentValue: 'main', + depName: 'deps/renovate-config', + packageName: 'https://github.com/renovatebot/renovate-config.git', + }, + { + currentDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + currentValue: 'master', + depName: 'some-other', + packageName: 'https://domain.test/some/other.git', + }, + { + currentDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + currentValue: 'dev', + depName: 'some-gitlab', + packageName: 'https://gitlab.com/some/repo.git', + }, + ], + }); }); }); }); diff --git a/lib/modules/manager/git-submodules/extract.ts b/lib/modules/manager/git-submodules/extract.ts index 82902cd1b61ca0..8cb5f1ff6cb76a 100644 --- a/lib/modules/manager/git-submodules/extract.ts +++ b/lib/modules/manager/git-submodules/extract.ts @@ -3,6 +3,7 @@ import Git, { SimpleGit } from 'simple-git'; import upath from 'upath'; import { GlobalConfig } from '../../../config/global'; import { logger } from '../../../logger'; +import { detectPlatform } from '../../../util/common'; import { simpleGitConfig } from '../../../util/git/config'; import { getHttpUrl, getRemoteUrlWithToken } from '../../../util/git/url'; import { regEx } from '../../../util/regex'; @@ -115,7 +116,8 @@ export default async function extractPackageFile( // hostRules only understands HTTP URLs // Find HTTP URL, then apply token let httpSubModuleUrl = getHttpUrl(subModuleUrl); - httpSubModuleUrl = getRemoteUrlWithToken(httpSubModuleUrl); + const hostType = detectPlatform(httpSubModuleUrl) ?? GitRefsDatasource.id; + httpSubModuleUrl = getRemoteUrlWithToken(httpSubModuleUrl, hostType); const currentValue = await getBranch( gitModulesPath, name, From 7de094afea626a3b04cb9f30a04de2bde7247caa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 04:48:39 +0000 Subject: [PATCH 087/122] chore(deps): update dependency @types/lodash to v4.14.193 (#21641) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 25a613250afde1..5fb94d6755f392 100644 --- a/package.json +++ b/package.json @@ -272,7 +272,7 @@ "@types/js-yaml": "4.0.5", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", - "@types/lodash": "4.14.192", + "@types/lodash": "4.14.193", "@types/luxon": "3.3.0", "@types/markdown-it": "12.2.3", "@types/markdown-table": "2.0.0", diff --git a/yarn.lock b/yarn.lock index 55a8470a175bb2..2f366f6b4f9b83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3004,10 +3004,10 @@ resolved "https://registry.yarnpkg.com/@types/linkify-markdown/-/linkify-markdown-1.0.1.tgz#0b750a592107dd46ecf2b5be0eeb7656b1fc814d" integrity sha512-RYDOtCol7/sHGhSJvWVnl0AmOdQQWgUYys6cwn5Lt3RiYhyhTLMLv7B9wdixMgCfnNt0MQj/YSGi3qN0IQqLeQ== -"@types/lodash@4.14.192": - version "4.14.192" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.192.tgz#5790406361a2852d332d41635d927f1600811285" - integrity sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A== +"@types/lodash@4.14.193": + version "4.14.193" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.193.tgz#0ca0c10002983d25f6bc86c98fd703b21ba57b58" + integrity sha512-DWZ7ccyFsIYfwOlYfR6amRP9PfPmvqo0UluncNbu53W62GFwWT6rzgO3HzKaNbahUZTu/66OaQU3/JrtDo4X9w== "@types/luxon@3.3.0": version "3.3.0" From f465f6fdfb426d21bb72eb57620dd17bf54ad70a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 05:45:11 +0000 Subject: [PATCH 088/122] chore(deps): update dependency @types/lodash to v4.14.194 (#21651) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5fb94d6755f392..c9398acc941ccd 100644 --- a/package.json +++ b/package.json @@ -272,7 +272,7 @@ "@types/js-yaml": "4.0.5", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", - "@types/lodash": "4.14.193", + "@types/lodash": "4.14.194", "@types/luxon": "3.3.0", "@types/markdown-it": "12.2.3", "@types/markdown-table": "2.0.0", diff --git a/yarn.lock b/yarn.lock index 2f366f6b4f9b83..ff7752b59a03a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3004,10 +3004,10 @@ resolved "https://registry.yarnpkg.com/@types/linkify-markdown/-/linkify-markdown-1.0.1.tgz#0b750a592107dd46ecf2b5be0eeb7656b1fc814d" integrity sha512-RYDOtCol7/sHGhSJvWVnl0AmOdQQWgUYys6cwn5Lt3RiYhyhTLMLv7B9wdixMgCfnNt0MQj/YSGi3qN0IQqLeQ== -"@types/lodash@4.14.193": - version "4.14.193" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.193.tgz#0ca0c10002983d25f6bc86c98fd703b21ba57b58" - integrity sha512-DWZ7ccyFsIYfwOlYfR6amRP9PfPmvqo0UluncNbu53W62GFwWT6rzgO3HzKaNbahUZTu/66OaQU3/JrtDo4X9w== +"@types/lodash@4.14.194": + version "4.14.194" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/luxon@3.3.0": version "3.3.0" From a94c0dcf8af4b1a771b4d9aba01ccf9ae018da48 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 05:48:40 +0000 Subject: [PATCH 089/122] build(deps): update dependency @renovatebot/ruby-semver to v2.1.11 (#21650) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c9398acc941ccd..1fa6e8035d0f67 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "@qnighy/marshal": "0.1.3", "@renovatebot/osv-offline": "1.2.4", "@renovatebot/pep440": "2.1.13", - "@renovatebot/ruby-semver": "2.1.10", + "@renovatebot/ruby-semver": "2.1.11", "@sindresorhus/is": "4.6.0", "@types/ms": "0.7.31", "@types/tmp": "0.2.3", diff --git a/yarn.lock b/yarn.lock index ff7752b59a03a4..07425013ab161b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2509,10 +2509,10 @@ resolved "https://registry.yarnpkg.com/@renovatebot/pep440/-/pep440-2.1.13.tgz#d630989b6abf9dd001edc526cf3e821450e6e45d" integrity sha512-PFnG9X7on77Gp9FPdossWfvDL6QTg1MafZP3hdKafo3n6SP89wiyZmjFVaQwlRlE5cEmZQwh11dE8Oos9H2paw== -"@renovatebot/ruby-semver@2.1.10": - version "2.1.10" - resolved "https://registry.yarnpkg.com/@renovatebot/ruby-semver/-/ruby-semver-2.1.10.tgz#3465e3818239e21a980e9b8acd90ffc323d417a3" - integrity sha512-k9GE1cYAYWH5zJpePf4m6GEOZaT/5dh6ETTnV4TQthqufaKpIg9m6ZoxzKhKfuwPo5PlprWh8gyYXjYpN2TkhA== +"@renovatebot/ruby-semver@2.1.11": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@renovatebot/ruby-semver/-/ruby-semver-2.1.11.tgz#5a63bda21da4bc1553ed9b6acf1e6a07b0df2797" + integrity sha512-4UCu1qpkfpa9sIuo8q0+oEwW76XT21OtEuwT+xecaK4QSdqvNfROFNSzq/PA4or/v9uPvLkRWHF36DNd5t/A4w== dependencies: tslib "^2.5.0" From 634170351dd0bd89d472582f98bf1ea14276e406 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 21 Apr 2023 08:04:08 +0200 Subject: [PATCH 090/122] feat(presets): deprecate npm-based presets (#21654) --- lib/config/presets/npm/index.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/config/presets/npm/index.ts b/lib/config/presets/npm/index.ts index 28b2b3253cc6d4..a1c038f7b120f3 100644 --- a/lib/config/presets/npm/index.ts +++ b/lib/config/presets/npm/index.ts @@ -26,13 +26,11 @@ export async function getPreset({ let dep: (NpmResponseVersion & { 'renovate-config'?: any }) | undefined; try { const registryUrl = resolveRegistryUrl(pkg); + logger.once.warn( + { registryUrl, pkg }, + 'Using npm packages for Renovate presets is now deprecated. Please migrate to repository-based presets instead.' + ); const packageUrl = resolvePackageUrl(registryUrl, pkg); - // istanbul ignore if - if (!packageUrl.startsWith('https://registry.npmjs.org/')) { - logger.warn( - 'npm presets from non-default registries are now deprecated. Please migrate to repository-based presets instead.' - ); - } const body = (await http.getJson(packageUrl)).body; // TODO: check null #7154 dep = body.versions![body['dist-tags']!.latest]; From 3fbdcdc1ae4e01f0ca4033bd9960478b078d788a Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 21 Apr 2023 11:25:48 +0300 Subject: [PATCH 091/122] refactor(schema): Enhanced "loose" collections (#21541) --- lib/modules/datasource/deno/schema.ts | 18 +- .../datasource/dotnet-version/schema.ts | 14 +- lib/modules/datasource/packagist/schema.ts | 55 +++--- lib/util/schema-utils.spec.ts | 125 ++++++------ lib/util/schema-utils.ts | 181 +++++++++++------- 5 files changed, 208 insertions(+), 185 deletions(-) diff --git a/lib/modules/datasource/deno/schema.ts b/lib/modules/datasource/deno/schema.ts index 412c379776e896..047bcea03c4af0 100644 --- a/lib/modules/datasource/deno/schema.ts +++ b/lib/modules/datasource/deno/schema.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; import { getSourceUrl as getGithubSourceUrl } from '../../../util/github/url'; -import { looseArray } from '../../../util/schema-utils'; +import { LooseArray } from '../../../util/schema-utils'; import type { Release } from '../types'; export const DenoApiTag = z.object({ @@ -9,13 +9,15 @@ export const DenoApiTag = z.object({ }); export const DenoAPIModuleResponse = z.object({ - tags: looseArray(DenoApiTag).transform((tags) => { - const record: Record = {}; - for (const { kind, value } of tags) { - record[kind] = value; - } - return record; - }), + tags: LooseArray(DenoApiTag) + .transform((tags) => { + const record: Record = {}; + for (const { kind, value } of tags) { + record[kind] = value; + } + return record; + }) + .catch({}), versions: z.array(z.string()), }); diff --git a/lib/modules/datasource/dotnet-version/schema.ts b/lib/modules/datasource/dotnet-version/schema.ts index 0985f96634fc8c..b41350695cce54 100644 --- a/lib/modules/datasource/dotnet-version/schema.ts +++ b/lib/modules/datasource/dotnet-version/schema.ts @@ -1,16 +1,16 @@ import { z } from 'zod'; -import { looseArray } from '../../../util/schema-utils'; +import { LooseArray } from '../../../util/schema-utils'; import type { Release } from '../types'; export const ReleasesIndex = z .object({ - 'releases-index': looseArray( + 'releases-index': LooseArray( z .object({ 'releases.json': z.string(), }) .transform(({ 'releases.json': releasesUrl }) => releasesUrl) - ), + ).catch([]), }) .transform(({ 'releases-index': releasesIndex }) => releasesIndex); @@ -24,11 +24,11 @@ const ReleaseDetails = z.object({ export const DotnetSdkReleases = z .object({ - releases: looseArray( + releases: LooseArray( ReleaseBase.extend({ sdk: ReleaseDetails, }) - ), + ).catch([]), }) .transform(({ releases }): Release[] => releases.map( @@ -42,11 +42,11 @@ export const DotnetSdkReleases = z export const DotnetRuntimeReleases = z .object({ - releases: looseArray( + releases: LooseArray( ReleaseBase.extend({ runtime: ReleaseDetails, }) - ), + ).catch([]), }) .transform(({ releases }): Release[] => releases.map( diff --git a/lib/modules/datasource/packagist/schema.ts b/lib/modules/datasource/packagist/schema.ts index e2929c33e1984b..4a9375c7cb4154 100644 --- a/lib/modules/datasource/packagist/schema.ts +++ b/lib/modules/datasource/packagist/schema.ts @@ -1,11 +1,7 @@ import is from '@sindresorhus/is'; import { z } from 'zod'; import { logger } from '../../../logger'; -import { - looseArray, - looseRecord, - looseValue, -} from '../../../util/schema-utils'; +import { LooseArray, LooseRecord } from '../../../util/schema-utils'; import type { Release, ReleaseResult } from '../types'; export const MinifiedArray = z.array(z.record(z.unknown())).transform((xs) => { @@ -46,20 +42,17 @@ export type MinifiedArray = z.infer; export const ComposerRelease = z.object({ version: z.string(), - homepage: looseValue(z.string()), - source: looseValue(z.object({ url: z.string() })), - time: looseValue(z.string()), - require: looseValue(z.object({ php: z.string() })), + homepage: z.string().nullable().catch(null), + source: z.object({ url: z.string() }).nullable().catch(null), + time: z.string().nullable().catch(null), + require: z.object({ php: z.string() }).nullable().catch(null), }); export type ComposerRelease = z.infer; -const ComposerReleasesLooseArray = looseArray(ComposerRelease); -type ComposerReleasesLooseArray = z.infer; - export const ComposerReleases = z .union([ - MinifiedArray.transform((xs) => ComposerReleasesLooseArray.parse(xs)), - looseRecord(ComposerRelease).transform((map) => Object.values(map)), + MinifiedArray.pipe(LooseArray(ComposerRelease)), + LooseRecord(ComposerRelease).transform((map) => Object.values(map)), ]) .catch([]); export type ComposerReleases = z.infer; @@ -178,17 +171,19 @@ export const RegistryFile = z.intersection( export type RegistryFile = z.infer; export const PackagesResponse = z.object({ - packages: looseRecord(ComposerReleases), + packages: LooseRecord(ComposerReleases).catch({}), }); export type PackagesResponse = z.infer; export const PackagistFile = PackagesResponse.merge( z.object({ - providers: looseRecord(HashSpec).transform((x) => - Object.fromEntries( - Object.entries(x).map(([key, { hash }]) => [key, hash]) + providers: LooseRecord(HashSpec) + .transform((x) => + Object.fromEntries( + Object.entries(x).map(([key, { hash }]) => [key, hash]) + ) ) - ), + .catch({}), }) ); export type PackagistFile = z.infer; @@ -198,15 +193,19 @@ export const RegistryMeta = z (x) => (is.plainObject(x) ? x : {}), PackagistFile.merge( z.object({ - ['includes']: looseRecord(HashSpec).transform((x) => - Object.entries(x).map(([name, { hash }]) => ({ key: name, hash })) - ), - ['provider-includes']: looseRecord(HashSpec).transform((x) => - Object.entries(x).map(([key, { hash }]) => ({ key, hash })) - ), - ['providers-lazy-url']: looseValue(z.string()), - ['providers-url']: looseValue(z.string()), - ['metadata-url']: looseValue(z.string()), + ['includes']: LooseRecord(HashSpec) + .transform((x) => + Object.entries(x).map(([name, { hash }]) => ({ key: name, hash })) + ) + .catch([]), + ['provider-includes']: LooseRecord(HashSpec) + .transform((x) => + Object.entries(x).map(([key, { hash }]) => ({ key, hash })) + ) + .catch([]), + ['providers-lazy-url']: z.string().nullable().catch(null), + ['providers-url']: z.string().nullable().catch(null), + ['metadata-url']: z.string().nullable().catch(null), }) ) ) diff --git a/lib/util/schema-utils.spec.ts b/lib/util/schema-utils.spec.ts index 9d1dfe47d3b99f..a10869342d0523 100644 --- a/lib/util/schema-utils.spec.ts +++ b/lib/util/schema-utils.spec.ts @@ -1,101 +1,90 @@ import { z } from 'zod'; -import { - Json, - Json5, - looseArray, - looseRecord, - looseValue, -} from './schema-utils'; +import { Json, Json5, LooseArray, LooseRecord } from './schema-utils'; describe('util/schema-utils', () => { - describe('looseArray', () => { + describe('LooseArray', () => { it('parses array', () => { - const s = looseArray(z.string()); + const s = LooseArray(z.string()); expect(s.parse(['foo', 'bar'])).toEqual(['foo', 'bar']); }); - it('handles non-array', () => { - const s = looseArray(z.string()); - expect(s.parse({ foo: 'bar' })).toEqual([]); - }); - it('drops wrong items', () => { - const s = looseArray(z.string()); + const s = LooseArray(z.string()); expect(s.parse(['foo', 123, null, undefined, []])).toEqual(['foo']); }); it('runs callback for wrong elements', () => { - let called = false; - const s = looseArray(z.string(), () => { - called = true; + let err: z.ZodError | undefined = undefined; + const Schema = LooseArray(z.string(), { + onError: ({ error }) => { + err = error; + }, }); - expect(s.parse(['foo', 123, 'bar'])).toEqual(['foo', 'bar']); - expect(called).toBeTrue(); - }); - it('runs callback for non-array', () => { - let called = false; - const s = looseArray(z.string(), () => { - called = true; + const res = Schema.parse(['foo', 123, 'bar']); + + expect(res).toEqual(['foo', 'bar']); + expect(err).toMatchObject({ + issues: [ + { + message: 'Expected string, received number', + code: 'invalid_type', + expected: 'string', + received: 'number', + path: [1], + }, + ], }); - expect(s.parse('foobar')).toEqual([]); - expect(called).toBeTrue(); }); }); - describe('looseRecord', () => { + describe('LooseRecord', () => { it('parses record', () => { - const s = looseRecord(z.string()); + const s = LooseRecord(z.string()); expect(s.parse({ foo: 'bar' })).toEqual({ foo: 'bar' }); }); - it('handles non-record', () => { - const s = looseRecord(z.string()); - expect(s.parse(['foo', 'bar'])).toEqual({}); - }); - it('drops wrong items', () => { - const s = looseRecord(z.string()); + const s = LooseRecord(z.string()); expect(s.parse({ foo: 'foo', bar: 123 })).toEqual({ foo: 'foo' }); }); it('runs callback for wrong elements', () => { - let called = false; - const s = looseRecord(z.string(), () => { - called = true; + let err: z.ZodError | undefined = undefined; + const Schema = LooseRecord( + z.object({ foo: z.object({ bar: z.string() }) }), + { + onError: ({ error }) => { + err = error; + }, + } + ); + + const res = Schema.parse({ + aaa: { foo: { bar: 42 } }, + bbb: { foo: { baz: 'asdf' } }, + ccc: { foo: { bar: 'baz' } }, }); - expect(s.parse({ foo: 'foo', bar: 123 })).toEqual({ foo: 'foo' }); - expect(called).toBeTrue(); - }); - it('runs callback for non-record', () => { - let called = false; - const s = looseRecord(z.string(), () => { - called = true; - }); - expect(s.parse('foobar')).toEqual({}); - expect(called).toBeTrue(); - }); - }); - - describe('looseValue', () => { - it('parses value', () => { - const s = looseValue(z.string()); - expect(s.parse('foobar')).toBe('foobar'); - }); - - it('falls back to null wrong value', () => { - const s = looseValue(z.string()); - expect(s.parse(123)).toBeNull(); - }); - - it('runs callback for wrong elements', () => { - let called = false; - const s = looseValue(z.string(), () => { - called = true; + expect(res).toEqual({ ccc: { foo: { bar: 'baz' } } }); + expect(err).toMatchObject({ + issues: [ + { + message: 'Expected string, received number', + code: 'invalid_type', + expected: 'string', + received: 'number', + path: ['aaa', 'foo', 'bar'], + }, + { + message: 'Required', + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['bbb', 'foo', 'bar'], + }, + ], }); - expect(s.parse(123)).toBeNull(); - expect(called).toBeTrue(); }); }); diff --git a/lib/util/schema-utils.ts b/lib/util/schema-utils.ts index 6473f0d6db8fce..752ab2effe3454 100644 --- a/lib/util/schema-utils.ts +++ b/lib/util/schema-utils.ts @@ -2,95 +2,128 @@ import JSON5 from 'json5'; import type { JsonValue } from 'type-fest'; import { z } from 'zod'; -export function looseArray( - schema: T, - catchCallback?: () => void -): z.ZodEffects< - z.ZodCatch>, 'many'>>, - z.TypeOf[], - unknown -> { - type Elem = z.infer; +interface ErrorContext { + error: z.ZodError; + input: T; +} - const nullableSchema = schema.nullable().catch( - catchCallback - ? () => { - catchCallback(); - return null; +interface LooseOpts { + onError?: (err: ErrorContext) => void; +} + +/** + * Works like `z.array()`, but drops wrong elements instead of invalidating the whole array. + * + * **Important**: non-array inputs are still invalid. + * Use `LooseArray(...).catch([])` to handle it. + * + * @param Elem Schema for array elements + * @param onError Callback for errors + * @returns Schema for array + */ +export function LooseArray( + Elem: Schema, + { onError }: LooseOpts = {} +): z.ZodEffects, z.TypeOf[], any[]> { + if (!onError) { + // Avoid error-related computations inside the loop + return z.array(z.any()).transform((input) => { + const output: z.infer[] = []; + for (const x of input) { + const parsed = Elem.safeParse(x); + if (parsed.success) { + output.push(parsed.data); } - : null - ); + } + return output; + }); + } + + return z.array(z.any()).transform((input) => { + const output: z.infer[] = []; + const issues: z.ZodIssue[] = []; + + for (let idx = 0; idx < input.length; idx += 1) { + const x = input[idx]; + const parsed = Elem.safeParse(x); - const arrayOfNullables = z.array(nullableSchema); + if (parsed.success) { + output.push(parsed.data); + continue; + } - const arrayWithFallback = catchCallback - ? arrayOfNullables.catch(() => { - catchCallback(); - return []; - }) - : arrayOfNullables.catch([]); + for (const issue of parsed.error.issues) { + issue.path.unshift(idx); + issues.push(issue); + } + } - const filteredArray = arrayWithFallback.transform((xs) => - xs.filter((x): x is Elem => x !== null) - ); + if (issues.length) { + const error = new z.ZodError(issues); + onError({ error, input }); + } - return filteredArray; + return output; + }); } -export function looseRecord( - schema: T, - catchCallback?: () => void +/** + * Works like `z.record()`, but drops wrong elements instead of invalidating the whole record. + * + * **Important**: non-record inputs other are still invalid. + * Use `LooseRecord(...).catch({})` to handle it. + * + * @param Elem Schema for record values + * @param onError Callback for errors + * @returns Schema for record + */ +export function LooseRecord( + Elem: Schema, + { onError }: LooseOpts> = {} ): z.ZodEffects< - z.ZodCatch>>>, - Record>, - unknown + z.ZodRecord, + Record>, + Record > { - type Elem = z.infer; - - const nullableSchema = schema.nullable().catch( - catchCallback - ? () => { - catchCallback(); - return null; - } - : null - ); - - const recordOfNullables = z.record(nullableSchema); - - const recordWithFallback = catchCallback - ? recordOfNullables.catch(() => { - catchCallback(); - return {}; - }) - : recordOfNullables.catch({}); - - const filteredRecord = recordWithFallback.transform( - (rec): Record => { - for (const key of Object.keys(rec)) { - if (rec[key] === null) { - delete rec[key]; + if (!onError) { + // Avoid error-related computations inside the loop + return z.record(z.any()).transform((input) => { + const output: Record> = {}; + for (const [key, val] of Object.entries(input)) { + const parsed = Elem.safeParse(val); + if (parsed.success) { + output[key] = parsed.data; } } - return rec; + return output; + }); + } + + return z.record(z.any()).transform((input) => { + const output: Record> = {}; + const issues: z.ZodIssue[] = []; + + for (const [key, val] of Object.entries(input)) { + const parsed = Elem.safeParse(val); + + if (parsed.success) { + output[key] = parsed.data; + continue; + } + + for (const issue of parsed.error.issues) { + issue.path.unshift(key); + issues.push(issue); + } } - ); - return filteredRecord; -} + if (issues.length) { + const error = new z.ZodError(issues); + onError({ error, input }); + } -export function looseValue( - schema: z.ZodType, - catchCallback?: () => void -): z.ZodCatch>> { - const nullableSchema = schema.nullable(); - const schemaWithFallback = catchCallback - ? nullableSchema.catch(() => { - catchCallback(); - return null; - }) - : nullableSchema.catch(null); - return schemaWithFallback; + return output; + }); } export const Json = z.string().transform((str, ctx): JsonValue => { From 6990f7fc0936033d92600ff6b19a3169f94ed771 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:05:07 +0200 Subject: [PATCH 092/122] docs(config options): rewrite `forkProcessing` (#21621) Co-authored-by: Rhys Arkins --- docs/usage/configuration-options.md | 36 ++++++++++++++++++++++------- lib/config/options/index.ts | 2 +- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 73f310ab2cb4d6..910e7353c0a680 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -994,17 +994,37 @@ If this option is enabled, reviewers will need to create a new PR if additional ## forkProcessing -By default, Renovate will skip over any repositories that are forked if Renovate is using `autodiscover` mode. -This includes if the forked repository has a Renovate config file in the repo, because Renovate can't tell if that file was added by the original repository or not. -If you wish to enable processing of a forked repository by Renovate when autodiscovering, you need to add `"forkProcessing": "enabled"` to your repository config or run the CLI command with `--fork-processing=enabled`. +By default, Renovate skips any forked repositories when in `autodiscover` mode. +It even skips a forked repository that has a Renovate configuration file, because Renovate doesn't know if that file was added by the forked repository. - -!!! note - Only the `onboardingConfigFileName` (which defaults to `renovate.json`) is supported for `forkProcessing`. You cannot use other filenames because Renovate will use the platform API to check only for the default filename. +**Process a fork in `autodiscover` mode`** + +If you want Renovate to run on a forked repository when in `autodiscover` mode then: + +- Ensure a `renovate.json` config exists with `"forkProcessing": "enabled"` in your repository, +- Or run the CLI command with `--fork-processing=enabled` + +**Process a fork in other modes** + +If you're running Renovate in some other mode, for example when giving a list of repositories to Renovate, but want to skip forked repositories: set `"forkProcessing": "disabled"` in your _global_ config. + +**When using the hosted GitHub Mend Renovate app** + +The behavior of `forkProcessing` depends on how you allow Renovate to run on your account. + +**Renovate runs on all repositories** + +If you allow Renovate to run on all your repositories, `forkProcessing` will be `"disabled"`. +To run Renovate on a fork: add `"forkProcessing": "enabled"` to the forked repository's `renovate.json` file. + +**Renovate runs on selected repositories** + +If you allow Renovate to run on "Selected" repositories, `forkProcessing` will be `"enabled"` for each "Selected" repository. -If you are running in non-autodiscover mode (e.g. supplying a list of repositories to Renovate) but wish to skip forked repositories, you need to configure `"forkProcessing": "disabled"` in your global config. +**Allowed filenames** -If you are using the hosted Mend Renovate then this option will be configured to `"enabled"` automatically if you "Selected" repositories individually but `"disabled"` if you installed for "All" repositories. If you have installed Renovate into "All" repositories but have a fork you want to use, then add `"forkProcessing": "enabled"` to the repository's `renovate.json` file. +Only the `onboardingConfigFileName` (which defaults to `renovate.json`) is supported for `forkProcessing`. +You can't use other filenames because Renovate only checks the default filename when using the Git-hosting platform's API. ## gitAuthor diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index bc8561377fbd7b..698a17056860c8 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -429,7 +429,7 @@ const options: RenovateOptions[] = [ { name: 'forkProcessing', description: - 'Whether to process forked repositories. By default, all forked repositories are skipped when in autodiscover mode.', + 'Whether to process forked repositories. By default, all forked repositories are skipped when in `autodiscover` mode.', stage: 'repository', type: 'string', allowedValues: ['auto', 'enabled', 'disabled'], From bf0e39da5fc7f4e7aec16ef95b15e421426537aa Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 21 Apr 2023 11:24:29 +0200 Subject: [PATCH 093/122] fix(ansible-galaxy): handle git source (#21640) --- lib/modules/manager/ansible-galaxy/collections.ts | 6 +++++- .../manager/ansible-galaxy/extract.spec.ts | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/ansible-galaxy/collections.ts b/lib/modules/manager/ansible-galaxy/collections.ts index 5b1380262f78eb..83ba8e2d66ab2d 100644 --- a/lib/modules/manager/ansible-galaxy/collections.ts +++ b/lib/modules/manager/ansible-galaxy/collections.ts @@ -30,7 +30,11 @@ function interpretLine( } case 'source': { localDependency.managerData.source = value; - localDependency.registryUrls = value ? [value] : []; + if (value?.startsWith('git@')) { + localDependency.packageName = value; + } else { + localDependency.registryUrls = value ? [value] : []; + } break; } case 'type': { diff --git a/lib/modules/manager/ansible-galaxy/extract.spec.ts b/lib/modules/manager/ansible-galaxy/extract.spec.ts index 5f6fab0c364099..0174d8d77fb90b 100644 --- a/lib/modules/manager/ansible-galaxy/extract.spec.ts +++ b/lib/modules/manager/ansible-galaxy/extract.spec.ts @@ -38,6 +38,21 @@ describe('modules/manager/ansible-galaxy/extract', () => { expect(res?.deps[0].currentValue).toBe('1.1.3'); }); + it('extracts git@ dependencies', () => { + const yamlFile = codeBlock`collections: + - name: community.docker + source: git@github.com:ansible-collections/community.docker + type: git + version: 2.7.5`; + const res = extractPackageFile(yamlFile, 'requirements.yml'); + expect(res?.deps).toHaveLength(1); + expect(res?.deps[0].currentValue).toBe('2.7.5'); + expect(res?.deps[0].registryUrls).toBeUndefined(); + expect(res?.deps[0].packageName).toBe( + 'git@github.com:ansible-collections/community.docker' + ); + }); + it('check if an empty file returns null', () => { const res = extractPackageFile('\n', 'requirements.yml'); expect(res).toBeNull(); From d6b567997778d0991735007a8886e0e681a4aef2 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Fri, 21 Apr 2023 09:43:20 -0600 Subject: [PATCH 094/122] chore: update eslint config to allow direct reference of static class functions (#21632) --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 259a035c36bb55..def4988a60d781 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -137,7 +137,7 @@ module.exports = { }, ], - '@typescript-eslint/unbound-method': 2, + '@typescript-eslint/unbound-method': [2, { ignoreStatic: true }], '@typescript-eslint/ban-types': 2, '@renovate/jest-root-describe': 2, From b853af2c7d591a212ec40c67561dee3a59ed6a2c Mon Sep 17 00:00:00 2001 From: Rob Hannay Date: Fri, 21 Apr 2023 16:51:12 +0100 Subject: [PATCH 095/122] fix(fs): permit square brackets `[]` in file paths (#21625) Co-authored-by: Sebastian Poxhofer --- lib/util/fs/util.spec.ts | 1 + lib/util/fs/util.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/util/fs/util.spec.ts b/lib/util/fs/util.spec.ts index c37d971b0673f6..345acf38c21adc 100644 --- a/lib/util/fs/util.spec.ts +++ b/lib/util/fs/util.spec.ts @@ -73,6 +73,7 @@ describe('util/fs/util', () => { ${'/foo'} | ${false} ${'&&'} | ${false} ${';'} | ${true} + ${'./[foo]/bar'} | ${true} `('isValidPath($value) == $expected', ({ value, expected }) => { expect(isValidPath(value, 'cacheDir')).toBe(expected); }); diff --git a/lib/util/fs/util.ts b/lib/util/fs/util.ts index ab7df10fdb1990..d43d6e27b6f27c 100644 --- a/lib/util/fs/util.ts +++ b/lib/util/fs/util.ts @@ -5,7 +5,7 @@ import { logger } from '../../logger'; // http://www.mtu.edu/umc/services/digital/writing/characters-avoid/ // We allow spaces, but not newlines -const restricted = /[[\]#%&<>*?\b\n\r\0!'"|‘“^`]/; +const restricted = /[#%&<>*?\b\n\r\0!'"|‘“^`]/; function assertBaseDir(path: string, baseDir: string): void { if (!path.startsWith(baseDir)) { From be08f1b985dfab78e9ede8b07195ebc3f19ff747 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Fri, 21 Apr 2023 11:19:30 -0600 Subject: [PATCH 096/122] feat: implement `bazel-module` VersioningApi (#21606) --- lib/modules/versioning/api.ts | 2 + .../bazel-module/bzlmod-version.spec.ts | 260 +++++++++++++++ .../versioning/bazel-module/bzlmod-version.ts | 310 ++++++++++++++++++ .../versioning/bazel-module/index.spec.ts | 108 ++++++ lib/modules/versioning/bazel-module/index.ts | 174 ++++++++++ 5 files changed, 854 insertions(+) create mode 100644 lib/modules/versioning/bazel-module/bzlmod-version.spec.ts create mode 100644 lib/modules/versioning/bazel-module/bzlmod-version.ts create mode 100644 lib/modules/versioning/bazel-module/index.spec.ts create mode 100644 lib/modules/versioning/bazel-module/index.ts diff --git a/lib/modules/versioning/api.ts b/lib/modules/versioning/api.ts index 56b21ce27e5092..417c8657a7e2d1 100644 --- a/lib/modules/versioning/api.ts +++ b/lib/modules/versioning/api.ts @@ -1,5 +1,6 @@ import * as amazonMachineImage from './aws-machine-image'; import * as azureRestApi from './azure-rest-api'; +import * as bazelModule from './bazel-module'; import * as cargo from './cargo'; import * as composer from './composer'; import * as conan from './conan'; @@ -40,6 +41,7 @@ export default api; api.set(amazonMachineImage.id, amazonMachineImage.api); api.set(azureRestApi.id, azureRestApi.api); +api.set(bazelModule.id, bazelModule.api); api.set(cargo.id, cargo.api); api.set(composer.id, composer.api); api.set(conan.id, conan.api); diff --git a/lib/modules/versioning/bazel-module/bzlmod-version.spec.ts b/lib/modules/versioning/bazel-module/bzlmod-version.spec.ts new file mode 100644 index 00000000000000..a47c8062b48708 --- /dev/null +++ b/lib/modules/versioning/bazel-module/bzlmod-version.spec.ts @@ -0,0 +1,260 @@ +import { BzlmodVersion, Identifier, VersionPart } from './bzlmod-version'; + +describe('modules/versioning/bazel-module/bzlmod-version', () => { + describe('Identifier', () => { + it('when all digits', () => { + const ident = new Identifier('123'); + expect(ident.asString).toBe('123'); + expect(ident.asNumber).toBe(123); + expect(ident.isDigitsOnly).toBe(true); + }); + + it('when not all digits', () => { + const ident = new Identifier('foo123'); + expect(ident.asString).toBe('foo123'); + expect(ident.asNumber).toBe(0); + expect(ident.isDigitsOnly).toBe(false); + }); + + it.each` + a | b | exp + ${'1'} | ${'1'} | ${true} + ${'1'} | ${'2'} | ${false} + ${'foo1'} | ${'1'} | ${false} + ${'a'} | ${'a'} | ${true} + ${'a'} | ${'b'} | ${false} + `('$a equals $b', ({ a, b, exp }) => { + const aIdent = new Identifier(a); + const bIdent = new Identifier(b); + expect(aIdent.equals(bIdent)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1'} | ${'1'} | ${false} + ${'1'} | ${'2'} | ${true} + ${'2'} | ${'1'} | ${false} + ${'foo1'} | ${'1'} | ${false} + ${'1'} | ${'foo1'} | ${true} + ${'a'} | ${'b'} | ${true} + ${'b'} | ${'a'} | ${false} + `('$a is isLessThan $b', ({ a, b, exp }) => { + const aIdent = new Identifier(a); + const bIdent = new Identifier(b); + expect(aIdent.isLessThan(bIdent)).toBe(exp); + }); + }); + + describe('VersionPart', () => { + it.each` + a | expLen | expStr + ${[]} | ${0} | ${''} + ${['1', new Identifier('0')]} | ${2} | ${'1.0'} + `('VersionPart.create(...$a}', ({ a, expLen, expStr }) => { + const vp = VersionPart.create(...a); + expect(vp).toHaveLength(expLen); + expect(vp.asString).toBe(expStr); + }); + + it.each` + a | exp + ${[]} | ${''} + ${['1', '2', '3']} | ${'1.2.3'} + `('.asString', ({ a, exp }) => { + const avp = VersionPart.create(...a); + expect(avp.asString).toBe(exp); + }); + + it.each` + a | exp + ${[]} | ${0} + ${['2']} | ${2} + ${['1', '2', '3']} | ${1} + `('.major', ({ a, exp }) => { + const avp = VersionPart.create(...a); + expect(avp.major).toBe(exp); + }); + + it.each` + a | exp + ${[]} | ${0} + ${['1', '2', '3']} | ${2} + `('.minor', ({ a, exp }) => { + const avp = VersionPart.create(...a); + expect(avp.minor).toBe(exp); + }); + + it.each` + a | exp + ${[]} | ${0} + ${['1', '2', '3']} | ${3} + `('.patch', ({ a, exp }) => { + const avp = VersionPart.create(...a); + expect(avp.patch).toBe(exp); + }); + + it.each` + a | b | exp + ${['1', '0']} | ${['1', '0']} | ${true} + ${['1', '0']} | ${['1', '1']} | ${false} + ${['foo1', '0']} | ${['foo1', '0']} | ${true} + `('$a equals $b', ({ a, b, exp }) => { + const avp = VersionPart.create(...a); + const bvp = VersionPart.create(...b); + expect(avp.equals(bvp)).toBe(exp); + }); + + it.each` + a | b | exp + ${['1', '0']} | ${['1', '0']} | ${false} + ${['1', '0']} | ${['1', '1']} | ${true} + ${['1', '1']} | ${['1', '0']} | ${false} + ${['a']} | ${['b']} | ${true} + ${[]} | ${['1']} | ${false} + ${['1']} | ${[]} | ${true} + ${['1', '0']} | ${['2']} | ${true} + ${['2']} | ${['1', '0']} | ${false} + ${['1', '9']} | ${['2', '0']} | ${true} + ${['2', '0']} | ${['1', '9']} | ${false} + `('$a is isLessThan $b', ({ a, b, exp }) => { + const avp = VersionPart.create(...a); + const bvp = VersionPart.create(...b); + expect(avp.isLessThan(bvp)).toBe(exp); + }); + + it.each` + a | exp + ${[]} | ${true} + ${['1']} | ${false} + ${['1', '0']} | ${false} + `('.isEmpty', ({ a, exp }) => { + const avp = VersionPart.create(...a); + expect(avp.isEmpty).toBe(exp); + }); + }); + + describe('BzlmodVersion', () => { + it.each` + v | rexp | pexp | bexp + ${'1.2.3'} | ${'1.2.3'} | ${''} | ${''} + ${''} | ${''} | ${''} | ${''} + ${'1.2.3-pre.20230417.1'} | ${'1.2.3'} | ${'pre.20230417.1'} | ${''} + ${'1.2.3+build5'} | ${'1.2.3'} | ${''} | ${'build5'} + ${'1.2.3-pre.20230417.1+build5'} | ${'1.2.3'} | ${'pre.20230417.1'} | ${'build5'} + `('constructor($v)', ({ v, rexp, pexp, bexp }) => { + const bv = new BzlmodVersion(v); + expect(bv.release.asString).toBe(rexp); + expect(bv.prerelease.asString).toBe(pexp); + expect(bv.build.asString).toBe(bexp); + }); + + // Tests replicated from + // https://cs.opensource.google/bazel/bazel/+/master:src/test/java/com/google/devtools/build/lib/bazel/bzlmod/VersionTest.java + it.each` + a + ${'-abc'} + ${'-1_2'} + ${'ßážëł'} + ${'1.0-pre?'} + ${'1.0-pre///'} + ${'1..0'} + ${'1.0-pre..erp'} + `('bad versions $a', ({ a }) => { + expect(() => { + new BzlmodVersion(a); + }).toThrow(); + }); + + it.each` + a | b | ignoreBuild | exp + ${'1.2.3'} | ${'1.2.3'} | ${undefined} | ${true} + ${'1.2.3'} | ${'1.2.4'} | ${undefined} | ${false} + ${'1.2.3'} | ${'1.2.3-pre.20230417.1'} | ${undefined} | ${false} + ${'1.2.3'} | ${'1.2.3+build5'} | ${undefined} | ${false} + ${'1.2.3'} | ${'1.2.3+build5'} | ${false} | ${false} + ${'1.2.3'} | ${'1.2.3+build5'} | ${true} | ${true} + ${'1.2.3'} | ${'1.2.3-pre.20230417.1+build5'} | ${undefined} | ${false} + ${'1.2.3-pre.20230417.1+build5'} | ${'1.2.3-pre.20230417.1+build5'} | ${undefined} | ${true} + ${'1.2.3-pre.20230417.1+build4'} | ${'1.2.3-pre.20230417.1+build5'} | ${undefined} | ${false} + ${'1.2.3'} | ${'foo1.2.3'} | ${undefined} | ${false} + ${'1.2.3'} | ${''} | ${undefined} | ${false} + ${''} | ${''} | ${undefined} | ${true} + `('$a equals $b', ({ a, b, ignoreBuild, exp }) => { + const abv = new BzlmodVersion(a); + const bbv = new BzlmodVersion(b); + expect(abv.equals(bbv, ignoreBuild)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1.2.3'} | ${'1.2.3'} | ${false} + ${'1.2.3'} | ${'1.2.4'} | ${true} + ${'1.2.3'} | ${'1.2.3-pre.20230417.1'} | ${false} + ${'1.2.3-pre.20230417.1'} | ${'1.2.3'} | ${true} + ${''} | ${'1.2.3'} | ${false} + ${'1.2.3'} | ${''} | ${true} + ${''} | ${''} | ${false} + ${'1.2.3-pre.20230417.1+build5'} | ${'1.2.3-pre.20230417.1+build5'} | ${false} + ${'1.2.3-pre.20230417.1+build4'} | ${'1.2.3-pre.20230417.1+build5'} | ${false} + ${'4'} | ${'a'} | ${true} + ${'abc'} | ${'abd'} | ${true} + ${'pre'} | ${'pre.foo'} | ${true} + `('$a is isLessThan $b', ({ a, b, exp }) => { + const abv = new BzlmodVersion(a); + const bbv = new BzlmodVersion(b); + expect(abv.isLessThan(bbv)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1.2.3'} | ${'1.2.3'} | ${false} + ${'1.2.3'} | ${'1.2.4'} | ${false} + ${'1.2.4'} | ${'1.2.3'} | ${true} + `('$a isGreaterThan $b', ({ a, b, exp }) => { + const abv = new BzlmodVersion(a); + const bbv = new BzlmodVersion(b); + expect(abv.isGreaterThan(bbv)).toBe(exp); + }); + + // Tests replicated from + // https://cs.opensource.google/bazel/bazel/+/master:src/test/java/com/google/devtools/build/lib/bazel/bzlmod/VersionTest.java + it.each` + a | b | exp + ${'1.2.3'} | ${'1.2.3'} | ${0} + ${'1.2.3-pre.20230417.1'} | ${'1.2.3'} | ${-1} + ${'1.2.3'} | ${'1.2.3-pre.20230417.1'} | ${1} + ${'2'} | ${'1.0'} | ${1} + ${''} | ${'1.0'} | ${1} + ${''} | ${'1.0+build'} | ${1} + ${''} | ${'1.0-pre'} | ${1} + ${''} | ${'1.0-pre+build-kek.lol'} | ${1} + ${'2.0'} | ${'1.0'} | ${1} + ${'2.0'} | ${'1.9'} | ${1} + ${'11.0'} | ${'3.0'} | ${1} + ${'1.0.1'} | ${'1.0'} | ${1} + ${'1.0.0'} | ${'1.0'} | ${1} + ${'1.0+build2'} | ${'1.0+build3'} | ${0} + ${'1.0'} | ${'1.0-pre'} | ${1} + ${'1.0'} | ${'1.0+build-notpre'} | ${0} + ${'1.0.patch.3'} | ${'1.0'} | ${1} + ${'1.0.patch.3'} | ${'1.0.patch.2'} | ${1} + ${'1.0.patch.3'} | ${'1.0.patch.10'} | ${-1} + ${'1.0.patch3'} | ${'1.0.patch10'} | ${1} + ${'4'} | ${'a'} | ${-1} + ${'abc'} | ${'abd'} | ${-1} + ${'1.0-pre'} | ${'1.0-are'} | ${1} + ${'1.0-3'} | ${'1.0-2'} | ${1} + ${'1.0-pre'} | ${'1.0-pre.foo'} | ${-1} + ${'1.0-pre.3'} | ${'1.0-pre.2'} | ${1} + ${'1.0-pre.10'} | ${'1.0-pre.2'} | ${1} + ${'1.0-pre.10a'} | ${'1.0-pre.2a'} | ${-1} + ${'1.0-pre.99'} | ${'1.0-pre.2a'} | ${-1} + ${'1.0-pre.patch.3'} | ${'1.0-pre.patch.4'} | ${-1} + ${'1.0--'} | ${'1.0----'} | ${-1} + `('defaultCompare($a, $b)', ({ a, b, exp }) => { + const abv = new BzlmodVersion(a); + const bbv = new BzlmodVersion(b); + expect(BzlmodVersion.defaultCompare(abv, bbv)).toBe(exp); + }); + }); +}); diff --git a/lib/modules/versioning/bazel-module/bzlmod-version.ts b/lib/modules/versioning/bazel-module/bzlmod-version.ts new file mode 100644 index 00000000000000..dcc52d6e690564 --- /dev/null +++ b/lib/modules/versioning/bazel-module/bzlmod-version.ts @@ -0,0 +1,310 @@ +/** + * @fileoverview Contains classes that represent a Bazel module version. + */ + +/** + * Represents a single value in a VersionPart. For example, the version string + * `1.2.3` has three identifiers: `1`, `2`, `3`. + */ +export class Identifier { + /** + * Returns the identifier as a string. + */ + readonly asString: string; + + /** + * If the identifier only contains digits, this is the numeric value. + * Otherwise, it is `0`. + */ + readonly asNumber: number; + + /** + * Specifies whether the identifier only contains digits. + */ + readonly isDigitsOnly: boolean; + + /** + * Regular expression used to identify whether an identifier value only + * contains digits. + */ + static readonly digitsOnlyMatcher = /^[0-9]+$/; + + /** + * @param value The value that is parsed for the Bazel module version parts. + */ + constructor(value: string) { + if (value === '') { + throw new Error('Identifier value cannot be empty.'); + } + this.asString = value; + if (Identifier.digitsOnlyMatcher.test(value)) { + this.isDigitsOnly = true; + this.asNumber = parseInt(value); + } else { + this.isDigitsOnly = false; + this.asNumber = 0; + } + } + + /** + * Determines whether this identifier and another identifier are equal. + */ + equals(other: Identifier): boolean { + return this.asString === other.asString; + } + + /** + * Determines whether this identifier comes before the other identifier. + */ + isLessThan(other: Identifier): boolean { + // This logic mirrors the comparison logic in + // https://cs.opensource.google/bazel/bazel/+/refs/heads/master:src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Version.java + // isDigitsOnly: true first + if (this.isDigitsOnly !== other.isDigitsOnly) { + return this.isDigitsOnly; + } + if (this.asNumber !== other.asNumber) { + return this.asNumber < other.asNumber; + } + return this.asString < other.asString; + } +} + +/** + * A collection of {@link Identifier} values that represent a portion of a + * Bazel module version. + */ +export class VersionPart extends Array { + /** + * Creates a {@link VersionPart} populated with the provided identifiers. + */ + static create(...items: Array): VersionPart { + const idents = items.map((item) => { + if (typeof item === 'string') { + return new Identifier(item); + } + return item; + }); + const vp = new VersionPart(); + vp.push(...idents); + return vp; + } + + /** + * The string representation of the version part. + */ + get asString(): string { + return this.map((ident) => ident.asString).join('.'); + } + + /** + * Specifies whether this contains any identifiers. + */ + get isEmpty(): boolean { + return this.length === 0; + } + + /** + * Returns the equivalent of the a Semver major value. + */ + get major(): number { + return this.length > 0 ? this[0].asNumber : 0; + } + + /** + * Returns the equivalent of the a Semver minor value. + */ + get minor(): number { + return this.length > 1 ? this[1].asNumber : 0; + } + + /** + * Returns the equivalent of the a Semver patch value. + */ + get patch(): number { + return this.length > 2 ? this[2].asNumber : 0; + } + + /** + * Determines whether this version part is equal to the other. + */ + equals(other: VersionPart): boolean { + if (this.length !== other.length) { + return false; + } + for (let i = 0; i < this.length; i++) { + const a = this[i]; + const b = other[i]; + if (!a.equals(b)) { + return false; + } + } + return true; + } + + /** + * Determines whether this version part comes before the other. + */ + isLessThan(other: VersionPart): boolean { + // This logic mirrors the comparison logic in + // https://cs.opensource.google/bazel/bazel/+/refs/heads/master:src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Version.java + if (this.equals(other)) { + return false; + } + // Non-empty are first + if (this.length === 0 && other.length !== 0) { + return false; + } + if (other.length === 0 && this.length !== 0) { + return true; + } + const shortestLen = this.length < other.length ? this.length : other.length; + for (let i = 0; i < shortestLen; i++) { + const a = this[i]; + const b = other[i]; + if (!a.equals(b)) { + return a.isLessThan(b); + } + } + return this.length < other.length; + } +} + +// Represents the capture groups produced by BzlmodVersion.versionMatcher. +interface VersionRegexResult { + release: string; + prerelease: string | undefined; + build: string | undefined; +} + +/** + * Represents a version in the Bazel module system. The version format we support is + * `RELEASE[-PRERELEASE][+BUILD]`, where `RELEASE`, `PRERELEASE`, and `BUILD` are + * each a sequence of "identifiers" (defined as a non-empty sequence of ASCII alphanumerical + * characters and hyphens) separated by dots. The `RELEASE` part may not contain hyphens. + * + * Otherwise, this format is identical to SemVer, especially in terms of the comparison algorithm + * (https://semver.org/#spec-item-11). In other words, this format is intentionally looser than + * SemVer; in particular: + * + * - the "release" part isn't limited to exactly 3 segments (major, minor, patch), but can be + * fewer or more; + * - each segment in the "release" part can be identifiers instead of just numbers (so letters + * are also allowed -- although hyphens are not). + * + * Any valid SemVer version is a valid Bazel module version. Additionally, two SemVer versions + * `a` and `b` compare `a < b` iff the same holds when they're compared as Bazel * module versions. + * + * The special "empty string" version can also be used, and compares higher than everything else. + * It signifies that there is a NonRegistryOverride for a module. + */ +export class BzlmodVersion { + readonly release: VersionPart; + readonly prerelease: VersionPart; + readonly build: VersionPart; + + /** + * The regular expression that identifies a valid Bazel module version. + */ + static readonly versionMatcher = + /^(?[a-zA-Z0-9.]+)(?:-(?[a-zA-Z0-9.-]+))?(?:\+(?[a-zA-Z0-9.-]+))?$/; + + /** + * @param version The string that is parsed for the Bazel module version + * values. + */ + constructor(version: string) { + if (version === '') { + this.release = VersionPart.create(); + this.prerelease = VersionPart.create(); + this.build = VersionPart.create(); + return; + } + const vparts: Partial | undefined = + BzlmodVersion.versionMatcher.exec(version)?.groups; + if (!vparts) { + throw new Error(`Invalid Bazel module version: ${version}`); + } + // The regex check above ensures that we will have a release group. + const rparts = vparts.release!.split('.'); + this.release = VersionPart.create(...rparts); + const pparts = vparts.prerelease ? vparts.prerelease.split('.') : []; + this.prerelease = VersionPart.create(...pparts); + // Do not parse the build value. Treat it as a single value. + const bparts = vparts.build ? [vparts.build] : []; + this.build = VersionPart.create(...bparts); + } + + /** + * Specifies whether this is a pre-release version. + */ + get isPrerelease(): boolean { + return !this.prerelease.isEmpty; + } + + // Comparison + + /** + * Determines whether this Bazel module version is equal to the other. + * + * @param other The other version for the comparison. + * @param ignoreBuild? If specified, determines whether the build value is + * evaluated as part of the equality check. This is useful when + * determining precedence. + */ + equals(other: BzlmodVersion, ignoreBuild?: boolean): boolean { + if (ignoreBuild) { + return ( + this.release.equals(other.release) && + this.prerelease.equals(other.prerelease) + ); + } + return ( + this.release.equals(other.release) && + this.prerelease.equals(other.prerelease) && + this.build.equals(other.build) + ); + } + + /** + * Determines whether this Bazel module version comes before the other. + */ + isLessThan(other: BzlmodVersion): boolean { + // This logic mirrors the comparison logic in + // https://cs.opensource.google/bazel/bazel/+/refs/heads/master:src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Version.java + if (this.release.isLessThan(other.release)) { + return true; + } + // Ensure that prerelease is listed before regular releases + if (this.isPrerelease && !other.isPrerelease) { + return true; + } + if (this.prerelease.isLessThan(other.prerelease)) { + return true; + } + // NOTE: We ignore the build value for precedence comparison per the Semver spec. + // https://semver.org/#spec-item-10 + return false; + } + + /** + * Determines whether this Bazel module version comes after the other. + */ + isGreaterThan(other: BzlmodVersion): boolean { + return BzlmodVersion.defaultCompare(this, other) === 1; + } + + /** + * Evaluates two Bazel module versions and returns a value specifying whether + * a < b (-1), a == b (0), or a > b (1). + */ + static defaultCompare(a: BzlmodVersion, b: BzlmodVersion): number { + if (a.equals(b, true)) { + return 0; + } + if (a.isLessThan(b)) { + return -1; + } + return 1; + } +} diff --git a/lib/modules/versioning/bazel-module/index.spec.ts b/lib/modules/versioning/bazel-module/index.spec.ts new file mode 100644 index 00000000000000..21bbd8763e185e --- /dev/null +++ b/lib/modules/versioning/bazel-module/index.spec.ts @@ -0,0 +1,108 @@ +import type { NewValueConfig } from '../types'; +import { api as bzlmod } from '.'; + +describe('modules/versioning/bazel-module/index', () => { + it('getMajor()', () => { + expect(bzlmod.getMajor('1.2.3')).toBe(1); + }); + + it('getMinor()', () => { + expect(bzlmod.getMinor('1.2.3')).toBe(2); + }); + + it('getPatch()', () => { + expect(bzlmod.getPatch('1.2.3')).toBe(3); + }); + + it.each` + a | b | exp + ${'1.2.3'} | ${'1.2.3'} | ${true} + ${'1.2.3'} | ${'1.2.4'} | ${false} + `('equals($a, $b)', ({ a, b, exp }) => { + expect(bzlmod.equals(a, b)).toBe(exp); + // The following are currently aliases for equals. + expect(bzlmod.matches(a, b)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1.2.4'} | ${'1.2.3'} | ${true} + ${'1.2.3'} | ${'1.2.3'} | ${false} + ${'1.2.2'} | ${'1.2.3'} | ${false} + `('isGreaterThan($a, $b)', ({ a, b, exp }) => { + expect(bzlmod.isGreaterThan(a, b)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1.2.4'} | ${'1.2.3'} | ${false} + ${'1.2.3'} | ${'1.2.3'} | ${false} + ${'1.2.2'} | ${'1.2.3'} | ${true} + `('isLessThanRange($a, $b)', ({ a, b, exp }) => { + expect(bzlmod.isLessThanRange!(a, b)).toBe(exp); + }); + + it.each` + vers | rng | exp + ${[]} | ${'1.2.3'} | ${null} + ${['1.1.0', '1.2.0', '2.0.0']} | ${'1.2.0'} | ${'1.2.0'} + ${['1.1.0', '1.2.0', '2.0.0']} | ${'1.2.3'} | ${null} + `('getSatisfyingVersion(vers, rng)', ({ vers, rng, exp }) => { + expect(bzlmod.getSatisfyingVersion(vers, rng)).toBe(exp); + // The following are currently aliases for getSatisfyingVersion. + expect(bzlmod.minSatisfyingVersion(vers, rng)).toBe(exp); + }); + + it.each` + a | b | exp + ${'1.2.3'} | ${'1.2.3'} | ${0} + ${'1.2.3'} | ${'1.2.4'} | ${-1} + ${'1.2.4'} | ${'1.2.3'} | ${1} + `('sortVersions($a, $b)', ({ a, b, exp }) => { + expect(bzlmod.sortVersions(a, b)).toBe(exp); + }); + + it.each` + a | exp + ${'1.2.3'} | ${true} + ${'1.2.3-pre'} | ${false} + ${'1.2.3+build'} | ${true} + `('isStable', ({ a, exp }) => { + expect(bzlmod.isStable(a)).toBe(exp); + }); + + it.each` + a | exp + ${'1.2.3'} | ${true} + ${'1.2.3-pre'} | ${true} + ${'1.2.3+build'} | ${true} + ${'1.2.3-pre+build'} | ${true} + ${'1.2.3-pre+build'} | ${true} + ${'-abc'} | ${false} + ${'1_2'} | ${false} + `('isValid($a)', ({ a, exp }) => { + expect(bzlmod.isValid(a)).toBe(exp); + // The following are currently aliases for isValid. + expect(bzlmod.isCompatible(a)).toBe(exp); + expect(bzlmod.isSingleVersion(a)).toBe(exp); + }); + + it.each` + a | exp + ${'1.2.3'} | ${true} + ${'-abc'} | ${false} + ${null} | ${false} + ${undefined} | ${false} + `('isVersion($a)', ({ a, exp }) => { + expect(bzlmod.isVersion(a)).toBe(exp); + }); + + it('getNewValue()', () => { + const config: NewValueConfig = { + currentValue: '1.0.0', + rangeStrategy: 'auto', + newVersion: '1.0.1', + }; + expect(bzlmod.getNewValue(config)).toBe('1.0.1'); + }); +}); diff --git a/lib/modules/versioning/bazel-module/index.ts b/lib/modules/versioning/bazel-module/index.ts new file mode 100644 index 00000000000000..fbb7febbaa43ec --- /dev/null +++ b/lib/modules/versioning/bazel-module/index.ts @@ -0,0 +1,174 @@ +import type { NewValueConfig, VersioningApi } from '../types'; +import { BzlmodVersion } from './bzlmod-version'; + +export const id = 'bazel-module'; +export const displayName = 'Bazel Module'; +export const urls = ['https://bazel.build/external/module']; +export const supportsRanges = false; + +function getBzlmodVersion(version: string): BzlmodVersion { + return new BzlmodVersion(version); +} + +function getMajor(version: string): null | number { + return getBzlmodVersion(version).release.major; +} + +function getMinor(version: string): null | number { + return getBzlmodVersion(version).release.minor; +} + +function getPatch(version: string): null | number { + return getBzlmodVersion(version).release.patch; +} + +/** + * Check whether `version` and `other` are logically equivalent, even if + * they're not the exact same string. + * + * For example, with Semver the build metadata should be ignored when comparing. + */ +function equals(version: string, other: string): boolean { + const abv = new BzlmodVersion(version); + const bbv = new BzlmodVersion(other); + return abv.equals(bbv); +} + +/** + * Check whether `version` is "greater" than the `other` version. + */ +function isGreaterThan(version: string, other: string): boolean { + const abv = new BzlmodVersion(version); + const bbv = new BzlmodVersion(other); + return abv.isGreaterThan(bbv); +} + +/** + * Check whether the `version` is "less" than all the versions possible in + * the `range`. + */ +function isLessThanRange(version: string, range: string): boolean { + const abv = new BzlmodVersion(version); + const bbv = new BzlmodVersion(range); + return abv.isLessThan(bbv); +} + +/** + * Select the highest version from `versions` that is within the given + * `range` constraint, or return `null` if there is no matching version. + */ +function getSatisfyingVersion( + versions: string[], + range: string +): string | null { + const target = new BzlmodVersion(range); + const result = versions.find((ver) => { + const bv = new BzlmodVersion(ver); + return target.equals(bv); + }); + return result ? range : null; +} + +/** + * Select the lowest version from `versions` that is within the given + * `range` constraint, or return `null` if there is no matching version. + */ +function minSatisfyingVersion( + versions: string[], + range: string +): string | null { + return getSatisfyingVersion(versions, range); +} + +/** + * Calculate a new version constraint based on the current constraint, the + * `rangeStrategy` option, and the current and new version. + */ +function getNewValue({ newVersion }: NewValueConfig): string { + return newVersion; +} + +/** + * Compare two versions. Return `0` if `v1 == v2`, or `1` if `v1` is + * greater, or `-1` if `v2` is greater. + */ +function sortVersions(version: string, other: string): number { + const abv = new BzlmodVersion(version); + const bbv = new BzlmodVersion(other); + return BzlmodVersion.defaultCompare(abv, bbv); +} + +/** + * Check whether the `version` satisfies the `range` constraint. + */ +function matches(version: string, range: string): boolean { + return equals(version, range); +} + +/** + * Check whether the `version` is compatible with the `current` value + * constraint. + */ +function isCompatible(version: string, current?: string): boolean { + return isValid(version); +} + +/** + * Check whether the `version` constraint is not a range, i.e. it only allows a + * single specific version. + */ +function isSingleVersion(version: string): boolean { + return isValid(version); +} + +/** + * Check whether the `version` is considered to be "stable". + * + * Example: in SemVer the version must not have a pre-release marker. + */ +function isStable(version: string): boolean { + const abv = new BzlmodVersion(version); + return !abv.isPrerelease; +} + +/** + * Check whether the `input` is a valid version or a valid version range constraint. + */ +function isValid(input: string): boolean { + try { + new BzlmodVersion(input); + } catch (e) { + return false; + } + return true; +} + +/** + * Check whether the `input` is a valid version string. + */ +function isVersion(input: string | undefined | null): boolean { + if (input === undefined || input === null) { + return false; + } + return isValid(input); +} + +export const api: VersioningApi = { + equals, + getMajor, + getMinor, + getPatch, + isCompatible, + isGreaterThan, + isLessThanRange, + isSingleVersion, + isStable, + isValid, + isVersion, + matches, + getSatisfyingVersion, + minSatisfyingVersion, + getNewValue, + sortVersions, +}; +export default api; From 4caa2bf991d4599d24a4ed1880adfc37cc51ca69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 23:09:49 +0000 Subject: [PATCH 097/122] chore(deps): update github/codeql-action action to v2.3.0 (#21735) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 90d15b59887358..3130613022887a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,7 +30,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/init@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 with: languages: javascript @@ -40,7 +40,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@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/autobuild@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -54,4 +54,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/analyze@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 From b27ec633bcc2c7eb8d8f1a3d878df7e514273ce5 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 22 Apr 2023 06:31:19 +0200 Subject: [PATCH 098/122] fix(onboarding): Revert "feat(onboarding): use cache to check if repo is onboarded" (#21731) --- lib/util/cache/repository/types.ts | 7 --- .../onboarding/branch/check.spec.ts | 49 --------------- .../repository/onboarding/branch/check.ts | 16 +---- .../onboarding/branch/index.spec.ts | 14 ----- .../repository/onboarding/branch/index.ts | 27 +------- .../branch/onboarding-branch-cache.spec.ts | 61 ------------------- .../branch/onboarding-branch-cache.ts | 30 --------- 7 files changed, 2 insertions(+), 202 deletions(-) delete mode 100644 lib/workers/repository/onboarding/branch/check.spec.ts delete mode 100644 lib/workers/repository/onboarding/branch/onboarding-branch-cache.spec.ts delete mode 100644 lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts diff --git a/lib/util/cache/repository/types.ts b/lib/util/cache/repository/types.ts index 6f5cbfe32601da..3146e6e06385c4 100644 --- a/lib/util/cache/repository/types.ts +++ b/lib/util/cache/repository/types.ts @@ -26,12 +26,6 @@ export interface BranchUpgradeCache { sourceUrl?: string; } -export interface OnboardingBranchCache { - onboardingBranch: string; - defaultBranchSha: string; - onboardingBranchSha: string; -} - export interface PrCache { fingerprint: string; /** @@ -106,7 +100,6 @@ export interface RepoCacheData { github?: Record; }; prComments?: Record>; - onboardingBranchCache?: OnboardingBranchCache; } export interface RepoCache { diff --git a/lib/workers/repository/onboarding/branch/check.spec.ts b/lib/workers/repository/onboarding/branch/check.spec.ts deleted file mode 100644 index 6935cc04c1cf3c..00000000000000 --- a/lib/workers/repository/onboarding/branch/check.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { RenovateConfig, git, mocked, partial } from '../../../../../test/util'; -import { logger } from '../../../../logger'; -import * as _cache from '../../../../util/cache/repository'; -import { isOnboarded } from './check'; - -jest.mock('../../../../util/cache/repository'); -jest.mock('../../../../util/git'); - -const cache = mocked(_cache); - -describe('workers/repository/onboarding/branch/check', () => { - const config = partial({ requireConfig: 'required' }); - - it('skips normal onboarding check if onboardingCache is valid', async () => { - cache.getCache.mockReturnValueOnce({ - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - }); - git.getBranchCommit - .mockReturnValueOnce('default-sha') - .mockReturnValueOnce('onboarding-sha'); - const res = await isOnboarded(config); - expect(res).toBeFalse(); - expect(logger.debug).toHaveBeenCalledWith( - 'Onboarding cache is valid. Repo is not onboarded' - ); - }); - - it('continues with normal logic if onboardingCache is invalid', async () => { - cache.getCache.mockReturnValueOnce({ - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - }); - git.getBranchCommit - .mockReturnValueOnce('default-sha-1') - .mockReturnValueOnce('onboarding-sha'); - git.getFileList.mockResolvedValue([]); - await isOnboarded(config); - expect(logger.debug).not.toHaveBeenCalledWith( - 'Onboarding cache is valid. Repo is not onboarded' - ); - }); -}); diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts index 040133d142a540..7f77ded5485d6d 100644 --- a/lib/workers/repository/onboarding/branch/check.ts +++ b/lib/workers/repository/onboarding/branch/check.ts @@ -9,7 +9,7 @@ import { Pr, platform } from '../../../../modules/platform'; import { ensureComment } from '../../../../modules/platform/comment'; import { getCache } from '../../../../util/cache/repository'; import { readLocalFile } from '../../../../util/fs'; -import { getBranchCommit, getFileList } from '../../../../util/git'; +import { getFileList } from '../../../../util/git'; async function findFile(fileName: string): Promise { logger.debug(`findFile(${fileName})`); @@ -61,21 +61,7 @@ export async function isOnboarded(config: RenovateConfig): Promise { logger.debug('Config file will be ignored'); return true; } - const cache = getCache(); - const onboardingBranchCache = cache?.onboardingBranchCache; - // if onboarding cache is present and base branch has not been updated branch is not onboarded - if ( - onboardingBranchCache && - onboardingBranchCache.defaultBranchSha === - getBranchCommit(config.defaultBranch!) && - onboardingBranchCache.onboardingBranchSha === - getBranchCommit(config.onboardingBranch!) - ) { - logger.debug('Onboarding cache is valid. Repo is not onboarded'); - return false; - } - if (cache.configFileName) { logger.debug('Checking cached config file name'); try { diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts index 04fc5ed1856d67..1569fab4c451c3 100644 --- a/lib/workers/repository/onboarding/branch/index.spec.ts +++ b/lib/workers/repository/onboarding/branch/index.spec.ts @@ -21,7 +21,6 @@ import * as _cache from '../../../../util/cache/repository'; import type { FileAddition } from '../../../../util/git/types'; import { OnboardingState } from '../common'; import * as _config from './config'; -import * as _onboardingCache from './onboarding-branch-cache'; import * as _rebase from './rebase'; import { checkOnboardingBranch } from '.'; @@ -33,21 +32,12 @@ jest.mock('../../../../util/cache/repository'); jest.mock('../../../../util/fs'); jest.mock('../../../../util/git'); jest.mock('./config'); -jest.mock('./onboarding-branch-cache'); const cache = mocked(_cache); -const onboardingCache = mocked(_onboardingCache); describe('workers/repository/onboarding/branch/index', () => { describe('checkOnboardingBranch', () => { let config: RenovateConfig; - const dummyCache = { - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - }; beforeEach(() => { memCache.init(); @@ -178,11 +168,9 @@ describe('workers/repository/onboarding/branch/index', () => { }); it('detects repo is onboarded via file', async () => { - cache.getCache.mockReturnValue(dummyCache); git.getFileList.mockResolvedValueOnce(['renovate.json']); const res = await checkOnboardingBranch(config); expect(res.repoIsOnboarded).toBeTrue(); - expect(onboardingCache.deleteOnboardingCache).toHaveBeenCalledTimes(1); // removes onboarding cache when repo is onboarded }); it('handles removed cached file name', async () => { @@ -263,7 +251,6 @@ describe('workers/repository/onboarding/branch/index', () => { }); it('updates onboarding branch', async () => { - cache.getCache.mockReturnValue(dummyCache); git.getFileList.mockResolvedValue(['package.json']); platform.findPr.mockResolvedValue(null); platform.getBranchPr.mockResolvedValueOnce(mock()); @@ -272,7 +259,6 @@ describe('workers/repository/onboarding/branch/index', () => { expect(res.repoIsOnboarded).toBeFalse(); expect(res.branchList).toEqual(['renovate/configure']); expect(git.checkoutBranch).toHaveBeenCalledTimes(1); - expect(onboardingCache.setOnboardingCache).toHaveBeenCalledTimes(1); // update onboarding cache expect(scm.commitAndPush).toHaveBeenCalledTimes(0); }); diff --git a/lib/workers/repository/onboarding/branch/index.ts b/lib/workers/repository/onboarding/branch/index.ts index c8f50ecefa8575..2add4def7375e7 100644 --- a/lib/workers/repository/onboarding/branch/index.ts +++ b/lib/workers/repository/onboarding/branch/index.ts @@ -8,21 +8,13 @@ import { } from '../../../../constants/error-messages'; import { logger } from '../../../../logger'; import { Pr, platform } from '../../../../modules/platform'; -import { - checkoutBranch, - getBranchCommit, - setGitAuthor, -} from '../../../../util/git'; +import { checkoutBranch, setGitAuthor } from '../../../../util/git'; import { extractAllDependencies } from '../../extract'; import { mergeRenovateConfig } from '../../init/merge'; import { OnboardingState } from '../common'; import { getOnboardingPr, isOnboarded } from './check'; import { getOnboardingConfig } from './config'; import { createOnboardingBranch } from './create'; -import { - deleteOnboardingCache, - setOnboardingCache, -} from './onboarding-branch-cache'; import { rebaseOnboardingBranch } from './rebase'; export async function checkOnboardingBranch( @@ -34,9 +26,6 @@ export async function checkOnboardingBranch( const repoIsOnboarded = await isOnboarded(config); if (repoIsOnboarded) { logger.debug('Repo is onboarded'); - - // delete onboarding cache - deleteOnboardingCache(); return { ...config, repoIsOnboarded }; } if (config.isFork && config.forkProcessing !== 'enabled') { @@ -58,13 +47,6 @@ export async function checkOnboardingBranch( { branch: config.onboardingBranch, commit, onboarding: true }, 'Branch updated' ); - - // update onboarding cache - setOnboardingCache( - config.onboardingBranch!, - getBranchCommit(config.defaultBranch!)!, - commit - ); } // istanbul ignore if if (platform.refreshPr) { @@ -96,13 +78,6 @@ export async function checkOnboardingBranch( { branch: onboardingBranch, commit, onboarding: true }, 'Branch created' ); - - // set onboarding branch cache - setOnboardingCache( - config.onboardingBranch!, - getBranchCommit(config.defaultBranch!)!, - commit - ); } } if (!GlobalConfig.get('dryRun')) { diff --git a/lib/workers/repository/onboarding/branch/onboarding-branch-cache.spec.ts b/lib/workers/repository/onboarding/branch/onboarding-branch-cache.spec.ts deleted file mode 100644 index 10307e5a3ec374..00000000000000 --- a/lib/workers/repository/onboarding/branch/onboarding-branch-cache.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { mocked } from '../../../../../test/util'; -import * as _cache from '../../../../util/cache/repository'; -import type { RepoCacheData } from '../../../../util/cache/repository/types'; -import { - deleteOnboardingCache, - setOnboardingCache, -} from './onboarding-branch-cache'; - -jest.mock('../../../../util/cache/repository'); -const cache = mocked(_cache); - -describe('workers/repository/onboarding/branch/onboarding-branch-cache', () => { - it('sets new cache', () => { - const dummyCache = {} satisfies RepoCacheData; - cache.getCache.mockReturnValueOnce(dummyCache); - setOnboardingCache('configure/renovate', 'default-sha', 'onboarding-sha'); - expect(dummyCache).toEqual({ - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - }); - }); - - it('updates old cache', () => { - const dummyCache = { - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - } satisfies RepoCacheData; - cache.getCache.mockReturnValueOnce(dummyCache); - setOnboardingCache( - 'configure/renovate', - 'default-sha-1', - 'onboarding-sha-1' - ); - expect(dummyCache).toEqual({ - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha-1', - onboardingBranchSha: 'onboarding-sha-1', - }, - }); - }); - - it('deletes cache', () => { - const dummyCache = { - onboardingBranchCache: { - onboardingBranch: 'configure/renovate', - defaultBranchSha: 'default-sha', - onboardingBranchSha: 'onboarding-sha', - }, - } satisfies RepoCacheData; - cache.getCache.mockReturnValueOnce(dummyCache); - deleteOnboardingCache(); - expect(dummyCache.onboardingBranchCache).toBeUndefined(); - }); -}); diff --git a/lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts b/lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts deleted file mode 100644 index a6ecfcb29677b2..00000000000000 --- a/lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { logger } from '../../../../logger'; -import { getCache } from '../../../../util/cache/repository'; - -export function setOnboardingCache( - onboardingBranch: string, - defaultBranchSha: string, - onboardingBranchSha: string -): void { - const cache = getCache(); - const onboardingCache = { - onboardingBranch, - defaultBranchSha, - onboardingBranchSha, - }; - if (cache.onboardingBranchCache) { - logger.debug('Update Onboarding Cache'); - } else { - logger.debug('Create Onboarding Cache'); - } - cache.onboardingBranchCache = onboardingCache; -} - -export function deleteOnboardingCache(): void { - const cache = getCache(); - - if (cache?.onboardingBranchCache) { - logger.debug('Delete Onboarding Cache'); - delete cache.onboardingBranchCache; - } -} From 6bd1277c89ea2d7b7aac39bbab199d63b5554e14 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 23 Apr 2023 09:33:49 +0300 Subject: [PATCH 099/122] fix(manager/gradle): Filter false positives out of extracted deps (#21753) --- lib/modules/manager/gradle/parser.spec.ts | 21 ++++++------------- lib/modules/manager/gradle/parser/common.ts | 13 ------------ lib/modules/manager/gradle/parser/handlers.ts | 5 ----- lib/modules/manager/gradle/utils.spec.ts | 11 ++++------ lib/modules/manager/gradle/utils.ts | 13 ++++++++++-- 5 files changed, 21 insertions(+), 42 deletions(-) diff --git a/lib/modules/manager/gradle/parser.spec.ts b/lib/modules/manager/gradle/parser.spec.ts index cb39d618c21c3a..a0fab69af0b064 100644 --- a/lib/modules/manager/gradle/parser.spec.ts +++ b/lib/modules/manager/gradle/parser.spec.ts @@ -737,21 +737,12 @@ describe('modules/manager/gradle/parser', () => { describe('heuristic dependency matching', () => { test.each` - input | output - ${'("foo", "bar", "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} - ${'("foo", "bar", "1.2.3", "4.5.6")'} | ${null} - ${'(["foo", "bar", "1.2.3"])'} | ${null} - ${'someMethod("foo", "bar", "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} - ${'createXmlValueRemover("defaults", "integer", "integer")'} | ${{ depName: 'defaults:integer', currentValue: 'integer', skipReason: 'ignored' }} - ${'events("passed", "skipped", "failed")'} | ${{ depName: 'passed:skipped', currentValue: 'failed', skipReason: 'ignored' }} - ${'args("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'arrayOf("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'listOf("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'mutableListOf("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'setOf("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'mutableSetOf("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'stages("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} - ${'mapScalar("foo", "bar", "baz")'} | ${{ depName: 'foo:bar', currentValue: 'baz', skipReason: 'ignored' }} + input | output + ${'("foo", "bar", "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'("foo", "bar", "1.2.3", "4.5.6")'} | ${null} + ${'(["foo", "bar", "1.2.3"])'} | ${null} + ${'someMethod("foo", "bar", "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'listOf("foo", "bar", "baz")'} | ${null} `('$input', ({ input, output }) => { const { deps } = parseGradle(input); expect(deps).toMatchObject([output].filter(is.truthy)); diff --git a/lib/modules/manager/gradle/parser/common.ts b/lib/modules/manager/gradle/parser/common.ts index 43a1032311811d..6f5c17790d20c0 100644 --- a/lib/modules/manager/gradle/parser/common.ts +++ b/lib/modules/manager/gradle/parser/common.ts @@ -35,19 +35,6 @@ export const GRADLE_PLUGINS = { spotbugs: ['toolVersion', 'com.github.spotbugs:spotbugs'], }; -export const ANNOYING_METHODS: ReadonlySet = new Set([ - 'createXmlValueRemover', - 'events', - 'args', - 'arrayOf', - 'listOf', - 'mutableListOf', - 'setOf', - 'mutableSetOf', - 'stages', // https://github.com/ajoberstar/reckon, - 'mapScalar', // https://github.com/apollographql/apollo-kotlin -]); - export function storeVarToken(ctx: Ctx, node: lexer.Token): Ctx { ctx.varTokens.push(node); return ctx; diff --git a/lib/modules/manager/gradle/parser/handlers.ts b/lib/modules/manager/gradle/parser/handlers.ts index 4ffbb70a0e319e..273ffeabbe09bc 100644 --- a/lib/modules/manager/gradle/parser/handlers.ts +++ b/lib/modules/manager/gradle/parser/handlers.ts @@ -8,7 +8,6 @@ import type { parseGradle as parseGradleCallback } from '../parser'; import type { Ctx, GradleManagerData } from '../types'; import { parseDependencyString } from '../utils'; import { - ANNOYING_METHODS, GRADLE_PLUGINS, REGISTRY_URLS, findVariable, @@ -199,10 +198,6 @@ export function handleLongFormDep(ctx: Ctx): Ctx { }; } - if (methodName?.[0] && ANNOYING_METHODS.has(methodName[0].value)) { - dep.skipReason = 'ignored'; - } - ctx.deps.push(dep); return ctx; diff --git a/lib/modules/manager/gradle/utils.spec.ts b/lib/modules/manager/gradle/utils.spec.ts index 0a3ee6c05ef0d3..ac8bfb824d15f8 100644 --- a/lib/modules/manager/gradle/utils.spec.ts +++ b/lib/modules/manager/gradle/utils.spec.ts @@ -13,13 +13,11 @@ describe('modules/manager/gradle/utils', () => { it('versionLikeSubstring', () => { [ '1.2.3', - 'foobar', '[1.0,2.0]', '(,2.0[', '2.1.1.RELEASE', '1.0.+', '2022-05-10_55', - 'latest', ].forEach((input) => { expect(versionLikeSubstring(input)).toEqual(input); expect(versionLikeSubstring(`${input}'`)).toEqual(input); @@ -31,12 +29,14 @@ describe('modules/manager/gradle/utils', () => { expect(versionLikeSubstring('')).toBeNull(); expect(versionLikeSubstring(undefined)).toBeNull(); expect(versionLikeSubstring(null)).toBeNull(); + expect(versionLikeSubstring('foobar')).toBeNull(); + expect(versionLikeSubstring('latest')).toBeNull(); }); it('isDependencyString', () => { expect(isDependencyString('foo:bar:1.2.3')).toBeTrue(); expect(isDependencyString('foo.foo:bar.bar:1.2.3')).toBeTrue(); - expect(isDependencyString('foo:bar:baz:qux')).toBeTrue(); + expect(isDependencyString('foo:bar:baz:qux')).toBeFalse(); expect(isDependencyString('foo.bar:baz:1.2.3')).toBeTrue(); expect(isDependencyString('foo.bar:baz:1.2.3:linux-cpu-x86_64')).toBeTrue(); expect(isDependencyString('foo.bar:baz:1.2.+')).toBeTrue(); @@ -57,10 +57,6 @@ describe('modules/manager/gradle/utils', () => { depName: 'foo.foo:bar.bar', currentValue: '1.2.3', }); - expect(parseDependencyString('foo:bar:baz:qux')).toMatchObject({ - depName: 'foo:bar', - currentValue: 'baz', - }); expect(parseDependencyString('foo.bar:baz:1.2.3')).toMatchObject({ depName: 'foo.bar:baz', currentValue: '1.2.3', @@ -69,6 +65,7 @@ describe('modules/manager/gradle/utils', () => { depName: 'foo:bar', currentValue: '1.2.+', }); + expect(parseDependencyString('foo:bar:baz:qux')).toBeNull(); expect(parseDependencyString('foo:bar:baz:qux:quux')).toBeNull(); expect(parseDependencyString("foo:bar:1.2.3'")).toBeNull(); expect(parseDependencyString('foo:bar:1.2.3"')).toBeNull(); diff --git a/lib/modules/manager/gradle/utils.ts b/lib/modules/manager/gradle/utils.ts index c2c898b3806455..bed8720663dc5f 100644 --- a/lib/modules/manager/gradle/utils.ts +++ b/lib/modules/manager/gradle/utils.ts @@ -18,8 +18,17 @@ const versionLikeRegex = regEx('^(?[-_.\\[\\](),a-zA-Z0-9+]+)'); export function versionLikeSubstring( input: string | null | undefined ): string | null { - const match = input ? versionLikeRegex.exec(input) : null; - return match?.groups?.version ?? null; + if (!input) { + return null; + } + + const match = versionLikeRegex.exec(input); + const version = match?.groups?.version; + if (!version || !regEx(/\d/).test(version)) { + return null; + } + + return version; } export function isDependencyString(input: string): boolean { From 8d8c3d11fd06b61b85d2c49f3a36352780067d72 Mon Sep 17 00:00:00 2001 From: Noam Dolovich Date: Sun, 23 Apr 2023 09:27:59 +0300 Subject: [PATCH 100/122] fix(platform/azure): improve getPolicyConfigurations latency via mergePolicyGuid filter (#21723) --- lib/modules/platform/azure/azure-helper.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/modules/platform/azure/azure-helper.ts b/lib/modules/platform/azure/azure-helper.ts index 8369779fad547e..f357c3c18a648d 100644 --- a/lib/modules/platform/azure/azure-helper.ts +++ b/lib/modules/platform/azure/azure-helper.ts @@ -141,12 +141,11 @@ export async function getMergeMethod( }; const policyConfigurations = ( - await (await azureApi.policyApi()).getPolicyConfigurations(project) + await ( + await azureApi.policyApi() + ).getPolicyConfigurations(project, mergePolicyGuid) ) - .filter( - (p) => - p.settings.scope.some(isRelevantScope) && p.type?.id === mergePolicyGuid - ) + .filter((p) => p.settings.scope.some(isRelevantScope)) .map((p) => p.settings)[0]; logger.trace( From 75ac52ba086117d48492b4af570db8b82ec36cda Mon Sep 17 00:00:00 2001 From: Liora Milbaum Date: Sun, 23 Apr 2023 09:33:11 +0300 Subject: [PATCH 101/122] fix(datasource/docker): omit empty service search key from auth url (#21755) --- lib/modules/datasource/docker/index.spec.ts | 2 +- lib/modules/datasource/docker/index.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index d3317515d050d0..17ce2dee16a6c4 100644 --- a/lib/modules/datasource/docker/index.spec.ts +++ b/lib/modules/datasource/docker/index.spec.ts @@ -546,7 +546,7 @@ describe('modules/datasource/docker/index', () => { .reply(200, {}, { 'docker-content-digest': 'some-digest' }); httpMock .scope(authUrl) - .get('/token?service=&scope=repository:library/some-other-dep:pull') + .get('/token?scope=repository:library/some-other-dep:pull') .reply(200, { access_token: 'test' }); const res = await getDigest( { datasource: 'docker', packageName: 'some-other-dep' }, diff --git a/lib/modules/datasource/docker/index.ts b/lib/modules/datasource/docker/index.ts index ef96dc8c8668ad..5d96adcd6e0747 100644 --- a/lib/modules/datasource/docker/index.ts +++ b/lib/modules/datasource/docker/index.ts @@ -161,10 +161,13 @@ export async function getAuthHeaders( } let service = authenticateHeader.params.service; - if (!is.string(service)) { - service = ''; + if (is.string(service)) { + service = `service=${service}&`; + } else { + service = ``; } - const authUrl = `${authenticateHeader.params.realm}?service=${service}&scope=${scope}`; + + const authUrl = `${authenticateHeader.params.realm}?${service}scope=${scope}`; logger.trace( { registryHost, dockerRepository, authUrl }, `Obtaining docker registry token` From ad0a2e144d81d4ff721c36c9be2ee4a31adbbcf6 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 23 Apr 2023 11:21:09 +0200 Subject: [PATCH 102/122] fix(versioning/composer): compatible composer numeric soft (#21744) --- lib/modules/versioning/composer/index.spec.ts | 10 ++++---- lib/modules/versioning/composer/index.ts | 23 ++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/modules/versioning/composer/index.spec.ts b/lib/modules/versioning/composer/index.spec.ts index f5ad722ef60478..63eaed7e24706d 100644 --- a/lib/modules/versioning/composer/index.spec.ts +++ b/lib/modules/versioning/composer/index.spec.ts @@ -84,8 +84,9 @@ describe('modules/versioning/composer/index', () => { test.each` versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~6'} | ${null} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~4'} | ${'4.2.0'} - ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'4.2.0'} + ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'v4.2.0'} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~0.4'} | ${'0.5.0'} ${['0.4.0', '0.5.0', '4.0.0-beta1', '4.0.0-beta2', '4.2.0-beta1', '4.2.0-beta2', '5.0.0']} | ${'~4@beta'} | ${'4.0.0-beta2'} `( @@ -97,8 +98,9 @@ describe('modules/versioning/composer/index', () => { test.each` versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~6'} | ${null} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~4'} | ${'4.0.0'} - ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'4.0.0'} + ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'v4.0.0'} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~0.4'} | ${'0.4.0'} ${['0.4.0', '0.5.0', '4.0.0-beta1', '4.0.0', '4.2.0-beta1', '4.2.0-beta2', '5.0.0']} | ${'~4@beta'} | ${'4.0.0-beta1'} `( @@ -195,8 +197,8 @@ describe('modules/versioning/composer/index', () => { ); test.each` - versions | expected - ${['1.2.3-beta', '2.0.1', '1.3.4', '1.2.3']} | ${['1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']} + versions | expected + ${['1.2.3-beta', '1.0.0-alpha24', '2.0.1', '1.3.4', '1.0.0-alpha9', '1.2.3']} | ${['1.0.0-alpha9', '1.0.0-alpha24', '1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']} `('$versions -> sortVersions -> $expected ', ({ versions, expected }) => { expect(versions.sort(semver.sortVersions)).toEqual(expected); }); diff --git a/lib/modules/versioning/composer/index.ts b/lib/modules/versioning/composer/index.ts index 1c1db9884b2d42..7fc94cd290cc9c 100644 --- a/lib/modules/versioning/composer/index.ts +++ b/lib/modules/versioning/composer/index.ts @@ -93,6 +93,7 @@ function composer2npm(input: string): string { return output + stability; }) + .map((part) => part.replace(/([a-z])([0-9])/gi, '$1.$2')) .join(' || '); } @@ -147,20 +148,26 @@ function getSatisfyingVersion( versions: string[], range: string ): string | null { - return npm.getSatisfyingVersion( - versions.map(composer2npm), - composer2npm(range) - ); + const npmVersions = versions.map(composer2npm); + const npmVersion = npm.getSatisfyingVersion(npmVersions, composer2npm(range)); + if (!npmVersion) { + return null; + } + // get index of npmVersion in npmVersions + return versions[npmVersions.indexOf(npmVersion)] ?? npmVersion; } function minSatisfyingVersion( versions: string[], range: string ): string | null { - return npm.minSatisfyingVersion( - versions.map(composer2npm), - composer2npm(range) - ); + const npmVersions = versions.map(composer2npm); + const npmVersion = npm.minSatisfyingVersion(npmVersions, composer2npm(range)); + if (!npmVersion) { + return null; + } + // get index of npmVersion in npmVersions + return versions[npmVersions.indexOf(npmVersion)] ?? npmVersion; } function subset(subRange: string, superRange: string): boolean | undefined { From 888cbda358dd3523eae6172fe5684e697c9b4601 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 23 Apr 2023 12:21:23 +0300 Subject: [PATCH 103/122] refactor(workers): Extract lookup stats helper (#21762) --- lib/workers/repository/process/fetch.ts | 28 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index badf45d48bff41..92ae3315d113fc 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -21,11 +21,24 @@ import { PackageFiles } from '../package-files'; import { lookupUpdates } from './lookup'; import type { LookupUpdateConfig } from './lookup/types'; +async function withLookupStats( + datasource: string, + callback: () => Promise +): Promise { + const start = Date.now(); + const result = await callback(); + const duration = Date.now() - start; + const lookups = memCache.get('lookup-stats') || []; + lookups.push({ datasource, duration }); + memCache.set('lookup-stats', lookups); + return result; +} + async function fetchDepUpdates( packageFileConfig: RenovateConfig & PackageFile, indep: PackageDependency ): Promise { - let dep = clone(indep); + const dep = clone(indep); dep.updates = []; if (is.string(dep.depName)) { dep.depName = dep.depName.trim(); @@ -58,15 +71,10 @@ async function fetchDepUpdates( } else { if (depConfig.datasource) { try { - const start = Date.now(); - dep = { - ...dep, - ...(await lookupUpdates(depConfig as LookupUpdateConfig)), - }; - const duration = Date.now() - start; - const lookups = memCache.get('lookup-stats') || []; - lookups.push({ datasource: depConfig.datasource, duration }); - memCache.set('lookup-stats', lookups); + const updateResult = await withLookupStats(depConfig.datasource, () => + lookupUpdates(depConfig as LookupUpdateConfig) + ); + Object.assign(dep, updateResult); } catch (err) { if ( packageFileConfig.repoIsOnboarded || From c2e7388860113e994ae31fdf76b53a68290426c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Apr 2023 11:27:24 +0000 Subject: [PATCH 104/122] build(deps): update dependency commander to v10.0.1 (#21743) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 1fa6e8035d0f67..56ab9cbc6baf22 100644 --- a/package.json +++ b/package.json @@ -175,7 +175,7 @@ "chalk": "4.1.2", "changelog-filename-regex": "2.0.1", "clean-git-ref": "2.0.1", - "commander": "10.0.0", + "commander": "10.0.1", "conventional-commits-detector": "1.0.3", "crypto-random-string": "3.3.1", "deepmerge": "4.3.1", diff --git a/yarn.lock b/yarn.lock index 07425013ab161b..b7ea037ae1fd99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4245,12 +4245,7 @@ columnify@^1.6.0: strip-ansi "^6.0.1" wcwidth "^1.0.0" -commander@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" - integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== - -commander@^10.0.0: +commander@10.0.1, commander@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== From 454f2597cbb8a6be5855f6a97cbf2519d261e213 Mon Sep 17 00:00:00 2001 From: Jon Finerty Date: Sun, 23 Apr 2023 18:52:49 +0100 Subject: [PATCH 105/122] feat(managers/asdf): Add poetry support in asdf manager (#21765) --- lib/modules/manager/asdf/extract.spec.ts | 7 +++++++ lib/modules/manager/asdf/index.ts | 8 +++++--- lib/modules/manager/asdf/upgradeable-tooling.ts | 8 ++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/modules/manager/asdf/extract.spec.ts b/lib/modules/manager/asdf/extract.spec.ts index fa2b01f241c308..bc77ae464bd7a4 100644 --- a/lib/modules/manager/asdf/extract.spec.ts +++ b/lib/modules/manager/asdf/extract.spec.ts @@ -77,6 +77,7 @@ ocaml 4.14.0 perl 5.37.5 php 8.1.12 pnpm 7.26.2 +poetry 1.3.2 pulumi 3.57.1 python 3.11.0 ruby 3.1.2 @@ -317,6 +318,12 @@ dummy 1.2.3 depName: 'pnpm', versioning: 'semver', }, + { + currentValue: '1.3.2', + datasource: 'pypi', + packageName: 'poetry', + depName: 'poetry', + }, { currentValue: '3.57.1', datasource: 'github-releases', diff --git a/lib/modules/manager/asdf/index.ts b/lib/modules/manager/asdf/index.ts index 081133ee265f3b..679ae29b93f6eb 100644 --- a/lib/modules/manager/asdf/index.ts +++ b/lib/modules/manager/asdf/index.ts @@ -7,6 +7,7 @@ import { HexpmBobDatasource } from '../../datasource/hexpm-bob'; import { JavaVersionDatasource } from '../../datasource/java-version'; import { NodeVersionDatasource } from '../../datasource/node-version'; import { NpmDatasource } from '../../datasource/npm'; +import { PypiDatasource } from '../../datasource/pypi'; import { RubyVersionDatasource } from '../../datasource/ruby-version'; export { extractPackageFile } from './extract'; @@ -18,14 +19,15 @@ export const defaultConfig = { }; export const supportedDatasources = [ - JavaVersionDatasource.id, + DartVersionDatasource.id, DockerDatasource.id, + FlutterVersionDatasource.id, GithubReleasesDatasource.id, GithubTagsDatasource.id, HexpmBobDatasource.id, + JavaVersionDatasource.id, NodeVersionDatasource.id, NpmDatasource.id, + PypiDatasource.id, RubyVersionDatasource.id, - DartVersionDatasource.id, - FlutterVersionDatasource.id, ]; diff --git a/lib/modules/manager/asdf/upgradeable-tooling.ts b/lib/modules/manager/asdf/upgradeable-tooling.ts index c3557c23abc88f..d076f0913e22ca 100644 --- a/lib/modules/manager/asdf/upgradeable-tooling.ts +++ b/lib/modules/manager/asdf/upgradeable-tooling.ts @@ -7,6 +7,7 @@ import { HexpmBobDatasource } from '../../datasource/hexpm-bob'; import { JavaVersionDatasource } from '../../datasource/java-version'; import { NodeVersionDatasource } from '../../datasource/node-version'; import { NpmDatasource } from '../../datasource/npm'; +import { PypiDatasource } from '../../datasource/pypi'; import { RubyVersionDatasource } from '../../datasource/ruby-version'; import * as regexVersioning from '../../versioning/regex'; import * as semverVersioning from '../../versioning/semver'; @@ -300,6 +301,13 @@ export const upgradeableTooling: Record = { versioning: semverVersioning.id, }, }, + poetry: { + asdfPluginUrl: 'https://github.com/asdf-community/asdf-poetry', + config: { + datasource: PypiDatasource.id, + packageName: 'poetry', + }, + }, pulumi: { asdfPluginUrl: 'https://github.com/canha/asdf-pulumi.git', config: { From 9ceba31f0a6d14186215326f04d0c349bcc3284e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 00:34:27 +0000 Subject: [PATCH 106/122] docs: update references to renovate/renovate to v35.58.0 (#21770) 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 a5b2dcc1772315..07973d42280e6a 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -388,7 +388,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:35.48.2 +FROM renovate/renovate:35.58.0 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From e13e09904de6960ecf8f8d82a09e33b8f80f11f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 00:41:40 +0000 Subject: [PATCH 107/122] chore(deps): lock file maintenance (#21771) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 319 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 185 insertions(+), 134 deletions(-) diff --git a/yarn.lock b/yarn.lock index b7ea037ae1fd99..390de7f7c3860f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1926,10 +1926,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^6.2.7": - version "6.2.7" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.7.tgz#434b66fb90c598b25d4d0ba116b124bf504d6e65" - integrity sha512-7Gp1lZEweW1GzoMOo0Z10zAm4SKZsVYUWtFSCrahXmV5H3Mp4Pgwg1nIgkXj4LkjqT+fLsXmjK6rQBauDH64Jg== +"@npmcli/arborist@^6.2.8": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.8.tgz#bfc53ab964b157fd220c3c138b88e958c209be8b" + integrity sha512-z8qQIbuZBk476/S5rATAS4zwWb7QHzYbtH0468K9c8gfxcH6VeZF5a6MqUiEcdg41OWwiBHqq0I65jdH2Alidw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/fs" "^3.1.0" @@ -1963,20 +1963,20 @@ semver "^7.3.7" ssri "^10.0.1" treeverse "^3.0.0" - walk-up-path "^1.0.0" + walk-up-path "^3.0.1" -"@npmcli/config@^6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.1.5.tgz#79f6e84dbe13f0ad14133898cb4cb904cab7097a" - integrity sha512-nUjJ4+Xo2/XWoq5wsF9ajRtm5xADlLjtyBQGdGlWFRgHpYggZtxQP1XteM6SvEQsHI3P9vDyLGIYO0MlNrQZwQ== +"@npmcli/config@^6.1.6": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.1.6.tgz#2a7f3cb63a23242f80063d4625e6754969681440" + integrity sha512-TM5dwgaz3Un2T5rdHQ6lX+Jj3TQxK6aV1U5OLByZiUS5qnA0NgC6U0aSESQVy80emToz8dtX3aniXD24wRnBaw== dependencies: "@npmcli/map-workspaces" "^3.0.2" - ini "^3.0.0" + ini "^4.1.0" nopt "^7.0.0" proc-log "^3.0.0" read-package-json-fast "^3.0.2" semver "^7.3.5" - walk-up-path "^1.0.0" + walk-up-path "^3.0.1" "@npmcli/disparity-colors@^3.0.0": version "3.0.0" @@ -2130,10 +2130,10 @@ "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== +"@octokit/openapi-types@^17.0.0": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.0.0.tgz#7356d287f48b20e9a1f497ef8dfaabdff9cf8622" + integrity sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog== "@octokit/plugin-paginate-rest@^6.0.0": version "6.0.0" @@ -2187,11 +2187,11 @@ "@octokit/plugin-rest-endpoint-methods" "^7.0.0" "@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.1.2.tgz#1a8d35b1f4a3d2ad386e223f249dd5f7506979c1" + integrity sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ== dependencies: - "@octokit/openapi-types" "^16.0.0" + "@octokit/openapi-types" "^17.0.0" "@one-ini/wasm@0.1.1": version "0.1.1" @@ -2761,13 +2761,13 @@ resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== -"@tufjs/models@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.2.tgz#6c1e99210ada62c057b1742b5528d85acbfe0a47" - integrity sha512-uxarDtxTIK3f8hJS4yFhW/lvTa3tsiQU5iDCRut+NCnOXvNtEul0Ct58NIIcIx9Rkt7OFEK31Ndpqsd663nsew== +"@tufjs/models@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.3.tgz#e6cb8a86834da7459a7c836cd892dee56b4bab44" + integrity sha512-mkFEqqRisi13DmR5pX4x+Zk97EiU8djTtpNW1GeuX410y/raAsq/T3ZCjwoRIZ8/cIBfW0olK/sywlAiWevDVw== dependencies: "@tufjs/canonical-json" "1.0.0" - minimatch "^8.0.3" + minimatch "^7.4.6" "@types/auth-header@1.0.2": version "1.0.2" @@ -2889,9 +2889,9 @@ "@types/json-schema" "*" "@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/fs-extra@11.0.1": version "11.0.1" @@ -3073,7 +3073,12 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@18.15.11": +"@types/node@*": + version "18.16.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" + integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== + +"@types/node@18.15.11": version "18.15.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== @@ -3134,9 +3139,9 @@ "@types/node" "*" "@types/sinon@^10.0.10": - version "10.0.13" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.13.tgz#60a7a87a70d9372d0b7b38cc03e825f46981fb83" - integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== + version "10.0.14" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.14.tgz#6bd18b088ea5ef1e5153fa37d0b68e91eff09e22" + integrity sha512-mn72up6cjaMyMuaPaa/AwKf6WtsSRysQC7wxFkCm1XcOKXPM1z+5Y4H5wjIVBz4gdAkjvZxVVfjA6ba1nHr5WQ== dependencies: "@types/sinonjs__fake-timers" "*" @@ -3221,11 +3226,11 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.3.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.58.0.tgz#157af1376add1a945c4559eef25114f0a29f49e1" - integrity sha512-LA/sRPaynZlrlYxdefrZbMx8dqs/1Kc0yNG+XOk5CwwZx7tTv263ix3AJNioF0YBVt7hADpAUR20owl6pv4MIQ== + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.59.0.tgz#ef5c78ba1f33853add4f4d7ac5a215e90c9e1409" + integrity sha512-evvdzcPrUv9+Hj+KX6fa3WMrtTZ7onnGHL3NfT/zN9q2FQhb2yvNJDa+w/ND0TpdRCbulwag0dxwMUt2MJB2Vg== dependencies: - "@typescript-eslint/utils" "5.58.0" + "@typescript-eslint/utils" "5.59.0" "@typescript-eslint/parser@5.58.0": version "5.58.0" @@ -3245,6 +3250,14 @@ "@typescript-eslint/types" "5.58.0" "@typescript-eslint/visitor-keys" "5.58.0" +"@typescript-eslint/scope-manager@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" + integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + "@typescript-eslint/type-utils@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz#f7d5b3971483d4015a470d8a9e5b8a7d10066e52" @@ -3260,6 +3273,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== +"@typescript-eslint/types@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" + integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== + "@typescript-eslint/typescript-estree@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" @@ -3273,7 +3291,20 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.10.0": +"@typescript-eslint/typescript-estree@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" + integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== @@ -3287,6 +3318,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@5.59.0", "@typescript-eslint/utils@^5.10.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" + integrity sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.58.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" @@ -3295,6 +3340,14 @@ "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" + integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== + dependencies: + "@typescript-eslint/types" "5.59.0" + eslint-visitor-keys "^3.3.0" + "@yarnpkg/core@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-3.4.0.tgz#1684dfcbd4e68ff28a11a25154d415f7de2c8224" @@ -4000,9 +4053,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001479" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001479.tgz#ef3d6f76011e44181af411fd4896123afbc14eda" - integrity sha512-6nuRFim5dx8Eu2tO+KJ9PiBdPHs7WB5Hdf+klDcyefyEuOAcfhihIv7pS+JFknJLUiNQbm1AJYKm0c9QOlQS/Q== + version "1.0.30001481" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" + integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== cardinal@^2.1.1: version "2.1.1" @@ -4526,7 +4579,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4: +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -4677,9 +4730,9 @@ editorconfig@1.0.2: semver "^7.3.8" electron-to-chromium@^1.4.284: - version "1.4.365" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.365.tgz#ccd9e352d4493aa288d87e6ea36f3edf350c045e" - integrity sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg== + version "1.4.369" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz#a98d838cdd79be4471cd04e9b4dffe891d037874" + integrity sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg== email-addresses@5.0.0: version "5.0.0" @@ -4743,9 +4796,9 @@ end-of-stream@~1.1.0: once "~1.3.0" enhanced-resolve@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + version "5.13.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -5402,7 +5455,7 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -5974,7 +6027,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@3.0.1, ini@^3.0.0, ini@^3.0.1: +ini@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== @@ -5984,6 +6037,11 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.0.tgz#3bca65a0ae224f07f8f8b3392d8c94a7f1bb007b" + integrity sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ== + init-package-json@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" @@ -6101,7 +6159,7 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.12.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== @@ -6955,12 +7013,12 @@ libnpmaccess@^7.0.2: npm-package-arg "^10.1.0" npm-registry-fetch "^14.0.3" -libnpmdiff@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.15.tgz#e358fbc271301ccc4ee117083b0c2594a700ea3f" - integrity sha512-Rxj7GpRC/17Szkf1Yf8vaplnwxzXQdAvnaA5l7gvw1X1KECOal8+GF8Z61QgNQsyDePRcwe1AgbKqUIcInS0lQ== +libnpmdiff@^5.0.16: + version "5.0.16" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.16.tgz#5d53d23b19dda6de4bfef80c60d793fa6c6bab68" + integrity sha512-Hu6Jhernk9MP8poIZh6JffJFZNgG+GCWXBP+tO+xQ0/Nc8W38TcAyEHp13pyVB3iXva8aUzcY/UO3gnoeOki7w== dependencies: - "@npmcli/arborist" "^6.2.7" + "@npmcli/arborist" "^6.2.8" "@npmcli/disparity-colors" "^3.0.0" "@npmcli/installed-package-contents" "^2.0.2" binary-extensions "^2.2.0" @@ -6970,12 +7028,12 @@ libnpmdiff@^5.0.15: pacote "^15.0.8" tar "^6.1.13" -libnpmexec@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-5.0.15.tgz#e40e9163700489a3fd7e2d92497c79b07da1d006" - integrity sha512-Y5u9tpJShOe4+In5POEzYsOagFLYjOOU4NhVQ4WfCnNho49VDJqXiej7RzMl3pqm7Z2nrLWqj+gbYDmUjnLzGQ== +libnpmexec@^5.0.16: + version "5.0.16" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-5.0.16.tgz#d85e13d1a53cade1e4b9febefa243dfa06b0faf4" + integrity sha512-HpGl1Oi7G7iPiCfECbe/l51bsUM7H7FxEgeFkLNXldE8Px+3SAlaWG5mJf5i+BmxMLCbigNWa/jlvErcu1eVKA== dependencies: - "@npmcli/arborist" "^6.2.7" + "@npmcli/arborist" "^6.2.8" "@npmcli/run-script" "^6.0.0" chalk "^4.1.0" ci-info "^3.7.1" @@ -6986,14 +7044,14 @@ libnpmexec@^5.0.15: read "^2.0.0" read-package-json-fast "^3.0.2" semver "^7.3.7" - walk-up-path "^1.0.0" + walk-up-path "^3.0.1" -libnpmfund@^4.0.15: - version "4.0.15" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.15.tgz#b524f6a6271379d7ce480aed300e4f53cef04392" - integrity sha512-r4CvEfh0fO+RfL3WaF1bN7L68axVXBtWRIHfzFGAf48FHriCM1j6IF8KisrT4xnVDXujOErFUR4wiTWZuj8UeQ== +libnpmfund@^4.0.16: + version "4.0.16" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.16.tgz#13203679403c5cff75f926cf1831089057c01b16" + integrity sha512-IYRsfuK1WRgpdvmaXyKzpBQZGIxkvclKiYC4RYE56BiZWf3gwwcSdZU4a+ZuanF3Ovy6aOfNGa9jxLfYc8fMpg== dependencies: - "@npmcli/arborist" "^6.2.7" + "@npmcli/arborist" "^6.2.8" libnpmhook@^9.0.3: version "9.0.3" @@ -7011,12 +7069,12 @@ libnpmorg@^5.0.3: aproba "^2.0.0" npm-registry-fetch "^14.0.3" -libnpmpack@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.15.tgz#3061bf25c90fce77e5cdc00373f43a36c1aabca3" - integrity sha512-Y5NhWNL86Tb1IhazPHJ/C2GUgkHDOttarvjIFLH/t+q/ReKSTy1HKlB/c2+AdVHYjWHuVo1rXdnY22SoD8U69A== +libnpmpack@^5.0.16: + version "5.0.16" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.16.tgz#15d170bdadcba044ffad271cda1ac3d86c3d6131" + integrity sha512-gbxL4Amc4eEWoRZaC/XZQdQMHB9e42vrdcLAklbaLmj7gGz94tP9e3/fH3HAegATOgSXUNipGxadXs00HAl4BA== dependencies: - "@npmcli/arborist" "^6.2.7" + "@npmcli/arborist" "^6.2.8" "@npmcli/run-script" "^6.0.0" npm-package-arg "^10.1.0" pacote "^15.0.8" @@ -7264,9 +7322,9 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== lru-cache@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.0.3.tgz#8a04f282df5320227bb7215c55df2660d3e4e25b" - integrity sha512-cyjNRew29d4kbgnz1sjDqxg7qg8NW4s+HQzCGjeon7DV5T2yDije16W9HaUFV1dhVEMh+SjrOcK0TomBmf3Egg== + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== luxon@3.3.0, luxon@^3.3.0: version "3.3.0" @@ -7307,7 +7365,7 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3: +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz#f26b05e89317e960b75fd5e080e40d40f8d7b2a5" integrity sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA== @@ -7586,14 +7644,14 @@ minimatch@6.1.6: dependencies: brace-expansion "^2.0.1" -minimatch@^7.4.2, minimatch@^7.4.3: +minimatch@^7.4.2, minimatch@^7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2, minimatch@^8.0.3: +minimatch@^8.0.2: version "8.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== @@ -7679,7 +7737,7 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0, minipass@^4.2.4, minipass@^4.2.5: +minipass@^4.0.0, minipass@^4.2.4, minipass@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== @@ -7958,7 +8016,7 @@ npm-bundled@^3.0.0: dependencies: npm-normalize-package-bin "^3.0.0" -npm-install-checks@^6.0.0, npm-install-checks@^6.1.0: +npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== @@ -8005,7 +8063,7 @@ npm-profile@^7.0.1: npm-registry-fetch "^14.0.0" proc-log "^3.0.0" -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.4: version "14.0.4" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.4.tgz#43dfa55ce7c0d0c545d625c7a916bab5b95f7038" integrity sha512-pMS2DRkwg+M44ct65zrN/Cr9IHK1+n6weuefAo6Er4lc+/8YBCU0Czq04H3ZiSigluh7pb2rMM5JpgcytctB+Q== @@ -8053,13 +8111,13 @@ npm-user-validate@^2.0.0: integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== npm@^9.5.0: - version "9.6.4" - resolved "https://registry.yarnpkg.com/npm/-/npm-9.6.4.tgz#ff4798c9778badac2fae83078ead9a88680978c2" - integrity sha512-8/Mct0X/w77PmgIpSlXfNIOlrZBfT+8966zLCxOhwi1qZ2Ueyy99uWPSDW6bt2OKw1NzrvHJBSgkzAvn1iWuhw== + version "9.6.5" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.6.5.tgz#272c06687abfcb80d37b47955cb33b9292949dc2" + integrity sha512-0SYs9lz1ND7V3+Lz6EbsnUdZ4OxjQOHbaIKdWd8OgsbZ2hCC2ZeiXMEaBEPEVBaILW+huFA0pJ1YME+52iZI5g== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^6.2.7" - "@npmcli/config" "^6.1.5" + "@npmcli/arborist" "^6.2.8" + "@npmcli/config" "^6.1.6" "@npmcli/map-workspaces" "^3.0.3" "@npmcli/package-json" "^3.0.0" "@npmcli/run-script" "^6.0.0" @@ -8076,34 +8134,34 @@ npm@^9.5.0: glob "^9.3.2" graceful-fs "^4.2.11" hosted-git-info "^6.1.1" - ini "^3.0.1" + ini "^4.1.0" init-package-json "^5.0.0" is-cidr "^4.0.2" json-parse-even-better-errors "^3.0.0" libnpmaccess "^7.0.2" - libnpmdiff "^5.0.15" - libnpmexec "^5.0.15" - libnpmfund "^4.0.15" + libnpmdiff "^5.0.16" + libnpmexec "^5.0.16" + libnpmfund "^4.0.16" libnpmhook "^9.0.3" libnpmorg "^5.0.3" - libnpmpack "^5.0.15" + libnpmpack "^5.0.16" libnpmpublish "^7.1.3" libnpmsearch "^6.0.2" libnpmteam "^5.0.3" libnpmversion "^4.0.2" - make-fetch-happen "^11.0.3" - minimatch "^7.4.3" - minipass "^4.2.5" + make-fetch-happen "^11.1.0" + minimatch "^7.4.6" + minipass "^4.2.8" minipass-pipeline "^1.2.4" ms "^2.1.2" node-gyp "^9.3.1" nopt "^7.1.0" npm-audit-report "^4.0.0" - npm-install-checks "^6.1.0" + npm-install-checks "^6.1.1" npm-package-arg "^10.1.0" npm-pick-manifest "^8.0.1" npm-profile "^7.0.1" - npm-registry-fetch "^14.0.3" + npm-registry-fetch "^14.0.4" npm-user-validate "^2.0.0" npmlog "^7.0.1" p-map "^4.0.0" @@ -8111,11 +8169,11 @@ npm@^9.5.0: parse-conflict-json "^3.0.1" proc-log "^3.0.0" qrcode-terminal "^0.12.0" - read "^2.0.0" + read "^2.1.0" read-package-json "^6.0.1" read-package-json-fast "^3.0.2" - semver "^7.3.8" - ssri "^10.0.2" + semver "^7.5.0" + ssri "^10.0.3" tar "^6.1.13" text-table "~0.2.0" tiny-relative-date "^1.3.0" @@ -8382,9 +8440,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pacote@^15.0.0, pacote@^15.0.8, pacote@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.1.tgz#94d8c6e0605e04d427610b3aacb0357073978348" - integrity sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ== + version "15.1.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.2.tgz#78b4c1403231fab368c752943f1969c6d8f026bb" + integrity sha512-EAGJrMiIjBTBB6tWGrx9hFJTOo14B3HSAoa/W9SawFEBhUqjxN7qqaFlGVF9jfY/mIri8Mb2xafmkRgWxYXxIQ== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -8401,7 +8459,7 @@ pacote@^15.0.0, pacote@^15.0.8, pacote@^15.1.1: promise-retry "^2.0.1" read-package-json "^6.0.0" read-package-json-fast "^3.0.0" - sigstore "^1.0.0" + sigstore "^1.3.0" ssri "^10.0.0" tar "^6.1.11" @@ -8889,7 +8947,7 @@ read-yaml-file@^2.1.0: js-yaml "^4.0.0" strip-bom "^4.0.0" -read@^2.0.0: +read@^2.0.0, read@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== @@ -8973,13 +9031,13 @@ regexp-to-ast@0.5.0: integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" registry-auth-token@^5.0.0: version "5.0.2" @@ -9076,11 +9134,11 @@ resolve.exports@^2.0.0: integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" - integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.12.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -9273,20 +9331,13 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.5.0: +semver@7.5.0, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.4.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9375,14 +9426,14 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -sigstore@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.2.0.tgz#ae5b31dac75c2d31e7873897e2862f0d0b205bce" - integrity sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA== +sigstore@^1.0.0, sigstore@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.3.2.tgz#2f70ec3e1192911484d9d148ecd9c98345cd172d" + integrity sha512-0KT1DjpVB11FK15ep7BIsZQV6j1jBm4SnXIInbBCRvql6II39IKONOMO+j036sGsArU/+2xqa1NDJwJkic0neA== dependencies: "@sigstore/protobuf-specs" "^0.1.0" make-fetch-happen "^11.0.1" - tuf-js "^1.0.0" + tuf-js "^1.1.3" simple-git@3.17.0: version "3.17.0" @@ -9563,7 +9614,7 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.2: +ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.3: version "10.0.3" resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.3.tgz#7f83da39058ca1d599d174e9eee4237659710bf4" integrity sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg== @@ -10026,12 +10077,12 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tuf-js@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.3.tgz#db3aada70fbf91fd9def9ad255645eaf81309f69" - integrity sha512-jGYi5nG/kqgfTFQSdoN6PW9eIn+XRZqdXku+fSwNk6UpWIsWaV7pzAqPgFr85edOPhoyJDyBqCS+DCnHroMvrw== +tuf-js@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.4.tgz#e85a936b16859c7fae23e5f040bc0f7b559b3192" + integrity sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A== dependencies: - "@tufjs/models" "1.0.2" + "@tufjs/models" "1.0.3" make-fetch-happen "^11.0.1" tunnel@0.0.6, tunnel@^0.0.6: @@ -10340,10 +10391,10 @@ vuln-vects@1.1.0: resolved "https://registry.yarnpkg.com/vuln-vects/-/vuln-vects-1.1.0.tgz#537d403615610446c1d687934584ea9dfb2a63ed" integrity sha512-LGDwn9nRz94YoeqOn2TZqQXzyonBc5FJppSgH34S/1U+3bgPONq/vvfiCbCQ4MeBll58xx+kDmhS73ac+EHBBw== -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== walker@^1.0.8: version "1.0.8" From ce4c9cb8cd98fb5453a4b8bc85ead17d95b342b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 01:40:58 +0000 Subject: [PATCH 108/122] chore(deps): lock file maintenance (#21772) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From bcc63782801f8f3119ab18438fc44061de9523d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 02:11:01 +0000 Subject: [PATCH 109/122] chore(deps): lock file maintenance (#21773) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 368d4561ea3ff2585db0ae195f651a30d8ba9859 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 03:17:46 +0000 Subject: [PATCH 110/122] chore(deps): lock file maintenance (#21774) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 0538a4c96d3677a553970de0aeb1886b393d54b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikolai=20R=C3=B8ed=20Kristiansen?= Date: Mon, 24 Apr 2023 10:22:52 +0200 Subject: [PATCH 111/122] fix(manager/helmfile): Use helmfile relative path (#21591) --- .../__fixtures__/uses-kustomization.yaml | 10 +++++ lib/modules/manager/helmfile/extract.spec.ts | 41 ++++++++++++++++++- lib/modules/manager/helmfile/extract.ts | 2 +- lib/modules/manager/helmfile/utils.ts | 10 +++-- 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 lib/modules/manager/helmfile/__fixtures__/uses-kustomization.yaml diff --git a/lib/modules/manager/helmfile/__fixtures__/uses-kustomization.yaml b/lib/modules/manager/helmfile/__fixtures__/uses-kustomization.yaml new file mode 100644 index 00000000000000..13db1e75ffdcf1 --- /dev/null +++ b/lib/modules/manager/helmfile/__fixtures__/uses-kustomization.yaml @@ -0,0 +1,10 @@ +repositories: + - name: bitnami + url: https://charts.bitnami.com/bitnami + +releases: + - name: my-chart + chart: ../charts/my-chart + - name: memcached + version: 6.0.0 + chart: bitnami/memcached diff --git a/lib/modules/manager/helmfile/extract.spec.ts b/lib/modules/manager/helmfile/extract.spec.ts index 5405340710b201..479fad453fa780 100644 --- a/lib/modules/manager/helmfile/extract.spec.ts +++ b/lib/modules/manager/helmfile/extract.spec.ts @@ -1,14 +1,17 @@ import { Fixtures } from '../../../../test/fixtures'; import { fs } from '../../../../test/util'; import { GlobalConfig } from '../../../config/global'; +import { FILE_ACCESS_VIOLATION_ERROR } from '../../../constants/error-messages'; import { extractPackageFile } from '.'; jest.mock('../../../util/fs'); +const localDir = '/tmp/github/some/repo'; + describe('modules/manager/helmfile/extract', () => { describe('extractPackageFile()', () => { beforeEach(() => { - GlobalConfig.set({ localDir: '/tmp/github/some/repo' }); + GlobalConfig.set({ localDir }); jest.resetAllMocks(); }); @@ -385,5 +388,41 @@ describe('modules/manager/helmfile/extract', () => { managerData: { needKustomize: true }, }); }); + + it('detects kustomize and respects relative paths', async () => { + fs.localPathExists.mockImplementationOnce((path) => { + if (!path.startsWith(GlobalConfig.get('localDir') ?? '')) { + throw new Error(FILE_ACCESS_VIOLATION_ERROR); + } + return Promise.resolve(true); + }); + + const parentDir = `${localDir}/project`; + fs.getParentDir.mockReturnValue(parentDir); + const result = await extractPackageFile( + Fixtures.get('uses-kustomization.yaml'), + `${parentDir}/helmfile.yaml`, // In subdir + { + registryAliases: { + stable: 'https://charts.helm.sh/stable', + }, + } + ); + expect(result).toMatchObject({ + datasource: 'helm', + deps: [ + { + depName: 'my-chart', + skipReason: 'local-chart', + }, + { + depName: 'memcached', + currentValue: '6.0.0', + registryUrls: ['https://charts.bitnami.com/bitnami'], + }, + ], + managerData: { needKustomize: true }, + }); + }); }); }); diff --git a/lib/modules/manager/helmfile/extract.ts b/lib/modules/manager/helmfile/extract.ts index 347f8cf77f7cbd..a1c6bc4c96a6e8 100644 --- a/lib/modules/manager/helmfile/extract.ts +++ b/lib/modules/manager/helmfile/extract.ts @@ -75,7 +75,7 @@ export async function extractPackageFile( if (isLocalPath(dep.chart)) { if ( kustomizationsKeysUsed(dep) || - (await localChartHasKustomizationsYaml(dep)) + (await localChartHasKustomizationsYaml(dep, fileName)) ) { needKustomize = true; } diff --git a/lib/modules/manager/helmfile/utils.ts b/lib/modules/manager/helmfile/utils.ts index 16abccda2a3997..9f843612c59061 100644 --- a/lib/modules/manager/helmfile/utils.ts +++ b/lib/modules/manager/helmfile/utils.ts @@ -1,6 +1,6 @@ import upath from 'upath'; -import { localPathExists } from '../../../util/fs'; +import { getParentDir, localPathExists } from '../../../util/fs'; import type { Release } from './types'; /** Returns true if a helmfile release contains kustomize specific keys **/ @@ -15,7 +15,11 @@ export function kustomizationsKeysUsed(release: Release): boolean { /** Returns true if a helmfile release uses a local chart with a kustomization.yaml file **/ // eslint-disable-next-line require-await export async function localChartHasKustomizationsYaml( - release: Release + release: Release, + helmFileYamlFileName: string ): Promise { - return localPathExists(upath.join(release.chart, 'kustomization.yaml')); + const helmfileYamlParentDir = getParentDir(helmFileYamlFileName) || ''; + return localPathExists( + upath.join(helmfileYamlParentDir, release.chart, 'kustomization.yaml') + ); } From 2496091b88415834f3163481b5cc33623225f36a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 24 Apr 2023 12:15:17 +0200 Subject: [PATCH 112/122] fix(versioning/hashicorp): handle empty constraint (#21642) --- lib/modules/versioning/hashicorp/convertor.spec.ts | 1 + lib/modules/versioning/hashicorp/convertor.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/lib/modules/versioning/hashicorp/convertor.spec.ts b/lib/modules/versioning/hashicorp/convertor.spec.ts index c46be23ef5427e..943fe457e8df8e 100644 --- a/lib/modules/versioning/hashicorp/convertor.spec.ts +++ b/lib/modules/versioning/hashicorp/convertor.spec.ts @@ -3,6 +3,7 @@ import { hashicorp2npm, npm2hashicorp } from './convertor'; describe('modules/versioning/hashicorp/convertor', () => { test.each` hashicorp | npm + ${''} | ${''} ${'4.2.0'} | ${'4.2.0'} ${'4.2.0-alpha'} | ${'4.2.0-alpha'} ${'~> 4.0'} | ${'^4.0'} diff --git a/lib/modules/versioning/hashicorp/convertor.ts b/lib/modules/versioning/hashicorp/convertor.ts index ffff6416d779a1..e558e0f7e57700 100644 --- a/lib/modules/versioning/hashicorp/convertor.ts +++ b/lib/modules/versioning/hashicorp/convertor.ts @@ -10,6 +10,9 @@ import { regEx } from '../../../util/regex'; * are made */ export function hashicorp2npm(input: string): string { + if (!input) { + return input; + } return input .split(',') .map((single) => { @@ -62,6 +65,9 @@ export function hashicorp2npm(input: string): string { * It cannot handle `*`, `1.x.x`, range with `-`, `||` */ export function npm2hashicorp(input: string): string { + if (!input) { + return input; + } return input .split(' ') .map((single) => { From 519097cd4a551c4518ab2c07723b985414cd1a8d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 21:11:38 +0000 Subject: [PATCH 113/122] chore(deps): update linters to v5.59.0 (#21793) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +-- yarn.lock | 88 ++++++++++++---------------------------------------- 2 files changed, 22 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 56ab9cbc6baf22..358c1e00bedf9a 100644 --- a/package.json +++ b/package.json @@ -289,8 +289,8 @@ "@types/url-join": "4.0.1", "@types/validate-npm-package-name": "4.0.0", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.58.0", - "@typescript-eslint/parser": "5.58.0", + "@typescript-eslint/eslint-plugin": "5.59.0", + "@typescript-eslint/parser": "5.59.0", "aws-sdk-client-mock": "2.1.1", "callsite": "1.0.0", "common-tags": "1.8.2", diff --git a/yarn.lock b/yarn.lock index 390de7f7c3860f..625359d978933e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3209,15 +3209,15 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz#b1d4b0ad20243269d020ef9bbb036a40b0849829" - integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== +"@typescript-eslint/eslint-plugin@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz#c0e10eeb936debe5d1c3433cf36206a95befefd0" + integrity sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/type-utils" "5.58.0" - "@typescript-eslint/utils" "5.58.0" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/type-utils" "5.59.0" + "@typescript-eslint/utils" "5.59.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -3232,24 +3232,16 @@ dependencies: "@typescript-eslint/utils" "5.59.0" -"@typescript-eslint/parser@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.58.0.tgz#2ac4464cf48bef2e3234cb178ede5af352dddbc6" - integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== +"@typescript-eslint/parser@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" + integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== dependencies: - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" - integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== - dependencies: - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/visitor-keys" "5.58.0" - "@typescript-eslint/scope-manager@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" @@ -3258,39 +3250,21 @@ "@typescript-eslint/types" "5.59.0" "@typescript-eslint/visitor-keys" "5.59.0" -"@typescript-eslint/type-utils@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz#f7d5b3971483d4015a470d8a9e5b8a7d10066e52" - integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== +"@typescript-eslint/type-utils@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz#8e8d1420fc2265989fa3a0d897bde37f3851e8c9" + integrity sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA== dependencies: - "@typescript-eslint/typescript-estree" "5.58.0" - "@typescript-eslint/utils" "5.58.0" + "@typescript-eslint/typescript-estree" "5.59.0" + "@typescript-eslint/utils" "5.59.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" - integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== - "@typescript-eslint/types@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== -"@typescript-eslint/typescript-estree@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" - integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== - dependencies: - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/visitor-keys" "5.58.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" @@ -3304,20 +3278,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" - integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - "@typescript-eslint/utils@5.59.0", "@typescript-eslint/utils@^5.10.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" @@ -3332,14 +3292,6 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.58.0": - version "5.58.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" - integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== - dependencies: - "@typescript-eslint/types" "5.58.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" From 13f4b02560280eeee93b70a41923d0d49c0c40b8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 25 Apr 2023 07:36:49 +0200 Subject: [PATCH 114/122] docs(config options): warn about SemVer 0.x packages (#21747) --- docs/usage/configuration-options.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 910e7353c0a680..05b089229ac6f7 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2266,8 +2266,8 @@ Here's an example of where you use this to group together all packages from the ### matchUpdateTypes -Use this field to match rules against types of updates. -For example to apply a special label for Major updates: +Use `matchUpdateTypes` to match rules against types of updates. +For example to apply a special label to `major` updates: ```json { @@ -2280,6 +2280,13 @@ For example to apply a special label for Major updates: } ``` + +!!! warning + Packages that follow SemVer are allowed to make breaking changes in _any_ `0.x` version, even `patch` and `minor`. + Check if you're using any `0.x` package, and see if you need custom `packageRules` for it. + When setting up automerge for dependencies, make sure to stop accidental automerges of `0.x` versions. + Read the [automerge non-major updates](./key-concepts/automerge.md#automerge-non-major-updates) docs for a config example that blocks `0.x` updates. + ### matchConfidence From 609aac0da5654d7f0ad1c88d2c0a9955ffdd41a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 05:49:38 +0000 Subject: [PATCH 115/122] chore(deps): update linters (#21794) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 6 +-- yarn.lock | 110 ++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 82 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 358c1e00bedf9a..11abedbd5227ad 100644 --- a/package.json +++ b/package.json @@ -289,8 +289,8 @@ "@types/url-join": "4.0.1", "@types/validate-npm-package-name": "4.0.0", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.59.0", - "@typescript-eslint/parser": "5.59.0", + "@typescript-eslint/eslint-plugin": "5.59.1", + "@typescript-eslint/parser": "5.59.1", "aws-sdk-client-mock": "2.1.1", "callsite": "1.0.0", "common-tags": "1.8.2", @@ -298,7 +298,7 @@ "cross-env": "7.0.3", "diff": "5.1.0", "emojibase-data": "7.0.1", - "eslint": "8.38.0", + "eslint": "8.39.0", "eslint-config-prettier": "8.8.0", "eslint-formatter-gha": "1.4.2", "eslint-import-resolver-typescript": "3.5.5", diff --git a/yarn.lock b/yarn.lock index 625359d978933e..9dca1258d21676 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1579,10 +1579,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.38.0": - version "8.38.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" - integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== "@gar/promisify@^1.1.3": version "1.1.3" @@ -3209,15 +3209,15 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz#c0e10eeb936debe5d1c3433cf36206a95befefd0" - integrity sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw== +"@typescript-eslint/eslint-plugin@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" + integrity sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.0" - "@typescript-eslint/type-utils" "5.59.0" - "@typescript-eslint/utils" "5.59.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/type-utils" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -3232,14 +3232,14 @@ dependencies: "@typescript-eslint/utils" "5.59.0" -"@typescript-eslint/parser@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" - integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== +"@typescript-eslint/parser@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.1.tgz#73c2c12127c5c1182d2e5b71a8fa2a85d215cbb4" + integrity sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== dependencies: - "@typescript-eslint/scope-manager" "5.59.0" - "@typescript-eslint/types" "5.59.0" - "@typescript-eslint/typescript-estree" "5.59.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.59.0": @@ -3250,13 +3250,21 @@ "@typescript-eslint/types" "5.59.0" "@typescript-eslint/visitor-keys" "5.59.0" -"@typescript-eslint/type-utils@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz#8e8d1420fc2265989fa3a0d897bde37f3851e8c9" - integrity sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA== +"@typescript-eslint/scope-manager@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz#8a20222719cebc5198618a5d44113705b51fd7fe" + integrity sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA== dependencies: - "@typescript-eslint/typescript-estree" "5.59.0" - "@typescript-eslint/utils" "5.59.0" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" + +"@typescript-eslint/type-utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz#63981d61684fd24eda2f9f08c0a47ecb000a2111" + integrity sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" tsutils "^3.21.0" @@ -3265,6 +3273,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== +"@typescript-eslint/types@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.1.tgz#03f3fedd1c044cb336ebc34cc7855f121991f41d" + integrity sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== + "@typescript-eslint/typescript-estree@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" @@ -3278,6 +3291,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz#4aa546d27fd0d477c618f0ca00b483f0ec84c43c" + integrity sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA== + dependencies: + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.59.0", "@typescript-eslint/utils@^5.10.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" @@ -3292,6 +3318,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.1.tgz#d89fc758ad23d2157cfae53f0b429bdf15db9473" + integrity sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.59.0": version "5.59.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" @@ -3300,6 +3340,14 @@ "@typescript-eslint/types" "5.59.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz#0d96c36efb6560d7fb8eb85de10442c10d8f6058" + integrity sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA== + dependencies: + "@typescript-eslint/types" "5.59.1" + eslint-visitor-keys "^3.3.0" + "@yarnpkg/core@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-3.4.0.tgz#1684dfcbd4e68ff28a11a25154d415f7de2c8224" @@ -4996,7 +5044,7 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: +eslint-scope@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== @@ -5009,15 +5057,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@8.38.0: - version "8.38.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" - integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== +eslint@8.39.0: + version "8.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.38.0" + "@eslint/js" "8.39.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5027,7 +5075,7 @@ eslint@8.38.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" + eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.0" espree "^9.5.1" esquery "^1.4.2" From bd6897063bf88989e43a908beca89a0374f9ee9d Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 25 Apr 2023 17:04:58 +0200 Subject: [PATCH 116/122] fix(datasource/docker): don't abort for 401 from docker hub (#21796) --- lib/modules/datasource/docker/index.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/modules/datasource/docker/index.ts b/lib/modules/datasource/docker/index.ts index 5d96adcd6e0747..7dd36c4fd3061c 100644 --- a/lib/modules/datasource/docker/index.ts +++ b/lib/modules/datasource/docker/index.ts @@ -977,13 +977,6 @@ export class DockerDatasource extends Datasource { ); throw new ExternalHostError(err); } - if (err.statusCode === 401 && isDockerHost(registryHost)) { - logger.warn( - { registryHost, dockerRepository, err }, - 'docker registry failure: unauthorized' - ); - throw new ExternalHostError(err); - } if (err.statusCode >= 500 && err.statusCode < 600) { logger.warn( { registryHost, dockerRepository, err }, From 6ec865be62fa9597e9027eec69a6cddd5def70e5 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 25 Apr 2023 11:08:13 -0400 Subject: [PATCH 117/122] feat: add prTitleStrict config option to bypass prTitle manipulation (#21454) Co-authored-by: Rhys Arkins --- docs/usage/configuration-options.md | 8 +++ lib/config/options/index.ts | 9 +++ .../repository/updates/generate.spec.ts | 55 +++++++++++++++++++ lib/workers/repository/updates/generate.ts | 30 +++++----- lib/workers/types.ts | 1 + 5 files changed, 89 insertions(+), 14 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 05b089229ac6f7..b57364434347c7 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2736,6 +2736,14 @@ Here's an example of how you would define PR priority so that devDependencies ar The PR title is important for some of Renovate's matching algorithms (e.g. determining whether to recreate a PR or not) so ideally don't modify it much. +## prTitleStrict + +There are certain scenarios where the default behavior appends extra context to the PR title. + +These scenarios include if a `baseBranch` or if there is a grouped update and either `separateMajorMinor` or `separateMinorPatch` is true. + +Using this option allows you to skip these default behaviors and use other templating methods to control the format of the PR title. + ## printConfig This option is useful for troubleshooting, particularly if using presets. diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 698a17056860c8..76a7881dd40fe7 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1855,6 +1855,15 @@ const options: RenovateOptions[] = [ default: null, cli: false, }, + { + name: 'prTitleStrict', + description: + 'Whether to bypass appending extra context to the Pull Request title.', + type: 'boolean', + experimental: true, + default: false, + cli: false, + }, { name: 'prHeader', description: 'Text added here will be placed first in the PR body.', diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts index 040726a9034f8e..c44d2e74ee6cf5 100644 --- a/lib/workers/repository/updates/generate.spec.ts +++ b/lib/workers/repository/updates/generate.spec.ts @@ -357,6 +357,61 @@ describe('workers/repository/updates/generate', () => { expect(res.recreateClosed).toBeTrue(); }); + it('skips appending baseBranch and updateType to prTitle when prTitleStrict is true', () => { + const branch = [ + { + manager: 'some-manager', + depName: 'depB', + groupName: 'some-group', + branchName: 'some-branch', + commitMessage: + '{{{groupName}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}', + commitMessageExtra: + 'to {{#if isMajor}}{{prettyNewMajor}}{{else}}{{prettyNewVersion}}{{/if}}', + foo: 1, + newValue: '5.1.2', + newVersion: '5.1.2', + group: { + foo: 2, + }, + releaseTimestamp: '2017-02-07T20:01:41+00:00', + updateType: 'minor', + separateMinorPatch: true, + prTitleStrict: true, + }, + { + manager: 'some-manager', + depName: 'depA', + groupName: 'some-group', + branchName: 'some-branch', + commitMessage: + '{{{groupName}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}', + commitMessageExtra: + 'to {{#if isMajor}}{{prettyNewMajor}}{{else}}{{prettyNewVersion}}{{/if}}', + foo: 1, + newValue: '1.1.0', + newVersion: '1.1.0', + group: { + foo: 2, + }, + releaseTimestamp: '2017-02-08T20:01:41+00:00', + updateType: 'minor', + separateMinorPatch: true, + prTitleStrict: true, + }, + ] satisfies BranchUpgradeConfig[]; + const res = generateBranchConfig(branch); + expect(res).toMatchObject({ + foo: 2, + isGroup: true, + recreateClosed: true, + prTitle: 'some-group', + commitMessage: 'some-group', + groupName: 'some-group', + releaseTimestamp: '2017-02-08T20:01:41+00:00', + }); + }); + it('groups multiple upgrades different version', () => { const branch = [ { diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index 5a3ff3e05be062..3dd6b922615837 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -255,20 +255,22 @@ export function generateBranchConfig( } else { [upgrade.prTitle] = upgrade.commitMessage.split(newlineRegex); } - upgrade.prTitle += upgrade.hasBaseBranches ? ' ({{baseBranch}})' : ''; - if (upgrade.isGroup) { - upgrade.prTitle += - upgrade.updateType === 'major' && upgrade.separateMajorMinor - ? ' (major)' - : ''; - upgrade.prTitle += - upgrade.updateType === 'minor' && upgrade.separateMinorPatch - ? ' (minor)' - : ''; - upgrade.prTitle += - upgrade.updateType === 'patch' && upgrade.separateMinorPatch - ? ' (patch)' - : ''; + if (!upgrade.prTitleStrict) { + upgrade.prTitle += upgrade.hasBaseBranches ? ' ({{baseBranch}})' : ''; + if (upgrade.isGroup) { + upgrade.prTitle += + upgrade.updateType === 'major' && upgrade.separateMajorMinor + ? ' (major)' + : ''; + upgrade.prTitle += + upgrade.updateType === 'minor' && upgrade.separateMinorPatch + ? ' (minor)' + : ''; + upgrade.prTitle += + upgrade.updateType === 'patch' && upgrade.separateMinorPatch + ? ' (patch)' + : ''; + } } // Compile again to allow for nested templates upgrade.prTitle = template.compile(upgrade.prTitle, upgrade); diff --git a/lib/workers/types.ts b/lib/workers/types.ts index 7b53bcddb2747c..8357d49264a75a 100644 --- a/lib/workers/types.ts +++ b/lib/workers/types.ts @@ -56,6 +56,7 @@ export interface BranchUpgradeConfig prBodyTemplate?: string; prPriority?: number; prTitle?: string; + prTitleStrict?: boolean; prettyNewMajor?: string; prettyNewVersion?: string; releases?: ReleaseWithNotes[]; From 5ac20233226259ce961a6b866e269cee172d51f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:39:35 +0000 Subject: [PATCH 118/122] build(deps): update dependency openpgp to v5.8.0 (#21805) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 11abedbd5227ad..1a42e710e59fc8 100644 --- a/package.json +++ b/package.json @@ -214,7 +214,7 @@ "ms": "2.1.3", "nanoid": "3.3.6", "node-html-parser": "6.1.5", - "openpgp": "5.7.0", + "openpgp": "5.8.0", "p-all": "3.0.0", "p-map": "4.0.0", "p-queue": "6.6.2", diff --git a/yarn.lock b/yarn.lock index 9dca1258d21676..a4245a13fbbea8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8275,10 +8275,10 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openpgp@5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.7.0.tgz#fe0a346f26171ffb726636ae7ccb24a504281dbc" - integrity sha512-wchYJQfFbSaocUvUIYqNrWD+lRSmFSG1d3Ak2CHeXFocDSEsf7Uc1zUzHjSdlZPTvGeeXPQ+MJrwVtalL4QCBg== +openpgp@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.8.0.tgz#5e3033e8df59d1626ce65aa01b3cf5abee7ff26b" + integrity sha512-hq4+4s/vpjuwGgZSjplGp4j5FzSz+KwiFRiqMx+ZXr7VCK3CvTkktYilMTZMrf2vHsFH8aQ0596Lmn07HeKRmQ== dependencies: asn1.js "^5.0.0" From 7f4c8ebeb919091b4773c177fa30f96873c6ac95 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Tue, 25 Apr 2023 14:08:26 -0600 Subject: [PATCH 119/122] feat: add `bazel` datasource (#21733) --- lib/modules/datasource/api.ts | 2 + .../metadata-no-yanked-versions.json | 9 ++ .../metadata-with-yanked-versions.json | 11 +++ lib/modules/datasource/bazel/index.spec.ts | 82 +++++++++++++++++++ lib/modules/datasource/bazel/index.ts | 70 ++++++++++++++++ lib/modules/datasource/bazel/readme.md | 1 + lib/modules/datasource/bazel/schema.spec.ts | 12 +++ lib/modules/datasource/bazel/schema.ts | 6 ++ .../versioning/bazel-module/bzlmod-version.ts | 2 + 9 files changed, 195 insertions(+) create mode 100644 lib/modules/datasource/bazel/__fixtures__/metadata-no-yanked-versions.json create mode 100644 lib/modules/datasource/bazel/__fixtures__/metadata-with-yanked-versions.json create mode 100644 lib/modules/datasource/bazel/index.spec.ts create mode 100644 lib/modules/datasource/bazel/index.ts create mode 100644 lib/modules/datasource/bazel/readme.md create mode 100644 lib/modules/datasource/bazel/schema.spec.ts create mode 100644 lib/modules/datasource/bazel/schema.ts diff --git a/lib/modules/datasource/api.ts b/lib/modules/datasource/api.ts index 3048b2eb4e5a8b..e75ad8aa10bf9c 100644 --- a/lib/modules/datasource/api.ts +++ b/lib/modules/datasource/api.ts @@ -3,6 +3,7 @@ import { AwsMachineImageDataSource } from './aws-machine-image'; import { AwsRdsDataSource } from './aws-rds'; import { AzureBicepResourceDatasource } from './azure-bicep-resource'; import { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks'; +import { BazelDatasource } from './bazel'; import { BitbucketTagsDatasource } from './bitbucket-tags'; import { CdnJsDatasource } from './cdnjs'; import { ClojureDatasource } from './clojure'; @@ -62,6 +63,7 @@ api.set(AwsMachineImageDataSource.id, new AwsMachineImageDataSource()); api.set(AwsRdsDataSource.id, new AwsRdsDataSource()); api.set(AzureBicepResourceDatasource.id, new AzureBicepResourceDatasource()); api.set(AzurePipelinesTasksDatasource.id, new AzurePipelinesTasksDatasource()); +api.set(BazelDatasource.id, new BazelDatasource()); api.set(BitbucketTagsDatasource.id, new BitbucketTagsDatasource()); api.set(CdnJsDatasource.id, new CdnJsDatasource()); api.set(ClojureDatasource.id, new ClojureDatasource()); diff --git a/lib/modules/datasource/bazel/__fixtures__/metadata-no-yanked-versions.json b/lib/modules/datasource/bazel/__fixtures__/metadata-no-yanked-versions.json new file mode 100644 index 00000000000000..2bbf5b1186fc61 --- /dev/null +++ b/lib/modules/datasource/bazel/__fixtures__/metadata-no-yanked-versions.json @@ -0,0 +1,9 @@ +{ + "versions": [ + "0.14.8", + "0.14.9", + "0.15.0", + "0.16.0" + ], + "yanked_versions": {} +} diff --git a/lib/modules/datasource/bazel/__fixtures__/metadata-with-yanked-versions.json b/lib/modules/datasource/bazel/__fixtures__/metadata-with-yanked-versions.json new file mode 100644 index 00000000000000..213792c075a86a --- /dev/null +++ b/lib/modules/datasource/bazel/__fixtures__/metadata-with-yanked-versions.json @@ -0,0 +1,11 @@ +{ + "versions": [ + "0.14.8", + "0.14.9", + "0.15.0", + "0.16.0" + ], + "yanked_versions": { + "0.15.0": "Very bad bug." + } +} diff --git a/lib/modules/datasource/bazel/index.spec.ts b/lib/modules/datasource/bazel/index.spec.ts new file mode 100644 index 00000000000000..c9ba6ebb67437f --- /dev/null +++ b/lib/modules/datasource/bazel/index.spec.ts @@ -0,0 +1,82 @@ +import { getPkgReleases } from '..'; +import { Fixtures } from '../../../../test/fixtures'; +import * as httpMock from '../../../../test/http-mock'; +import { EXTERNAL_HOST_ERROR } from '../../../constants/error-messages'; +import { BazelDatasource } from '.'; + +const datasource = BazelDatasource.id; +const defaultRegistryUrl = BazelDatasource.bazelCentralRepoUrl; +const packageName = 'rules_foo'; +const path = BazelDatasource.packageMetadataPath(packageName); + +describe('modules/datasource/bazel/index', () => { + describe('getReleases', () => { + it('throws for error', async () => { + httpMock.scope(defaultRegistryUrl).get(path).replyWithError('error'); + await expect(getPkgReleases({ datasource, packageName })).rejects.toThrow( + EXTERNAL_HOST_ERROR + ); + }); + + it('returns null for 404', async () => { + httpMock.scope(defaultRegistryUrl).get(path).reply(404); + expect(await getPkgReleases({ datasource, packageName })).toBeNull(); + }); + + it('returns null for empty result', async () => { + httpMock.scope(defaultRegistryUrl).get(path).reply(200, {}); + expect(await getPkgReleases({ datasource, packageName })).toBeNull(); + }); + + it('returns null for empty 200 OK', async () => { + httpMock + .scope(defaultRegistryUrl) + .get(path) + .reply(200, '{ "versions": [], "yanked_versions": {} }'); + expect(await getPkgReleases({ datasource, packageName })).toBeNull(); + }); + + it('throws for 5xx', async () => { + httpMock.scope(defaultRegistryUrl).get(path).reply(502); + await expect(getPkgReleases({ datasource, packageName })).rejects.toThrow( + EXTERNAL_HOST_ERROR + ); + }); + + it('metadata without yanked versions', async () => { + httpMock + .scope(defaultRegistryUrl) + .get(path) + .reply(200, Fixtures.get('metadata-no-yanked-versions.json')); + const res = await getPkgReleases({ datasource, packageName }); + expect(res).toEqual({ + registryUrl: + 'https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main', + releases: [ + { version: '0.14.8' }, + { version: '0.14.9' }, + { version: '0.15.0' }, + { version: '0.16.0' }, + ], + }); + }); + + it('metadata with yanked versions', async () => { + httpMock + .scope(defaultRegistryUrl) + .get(path) + .reply(200, Fixtures.get('metadata-with-yanked-versions.json')); + const res = await getPkgReleases({ datasource, packageName }); + expect(res).toEqual({ + registryUrl: + 'https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main', + releases: [ + { version: '0.14.8' }, + { version: '0.14.9' }, + { version: '0.15.0', isDeprecated: true }, + { version: '0.16.0' }, + ], + }); + }); + }); +}); diff --git a/lib/modules/datasource/bazel/index.ts b/lib/modules/datasource/bazel/index.ts new file mode 100644 index 00000000000000..2a15a0eb84f830 --- /dev/null +++ b/lib/modules/datasource/bazel/index.ts @@ -0,0 +1,70 @@ +import is from '@sindresorhus/is'; +import { ExternalHostError } from '../../../types/errors/external-host-error'; +import { cache } from '../../../util/cache/package/decorator'; +import { HttpError } from '../../../util/http'; +import { joinUrlParts } from '../../../util/url'; +import { BzlmodVersion } from '../../versioning/bazel-module/bzlmod-version'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; +import { BazelModuleMetadata } from './schema'; + +export class BazelDatasource extends Datasource { + static readonly id = 'bazel'; + + static readonly bazelCentralRepoUrl = + 'https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main'; + + override readonly defaultRegistryUrls = [BazelDatasource.bazelCentralRepoUrl]; + override readonly customRegistrySupport = true; + override readonly caching = true; + + static packageMetadataPath(packageName: string): string { + return `/modules/${packageName}/metadata.json`; + } + + constructor() { + super(BazelDatasource.id); + } + + @cache({ + namespace: `datasource-${BazelDatasource.id}`, + key: ({ registryUrl, packageName }: GetReleasesConfig) => + `${registryUrl!}:${packageName}`, + }) + async getReleases({ + registryUrl, + packageName, + }: GetReleasesConfig): Promise { + const path = BazelDatasource.packageMetadataPath(packageName); + const url = joinUrlParts(registryUrl!, path); + + const result: ReleaseResult = { releases: [] }; + try { + const { body: metadata } = await this.http.getJson( + url, + BazelModuleMetadata + ); + result.releases = metadata.versions + .map((v) => new BzlmodVersion(v)) + .sort(BzlmodVersion.defaultCompare) + .map((bv) => { + const release: Release = { version: bv.original }; + if (is.truthy(metadata.yanked_versions[bv.original])) { + release.isDeprecated = true; + } + return release; + }); + } catch (err) { + // istanbul ignore else: not testable with nock + if (err instanceof HttpError) { + if (err.response?.statusCode === 404) { + return null; + } + throw new ExternalHostError(err); + } + this.handleGenericErrors(err); + } + + return result.releases.length ? result : null; + } +} diff --git a/lib/modules/datasource/bazel/readme.md b/lib/modules/datasource/bazel/readme.md new file mode 100644 index 00000000000000..e4282e3d45c672 --- /dev/null +++ b/lib/modules/datasource/bazel/readme.md @@ -0,0 +1 @@ +The `bazel` datasource is designed to query one or more [Bazel registries](https://bazel.build/external/registry) using the first successful result. diff --git a/lib/modules/datasource/bazel/schema.spec.ts b/lib/modules/datasource/bazel/schema.spec.ts new file mode 100644 index 00000000000000..832133baf11ab7 --- /dev/null +++ b/lib/modules/datasource/bazel/schema.spec.ts @@ -0,0 +1,12 @@ +import { Fixtures } from '../../../../test/fixtures'; +import { BazelModuleMetadata } from './schema'; + +describe('modules/datasource/bazel/schema', () => { + describe('BazelModuleMetadata', () => { + it('parses metadata', () => { + const metadataJson = Fixtures.get('metadata-with-yanked-versions.json'); + const metadata = BazelModuleMetadata.parse(JSON.parse(metadataJson)); + expect(metadata.versions).toHaveLength(4); + }); + }); +}); diff --git a/lib/modules/datasource/bazel/schema.ts b/lib/modules/datasource/bazel/schema.ts new file mode 100644 index 00000000000000..4315d260c4c93a --- /dev/null +++ b/lib/modules/datasource/bazel/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const BazelModuleMetadata = z.object({ + versions: z.array(z.string()), + yanked_versions: z.record(z.string(), z.string()), +}); diff --git a/lib/modules/versioning/bazel-module/bzlmod-version.ts b/lib/modules/versioning/bazel-module/bzlmod-version.ts index dcc52d6e690564..42b315ed6724ff 100644 --- a/lib/modules/versioning/bazel-module/bzlmod-version.ts +++ b/lib/modules/versioning/bazel-module/bzlmod-version.ts @@ -199,6 +199,7 @@ interface VersionRegexResult { * It signifies that there is a NonRegistryOverride for a module. */ export class BzlmodVersion { + readonly original: string; readonly release: VersionPart; readonly prerelease: VersionPart; readonly build: VersionPart; @@ -214,6 +215,7 @@ export class BzlmodVersion { * values. */ constructor(version: string) { + this.original = version; if (version === '') { this.release = VersionPart.create(); this.prerelease = VersionPart.create(); From 144cf15315d1009cd1c01fd75cf9a209e3dbaedb Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 26 Apr 2023 10:46:24 +0200 Subject: [PATCH 120/122] docs(contributing): rewrite do not force push section (#21812) --- .github/contributing.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/contributing.md b/.github/contributing.md index e04325a2f3df35..decea2ffbb1414 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -40,12 +40,13 @@ This makes it harder for us to review your work because we don't know what has c PRs will always be squashed by us when we merge your work. Commit as many times as you need in your pull request branch. -If you are updating your PR branch from within the GitHub PR interface, then only use the default "Update branch" button. +If you're updating your PR branch from within the GitHub PR interface, use the default "Update branch" button. +This is the "Update with merge commit" option in the dropdown. -Force pushing a PR is OK when: +Force pushing a PR, or using the "Update with rebase" button is OK when you: -- you need to make large changes on a PR which require a full review anyway -- you need to bring the branch up-to-date with the target branch and incorporating the changes is more work than to create a new PR +- make large changes on a PR which require a full review anyway +- bring the branch up-to-date with the target branch and incorporating the changes is more work than to create a new PR ## Apply maintainer provided review suggestions From 9ba7c4063c297e9cd051bbcb3bca7f25d73f1130 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 26 Apr 2023 14:35:11 +0200 Subject: [PATCH 121/122] feat(presets): add `AzureAD/microsoft-identity-web` monorepo (#21817) --- lib/config/presets/internal/monorepo.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index dacc38adad2c4c..6a8f2afe18fa0d 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -77,6 +77,8 @@ const repoGroups = { ], 'dotnet-azure-ad-identitymodel-extensions': 'https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet', + 'dotnet-azure-ad-microsoft-identity-web': + 'https://github.com/AzureAD/microsoft-identity-web', 'dotnet-wcf': 'https://github.com/dotnet/wcf', dropwizard: 'https://github.com/dropwizard/dropwizard', 'elastic-apm-agent-rum-js': 'https://github.com/elastic/apm-agent-rum-js', From dc1d1e85db8ca4d8640af438ba9834da0ca276f9 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 26 Apr 2023 19:20:45 +0200 Subject: [PATCH 122/122] docs(config options): rewrite `matchPaths` and `matchFiles` (#21582) Co-authored-by: Rhys Arkins --- docs/usage/configuration-options.md | 34 ++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index b57364434347c7..6b46b8c499012e 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1833,22 +1833,25 @@ For example, if you have an `examples` directory and you want all updates to tho } ``` -If you wish to limit Renovate to apply configuration rules to certain files in the root repository directory, you have to use `matchPaths` with either a partial string match or a minimatch pattern. +If you wish to limit Renovate to apply configuration rules to certain files in the root repository directory, you have to use `matchPaths` with a `minimatch` pattern or use [`matchFiles`](#matchfiles) with an exact match. For example you have multiple `package.json` and want to use `dependencyDashboardApproval` only on the root `package.json`: ```json { "packageRules": [ { - "matchPaths": ["+(package.json)"], + "matchFiles": ["package.json"], "dependencyDashboardApproval": true } ] } ``` -Important to know: Renovate will evaluate all `packageRules` and not stop once it gets a first match. -You should order your `packageRules` in ascending order of importance so that more important rules come later and can override settings from earlier rules if needed. + +!!! tip + Renovate evaluates all `packageRules` and does not stop after the first match. + Order your `packageRules` so the least important rules are at the _top_, and the most important rules at the _bottom_. + This way important rules override settings from earlier rules if needed. !!! warning @@ -2138,11 +2141,17 @@ Renovate will compare `matchFiles` for an exact match against the dependency's p For example the following would match `package.json` but not `package/frontend/package.json`: -``` - "matchFiles": ["package.json"], +```json +{ + "packageRules": [ + { + "matchFiles": ["package.json"] + } + ] +} ``` -Use `matchPaths` instead if you need more flexible matching. +Use [`matchPaths`](#matchpaths) instead if you need more flexible matching. ### matchDepNames @@ -2204,9 +2213,9 @@ Just like the earlier `matchPackagePatterns` example, the above will configure ` ### matchPaths -Renovate finds the file(s) listed in `matchPaths` with a minimatch glob pattern. +Renovate finds the file(s) listed in `matchPaths` with a `minimatch` glob pattern. -For example the following would match any `package.json`, including files like `backend/package.json`: +For example the following matches any `package.json`, including files like `backend/package.json`: ```json { @@ -2220,7 +2229,7 @@ For example the following would match any `package.json`, including files like ` } ``` -The following would match any file in directories starting with `app/`: +The following matches any file in directories starting with `app/`: ```json { @@ -2234,6 +2243,11 @@ The following would match any file in directories starting with `app/`: } ``` + +!!! warning + Partial matches for `matchPaths` are deprecated. + Please use a `minimatch` glob pattern or switch to [`matchFiles`](#matchfiles) if you need exact matching. + ### matchSourceUrlPrefixes Here's an example of where you use this to group together all packages from the `renovatebot` GitHub org: