From 090c81af1b20a12997d5eee08d5f66c2e92f7ba4 Mon Sep 17 00:00:00 2001
From: Maksim <m.v.sharipov@gmail.com>
Date: Thu, 10 Feb 2022 15:42:58 +0100
Subject: [PATCH] refactor(migrations): compatibility (#13869)

* refactor(migrations): compatibility

* refactor(migrations): fix test coverage

* refactor(migrations): add unit test

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
---
 lib/config/migration.ts                       |  3 ---
 .../custom/compatibility-migration.spec.ts    | 27 +++++++++++++++++++
 .../custom/compatibility-migration.ts         | 13 +++++++++
 lib/config/migrations/migrations-service.ts   |  2 ++
 4 files changed, 42 insertions(+), 3 deletions(-)
 create mode 100644 lib/config/migrations/custom/compatibility-migration.spec.ts
 create mode 100644 lib/config/migrations/custom/compatibility-migration.ts

diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index 27154e54c2..59dd5a52d2 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -412,9 +412,6 @@ export function migrateConfig(
           }
           migratedConfig[key] = newArray;
         }
-      } else if (key === 'compatibility' && is.object(val)) {
-        migratedConfig.constraints = migratedConfig.compatibility;
-        delete migratedConfig.compatibility;
       } else if (is.object(val)) {
         const subMigrate = migrateConfig(
           migratedConfig[key] as RenovateConfig,
diff --git a/lib/config/migrations/custom/compatibility-migration.spec.ts b/lib/config/migrations/custom/compatibility-migration.spec.ts
new file mode 100644
index 0000000000..8e44860120
--- /dev/null
+++ b/lib/config/migrations/custom/compatibility-migration.spec.ts
@@ -0,0 +1,27 @@
+import { CompatibilityMigration } from './compatibility-migration';
+
+describe('config/migrations/custom/compatibility-migration', () => {
+  it('should migrate object', () => {
+    expect(CompatibilityMigration).toMigrate(
+      {
+        compatibility: {
+          test: 'test',
+        },
+      },
+      {
+        constraints: {
+          test: 'test',
+        },
+      }
+    );
+  });
+
+  it('should just remove property when compatibility is not an object', () => {
+    expect(CompatibilityMigration).toMigrate(
+      {
+        compatibility: 'test',
+      },
+      {}
+    );
+  });
+});
diff --git a/lib/config/migrations/custom/compatibility-migration.ts b/lib/config/migrations/custom/compatibility-migration.ts
new file mode 100644
index 0000000000..a22ddb1485
--- /dev/null
+++ b/lib/config/migrations/custom/compatibility-migration.ts
@@ -0,0 +1,13 @@
+import is from '@sindresorhus/is';
+import { AbstractMigration } from '../base/abstract-migration';
+
+export class CompatibilityMigration extends AbstractMigration {
+  override readonly deprecated = true;
+  override readonly propertyName = 'compatibility';
+
+  override run(value: unknown): void {
+    if (is.object(value)) {
+      this.setSafely('constraints', value);
+    }
+  }
+}
diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts
index 447d57c645..60caacfd7a 100644
--- a/lib/config/migrations/migrations-service.ts
+++ b/lib/config/migrations/migrations-service.ts
@@ -3,6 +3,7 @@ import type { RenovateConfig } from '../types';
 import { RemovePropertyMigration } from './base/remove-property-migration';
 import { RenamePropertyMigration } from './base/rename-property-migration';
 import { BinarySourceMigration } from './custom/binary-source-migration';
+import { CompatibilityMigration } from './custom/compatibility-migration';
 import { ComposerIgnorePlatformReqsMigration } from './custom/composer-ignore-platform-reqs-migration';
 import { EnabledManagersMigration } from './custom/enabled-managers-migration';
 import { GoModTidyMigration } from './custom/go-mod-tidy-migration';
@@ -48,6 +49,7 @@ export class MigrationsService {
 
   static readonly customMigrations: ReadonlyArray<MigrationConstructor> = [
     BinarySourceMigration,
+    CompatibilityMigration,
     ComposerIgnorePlatformReqsMigration,
     EnabledManagersMigration,
     GoModTidyMigration,
-- 
GitLab