From eb938e436264ec8c30c48dfd5aa9d86084b05114 Mon Sep 17 00:00:00 2001 From: Maksim <m.v.sharipov@gmail.com> Date: Mon, 4 Apr 2022 06:24:35 +0200 Subject: [PATCH] refactor(migrations): separateMajorReleases (#14911) --- lib/config/migration.ts | 3 --- .../migrations/base/abstract-migration.ts | 4 +++ .../separate-major-release-migration.spec.ts | 15 +++++++++++ .../separate-major-release-migration.ts | 9 +++++++ .../separate-multiple-major-migration.spec.ts | 27 +++++++++++++++++++ .../separate-multiple-major-migration.ts | 11 ++++++++ lib/config/migrations/migrations-service.ts | 4 +++ 7 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 lib/config/migrations/custom/separate-major-release-migration.spec.ts create mode 100644 lib/config/migrations/custom/separate-major-release-migration.ts create mode 100644 lib/config/migrations/custom/separate-multiple-major-migration.spec.ts create mode 100644 lib/config/migrations/custom/separate-multiple-major-migration.ts diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 4deceaaa56..52a4cdea3a 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -128,9 +128,6 @@ export function migrateConfig( } else { migratedConfig.semanticCommitScope = null; } - } else if (key === 'separateMajorReleases') { - delete migratedConfig.separateMultipleMajor; - migratedConfig.separateMajorMinor = val; } else if (is.string(val) && val.startsWith('{{semanticPrefix}}')) { migratedConfig[key] = val.replace( '{{semanticPrefix}}', diff --git a/lib/config/migrations/base/abstract-migration.ts b/lib/config/migrations/base/abstract-migration.ts index 78ff8b457a..80fdcb6586 100644 --- a/lib/config/migrations/base/abstract-migration.ts +++ b/lib/config/migrations/base/abstract-migration.ts @@ -21,6 +21,10 @@ export abstract class AbstractMigration implements Migration { return this.migratedConfig[key] ?? this.originalConfig[key]; } + protected has<Key extends keyof RenovateConfig>(key: Key): boolean { + return key in this.originalConfig; + } + protected setSafely<Key extends keyof RenovateConfig>( key: Key, value: RenovateConfig[Key] diff --git a/lib/config/migrations/custom/separate-major-release-migration.spec.ts b/lib/config/migrations/custom/separate-major-release-migration.spec.ts new file mode 100644 index 0000000000..e43742bec3 --- /dev/null +++ b/lib/config/migrations/custom/separate-major-release-migration.spec.ts @@ -0,0 +1,15 @@ +import { SeparateMajorReleasesMigration } from './separate-major-release-migration'; + +describe('config/migrations/custom/separate-major-release-migration', () => { + it('should migrate', () => { + expect(SeparateMajorReleasesMigration).toMigrate( + { + separateMajorReleases: true, + }, + { + separateMajorMinor: true, + separateMajorReleases: true, + } + ); + }); +}); diff --git a/lib/config/migrations/custom/separate-major-release-migration.ts b/lib/config/migrations/custom/separate-major-release-migration.ts new file mode 100644 index 0000000000..ba31f27494 --- /dev/null +++ b/lib/config/migrations/custom/separate-major-release-migration.ts @@ -0,0 +1,9 @@ +import { AbstractMigration } from '../base/abstract-migration'; + +export class SeparateMajorReleasesMigration extends AbstractMigration { + override readonly propertyName = 'separateMajorReleases'; + + override run(value: unknown): void { + this.setSafely('separateMajorMinor', value); + } +} diff --git a/lib/config/migrations/custom/separate-multiple-major-migration.spec.ts b/lib/config/migrations/custom/separate-multiple-major-migration.spec.ts new file mode 100644 index 0000000000..ff1ce38fe5 --- /dev/null +++ b/lib/config/migrations/custom/separate-multiple-major-migration.spec.ts @@ -0,0 +1,27 @@ +import { SeparateMultipleMajorMigration } from './separate-multiple-major-migration'; + +describe('config/migrations/custom/separate-multiple-major-migration', () => { + it('should remove if separateMajorReleases exists', () => { + expect(SeparateMultipleMajorMigration).toMigrate( + { + separateMajorReleases: true, + separateMultipleMajor: true, + }, + { + separateMajorReleases: true, + } + ); + }); + + it('should skip if separateMajorReleases does not exist', () => { + expect(SeparateMultipleMajorMigration).toMigrate( + { + separateMultipleMajor: true, + }, + { + separateMultipleMajor: true, + }, + false + ); + }); +}); diff --git a/lib/config/migrations/custom/separate-multiple-major-migration.ts b/lib/config/migrations/custom/separate-multiple-major-migration.ts new file mode 100644 index 0000000000..7eff203c25 --- /dev/null +++ b/lib/config/migrations/custom/separate-multiple-major-migration.ts @@ -0,0 +1,11 @@ +import { AbstractMigration } from '../base/abstract-migration'; + +export class SeparateMultipleMajorMigration extends AbstractMigration { + override readonly propertyName = 'separateMultipleMajor'; + + override run(): void { + if (this.has('separateMajorReleases')) { + this.delete(); + } + } +} diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts index b97e2a4556..b5203a46a7 100644 --- a/lib/config/migrations/migrations-service.ts +++ b/lib/config/migrations/migrations-service.ts @@ -31,6 +31,8 @@ import { RenovateForkMigration } from './custom/renovate-fork-migration'; import { RequiredStatusChecksMigration } from './custom/required-status-checks-migration'; import { ScheduleMigration } from './custom/schedule-migration'; import { SemanticCommitsMigration } from './custom/semantic-commits-migration'; +import { SeparateMajorReleasesMigration } from './custom/separate-major-release-migration'; +import { SeparateMultipleMajorMigration } from './custom/separate-multiple-major-migration'; import { SuppressNotificationsMigration } from './custom/suppress-notifications-migration'; import { TrustLevelMigration } from './custom/trust-level-migration'; import { UnpublishSafeMigration } from './custom/unpublish-safe-migration'; @@ -98,6 +100,8 @@ export class MigrationsService { RequiredStatusChecksMigration, ScheduleMigration, SemanticCommitsMigration, + SeparateMajorReleasesMigration, + SeparateMultipleMajorMigration, SuppressNotificationsMigration, TrustLevelMigration, UnpublishSafeMigration, -- GitLab