diff --git a/lib/config/types.ts b/lib/config/types.ts index 2c49c83da1584f9e926bf13e843d313388e53062..f6e8d56952fdbcd46cce7ec6514dbfe4d550c0e0 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -34,6 +34,9 @@ export interface RenovateSharedConfig { manager?: string; commitMessage?: string; commitMessagePrefix?: string; + commitMessageTopic?: string; + commitMessageAction?: string; + commitMessageExtra?: string; confidential?: boolean; customChangelogUrl?: string; draftPR?: boolean; @@ -253,7 +256,7 @@ export interface RenovateConfig secrets?: Record<string, string>; constraints?: Record<string, string>; - skipInstalls?: boolean; + skipInstalls?: boolean | null; constraintsFiltering?: ConstraintsFilter; } diff --git a/lib/modules/manager/npm/extract/index.spec.ts b/lib/modules/manager/npm/extract/index.spec.ts index e6672bd53f89ee804827ddf985112d45f78a2b84..1932f6fd8525aba670af2afd55818c7cc9a77cf9 100644 --- a/lib/modules/manager/npm/extract/index.spec.ts +++ b/lib/modules/manager/npm/extract/index.spec.ts @@ -1,6 +1,6 @@ import { Fixtures } from '../../../../../test/fixtures'; import { fs } from '../../../../../test/util'; -import { getConfig } from '../../../../config/defaults'; +import type { ExtractConfig } from '../../types'; import * as npmExtract from '.'; jest.mock('../../../../util/fs'); @@ -8,8 +8,9 @@ const realFs = jest.requireActual<typeof import('../../../../util/fs')>( '../../../../util/fs' ); -// TODO: fix types -const defaultConfig = getConfig(); +const defaultExtractConfig = { + skipInstalls: null, +} satisfies ExtractConfig; const input01Content = Fixtures.get('inputs/01.json', '..'); const input02Content = Fixtures.get('inputs/02.json', '..'); @@ -35,7 +36,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( 'not json', 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toBeNull(); }); @@ -44,7 +45,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( invalidNameContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [{ skipReason: 'invalid-name' }], @@ -55,7 +56,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( vendorisedContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toBeNull(); }); @@ -65,7 +66,7 @@ describe('modules/manager/npm/extract/index', () => { npmExtract.extractPackageFile( '{ "renovate": {} }', 'backend/package.json', - defaultConfig + defaultExtractConfig ) ).rejects.toThrow(); }); @@ -74,7 +75,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( '{ "renovate": {} }', 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toBeNull(); }); @@ -83,7 +84,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( '{"dependencies": true, "devDependencies": []}', 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toBeNull(); }); @@ -92,7 +93,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [ @@ -119,7 +120,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01GlobContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res?.deps).toHaveLength(13); expect(res).toMatchSnapshot({ @@ -154,7 +155,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { @@ -183,7 +184,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - { ...defaultConfig, npmrc: 'config-npmrc' } + { ...defaultExtractConfig, npmrc: 'config-npmrc' } ); expect(res?.npmrc).toBe('config-npmrc'); }); @@ -281,7 +282,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { @@ -302,7 +303,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { @@ -323,7 +324,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { @@ -344,7 +345,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( workspacesSimpleContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { workspacesPackages: ['packages/*'] }, @@ -361,7 +362,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( workspacesSimpleContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { workspacesPackages: ['packages/*'] }, @@ -378,7 +379,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( workspacesContent, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ managerData: { workspacesPackages: ['packages/*'] }, @@ -411,7 +412,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ extractedConstraints: { @@ -494,7 +495,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [ @@ -525,7 +526,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [ @@ -568,7 +569,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchObject({ @@ -622,7 +623,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [ @@ -735,7 +736,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ deps: [ @@ -760,7 +761,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( input01Content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot(); }); @@ -773,7 +774,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( pJsonStr, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchSnapshot({ extractedConstraints: { yarn: '3.0.0' }, @@ -815,7 +816,7 @@ describe('modules/manager/npm/extract/index', () => { const res = await npmExtract.extractPackageFile( content, 'package.json', - defaultConfig + defaultExtractConfig ); expect(res).toMatchObject({ deps: [ diff --git a/lib/modules/manager/npm/post-update/lerna.ts b/lib/modules/manager/npm/post-update/lerna.ts index 72db5a57ad7aa020b70e68755cd8276faae39bb5..da3614f85f6123ec3f2bb5b8e7c72aca1b7cc4f0 100644 --- a/lib/modules/manager/npm/post-update/lerna.ts +++ b/lib/modules/manager/npm/post-update/lerna.ts @@ -40,7 +40,7 @@ export async function generateLockFiles( lockFileDir: string, config: PostUpdateConfig, env: NodeJS.ProcessEnv, - skipInstalls?: boolean + skipInstalls?: boolean | null ): Promise<GenerateLockFileResult> { const lernaClient = lernaPackageFile.managerData?.lernaClient; if (!is.nonEmptyString(lernaClient)) { diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 27edf51ab2c2197db4a63652779d3c285c0e97ce..fffd4ac2ddd717440c292c21ca8f1b913b7ba07d 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -19,7 +19,7 @@ export interface ExtractConfig extends CustomExtractConfig { registryAliases?: Record<string, string>; npmrc?: string; npmrcMerge?: boolean; - skipInstalls?: boolean; + skipInstalls?: boolean | null; } export interface CustomExtractConfig extends RegexManagerTemplates { @@ -63,7 +63,7 @@ export interface PackageFileContent<T = Record<string, any>> lockFiles?: string[]; npmrc?: string; packageFileVersion?: string; - skipInstalls?: boolean; + skipInstalls?: boolean | null; matchStrings?: string[]; matchStringsStrategy?: MatchStringsStrategy; } @@ -269,7 +269,7 @@ export interface PostUpdateConfig<T = Record<string, any>> ManagerData<T> { updatedPackageFiles?: FileChange[]; postUpdateOptions?: string[]; - skipInstalls?: boolean; + skipInstalls?: boolean | null; ignoreScripts?: boolean; packageFile?: string; diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts index 2f436d4bf62d8ac4f7fc6078dec85b13b57d95b8..040726a9034f8e7bf320d66e1cfd71e6fe4bca99 100644 --- a/lib/workers/repository/updates/generate.spec.ts +++ b/lib/workers/repository/updates/generate.spec.ts @@ -1,26 +1,39 @@ import { codeBlock } from 'common-tags'; -import { getConfig, partial } from '../../../../test/util'; -import type { RenovateConfig, UpdateType } from '../../../config/types'; +import { getConfig } from '../../../../test/util'; +import type { UpdateType } from '../../../config/types'; import { NpmDatasource } from '../../../modules/datasource/npm'; import type { BranchUpgradeConfig } from '../../types'; import { generateBranchConfig } from './generate'; -let defaultConfig: RenovateConfig; +const { + commitMessage, + commitMessagePrefix, + commitMessageAction, + commitMessageTopic, + commitMessageExtra, +} = getConfig(); +let requiredDefaultOptions = {}; beforeEach(() => { jest.resetAllMocks(); - defaultConfig = getConfig(); + requiredDefaultOptions = { + commitMessage, + commitMessagePrefix, + commitMessageAction, + commitMessageTopic, + commitMessageExtra, + }; }); describe('workers/repository/updates/generate', () => { describe('generateBranchConfig()', () => { it('does not group single upgrade', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', + branchName: 'some-branch', depName: 'some-dep', groupName: 'some-group', - branchName: 'some-branch', prTitle: 'some-title', releaseTimestamp: '2017-02-07T20:01:41+00:00', foo: 1, @@ -28,7 +41,7 @@ describe('workers/repository/updates/generate', () => { foo: 2, }, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(1); expect(res.groupName).toBeUndefined(); @@ -36,14 +49,14 @@ describe('workers/repository/updates/generate', () => { }); it('handles lockFileMaintenance', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', branchName: 'some-branch', prTitle: 'some-title', isLockFileMaintenance: true, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res).toMatchSnapshot({ branchName: 'some-branch', @@ -60,7 +73,7 @@ describe('workers/repository/updates/generate', () => { }); it('handles lockFileUpdate', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', branchName: 'some-branch', @@ -72,7 +85,7 @@ describe('workers/repository/updates/generate', () => { newValue: '^1.0.0', newVersion: '1.0.1', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res).toMatchSnapshot({ branchName: 'some-branch', @@ -102,7 +115,7 @@ describe('workers/repository/updates/generate', () => { }); it('does not group same upgrades', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -125,14 +138,14 @@ describe('workers/repository/updates/generate', () => { foo: 2, }, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(1); expect(res.groupName).toBeUndefined(); }); it('groups multiple upgrades same version', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch: BranchUpgradeConfig[] = [ { manager: 'some-manager', depName: 'some-dep', @@ -191,7 +204,7 @@ describe('workers/repository/updates/generate', () => { releaseTimestamp: '2017-02-06T20:01:41+00:00', automerge: false, }, - ]); + ]; const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.groupName).toBeDefined(); @@ -204,7 +217,7 @@ describe('workers/repository/updates/generate', () => { }); it('groups major updates with different versions but same newValue, no recreateClosed', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -233,14 +246,14 @@ describe('workers/repository/updates/generate', () => { isMajor: true, newMajor: 5, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.groupName).toBeDefined(); expect(res.recreateClosed).toBeFalsy(); }); it('groups multiple digest updates immortally', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -263,84 +276,89 @@ describe('workers/repository/updates/generate', () => { newDigest: 'sha256:abcdef987654321', isDigest: true, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.groupName).toBeDefined(); expect(res.recreateClosed).toBeTrue(); }); it('Grouped pin & pinDigest can be recreated', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, isPinDigest: true, updateType: 'pinDigest', newValue: 'v2', newDigest: 'dc323e67f16fb5f7663d20ff7941f27f5809e9b6', - } as BranchUpgradeConfig, + }, { - ...defaultConfig, + ...requiredDefaultOptions, updateType: 'pin', isPin: true, newValue: "'2.2.0'", newVersion: '2.2.0', newMajor: 2, - } as BranchUpgradeConfig, - ]; + }, + ] as BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.recreateClosed).toBeTrue(); }); it('Grouped pin can be recreated', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, updateType: 'pin', isPin: true, newValue: "'2.2.0'", newVersion: '2.2.0', newMajor: 2, - } as BranchUpgradeConfig, + manager: 'some-manager', + branchName: 'some-branch', + }, { - ...defaultConfig, + ...requiredDefaultOptions, updateType: 'pin', isPin: true, newValue: "'3.2.0'", newVersion: '3.2.0', newMajor: 3, - } as BranchUpgradeConfig, - ]; + manager: 'some-manager', + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.recreateClosed).toBeTrue(); }); it('grouped pinDigest can be recreated', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, isPinDigest: true, newDigest: 'abcd', newValue: 'v3', updateType: 'pinDigest', - } as BranchUpgradeConfig, + manager: 'some-manager', + branchName: 'some-branch', + }, { - ...defaultConfig, + ...requiredDefaultOptions, isPinDigest: true, newDigest: 'dcba', newMajor: 2, newValue: 'v2', updateType: 'pinDigest', - } as BranchUpgradeConfig, - ]; + manager: 'some-manager', + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.recreateClosed).toBeTrue(); }); it('groups multiple upgrades different version', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'depB', @@ -379,7 +397,7 @@ describe('workers/repository/updates/generate', () => { updateType: 'minor', separateMinorPatch: true, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res).toMatchObject({ foo: 2, @@ -393,7 +411,7 @@ describe('workers/repository/updates/generate', () => { }); it('groups multiple upgrades different version but same value', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'depB', @@ -426,7 +444,7 @@ describe('workers/repository/updates/generate', () => { }, releaseTimestamp: '2017-02-08T20:01:41+00:00', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.singleVersion).toBeUndefined(); @@ -436,7 +454,7 @@ describe('workers/repository/updates/generate', () => { }); it('groups multiple upgrades different value but same version', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'depB', @@ -469,7 +487,7 @@ describe('workers/repository/updates/generate', () => { }, releaseTimestamp: '2017-02-08T20:01:41+00:00', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.singleVersion).toBeUndefined(); @@ -479,7 +497,7 @@ describe('workers/repository/updates/generate', () => { }); it('groups multiple digest updates', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'foo/bar', @@ -510,7 +528,7 @@ describe('workers/repository/updates/generate', () => { foo: 2, }, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.singleVersion).toBeUndefined(); @@ -519,24 +537,25 @@ describe('workers/repository/updates/generate', () => { }); it('pins digest to table', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, depName: 'foo-image', newDigest: 'abcdefg987612345', currentDigest: '', updateType: 'pinDigest', isPinDigest: true, - } as BranchUpgradeConfig, - ]; + manager: 'some-manager', + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.upgrades[0].displayFrom).toBe(''); expect(res.upgrades[0].displayTo).toBe('abcdefg'); }); it('fixes different messages', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'depA', @@ -569,17 +588,16 @@ describe('workers/repository/updates/generate', () => { }, releaseTimestamp: '2017-02-08T20:01:41+00:00', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.foo).toBe(1); expect(res.groupName).toBeUndefined(); }); it('uses semantic commits', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', semanticCommits: 'enabled', @@ -592,8 +610,9 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(package): update dependency some-dep to v1.2.0' @@ -604,10 +623,9 @@ describe('workers/repository/updates/generate', () => { }); it('scopes monorepo commits', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', packageFile: 'package.json', @@ -622,8 +640,9 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('chore(): update dependency some-dep to v1.2.0'); expect(res.commitMessage).toBe( @@ -632,10 +651,9 @@ describe('workers/repository/updates/generate', () => { }); it('scopes monorepo commits with nested package files using parent directory', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, commitBodyTable: false, manager: 'some-manager', depName: 'some-dep', @@ -651,8 +669,9 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(bar): update dependency some-dep to v1.2.0' @@ -663,10 +682,9 @@ describe('workers/repository/updates/generate', () => { }); it('scopes monorepo commits with nested package files using base directory', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', packageFile: 'foo/bar/package.json', @@ -681,8 +699,9 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(foo/bar): update dependency some-dep to v1.2.0' @@ -693,11 +712,9 @@ describe('workers/repository/updates/generate', () => { }); it('use prettyVersion in pr title when there is a v', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, - manager: 'some-manager', + ...requiredDefaultOptions, depName: 'some-dep', packageFile: 'foo/bar/package.json', packageFileDir: 'foo/bar', @@ -708,8 +725,10 @@ describe('workers/repository/updates/generate', () => { newValue: 'v1.2.0', isSingleVersion: true, newVersion: 'v1.2.0', - } as BranchUpgradeConfig, - ]; + manager: 'some-manager', + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(foo/bar): update dependency some-dep v1.2.0' @@ -720,10 +739,9 @@ describe('workers/repository/updates/generate', () => { }); it('use prettyVersion in pr title there is no v', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', packageFile: 'foo/bar/package.json', @@ -735,8 +753,9 @@ describe('workers/repository/updates/generate', () => { newValue: '3.2.0', newVersion: '3.2.0', newMajor: 3, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(foo/bar): update dependency some-dep v3.2.0' @@ -747,10 +766,9 @@ describe('workers/repository/updates/generate', () => { }); it('use newMajor in pr title with v', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', packageFile: 'foo/bar/package.json', @@ -762,8 +780,9 @@ describe('workers/repository/updates/generate', () => { newValue: '3.2.0', newVersion: '3.2.0', newMajor: 3, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('chore(foo/bar): update dependency some-dep v3'); expect(res.commitMessage).toBe( @@ -772,10 +791,9 @@ describe('workers/repository/updates/generate', () => { }); it('Default commitMessageExtra pr title', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', packageFile: 'foo/bar/package.json', @@ -786,8 +804,9 @@ describe('workers/repository/updates/generate', () => { newValue: 'v1.2.0', isSingleVersion: true, newVersion: 'v1.2.0', - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(foo/bar): update dependency some-dep to v1.2.0' @@ -798,41 +817,41 @@ describe('workers/repository/updates/generate', () => { }); it('adds commit message body', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', commitBody: '[skip-ci]', newValue: '1.2.0', isSingleVersion: true, newVersion: '1.2.0', - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('Update dependency some-dep to v1.2.0'); expect(res.commitMessage).toBe('Update dependency some-dep to v1.2.0'); }); it('supports manual prTitle', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', prTitle: 'Upgrade {{depName}}', toLowerCase: true, - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('upgrade some-dep'); expect(res.commitMessage).toBe('update dependency some-dep to'); }); it('handles @types specially', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', commitBodyTable: true, @@ -869,7 +888,7 @@ describe('workers/repository/updates/generate', () => { newValue: '1.0.0', group: {}, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.recreateClosed).toBeFalse(); expect(res.groupName).toBeUndefined(); @@ -897,7 +916,7 @@ describe('workers/repository/updates/generate', () => { }); it('handles @types specially (reversed)', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -930,7 +949,7 @@ describe('workers/repository/updates/generate', () => { labels: ['a'], group: {}, }, - ]); + ] satisfies BranchUpgradeConfig[]; expect(generateBranchConfig(branch)).toMatchSnapshot({ upgrades: [ { @@ -958,8 +977,7 @@ describe('workers/repository/updates/generate', () => { }); it('handles upgrades', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -970,7 +988,7 @@ describe('workers/repository/updates/generate', () => { fileReplacePosition: 5, }, { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', branchName: 'some-branch', @@ -982,7 +1000,7 @@ describe('workers/repository/updates/generate', () => { fileReplacePosition: 1, }, { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', branchName: 'some-branch', @@ -994,7 +1012,7 @@ describe('workers/repository/updates/generate', () => { fileReplacePosition: 2, }, { - ...defaultConfig, + ...requiredDefaultOptions, manager: 'some-manager', depName: 'some-dep', branchName: 'some-branch', @@ -1006,13 +1024,13 @@ describe('workers/repository/updates/generate', () => { updateType: 'patch' as UpdateType, fileReplacePosition: 0, }, - ] as BranchUpgradeConfig[]; + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toMatchSnapshot('some-title (patch)'); }); it('combines prBodyColumns', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', branchName: 'some-branch', @@ -1023,13 +1041,13 @@ describe('workers/repository/updates/generate', () => { branchName: 'some-branch', prBodyColumns: ['column-c', 'column-b', 'column-a'], }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prBodyColumns).toEqual(['column-a', 'column-b', 'column-c']); }); it('sorts upgrades, without position first', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep1', @@ -1062,7 +1080,7 @@ describe('workers/repository/updates/generate', () => { newValue: '0.6.0', fileReplacePosition: undefined, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect( res.upgrades.map((upgrade) => upgrade.fileReplacePosition) @@ -1070,7 +1088,7 @@ describe('workers/repository/updates/generate', () => { }); it('passes through pendingChecks', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -1087,14 +1105,14 @@ describe('workers/repository/updates/generate', () => { prTitle: 'some-title', pendingChecks: true, }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.pendingChecks).toBeTrue(); expect(res.upgrades).toHaveLength(2); }); it('filters pendingChecks', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -1110,14 +1128,14 @@ describe('workers/repository/updates/generate', () => { branchName: 'some-branch', prTitle: 'some-title', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.pendingChecks).toBeUndefined(); expect(res.upgrades).toHaveLength(1); }); it('displays pending versions', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep', @@ -1141,7 +1159,7 @@ describe('workers/repository/updates/generate', () => { prTitle: 'Two pending versions', pendingVersions: ['1.1.0', '1.1.1'], }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.upgrades.map((u) => u.displayPending)).toStrictEqual([ '', @@ -1151,7 +1169,7 @@ describe('workers/repository/updates/generate', () => { }); it('merge excludeCommitPaths if appears in upgrade', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', depName: 'some-dep1', @@ -1175,7 +1193,7 @@ describe('workers/repository/updates/generate', () => { newValue: '0.9.0', excludeCommitPaths: ['some/path', 'some/other-manager/path'], }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); const excludeCommitPaths = res.excludeCommitPaths ?? []; expect(excludeCommitPaths.sort()).toStrictEqual( @@ -1184,9 +1202,9 @@ describe('workers/repository/updates/generate', () => { }); it('generates pretty version name properly', () => { - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, depName: 'some-dep', isSingleVersion: true, manager: 'some-manager', @@ -1195,8 +1213,9 @@ describe('workers/repository/updates/generate', () => { semanticCommits: 'enabled', semanticCommitScope: 'package', semanticCommitType: 'chore', - } as BranchUpgradeConfig, - ]; + branchName: 'some-branch', + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe( 'chore(package): update dependency some-dep to foo-pkg-v3.2.1' @@ -1207,23 +1226,22 @@ describe('workers/repository/updates/generate', () => { }); it('prevents issue with duplicating "v" character', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { manager: 'some-manager', branchName: 'some-branch', commitMessage: 'update to vv1.2.0', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('update to v1.2.0'); expect(res.commitMessage).toBe('update to v1.2.0'); }); it('apply semanticCommits and commitMessagePrefix together', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, branchName: 'some-branch', commitMessagePrefix: 'PATCH:', depName: 'some-dep', @@ -1231,8 +1249,8 @@ describe('workers/repository/updates/generate', () => { newValue: '1.2.0', semanticCommits: 'enabled', semanticCommitScope: null, - } as BranchUpgradeConfig, - ]; + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('PATCH: Update dependency some-dep to 1.2.0'); expect(res.commitMessage).toBe( @@ -1241,7 +1259,7 @@ describe('workers/repository/updates/generate', () => { }); it('dedupes duplicate table rows', () => { - const branch = partial<BranchUpgradeConfig>([ + const branch = [ { commitBodyTable: true, manager: 'some-manager', @@ -1286,7 +1304,7 @@ describe('workers/repository/updates/generate', () => { currentVersion: '5.1.1', newVersion: '5.1.2', }, - ]); + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.commitMessage?.trim()).toBe(codeBlock` | datasource | package | from | to | @@ -1304,18 +1322,17 @@ describe('workers/repository/updates/generate', () => { }); it('using commitMessagePrefix without separator', () => { - // TODO #7154 incompatible types - const branch: BranchUpgradeConfig[] = [ + const branch = [ { - ...defaultConfig, + ...requiredDefaultOptions, branchName: 'some-branch', commitMessagePrefix: '🆙', depName: 'some-dep', manager: 'some-manager', newValue: '1.2.0', commitMessageAction: 'Update', - } as BranchUpgradeConfig, - ]; + }, + ] satisfies BranchUpgradeConfig[]; const res = generateBranchConfig(branch); expect(res.prTitle).toBe('🆙 Update dependency some-dep to 1.2.0'); expect(res.commitMessage).toBe('🆙 Update dependency some-dep to 1.2.0');