From 23051355fb404a7fea2c44016edee982fd00a82d Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sun, 29 Apr 2018 23:07:39 +0200 Subject: [PATCH] fix: properly migrate pathRules --- lib/config/migration.js | 47 ++++++++++--------- .../__snapshots__/migration.spec.js.snap | 42 ++++++++++++----- test/config/migration.spec.js | 8 ++-- 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/lib/config/migration.js b/lib/config/migration.js index fc7682d4a2..c9efa5be20 100644 --- a/lib/config/migration.js +++ b/lib/config/migration.js @@ -20,7 +20,6 @@ const removedOptions = [ 'groupCommitMessage', 'groupPrTitle', 'groupPrBody', - 'pathRules', ]; // Returns a migrated config @@ -34,19 +33,22 @@ function migrateConfig(config) { } let isMigrated = false; const migratedConfig = deepcopy(config); - if ( - Array.isArray(migratedConfig.pathRules) && - migratedConfig.pathRules.length - ) { - isMigrated = true; - migratedConfig.packageRules = migratedConfig.pathRules.concat( - migratedConfig.packageRules || [] - ); - } for (const [key, val] of Object.entries(config)) { if (removedOptions.includes(key)) { isMigrated = true; delete migratedConfig[key]; + } else if (key === 'pathRules') { + isMigrated = true; + if (Array.isArray(val)) { + migratedConfig.packageRules = migratedConfig.packageRules || []; + const migratedPathRules = migratedConfig.pathRules.map( + p => migrateConfig(p).migratedConfig + ); + migratedConfig.packageRules = migratedPathRules.concat( + migratedConfig.packageRules + ); + } + delete migratedConfig.pathRules; } else if (key === 'semanticPrefix') { isMigrated = true; delete migratedConfig.semanticPrefix; @@ -113,8 +115,9 @@ function migrateConfig(config) { } } else if (key === 'packages') { isMigrated = true; - migratedConfig.packageRules = migratedConfig.packages.map( - p => migrateConfig(p).migratedConfig + migratedConfig.packageRules = migratedConfig.packageRules || []; + migratedConfig.packageRules = migratedConfig.packageRules.concat( + migratedConfig.packages.map(p => migrateConfig(p).migratedConfig) ); delete migratedConfig.packages; } else if (key === 'excludedPackageNames') { @@ -227,10 +230,11 @@ function migrateConfig(config) { if (isObject(depType)) { const depTypeName = depType.depType; if (depTypeName) { - migratedConfig[depTypeName] = migrateConfig( - depType - ).migratedConfig; - delete migratedConfig[depTypeName].depType; + migratedConfig.packageRules = migratedConfig.packageRules || []; + const newPackageRule = migrateConfig(depType).migratedConfig; + delete newPackageRule.depType; + newPackageRule.depTypeList = [depTypeName]; + migratedConfig.packageRules.push(newPackageRule); } } }); @@ -263,24 +267,25 @@ function migrateConfig(config) { migratedConfig.node = subMigrate.migratedConfig; } } else if (isObject(val)) { - const subMigrate = migrateConfig(val); + const subMigrate = migrateConfig(migratedConfig[key]); if (subMigrate.isMigrated) { isMigrated = true; migratedConfig[key] = subMigrate.migratedConfig; } } else if (Array.isArray(val)) { - migratedConfig[key] = []; - for (const item of val) { + const newArray = []; + for (const item of migratedConfig[key]) { if (isObject(item)) { const arrMigrate = migrateConfig(item); - migratedConfig[key].push(arrMigrate.migratedConfig); + newArray.push(arrMigrate.migratedConfig); if (arrMigrate.isMigrated) { isMigrated = true; } } else { - migratedConfig[key].push(item); + newArray.push(item); } } + migratedConfig[key] = newArray; } } return { isMigrated, migratedConfig }; diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap index e15ba3d3f3..b373ec902f 100644 --- a/test/config/__snapshots__/migration.spec.js.snap +++ b/test/config/__snapshots__/migration.spec.js.snap @@ -57,17 +57,15 @@ Object { ], }, "onboarding": false, - "optionalDependencies": Object { - "major": Object { - "automerge": false, - }, - "minor": Object { - "automerge": true, - }, - "respectLatest": false, - "schedule": "before 5am on Monday", - }, "packageRules": Array [ + Object { + "extends": Array [ + "foo", + ], + "paths": Array [ + "examples/**", + ], + }, Object { "excludePackageNames": "foo", "groupName": "angular packages", @@ -88,6 +86,19 @@ Object { "ang", ], }, + Object { + "depTypeList": Array [ + "optionalDependencies", + ], + "major": Object { + "automerge": false, + }, + "minor": Object { + "automerge": true, + }, + "respectLatest": false, + "schedule": "before 5am on Monday", + }, ], "patch": Object { "automerge": true, @@ -130,9 +141,14 @@ Object { exports[`config/migration migrateConfig(config, parentConfig) it migrates subconfig 1`] = ` Object { "lockFileMaintenance": Object { - "optionalDependencies": Object { - "respectLatest": false, - }, + "packageRules": Array [ + Object { + "depTypeList": Array [ + "optionalDependencies", + ], + "respectLatest": false, + }, + ], }, } `; diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js index 94f61b766a..92b46a8d08 100644 --- a/test/config/migration.spec.js +++ b/test/config/migration.spec.js @@ -77,11 +77,11 @@ describe('config/migration', () => { config, parentConfig ); + expect(migratedConfig).toMatchSnapshot(); expect(isMigrated).toBe(true); expect(migratedConfig.depTypes).not.toBeDefined(); - expect(migratedConfig.optionalDependencies.respectLatest).toBe(false); expect(migratedConfig.automerge).toEqual(false); - expect(migratedConfig).toMatchSnapshot(); + expect(migratedConfig.packageRules).toHaveLength(5); }); it('migrates before and after schedules', () => { const config = { @@ -238,9 +238,9 @@ describe('config/migration', () => { ); expect(isMigrated).toBe(true); expect(migratedConfig).toMatchSnapshot(); - expect(migratedConfig.lockFileMaintenance.depTypes).not.toBeDefined(); + expect(migratedConfig.lockFileMaintenance.packageRules).toHaveLength(1); expect( - migratedConfig.lockFileMaintenance.optionalDependencies.respectLatest + migratedConfig.lockFileMaintenance.packageRules[0].respectLatest ).toBe(false); }); it('it migrates node to travis', () => { -- GitLab