From c6be31543df1ef1edfd41daf5bb600ebdb192ad8 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 4 Mar 2018 07:35:18 +0100
Subject: [PATCH] refactor: improve migration scripts

---
 lib/config/migration.js                       | 21 +++-----
 .../migrate-validate.spec.js.snap             |  4 +-
 .../__snapshots__/migration.spec.js.snap      | 49 +++++++------------
 .../config/__snapshots__/presets.spec.js.snap |  4 +-
 test/config/migration.spec.js                 |  2 -
 5 files changed, 30 insertions(+), 50 deletions(-)

diff --git a/lib/config/migration.js b/lib/config/migration.js
index 138717c71f..29ad98347a 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -52,7 +52,7 @@ function migrateConfig(config) {
         if (val[i] === 'config:application' || val[i] === ':js-app') {
           isMigrated = true;
           migratedConfig.extends[i] = 'config:js-app';
-        } else if (val[i] === 'config:library') {
+        } else if (val[i] === ':library' || val[i] === 'config:library') {
           isMigrated = true;
           migratedConfig.extends[i] = 'config:js-lib';
         }
@@ -81,24 +81,17 @@ function migrateConfig(config) {
       typeof val === 'string' &&
       ['none', 'patch', 'minor', 'any'].indexOf(val) !== -1
     ) {
-      delete migratedConfig.automerge;
       isMigrated = true;
+      delete migratedConfig.automerge;
+      migratedConfig.extends = migratedConfig.extends || [];
       if (val === 'none') {
-        migratedConfig.automerge = false;
+        migratedConfig.extends.push(':automergeDisabled');
       } else if (val === 'patch') {
-        migratedConfig.patch = migratedConfig.patch || {};
-        migratedConfig.patch.automerge = true;
-        migratedConfig.minor = migratedConfig.minor || {};
-        migratedConfig.minor.automerge = false;
-        migratedConfig.major = migratedConfig.major || {};
-        migratedConfig.major.automerge = false;
+        migratedConfig.extends.push(':automergePatch');
       } else if (val === 'minor') {
-        migratedConfig.minor = migratedConfig.minor || {};
-        migratedConfig.minor.automerge = true;
-        migratedConfig.major = migratedConfig.major || {};
-        migratedConfig.major.automerge = false;
+        migratedConfig.extends.push(':automergeMinor');
       } else if (val === 'any') {
-        migratedConfig.automerge = true;
+        migratedConfig.extends.push(':automergeAll');
       }
     } else if (key === 'packages') {
       isMigrated = true;
diff --git a/test/config/__snapshots__/migrate-validate.spec.js.snap b/test/config/__snapshots__/migrate-validate.spec.js.snap
index 1ac51fbf44..a71ec42566 100644
--- a/test/config/__snapshots__/migrate-validate.spec.js.snap
+++ b/test/config/__snapshots__/migrate-validate.spec.js.snap
@@ -22,8 +22,10 @@ Object {
 
 exports[`config/migrate-validate migrateAndValidate() handles migration 1`] = `
 Object {
-  "automerge": false,
   "errors": Array [],
+  "extends": Array [
+    ":automergeDisabled",
+  ],
   "warnings": Array [],
 }
 `;
diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap
index 7afd0def49..3aa3a49543 100644
--- a/test/config/__snapshots__/migration.spec.js.snap
+++ b/test/config/__snapshots__/migration.spec.js.snap
@@ -9,30 +9,29 @@ Object {
 exports[`config/migration migrateConfig(config, parentConfig) it migrates config 1`] = `
 Object {
   "autodiscover": true,
-  "automerge": false,
   "baseBranches": Array [
     "next",
   ],
   "commitMessage": "some commit message",
   "devDependencies": Object {
-    "major": Object {
-      "automerge": false,
-    },
-    "minor": Object {
-      "automerge": true,
-    },
+    "extends": Array [
+      ":automergeMinor",
+    ],
     "schedule": Array [],
   },
   "enabled": true,
   "extends": Array [
     "config:js-app",
     "config:js-lib",
+    ":automergeDisabled",
   ],
   "ignorePaths": Array [
     "node_modules/",
   ],
   "lockFileMaintenance": Object {
-    "automerge": true,
+    "extends": Array [
+      ":automergeAll",
+    ],
     "schedule": "before 5am",
   },
   "major": Object {
@@ -46,12 +45,9 @@ Object {
   },
   "onboarding": false,
   "optionalDependencies": Object {
-    "major": Object {
-      "automerge": false,
-    },
-    "minor": Object {
-      "automerge": true,
-    },
+    "extends": Array [
+      ":automergeMinor",
+    ],
     "respectLatest": false,
     "schedule": "before 5am on Monday",
   },
@@ -93,7 +89,9 @@ Object {
 exports[`config/migration migrateConfig(config, parentConfig) it migrates node to travis 1`] = `
 Object {
   "node": Object {
-    "automerge": false,
+    "extends": Array [
+      ":automergeDisabled",
+    ],
     "supportPolicy": Array [
       "lts",
     ],
@@ -127,24 +125,15 @@ Object {
 
 exports[`config/migration migrateConfig(config, parentConfig) it overrides existing automerge setting 1`] = `
 Object {
-  "major": Object {
-    "automerge": false,
-  },
-  "minor": Object {
-    "automerge": true,
-  },
+  "extends": Array [
+    ":automergeMinor",
+  ],
   "packageRules": Array [
     Object {
-      "major": Object {
-        "automerge": false,
-      },
-      "minor": Object {
-        "automerge": false,
-      },
+      "extends": Array [
+        ":automergePatch",
+      ],
       "packagePatterns": "^(@angular|typescript)",
-      "patch": Object {
-        "automerge": true,
-      },
     },
   ],
 }
diff --git a/test/config/__snapshots__/presets.spec.js.snap b/test/config/__snapshots__/presets.spec.js.snap
index 4eb4714d24..376bc6a475 100644
--- a/test/config/__snapshots__/presets.spec.js.snap
+++ b/test/config/__snapshots__/presets.spec.js.snap
@@ -259,6 +259,7 @@ Object {
     "Use <code>renovate/</code> as prefix for all branch names",
     "If semantic commits detected, use <code>fix(deps):</code> for dependencies and <code>chore(deps):</code> for all others",
     "Require all status checks to pass before any automerging",
+    "Automerge patch or minor upgrades if they pass tests",
     "Pin dependency versions for <code>devDependencies</code> and retain semver ranges for others",
   ],
   "devDependencies": Object {
@@ -280,9 +281,6 @@ Object {
       "before 8am on Monday",
     ],
   },
-  "major": Object {
-    "automerge": false,
-  },
   "minor": Object {
     "automerge": true,
   },
diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js
index 076df2910e..dd77c9153f 100644
--- a/test/config/migration.spec.js
+++ b/test/config/migration.spec.js
@@ -66,7 +66,6 @@ describe('config/migration', () => {
       expect(isMigrated).toBe(true);
       expect(migratedConfig.depTypes).not.toBeDefined();
       expect(migratedConfig.optionalDependencies.respectLatest).toBe(false);
-      expect(migratedConfig.automerge).toEqual(false);
       expect(migratedConfig).toMatchSnapshot();
     });
     it('migrates before and after schedules', () => {
@@ -192,7 +191,6 @@ describe('config/migration', () => {
       );
       expect(isMigrated).toBe(true);
       expect(migratedConfig).toMatchSnapshot();
-      expect(migratedConfig.packageRules[0].minor.automerge).toBe(false);
     });
     it('it does not migrate config', () => {
       const config = {
-- 
GitLab