diff --git a/lib/workers/repository/config-migration/pr/index.spec.ts b/lib/workers/repository/config-migration/pr/index.spec.ts index fc1d52328a9762..40ffef860b6770 100644 --- a/lib/workers/repository/config-migration/pr/index.spec.ts +++ b/lib/workers/repository/config-migration/pr/index.spec.ts @@ -169,6 +169,40 @@ describe('workers/repository/config-migration/pr/index', () => { expect(platform.createPr.mock.calls[0][0].prBody).toMatchSnapshot(); }); + it('creates non-semantic PR title', async () => { + await ensureConfigMigrationPr( + { + ...config, + prHeader: '\r\r\nThis should not be the first line of the PR', + prFooter: + 'There should be several empty lines at the end of the PR\r\n\n\n', + }, + migratedData + ); + expect(platform.createPr).toHaveBeenCalledTimes(1); + expect(platform.createPr.mock.calls[0][0].prTitle).toBe( + 'Migrate config renovate.json' + ); + }); + + it('creates semantic PR title', async () => { + await ensureConfigMigrationPr( + { + ...config, + commitMessagePrefix: '', + semanticCommits: 'enabled', + prHeader: '\r\r\nThis should not be the first line of the PR', + prFooter: + 'There should be several empty lines at the end of the PR\r\n\n\n', + }, + migratedData + ); + expect(platform.createPr).toHaveBeenCalledTimes(1); + expect(platform.createPr.mock.calls[0][0].prTitle).toBe( + 'chore(config): migrate config renovate.json' + ); + }); + it('creates PR with footer and header using templating', async () => { config.baseBranch = 'some-branch'; config.repository = 'test'; diff --git a/lib/workers/repository/config-migration/pr/index.ts b/lib/workers/repository/config-migration/pr/index.ts index 02a3cbad3ee36e..9bb580a002b117 100644 --- a/lib/workers/repository/config-migration/pr/index.ts +++ b/lib/workers/repository/config-migration/pr/index.ts @@ -11,6 +11,7 @@ import { joinUrlParts } from '../../../../util/url'; import { getPlatformPrOptions } from '../../update/pr'; import { prepareLabels } from '../../update/pr/labels'; import { addParticipants } from '../../update/pr/participants'; +import { ConfigMigrationCommitMessageFactory } from '../branch/commit-message'; import type { MigratedData } from '../branch/migrated-data'; import { getMigrationBranchName } from '../common'; @@ -24,7 +25,12 @@ export async function ensureConfigMigrationPr( 'configuration-options/#configmigration' ); const branchName = getMigrationBranchName(config); - const prTitle = 'Migrate Renovate config'; + const commitMessageFactory = new ConfigMigrationCommitMessageFactory( + config, + migratedConfigData.filename + ); + + const prTitle = commitMessageFactory.create().toString(); const existingPr = await platform.getBranchPr(branchName); const filename = migratedConfigData.filename; logger.debug('Filling in config migration PR template');