diff --git a/lib/config/__snapshots__/migration.spec.ts.snap b/lib/config/__snapshots__/migration.spec.ts.snap index 3f435e0a8d20768679fff0e6b75e55f122bc3235..48456d788edf78f8d7c405c559dc77a45a766e40 100644 --- a/lib/config/__snapshots__/migration.spec.ts.snap +++ b/lib/config/__snapshots__/migration.spec.ts.snap @@ -95,6 +95,7 @@ Object { "dependencyDashboardTitle": "foo", "enabled": true, "extends": Array [ + ":automergeBranch", "config:js-app", "config:js-lib", ":dependencyDashboard", diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index 3b2bdb7bc75e68af720835ae5bdb4fc7ae7d238b..afcfbfef681aecf340a8d8f68c88b970b47c8e01 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -30,7 +30,13 @@ describe(getName(__filename), () => { compatibility: { python: '3.7', }, - extends: [':js-app', 'config:library', ':masterIssue'], + extends: [ + ':automergeBranchMergeCommit', + 'default:js-app', + 'config:library', + ':masterIssue', + 'helpers:oddIsUnstable', + ], maintainYarnLock: true, onboarding: 'false' as never, multipleMajorPrs: true, diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 3b9bb544987baa574b906cd23cfe4b0da2c1fe09..8b4f7ad5b18d5bc7d125a29e5b7ffe60ded77636 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -5,6 +5,7 @@ import { logger } from '../logger'; import type { HostRule } from '../types'; import { clone } from '../util/clone'; import { getOptions } from './definitions'; +import { removedPresets } from './presets/common'; import type { PackageRule, RenovateConfig, RenovateOptions } from './types'; import { mergeChildConfig } from './utils'; @@ -245,22 +246,15 @@ export function migrateConfig( } const presets = migratedConfig.extends; for (let i = 0; i < presets.length; i += 1) { - let preset = presets[i]; + const preset = presets[i]; if (is.string(preset)) { - if (preset === 'config:application' || preset === ':js-app') { - preset = 'config:js-app'; - } else if (preset === ':library' || preset === 'config:library') { - preset = 'config:js-lib'; - } else if (preset.startsWith(':masterIssue')) { - preset = preset.replace('masterIssue', 'dependencyDashboard'); - } else if ( - [':unpublishSafe', 'default:unpublishSafe'].includes(preset) - ) { - preset = 'npm:unpublishSafe'; + const newPreset = removedPresets[preset]; + if (newPreset !== undefined) { + presets[i] = newPreset; } - presets[i] = preset; } } + migratedConfig.extends = migratedConfig.extends.filter(Boolean); } else if (key === 'unpublishSafe') { if (val === true) { migratedConfig.extends = migratedConfig.extends || []; diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap index 013755592929276a6bad83a7423465617213c55d..fa82ef87f41827c79d3c64849c991b994a8f7434 100644 --- a/lib/config/presets/__snapshots__/index.spec.ts.snap +++ b/lib/config/presets/__snapshots__/index.spec.ts.snap @@ -46,9 +46,7 @@ Object { ], "packageRules": Array [ Object { - "extends": Array [ - "", - ], + "extends": Array [], "groupName": "{{arg1}}", }, ], @@ -67,6 +65,15 @@ exports[`config/presets/index getPreset handles preset not found 2`] = `undefine exports[`config/presets/index getPreset handles preset not found 3`] = `undefined`; +exports[`config/presets/index getPreset handles removed presets with a migration 1`] = ` +Object { + "dependencyDashboard": true, + "description": Array [ + "Enable Renovate Dependency Dashboard creation", + ], +} +`; + exports[`config/presets/index getPreset handles throw errors 1`] = `undefined`; exports[`config/presets/index getPreset handles throw errors 2`] = `undefined`; diff --git a/lib/config/presets/common.ts b/lib/config/presets/common.ts new file mode 100644 index 0000000000000000000000000000000000000000..915c70edae0a0d2ad466dd5127b565881f0ba06c --- /dev/null +++ b/lib/config/presets/common.ts @@ -0,0 +1,23 @@ +export const removedPresets = { + ':automergeBranchMergeCommit': ':automergeBranch', + ':automergeBranchPush': ':automergeBranch', + ':base': 'config:base', + ':app': 'config:js-app', + ':js-app': 'config:js-app', + ':library': 'config:js-lib', + ':masterIssue': ':dependencyDashboard', + ':masterIssueApproval': ':dependencyDashboardApproval', + ':unpublishSafe': 'npm:unpublishSafe', + 'config:application': 'config:js-app', + 'config:base-js': 'config:base', + 'config:library': 'config:js-lib', + 'default:automergeBranchMergeCommit': ':automergeBranch', + 'default:automergeBranchPush': ':automergeBranch', + 'default:base': 'config:base', + 'default:app': 'config:js-app', + 'default:js-app': 'config:js-app', + 'default:library': 'config:js-lib', + 'default:unpublishSafe': 'npm:unpublishSafe', + 'helpers:oddIsUnstable': null, + 'helpers:oddIsUnstablePackages': null, +}; diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 5600d77e797383d1eec7ee52d4690ee2a4f0f6a8..4ac30172133ce7558d137f24d1f4cb92413eb233 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -392,6 +392,14 @@ describe(getName(__filename), () => { }); }); describe('getPreset', () => { + it('handles removed presets with a migration', async () => { + const res = await presets.getPreset(':masterIssue', {}); + expect(res).toMatchSnapshot(); + }); + it('handles removed presets with no migration', async () => { + const res = await presets.getPreset('helpers:oddIsUnstable', {}); + expect(res).toEqual({}); + }); it('gets linters', async () => { const res = await presets.getPreset('packages:linters', {}); expect(res).toMatchSnapshot(); diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index f534e26939864ea9e2bf1d572c0c84a0a72d4dc8..356d47782ecccdc07a91545dd9477ff208552abd 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -10,6 +10,7 @@ import * as massage from '../massage'; import * as migration from '../migration'; import type { GlobalConfig, RenovateConfig } from '../types'; import { mergeChildConfig } from '../utils'; +import { removedPresets } from './common'; import * as gitea from './gitea'; import * as github from './github'; import * as gitlab from './gitlab'; @@ -165,6 +166,14 @@ export async function getPreset( baseConfig?: RenovateConfig ): Promise<RenovateConfig> { logger.trace(`getPreset(${preset})`); + // Check if the preset has been removed or replaced + const newPreset = removedPresets[preset]; + if (newPreset) { + return getPreset(newPreset, baseConfig); + } + if (newPreset === null) { + return {}; + } const { presetSource, packageName, diff --git a/lib/config/presets/internal/config.ts b/lib/config/presets/internal/config.ts index a126a5ef636314f87409787f062623da6e35533a..973954bb621bb63b655d8041d1d2797a759d1aee 100644 --- a/lib/config/presets/internal/config.ts +++ b/lib/config/presets/internal/config.ts @@ -21,10 +21,6 @@ export const presets: Record<string, Preset> = { 'workarounds:all', ], }, - 'base-js': { - description: 'Base configuration for Javascript (deprecated)', - extends: ['config:base'], - }, 'js-app': { description: 'Default configuration for webapps', extends: ['config:base', ':pinAllExceptPeerDependencies'], diff --git a/lib/config/presets/internal/default.ts b/lib/config/presets/internal/default.ts index f07452536bb66a72d0a5cb150227e92ee386bbf7..b7829d5ebbdb4b34fbd7686949baf847855f5ad6 100644 --- a/lib/config/presets/internal/default.ts +++ b/lib/config/presets/internal/default.ts @@ -304,16 +304,6 @@ export const presets: Record<string, Preset> = { 'If automerging, push the new commit directly to base branch (no PR)', automergeType: 'branch', }, - automergeBranchMergeCommit: { - description: - 'If automerging, perform a merge-commit on branch (no PR) - deprecated, use :automergeBranch instead', - automergeType: 'branch-merge-commit', - }, - automergeBranchPush: { - description: - 'If automerging, push the new commit directly to base branch (no PR) - deprecated, use :automergeBranch instead', - automergeType: 'branch-push', - }, automergePr: { description: 'Raise a PR first before any automerging', automergeType: 'pr', @@ -572,18 +562,6 @@ export const presets: Record<string, Preset> = { }, ], }, - base: { - description: 'deprecated alias for config:base', - extends: ['config:base'], - }, - app: { - description: 'deprecated alias for config:js-app', - extends: ['config:js-app'], - }, - library: { - description: 'deprecated alias for config:js-lib', - extends: ['config:js-lib'], - }, disablePrControls: { description: 'Remove the checkbox controls from PRs', prBodyTemplate: diff --git a/lib/config/presets/internal/helpers.ts b/lib/config/presets/internal/helpers.ts index 5a410392704cc0dd5d2950adc0e538846987bf17..8eb0831d219aba6fd16fd48cd13b5388db129823 100644 --- a/lib/config/presets/internal/helpers.ts +++ b/lib/config/presets/internal/helpers.ts @@ -10,13 +10,6 @@ export const presets: Record<string, Preset> = { }, ], }, - oddIsUnstable: { - description: 'DEPRECATED: Odd version numbers are classified as unstable', - }, - oddIsUnstablePackages: { - description: - 'DEPRECATED: Preconfigure dependencies where an odd major version indicates unstable (Docker-only)', - }, followTypescriptNext: { description: 'Keep <typescript> version in sync with the <code>next</code> tag',