diff --git a/lib/config/global.ts b/lib/config/global.ts index a8810c47fc8..25d4f3a295c 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -42,6 +42,7 @@ export class GlobalConfig { 'onboarding', 'onboardingAutoCloseAge', 'onboardingBranch', + 'onboardingConfigFileName', 'onboardingNoDeps', 'onboardingPrTitle', 'platform', diff --git a/lib/config/inherit.ts b/lib/config/inherit.ts index 076ce9881ef..1922f163017 100644 --- a/lib/config/inherit.ts +++ b/lib/config/inherit.ts @@ -9,6 +9,7 @@ export class InheritConfig { 'onboarding', 'onboardingAutoCloseAge', 'onboardingBranch', + 'onboardingConfigFileName', 'onboardingNoDeps', 'onboardingPrTitle', ]; diff --git a/lib/config/types.ts b/lib/config/types.ts index d9e262e5085..a6eecb30d69 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -168,6 +168,7 @@ export interface GlobalInheritableConfig { onboarding?: boolean; onboardingAutoCloseAge?: number; onboardingBranch?: string; + onboardingConfigFileName?: string; onboardingNoDeps?: 'auto' | 'enabled' | 'disabled'; onboardingPrTitle?: string; } diff --git a/lib/workers/repository/init/apis.spec.ts b/lib/workers/repository/init/apis.spec.ts index 36b57ca9ca5..ae20149b8c5 100644 --- a/lib/workers/repository/init/apis.spec.ts +++ b/lib/workers/repository/init/apis.spec.ts @@ -1,6 +1,7 @@ import type { RenovateConfig } from '~test/util.ts'; import { platform } from '~test/util.ts'; import { getConfig } from '../../../config/defaults.ts'; +import { GlobalConfig } from '../../../config/global.ts'; import { REPOSITORY_DISABLED, REPOSITORY_FORKED, @@ -12,6 +13,7 @@ describe('workers/repository/init/apis', () => { let config: RenovateConfig; beforeEach(() => { + GlobalConfig.reset(); config = { ...getConfig() }; config.errors = []; config.warnings = []; @@ -120,6 +122,7 @@ describe('workers/repository/init/apis', () => { }); it('uses the onboardingConfigFileName if set', async () => { + GlobalConfig.set({ onboardingConfigFileName: '.github/renovate.json' }); platform.initRepo.mockResolvedValueOnce({ defaultBranch: 'master', isFork: false, diff --git a/lib/workers/repository/init/apis.ts b/lib/workers/repository/init/apis.ts index 3974432f589..658b8f9e610 100644 --- a/lib/workers/repository/init/apis.ts +++ b/lib/workers/repository/init/apis.ts @@ -28,7 +28,7 @@ async function validateOptimizeForDisabled( config: RenovateConfig, ): Promise { if (config.optimizeForDisabled) { - const renovateConfig = await getJsonFile(getDefaultConfigFileName(config)); + const renovateConfig = await getJsonFile(getDefaultConfigFileName()); if (renovateConfig?.enabled === false) { throw new Error(REPOSITORY_DISABLED_BY_CONFIG); } @@ -60,7 +60,7 @@ async function validateOptimizeForDisabled( async function validateIncludeForks(config: RenovateConfig): Promise { if (config.forkProcessing !== 'enabled' && config.isFork) { - const defaultConfigFile = getDefaultConfigFileName(config); + const defaultConfigFile = getDefaultConfigFileName(); const repoConfig = await getJsonFile(defaultConfigFile); if (!repoConfig) { logger.debug( diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts index de0c9e476b1..8ac4b8067cd 100644 --- a/lib/workers/repository/init/merge.ts +++ b/lib/workers/repository/init/merge.ts @@ -196,7 +196,7 @@ export async function mergeRenovateConfig( logger.debug( 'When mode=silent and repo has no config file, we use the onboarding config as repo config', ); - const configFileName = getDefaultConfigFileName(config); + const configFileName = getDefaultConfigFileName(); repoConfig = { configFileName, configFileParsed: await getOnboardingConfig(config), diff --git a/lib/workers/repository/onboarding/branch/create.spec.ts b/lib/workers/repository/onboarding/branch/create.spec.ts index aeca273ce4e..f01663df92f 100644 --- a/lib/workers/repository/onboarding/branch/create.spec.ts +++ b/lib/workers/repository/onboarding/branch/create.spec.ts @@ -16,7 +16,10 @@ describe('workers/repository/onboarding/branch/create', () => { beforeEach(() => { config = getConfig(); - GlobalConfig.set({ onboardingBranch: config.onboardingBranch }); + GlobalConfig.set({ + onboardingBranch: config.onboardingBranch, + onboardingConfigFileName: config.onboardingConfigFileName, + }); }); describe('createOnboardingBranch', () => { @@ -228,7 +231,7 @@ describe('workers/repository/onboarding/branch/create', () => { const message = `${prefix}: add renovate.json`; config.semanticCommits = 'enabled'; - config.onboardingConfigFileName = undefined; + GlobalConfig.set({ onboardingBranch: config.onboardingBranch }); await createOnboardingBranch(config); @@ -253,7 +256,10 @@ describe('workers/repository/onboarding/branch/create', () => { const message = `${prefix}: add renovate.json`; config.semanticCommits = 'enabled'; - config.onboardingConfigFileName = 'superConfigFile.yaml'; + GlobalConfig.set({ + onboardingBranch: config.onboardingBranch, + onboardingConfigFileName: 'superConfigFile.yaml', + }); await createOnboardingBranch(config); @@ -279,7 +285,10 @@ describe('workers/repository/onboarding/branch/create', () => { const message = `${prefix}: add ${path}`; config.semanticCommits = 'enabled'; - config.onboardingConfigFileName = path; + GlobalConfig.set({ + onboardingBranch: config.onboardingBranch, + onboardingConfigFileName: path, + }); await createOnboardingBranch(config); @@ -305,7 +314,10 @@ describe('workers/repository/onboarding/branch/create', () => { const message = `${prefix}: add ${path}`; config.semanticCommits = 'enabled'; - config.onboardingConfigFileName = path; + GlobalConfig.set({ + onboardingBranch: config.onboardingBranch, + onboardingConfigFileName: path, + }); await createOnboardingBranch(config); diff --git a/lib/workers/repository/onboarding/branch/create.ts b/lib/workers/repository/onboarding/branch/create.ts index 6d23361a051..a2d2ea3ecf3 100644 --- a/lib/workers/repository/onboarding/branch/create.ts +++ b/lib/workers/repository/onboarding/branch/create.ts @@ -12,7 +12,7 @@ export async function createOnboardingBranch( config: Partial, ): Promise { logger.debug('createOnboardingBranch()'); - const configFile = getDefaultConfigFileName(config); + const configFile = getDefaultConfigFileName(); // TODO #22198 const contents = await getOnboardingConfigContents(config, configFile); logger.debug('Creating onboarding branch'); diff --git a/lib/workers/repository/onboarding/branch/rebase.spec.ts b/lib/workers/repository/onboarding/branch/rebase.spec.ts index 2a7fc6489a7..b16828ad3f0 100644 --- a/lib/workers/repository/onboarding/branch/rebase.spec.ts +++ b/lib/workers/repository/onboarding/branch/rebase.spec.ts @@ -12,18 +12,16 @@ const configModule = vi.mocked(_config); vi.mock('./config.ts'); describe('workers/repository/onboarding/branch/rebase', () => { - beforeAll(() => { - GlobalConfig.set({ - localDir: '', - platform: 'github', - }); - }); - describe('rebaseOnboardingBranch()', () => { let config: RenovateConfig; const hash = 'hash'; beforeEach(() => { + GlobalConfig.set({ + localDir: '', + onboardingConfigFileName: 'renovate.json', + platform: 'github', + }); memCache.init(); // using default options @@ -34,7 +32,6 @@ describe('workers/repository/onboarding/branch/rebase', () => { onboardingConfig: { $schema: 'https://docs.renovatebot.com/renovate-schema.json', }, - onboardingConfigFileName: 'renovate.json', repository: 'some/repo', }; configModule.getOnboardingConfigContents.mockResolvedValue(''); @@ -53,13 +50,12 @@ describe('workers/repository/onboarding/branch/rebase', () => { }); it('uses the onboardingConfigFileName if set', async () => { - await rebaseOnboardingBranch( - { - ...config, - onboardingConfigFileName: '.github/renovate.json', - }, - hash, - ); + GlobalConfig.set({ + localDir: '', + onboardingConfigFileName: '.github/renovate.json', + platform: 'github', + }); + await rebaseOnboardingBranch(config, hash); expect(scm.commitAndPush).toHaveBeenCalledTimes(1); expect(scm.commitAndPush.mock.calls[0][0].message).toContain( '.github/renovate.json', @@ -70,13 +66,8 @@ describe('workers/repository/onboarding/branch/rebase', () => { }); it('falls back to "renovate.json" if onboardingConfigFileName is not set', async () => { - await rebaseOnboardingBranch( - { - ...config, - onboardingConfigFileName: undefined, - }, - hash, - ); + GlobalConfig.set({ localDir: '', platform: 'github' }); + await rebaseOnboardingBranch(config, hash); expect(scm.commitAndPush).toHaveBeenCalledTimes(1); expect(scm.commitAndPush.mock.calls[0][0].message).toContain( 'renovate.json', diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts index e9f5c4c7099..a7ed49e0a0b 100644 --- a/lib/workers/repository/onboarding/branch/rebase.ts +++ b/lib/workers/repository/onboarding/branch/rebase.ts @@ -23,7 +23,7 @@ export async function rebaseOnboardingBranch( return null; } - const configFile = getDefaultConfigFileName(config); + const configFile = getDefaultConfigFileName(); const contents = await getOnboardingConfigContents(config, configFile); const currentConfigHash = toSha256(contents); diff --git a/lib/workers/repository/onboarding/common.ts b/lib/workers/repository/onboarding/common.ts index 22242c3ae1d..82d539656c1 100644 --- a/lib/workers/repository/onboarding/common.ts +++ b/lib/workers/repository/onboarding/common.ts @@ -8,10 +8,13 @@ export function getSemanticCommitPrTitle(config: RenovateConfig): string { return `${config.semanticCommitType ?? 'chore'}: ${getInheritedOrGlobal('onboardingPrTitle')}`; } -export function getDefaultConfigFileName(config: RenovateConfig): string { +export function getDefaultConfigFileName(): string { const configFileNames = getConfigFileNames(); - return configFileNames.includes(config.onboardingConfigFileName!) - ? config.onboardingConfigFileName! + const onboardingConfigFileName = getInheritedOrGlobal( + 'onboardingConfigFileName', + ); + return configFileNames.includes(onboardingConfigFileName!) + ? onboardingConfigFileName! : configFileNames[0]; } diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts index 080d665de75..e152622882f 100644 --- a/lib/workers/repository/onboarding/pr/config-description.spec.ts +++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts @@ -1,5 +1,6 @@ import type { RenovateConfig } from '~test/util.ts'; import { partial } from '~test/util.ts'; +import { GlobalConfig } from '../../../../config/global.ts'; import type { PackageFile } from '../../../../modules/manager/types.ts'; import { getConfigDesc } from './config-description.ts'; @@ -8,6 +9,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { let config: RenovateConfig; beforeEach(() => { + GlobalConfig.reset(); config = partial(); }); @@ -58,7 +60,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('contains the onboardingConfigFileName if set', () => { delete config.description; config.schedule = ['before 5am']; - config.onboardingConfigFileName = '.github/renovate.json'; + GlobalConfig.set({ onboardingConfigFileName: '.github/renovate.json' }); const res = getConfigDesc(config); expect(res).toMatchSnapshot(); expect(res.indexOf('`.github/renovate.json`')).not.toBe(-1); @@ -68,7 +70,6 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('falls back to "renovate.json" if onboardingConfigFileName is not set', () => { delete config.description; config.schedule = ['before 5am']; - config.onboardingConfigFileName = undefined; const res = getConfigDesc(config); expect(res).toMatchSnapshot(); expect(res.indexOf('`renovate.json`')).not.toBe(-1); @@ -77,7 +78,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('falls back to "renovate.json" if onboardingConfigFileName is not valid', () => { delete config.description; config.schedule = ['before 5am']; - config.onboardingConfigFileName = 'foo.bar'; + GlobalConfig.set({ onboardingConfigFileName: 'foo.bar' }); const res = getConfigDesc(config); expect(res).toMatchSnapshot(); expect(res.indexOf('`renovate.json`')).not.toBe(-1); @@ -86,7 +87,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('include retry/refresh checkbox message only if onboardingRebaseCheckbox is true', () => { delete config.description; config.schedule = ['before 5am']; - config.onboardingConfigFileName = '.github/renovate.json'; + GlobalConfig.set({ onboardingConfigFileName: '.github/renovate.json' }); config.onboardingRebaseCheckbox = true; const res = getConfigDesc(config); expect(res).toMatchSnapshot(); diff --git a/lib/workers/repository/onboarding/pr/config-description.ts b/lib/workers/repository/onboarding/pr/config-description.ts index ead1f8758f4..65f5e756f18 100644 --- a/lib/workers/repository/onboarding/pr/config-description.ts +++ b/lib/workers/repository/onboarding/pr/config-description.ts @@ -33,7 +33,7 @@ export function getConfigDesc( _packageFiles?: Record, ): string { // TODO: type (#22198) - const configFile = getDefaultConfigFileName(config); + const configFile = getDefaultConfigFileName(); logger.debug('getConfigDesc()'); logger.trace({ config }); const descriptionArr = getDescriptionArray(config); diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 6be519fc960..f3cfbccd293 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -134,8 +134,7 @@ export async function ensureOnboardingPr( return; } - const onboardingConfigHashComment = - await getOnboardingConfigHashComment(config); + const onboardingConfigHashComment = await getOnboardingConfigHashComment(); const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox); logger.debug('Filling in onboarding PR template'); let prTemplate = `Welcome to [Renovate](${ @@ -292,10 +291,8 @@ function getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string { return rebaseCheckBox; } -async function getOnboardingConfigHashComment( - config: RenovateConfig, -): Promise { - const configFile = getDefaultConfigFileName(config); +async function getOnboardingConfigHashComment(): Promise { + const configFile = getDefaultConfigFileName(); const existingContents = (await getFile(configFile, getInheritedOrGlobal('onboardingBranch'))) ?? ''; const hash = toSha256(existingContents); diff --git a/package.json b/package.json index 630de282ce4..4ea040eb761 100644 --- a/package.json +++ b/package.json @@ -278,7 +278,7 @@ "re2": "1.23.3" }, "devDependencies": { - "@biomejs/biome": "2.4.2", + "@biomejs/biome": "2.4.3", "@commander-js/extra-typings": "14.0.0", "@containerbase/eslint-plugin": "1.1.33", "@containerbase/istanbul-reports-html": "1.1.32", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7f72f23a6b..db6bf6bada2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -370,8 +370,8 @@ importers: version: 4.3.6 devDependencies: '@biomejs/biome': - specifier: 2.4.2 - version: 2.4.2 + specifier: 2.4.3 + version: 2.4.3 '@commander-js/extra-typings': specifier: 14.0.0 version: 14.0.0(commander@14.0.3) @@ -986,59 +986,59 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@2.4.2': - resolution: {integrity: sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==} + '@biomejs/biome@2.4.3': + resolution: {integrity: sha512-cBrjf6PNF6yfL8+kcNl85AjiK2YHNsbU0EvDOwiZjBPbMbQ5QcgVGFpjD0O52p8nec5O8NYw7PKw3xUR7fPAkQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.2': - resolution: {integrity: sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==} + '@biomejs/cli-darwin-arm64@2.4.3': + resolution: {integrity: sha512-eOafSFlI/CF4id2tlwq9CVHgeEqvTL5SrhWff6ZORp6S3NL65zdsR3ugybItkgF8Pf4D9GSgtbB6sE3UNgOM9w==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.2': - resolution: {integrity: sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==} + '@biomejs/cli-darwin-x64@2.4.3': + resolution: {integrity: sha512-V2+av4ilbWcBMNufTtMMXVW00nPwyIjI5qf7n9wSvUaZ+tt0EvMGk46g9sAFDJBEDOzSyoRXiSP6pCvKTOEbPA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.2': - resolution: {integrity: sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==} + '@biomejs/cli-linux-arm64-musl@2.4.3': + resolution: {integrity: sha512-QuFzvsGo8BA4Xm7jGX5idkw6BqFblcCPySMTvq0AhGYnhUej5VJIDJbmTKfHqwjHepZiC4fA+T5i6wmiZolZNw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.2': - resolution: {integrity: sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==} + '@biomejs/cli-linux-arm64@2.4.3': + resolution: {integrity: sha512-0m+O0x9FgK99FAwDK+fiDtjs2wnqq7bvfj17KJVeCkTwT/liI+Q9njJG7lwXK0iSJVXeFNRIxukpVI3SifMYAA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.2': - resolution: {integrity: sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==} + '@biomejs/cli-linux-x64-musl@2.4.3': + resolution: {integrity: sha512-qEc0OCpj/uytruQ4wLM0yWNJLZy0Up8H1Er5MW3SrstqM6J2d4XqdNA86xzCy8MQCHpoVZ3lFye3GBlIL4/ljw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.2': - resolution: {integrity: sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==} + '@biomejs/cli-linux-x64@2.4.3': + resolution: {integrity: sha512-NVqh0saIU0u5OfOp/0jFdlKRE59+XyMvWmtx0f6Nm/2OpdxBl04coRIftBbY9d1gfu+23JVv4CItAqPYrjYh5w==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.2': - resolution: {integrity: sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==} + '@biomejs/cli-win32-arm64@2.4.3': + resolution: {integrity: sha512-gRO96vrIARilv/Cp2ZnmNNL5LSZg3RO75GPp13hsLO3N4YVpE7saaMDp2bcyV48y2N2Pbit1brkGVGta0yd6VQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.2': - resolution: {integrity: sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==} + '@biomejs/cli-win32-x64@2.4.3': + resolution: {integrity: sha512-vSm/vOJe06pf14aGHfHl3Ar91Nlx4YYmohElDJ+17UbRwe99n987S/MhAlQOkONqf1utJor04ChkCPmKb8SWdw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -8083,39 +8083,39 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@2.4.2': + '@biomejs/biome@2.4.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.2 - '@biomejs/cli-darwin-x64': 2.4.2 - '@biomejs/cli-linux-arm64': 2.4.2 - '@biomejs/cli-linux-arm64-musl': 2.4.2 - '@biomejs/cli-linux-x64': 2.4.2 - '@biomejs/cli-linux-x64-musl': 2.4.2 - '@biomejs/cli-win32-arm64': 2.4.2 - '@biomejs/cli-win32-x64': 2.4.2 + '@biomejs/cli-darwin-arm64': 2.4.3 + '@biomejs/cli-darwin-x64': 2.4.3 + '@biomejs/cli-linux-arm64': 2.4.3 + '@biomejs/cli-linux-arm64-musl': 2.4.3 + '@biomejs/cli-linux-x64': 2.4.3 + '@biomejs/cli-linux-x64-musl': 2.4.3 + '@biomejs/cli-win32-arm64': 2.4.3 + '@biomejs/cli-win32-x64': 2.4.3 - '@biomejs/cli-darwin-arm64@2.4.2': + '@biomejs/cli-darwin-arm64@2.4.3': optional: true - '@biomejs/cli-darwin-x64@2.4.2': + '@biomejs/cli-darwin-x64@2.4.3': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.2': + '@biomejs/cli-linux-arm64-musl@2.4.3': optional: true - '@biomejs/cli-linux-arm64@2.4.2': + '@biomejs/cli-linux-arm64@2.4.3': optional: true - '@biomejs/cli-linux-x64-musl@2.4.2': + '@biomejs/cli-linux-x64-musl@2.4.3': optional: true - '@biomejs/cli-linux-x64@2.4.2': + '@biomejs/cli-linux-x64@2.4.3': optional: true - '@biomejs/cli-win32-arm64@2.4.2': + '@biomejs/cli-win32-arm64@2.4.3': optional: true - '@biomejs/cli-win32-x64@2.4.2': + '@biomejs/cli-win32-x64@2.4.3': optional: true '@breejs/later@4.2.0': {}