From 0b54d5e590c69256982dae6e4784bcf714075912 Mon Sep 17 00:00:00 2001 From: Maksim <m.v.sharipov@gmail.com> Date: Sun, 13 Mar 2022 12:38:28 +0100 Subject: [PATCH] refactor(migrations): automergeMajor (#14634) --- lib/config/migration.ts | 4 -- .../custom/automerge-major-migration.spec.ts | 47 +++++++++++++++++++ .../custom/automerge-major-migration.ts | 15 ++++++ lib/config/migrations/migrations-service.ts | 2 + 4 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 lib/config/migrations/custom/automerge-major-migration.spec.ts create mode 100644 lib/config/migrations/custom/automerge-major-migration.ts diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 28c4249cc1..17550d14af 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -202,10 +202,6 @@ export function migrateConfig( migratedConfig.minor = migratedConfig.minor || {}; migratedConfig.minor.automerge = !!val; delete migratedConfig[key]; - } else if (key === 'automergeMajor') { - migratedConfig.major = migratedConfig.major || {}; - migratedConfig.major.automerge = !!val; - delete migratedConfig[key]; } else if (key === 'separateMajorReleases') { delete migratedConfig.separateMultipleMajor; migratedConfig.separateMajorMinor = val; diff --git a/lib/config/migrations/custom/automerge-major-migration.spec.ts b/lib/config/migrations/custom/automerge-major-migration.spec.ts new file mode 100644 index 0000000000..0d2a9a7d30 --- /dev/null +++ b/lib/config/migrations/custom/automerge-major-migration.spec.ts @@ -0,0 +1,47 @@ +import { AutomergeMajorMigration } from './automerge-major-migration'; + +describe('config/migrations/custom/automerge-major-migration', () => { + it('should migrate value to object', () => { + expect(AutomergeMajorMigration).toMigrate( + { + automergeMajor: 'some-value', + }, + { + major: { + automerge: true, + }, + } + ); + }); + + it('should migrate value to object and concat with existing minor object', () => { + expect(AutomergeMajorMigration).toMigrate( + { + automergeMajor: 'some-value', + major: { + matchFiles: ['test'], + }, + }, + { + major: { + automerge: true, + matchFiles: ['test'], + }, + } + ); + }); + + it('should ignore non object minor value', () => { + expect(AutomergeMajorMigration).toMigrate( + { + automergeMajor: 'some-value', + major: null, + }, + { + major: { + automerge: true, + }, + } + ); + }); +}); diff --git a/lib/config/migrations/custom/automerge-major-migration.ts b/lib/config/migrations/custom/automerge-major-migration.ts new file mode 100644 index 0000000000..f99c552651 --- /dev/null +++ b/lib/config/migrations/custom/automerge-major-migration.ts @@ -0,0 +1,15 @@ +import is from '@sindresorhus/is'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class AutomergeMajorMigration extends AbstractMigration { + override readonly deprecated = true; + override readonly propertyName = 'automergeMajor'; + + override run(value: unknown): void { + const major = this.get('major'); + + const newMajor = is.object(major) ? major : {}; + newMajor.automerge = Boolean(value); + this.setHard('major', newMajor); + } +} diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts index d24c4e2f7e..42b4246b4e 100644 --- a/lib/config/migrations/migrations-service.ts +++ b/lib/config/migrations/migrations-service.ts @@ -2,6 +2,7 @@ import { dequal } from 'dequal'; import type { RenovateConfig } from '../types'; import { RemovePropertyMigration } from './base/remove-property-migration'; import { RenamePropertyMigration } from './base/rename-property-migration'; +import { AutomergeMajorMigration } from './custom/automerge-major-migration'; import { AutomergeTypeMigration } from './custom/automerge-type-migration'; import { BinarySourceMigration } from './custom/binary-source-migration'; import { CompatibilityMigration } from './custom/compatibility-migration'; @@ -55,6 +56,7 @@ export class MigrationsService { ]); static readonly customMigrations: ReadonlyArray<MigrationConstructor> = [ + AutomergeMajorMigration, AutomergeTypeMigration, BinarySourceMigration, CompatibilityMigration, -- GitLab