diff --git a/lib/config/presets.js b/lib/config/presets.js index fd63f3c04d593b77ce7974bc3a47c09a54d7c05c..584c537fdd9cce72e6dcd0b504adb33f12caabfd 100644 --- a/lib/config/presets.js +++ b/lib/config/presets.js @@ -1,5 +1,6 @@ const configParser = require('./index'); const massage = require('./massage'); +const migration = require('./migration'); const npm = require('../api/npm'); module.exports = { @@ -186,7 +187,8 @@ async function getPreset(preset, logger) { if (presetKeys.every(key => packageListKeys.includes(key))) { delete presetConfig.description; } - return massage.massageConfig(presetConfig); + const migratedConfig = migration.migrateConfig(presetConfig).migratedConfig; + return massage.massageConfig(migratedConfig); } function isObject(obj) { diff --git a/test/_fixtures/npm/renovate-config-ikatyang.json b/test/_fixtures/npm/renovate-config-ikatyang.json new file mode 100644 index 0000000000000000000000000000000000000000..0239f5bb3fc9e399f1983d9cd67a250557df6634 --- /dev/null +++ b/test/_fixtures/npm/renovate-config-ikatyang.json @@ -0,0 +1 @@ +{"_id":"renovate-config-ikatyang","_rev":"4-7fb157899f3d04c90327f8f2a35bd0a5","name":"renovate-config-ikatyang","description":"renovate config for ikatyang","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"renovate-config-ikatyang","version":"1.0.0","description":"renovate config for ikatyang","keywords":["renovate","renovate-config"],"repository":{"type":"git","url":"git+https://github.com/ikatyang/renovate-config-ikatyang.git"},"homepage":"https://github.com/ikatyang/renovate-config-ikatyang#readme","author":{"name":"Ika","email":"ikatyang@gmail.com","url":"https://github.com/ikatyang"},"license":"MIT","scripts":{"release":"standard-version"},"devDependencies":{"standard-version":"4.2.0"},"files":[],"renovate-config":{"default":{"extends":[":renovatePrefix",":semanticPrefixFixDepsChoreOthers",":automergeRequireAllStatusChecks",":maintainLockFilesWeekly"],"timezone":"Asia/Taipei","schedule":["after 12am and before 8am"],"semanticCommits":true,"separateMajorReleases":true,"separatePatchReleases":false,"ignoreUnstable":true,"respectLatest":true,"rebaseStalePrs":true,"prCreation":"immediate","automerge":"minor","automergeType":"pr","unpublishSafe":false,"labels":["dependencies"]},"library":{"extends":["ikatyang:default",":pinOnlyDevDependencies"]}},"gitHead":"6b33d9a7d466a1b18b00bb4be84d76ed1d23fea3","bugs":{"url":"https://github.com/ikatyang/renovate-config-ikatyang/issues"},"_id":"renovate-config-ikatyang@1.0.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"ikatyang","email":"ikatyang@gmail.com"},"dist":{"integrity":"sha512-NBEWXir0YpMrcVF+F/PZR9uBPVolaTr8mofQsOlNTNxtXYhHqU7mUJyWia14m475i5qiWdbCsQfACn7GZugoCw==","shasum":"5ee3b01d73e4486b7dfbbe27e3d749a10eafced0","tarball":"https://registry.npmjs.org/renovate-config-ikatyang/-/renovate-config-ikatyang-1.0.0.tgz"},"maintainers":[{"name":"ikatyang","email":"ikatyang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/renovate-config-ikatyang-1.0.0.tgz_1503232291506_0.9969473145902157"},"directories":{}},"1.1.0":{"name":"renovate-config-ikatyang","version":"1.1.0","description":"renovate config for ikatyang","keywords":["renovate","renovate-config"],"repository":{"type":"git","url":"git+https://github.com/ikatyang/renovate-config-ikatyang.git"},"homepage":"https://github.com/ikatyang/renovate-config-ikatyang#readme","author":{"name":"Ika","email":"ikatyang@gmail.com","url":"https://github.com/ikatyang"},"license":"MIT","scripts":{"release":"standard-version"},"devDependencies":{"standard-version":"4.2.0"},"files":[],"renovate-config":{"default":{"extends":[":renovatePrefix",":semanticPrefixFixDepsChoreOthers",":automergeRequireAllStatusChecks",":maintainLockFilesDisabled"],"timezone":"Asia/Taipei","schedule":["before 8am"],"semanticCommits":true,"separateMajorReleases":true,"separatePatchReleases":false,"ignoreUnstable":true,"respectLatest":true,"rebaseStalePrs":true,"prCreation":"immediate","automerge":"minor","automergeType":"pr","unpublishSafe":false,"labels":["dependencies"]},"library":{"extends":["ikatyang:default",":pinOnlyDevDependencies"]}},"gitHead":"369160195cb5b7b0fb89ef1f554d5bbbebad8c6f","bugs":{"url":"https://github.com/ikatyang/renovate-config-ikatyang/issues"},"_id":"renovate-config-ikatyang@1.1.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"ikatyang","email":"ikatyang@gmail.com"},"dist":{"integrity":"sha512-8qKLnrqNZP+rmpcb8ddKy04mXlTUW2hrHmevT47830MfRgb0qZGLdcuKL5LG13a2WWGzzTZYsXaOqbHTLNQN6w==","shasum":"31dcfafa501e3f6b5c25349177507e7e9b5d9460","tarball":"https://registry.npmjs.org/renovate-config-ikatyang/-/renovate-config-ikatyang-1.1.0.tgz"},"maintainers":[{"name":"ikatyang","email":"ikatyang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/renovate-config-ikatyang-1.1.0.tgz_1503277413013_0.7997763243038207"},"directories":{}},"1.2.0":{"name":"renovate-config-ikatyang","version":"1.2.0","description":"renovate config for ikatyang","keywords":["renovate","renovate-config"],"repository":{"type":"git","url":"git+https://github.com/ikatyang/renovate-config-ikatyang.git"},"homepage":"https://github.com/ikatyang/renovate-config-ikatyang#readme","author":{"name":"Ika","email":"ikatyang@gmail.com","url":"https://github.com/ikatyang"},"license":"MIT","scripts":{"release":"standard-version"},"devDependencies":{"standard-version":"4.2.0"},"files":[],"renovate-config":{"default":{"extends":[":renovatePrefix",":semanticPrefixFixDepsChoreOthers",":automergeRequireAllStatusChecks"],"timezone":"Asia/Taipei","schedule":["before 8am"],"lockFileMaintenance":{"enabled":true,"automerge":true,"schedule":"before 8am on Mondays"},"semanticCommits":true,"separateMajorReleases":true,"separatePatchReleases":false,"ignoreUnstable":true,"respectLatest":true,"rebaseStalePrs":true,"prCreation":"immediate","automerge":"minor","automergeType":"pr","unpublishSafe":false,"labels":["dependencies"]},"library":{"extends":["ikatyang:default",":pinOnlyDevDependencies"]}},"gitHead":"610de097e8b81da80c5655aada79378f362858e7","bugs":{"url":"https://github.com/ikatyang/renovate-config-ikatyang/issues"},"_id":"renovate-config-ikatyang@1.2.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"ikatyang","email":"ikatyang@gmail.com"},"dist":{"integrity":"sha512-rBHBcgjziMslq8XB5rcA/mwN0YtXMpsvxBBSV4XuifkrbPD7LNTuehsU05wlgqqwecVzTSCtsNfKBES2qf3dVg==","shasum":"28351b9aaed9bd73f6355a93843c6823535bb1e4","tarball":"https://registry.npmjs.org/renovate-config-ikatyang/-/renovate-config-ikatyang-1.2.0.tgz"},"maintainers":[{"name":"ikatyang","email":"ikatyang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/renovate-config-ikatyang-1.2.0.tgz_1503317838934_0.6510782628320158"},"directories":{}},"1.2.1":{"name":"renovate-config-ikatyang","version":"1.2.1","description":"renovate config for ikatyang","keywords":["renovate","renovate-config"],"repository":{"type":"git","url":"git+https://github.com/ikatyang/renovate-config-ikatyang.git"},"homepage":"https://github.com/ikatyang/renovate-config-ikatyang#readme","author":{"name":"Ika","email":"ikatyang@gmail.com","url":"https://github.com/ikatyang"},"license":"MIT","scripts":{"release":"standard-version"},"devDependencies":{"standard-version":"4.2.0"},"files":[],"renovate-config":{"default":{"extends":[":renovatePrefix",":semanticPrefixFixDepsChoreOthers",":automergeRequireAllStatusChecks"],"timezone":"Asia/Taipei","schedule":["before 8am"],"lockFileMaintenance":{"enabled":true,"automerge":true,"schedule":"before 8am on Monday"},"semanticCommits":true,"separateMajorReleases":true,"separatePatchReleases":false,"ignoreUnstable":true,"respectLatest":true,"rebaseStalePrs":true,"prCreation":"immediate","automerge":"minor","automergeType":"pr","unpublishSafe":false,"labels":["dependencies"]},"library":{"extends":["ikatyang:default",":pinOnlyDevDependencies"]}},"gitHead":"7406990bfb5e98e6ff127d0b2f365e6d30bad25e","bugs":{"url":"https://github.com/ikatyang/renovate-config-ikatyang/issues"},"_id":"renovate-config-ikatyang@1.2.1","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"ikatyang","email":"ikatyang@gmail.com"},"dist":{"integrity":"sha512-UpgA0hwHMNS7nqjuhNVAUk5ueYMgvMeawm56VkXiJTp0ZhaGW41x+XK/w7qObmyD/pRW3h7qk3w1CooHti29Sw==","shasum":"4c6f15f94980838b8a6f90e8c134d1837cc52845","tarball":"https://registry.npmjs.org/renovate-config-ikatyang/-/renovate-config-ikatyang-1.2.1.tgz"},"maintainers":[{"name":"ikatyang","email":"ikatyang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/renovate-config-ikatyang-1.2.1.tgz_1503359610886_0.8635549147147685"},"directories":{}}},"readme":"# renovate-config-ikatyang\n\n[](https://www.npmjs.com/package/renovate-config-ikatyang)\n[](https://travis-ci.org/ikatyang/renovate-config-ikatyang/builds)\n\n[renovate](https://renovateapp.com/) config for ikatyang\n\n[Changelog](https://github.com/ikatyang/renovate-config-ikatyang/blob/master/CHANGELOG.md)\n\n## Usage\n\n(renovate.json)\n\n```json\n{\n \"extends\": \"ikatyang\"\n}\n```\n\n## License\n\nMIT © [Ika](https://github.com/ikatyang)\n","maintainers":[{"name":"ikatyang","email":"ikatyang@gmail.com"}],"time":{"modified":"2017-08-21T23:53:31.002Z","created":"2017-08-20T12:31:31.602Z","1.0.0":"2017-08-20T12:31:31.602Z","1.1.0":"2017-08-21T01:03:33.203Z","1.2.0":"2017-08-21T12:17:20.208Z","1.2.1":"2017-08-21T23:53:31.002Z"},"homepage":"https://github.com/ikatyang/renovate-config-ikatyang#readme","keywords":["renovate","renovate-config"],"repository":{"type":"git","url":"git+https://github.com/ikatyang/renovate-config-ikatyang.git"},"author":{"name":"Ika","email":"ikatyang@gmail.com","url":"https://github.com/ikatyang"},"bugs":{"url":"https://github.com/ikatyang/renovate-config-ikatyang/issues"},"license":"MIT","readmeFilename":"README.md","_attachments":{}} \ No newline at end of file diff --git a/test/config/__snapshots__/presets.spec.js.snap b/test/config/__snapshots__/presets.spec.js.snap index 2ecd8e6dd1b2e25502bc8dadc073be64d068c583..452d7fe316c5353be783f0a15469f45d8328d70c 100644 --- a/test/config/__snapshots__/presets.spec.js.snap +++ b/test/config/__snapshots__/presets.spec.js.snap @@ -236,6 +236,85 @@ Object { } `; +exports[`config/presets resolvePreset migrates automerge in presets 1`] = ` +Object { + "automergeType": "pr", + "branchprefix": "renovate/", + "dependencies": Object { + "description": Array [ + "Preserve (but continue to upgrade) any existing semver ranges", + ], + "pinVersions": false, + "semanticPrefix": "fix(deps):", + }, + "description": Array [ + "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", + "Pin dependency versions for <code>devDependencies</code> and retain semver ranges for others", + ], + "devDependencies": Object { + "description": Array [ + "Use version pinning (maintain a single version only and not semver ranges)", + ], + "pinVersions": true, + "semanticPrefix": "chore(deps):", + }, + "ignoreUnstable": true, + "labels": Array [ + "dependencies", + ], + "lockFileMaintenance": Object { + "automerge": true, + "enabled": true, + "schedule": Array [ + "before 8am on Monday", + ], + }, + "logger": Object { + "child": [Function], + "debug": [Function], + "error": [Function], + "fatal": [Function], + "info": [Function], + "trace": [Function], + "warn": [Function], + }, + "major": Object { + "automerge": false, + }, + "minor": Object { + "automerge": true, + }, + "optionalDependencies": Object { + "description": Array [ + "Preserve (but continue to upgrade) any existing semver ranges", + ], + "pinVersions": false, + "semanticPrefix": "chore(deps):", + }, + "peerDependencies": Object { + "description": Array [ + "Preserve (but continue to upgrade) any existing semver ranges", + ], + "pinVersions": false, + "semanticPrefix": "chore(deps):", + }, + "prCreation": "immediate", + "rebaseStalePrs": true, + "requiredStatusChecks": Array [], + "respectLatest": true, + "schedule": Array [ + "before 8am", + ], + "semanticCommits": true, + "separateMajorReleases": true, + "separatePatchReleases": false, + "timezone": "Asia/Taipei", + "unpublishSafe": false, +} +`; + exports[`config/presets resolvePreset resolves app preset 1`] = ` Object { "automerge": false, diff --git a/test/config/presets.spec.js b/test/config/presets.spec.js index f0556642a70e4951e4cba8fda379779a7259cd6b..1d217a2a92d5483602786c443b241bc56cdcacd8 100644 --- a/test/config/presets.spec.js +++ b/test/config/presets.spec.js @@ -5,6 +5,7 @@ const presetDefaults = require('../_fixtures/npm/renovate-config-default'); const presetPackages = require('../_fixtures/npm/renovate-config-packages'); const presetGroup = require('../_fixtures/npm/renovate-config-group'); const presetMonorepo = require('../_fixtures/npm/renovate-config-monorepo'); +const presetIkatyang = require('../_fixtures/npm/renovate-config-ikatyang'); npm.getDependency = jest.fn(dep => { if (dep === 'renovate-config-default') { @@ -31,6 +32,14 @@ npm.getDependency = jest.fn(dep => { ], }; } + if (dep === 'renovate-config-ikatyang') { + return { + 'renovate-config': + presetIkatyang.versions[presetIkatyang['dist-tags'].latest][ + 'renovate-config' + ], + }; + } if (dep === 'renovate-config-monorepo') { return { 'renovate-config': @@ -135,6 +144,13 @@ describe('config/presets', () => { expect(rule.packageNames).toHaveLength(1); expect(rule.packagePatterns).toHaveLength(2); }); + it('migrates automerge in presets', async () => { + config.extends = ['ikatyang:library']; + const res = await presets.resolveConfigPresets(config); + expect(res).toMatchSnapshot(); + expect(res.automerge).not.toBeDefined(); + expect(res.minor.automerge).toBe(true); + }); }); describe('replaceArgs', () => { const argMappings = {