From d13d6a049557e91515708b96dc05c251507bec7b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Mon, 30 Apr 2018 08:21:48 +0200 Subject: [PATCH] feat: deprecate deptypes and migrate to packageRules (#1892) Rules for dep types (e.g. dependencies, devDependencies, peerDependencies, optionalDependencies) should now be done with `packageRules` and the `depTypeList` selector --- docs/configuration.md | 3 -- lib/config/definitions.js | 39 ---------------- lib/config/migration.js | 14 ++++++ test/config/__snapshots__/index.spec.js.snap | 6 --- .../__snapshots__/migration.spec.js.snap | 25 ++++++----- test/config/index.spec.js | 11 ----- test/config/migration.spec.js | 20 ++++----- .../2017-10-05-configuration-options.md | 44 ------------------- website/docs/_posts/2018-01-20-faq.md | 4 +- 9 files changed, 39 insertions(+), 127 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 98ef8ad7ae..bcbad80802 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -46,9 +46,6 @@ module.exports = { }, { repository: 'singapore/repo2', - optionalDependencies: { - labels: ['renovate', 'optional'], - }, labels: ['renovate'], }, 'singapore/repo3', diff --git a/lib/config/definitions.js b/lib/config/definitions.js index 52d8aaa16e..bcb6bf3100 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -289,45 +289,6 @@ const options = [ cli: false, env: false, }, - { - name: 'dependencies', - description: 'Configuration specifically for `package.json`>`dependencies`', - stage: 'packageFile', - type: 'json', - default: {}, - mergeable: true, - cli: false, - }, - { - name: 'devDependencies', - description: - 'Configuration specifically for `package.json`>`devDependencies`', - stage: 'packageFile', - type: 'json', - default: {}, - mergeable: true, - cli: false, - }, - { - name: 'optionalDependencies', - description: - 'Configuration specifically for `package.json`>`optionalDependencies`', - stage: 'packageFile', - type: 'json', - default: {}, - mergeable: true, - cli: false, - }, - { - name: 'peerDependencies', - description: - 'Configuration specifically for `package.json`>`peerDependencies`', - stage: 'packageFile', - type: 'json', - default: {}, - mergeable: true, - cli: false, - }, { name: 'engines', description: 'Configuration specifically for `package.json`>`engines`', diff --git a/lib/config/migration.js b/lib/config/migration.js index c9efa5be20..b5411756c4 100644 --- a/lib/config/migration.js +++ b/lib/config/migration.js @@ -33,6 +33,12 @@ function migrateConfig(config) { } let isMigrated = false; const migratedConfig = deepcopy(config); + const depTypes = [ + 'dependencies', + 'devDependencies', + 'optionalDependencies', + 'peerDependencies', + ]; for (const [key, val] of Object.entries(config)) { if (removedOptions.includes(key)) { isMigrated = true; @@ -49,6 +55,14 @@ function migrateConfig(config) { ); } delete migratedConfig.pathRules; + } else if (depTypes.includes(key)) { + isMigrated = true; + migratedConfig.packageRules = migratedConfig.packageRules || []; + const depTypePackageRule = migrateConfig(val).migratedConfig; + depTypePackageRule.depTypeList = [key]; + delete depTypePackageRule.packageRules; + migratedConfig.packageRules.push(depTypePackageRule); + delete migratedConfig[key]; } else if (key === 'semanticPrefix') { isMigrated = true; delete migratedConfig.semanticPrefix; diff --git a/test/config/__snapshots__/index.spec.js.snap b/test/config/__snapshots__/index.spec.js.snap index b0e1861808..8243dc5251 100644 --- a/test/config/__snapshots__/index.spec.js.snap +++ b/test/config/__snapshots__/index.spec.js.snap @@ -36,12 +36,10 @@ Object { "commitMessageTopic": "dependency {{depName}}", "copyLocalLibs": false, "depTypeList": Array [], - "dependencies": Object {}, "description": Array [ "Rate limit PR creation to a maximum of one per hour", "Automerge patch upgrades if they pass tests", ], - "devDependencies": Object {}, "digest": Object {}, "docker": Object { "commitMessageTopic": "{{{depName}}} Docker tag", @@ -138,7 +136,6 @@ Object { "nvm": Object {}, "onboarding": true, "onboardingConfig": Object {}, - "optionalDependencies": Object {}, "packageFiles": Array [], "packageNames": Array [], "packagePatterns": Array [], @@ -148,7 +145,6 @@ Object { "branchTopic": "{{{depNameSanitized}}}-{{{newVersionMajor}}}.{{{newVersionMinor}}}.x", }, "paths": Array [], - "peerDependencies": Object {}, "pin": Object { "commitMessageAction": "Pin", "group": Object { @@ -248,5 +244,3 @@ Object { ], } `; - -exports[`config/index mergeChildConfig(parentConfig, childConfig) merges depTypes 1`] = `undefined`; diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap index b373ec902f..09162a598a 100644 --- a/test/config/__snapshots__/migration.spec.js.snap +++ b/test/config/__snapshots__/migration.spec.js.snap @@ -14,15 +14,6 @@ Object { "next", ], "commitMessage": "{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}some commit message", - "devDependencies": Object { - "major": Object { - "automerge": false, - }, - "minor": Object { - "automerge": true, - }, - "schedule": Array [], - }, "enabled": true, "extends": Array [ "config:js-app", @@ -86,6 +77,18 @@ Object { "ang", ], }, + Object { + "depTypeList": Array [ + "devDependencies", + ], + "major": Object { + "automerge": false, + }, + "minor": Object { + "automerge": true, + }, + "schedule": Array [], + }, Object { "depTypeList": Array [ "optionalDependencies", @@ -180,13 +183,13 @@ Object { exports[`config/migration migrateConfig(config, parentConfig) migrates before and after schedules 1`] = ` Object { - "dependencies": Object { + "major": Object { "schedule": Array [ "after 10pm", "before 7am", ], }, - "devDependencies": Object { + "minor": Object { "schedule": Array [ "after 10pm every weekday", "before 7am every weekday", diff --git a/test/config/index.spec.js b/test/config/index.spec.js index b6516a1666..af69477e66 100644 --- a/test/config/index.spec.js +++ b/test/config/index.spec.js @@ -245,17 +245,6 @@ describe('config/index', () => { expect(config.lockFileMaintenance.schedule).toEqual(['on monday']); expect(config.lockFileMaintenance).toMatchSnapshot(); }); - it('merges depTypes', () => { - const parentConfig = { ...defaultConfig }; - const childConfig = { - dependencies: {}, - devDependencies: { foo: 1 }, - peerDependencies: {}, - }; - const configParser = require('../../lib/config/index.js'); - const config = configParser.mergeChildConfig(parentConfig, childConfig); - expect(config.depTypes).toMatchSnapshot(); - }); it('merges packageRules', () => { const parentConfig = { ...defaultConfig }; Object.assign(parentConfig, { diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js index 92b46a8d08..5942d9f8ee 100644 --- a/test/config/migration.spec.js +++ b/test/config/migration.spec.js @@ -81,14 +81,14 @@ describe('config/migration', () => { expect(isMigrated).toBe(true); expect(migratedConfig.depTypes).not.toBeDefined(); expect(migratedConfig.automerge).toEqual(false); - expect(migratedConfig.packageRules).toHaveLength(5); + expect(migratedConfig.packageRules).toHaveLength(6); }); it('migrates before and after schedules', () => { const config = { - dependencies: { + major: { schedule: 'after 10pm and before 7am', }, - devDependencies: { + minor: { schedule: 'after 10pm and before 7am on every weekday', }, }; @@ -99,15 +99,15 @@ describe('config/migration', () => { ); expect(migratedConfig).toMatchSnapshot(); expect(isMigrated).toBe(true); - expect(migratedConfig.dependencies.schedule.length).toBe(2); - expect(migratedConfig.dependencies.schedule[0]).toEqual('after 10pm'); - expect(migratedConfig.dependencies.schedule[1]).toEqual('before 7am'); - expect(migratedConfig.devDependencies.schedule).toMatchSnapshot(); - expect(migratedConfig.devDependencies.schedule.length).toBe(2); - expect(migratedConfig.devDependencies.schedule[0]).toEqual( + expect(migratedConfig.major.schedule.length).toBe(2); + expect(migratedConfig.major.schedule[0]).toEqual('after 10pm'); + expect(migratedConfig.major.schedule[1]).toEqual('before 7am'); + expect(migratedConfig.minor.schedule).toMatchSnapshot(); + expect(migratedConfig.minor.schedule.length).toBe(2); + expect(migratedConfig.minor.schedule[0]).toEqual( 'after 10pm every weekday' ); - expect(migratedConfig.devDependencies.schedule[1]).toEqual( + expect(migratedConfig.minor.schedule[1]).toEqual( 'before 7am every weekday' ); }); diff --git a/website/docs/_posts/2017-10-05-configuration-options.md b/website/docs/_posts/2017-10-05-configuration-options.md index dfaac12bad..a68a761233 100644 --- a/website/docs/_posts/2017-10-05-configuration-options.md +++ b/website/docs/_posts/2017-10-05-configuration-options.md @@ -272,17 +272,6 @@ A list of depType names inside a package rule to filter on. Matches all depTypes Use this field if you want to limit a `packageRule` to certain `depType` values. Invalid if used outside of a `packageRule`. -## dependencies - -Configuration specific for `package.json > dependencies`. - -| name | value | -| ------- | -------------------------------- | -| type | object | -| default | {"semanticPrefix": "fix(deps):"} | - -Extend this if you wish to configure rules specifically for `dependencies` and not `devDependencies` or `optionalDependencies`. - ## description | name | value | @@ -292,17 +281,6 @@ Extend this if you wish to configure rules specifically for `dependencies` and n The description field is used by config presets to describe what they do. They are then collated as part of the onboarding description. -## devDependencies - -Configuration specific for `package.json > devDependencies`. - -| name | value | -| ------- | ------ | -| type | object | -| default | {} | - -Extend this if you wish to configure rules specifically for `devDependencies` and not `dependencies` or `optionalDependencies`. - ## digest Configuration specific for Docker digest pinning. @@ -724,17 +702,6 @@ Configuration specific for `.nvmrc` files. For settings common to all node.js version updates (e.g. travis, nvm, etc) you can use the `node` object instead. -## optionalDependencies - -Configuration specific for `package.json > optionalDependencies`. - -| name | value | -| ------- | ------ | -| type | object | -| default | {} | - -Extend this if you wish to configure rules specifically for `optionalDependencies` and not `dependencies` or `devDependencies`. - ## packageFiles A manually provisioned list of package files to use. @@ -866,17 +833,6 @@ List of strings or glob patterns to match against package files. Applicable insi | type | list | | default | [] | -## peerDependencies - -Configuration specific for `package.json > peerDependencies`. - -| name | value | -| ------- | ------------------ | -| type | object | -| default | {"enabled": false} | - -Extend this if you wish to configure rules specifically for `peerDependencies`. Disabled by default. - ## pin Configuration specific for dependency pinning. diff --git a/website/docs/_posts/2018-01-20-faq.md b/website/docs/_posts/2018-01-20-faq.md index 79536c02a0..f67ea614a4 100644 --- a/website/docs/_posts/2018-01-20-faq.md +++ b/website/docs/_posts/2018-01-20-faq.md @@ -106,9 +106,7 @@ You could: ### Disable renovate for certain dependency types -If you want to disable `renovate` for `optionalDependencies`, for example, you -could define your own `depTypes` array (in either a `renovate.json` or -`package.json` file) +Define a packageRules entry which has the dependency type(s) in `depTypeList` and `"enabled": false`. ### Use a single branch/PR for all dependency upgrades -- GitLab