From b657d3c291ed1f481fb390479469af7d43d055e0 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Mon, 21 Aug 2017 13:41:48 +0200 Subject: [PATCH] feat: support lock file maintenance automerge (#712) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactored the `automerge` field to change it to boolean. Existing string will be migrated to new config. Automerging lock files is now possible by adding `â€lockFileMaintenanceâ€: { â€automergeâ€: true}` to config. Closes #706 --- docs/configuration.md | 30 ++++++--- lib/config/definitions.js | 6 +- lib/config/migration.js | 19 +++++- lib/workers/branch/index.js | 4 +- lib/workers/package/versions.js | 21 +------ lib/workers/pr/index.js | 6 +- lib/workers/repository/apis.js | 1 + .../__snapshots__/migration.spec.js.snap | 13 +++- test/config/migration.spec.js | 10 ++- test/workers/branch/index.spec.js | 12 ++-- .../package/__snapshots__/index.spec.js.snap | 4 +- .../__snapshots__/versions.spec.js.snap | 62 ++++--------------- test/workers/package/versions.spec.js | 36 +++-------- test/workers/pr/index.spec.js | 16 ++--- 14 files changed, 108 insertions(+), 132 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 3151874fea..3f06ad851a 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -98,7 +98,7 @@ $ node renovate --help --rebase-stale-prs [boolean] Rebase stale PRs (GitHub only) --unpublish-safe [boolean] Set a status check for unpublish-safe upgrades --pr-creation <string> When to create the PR for a branch. Values: immediate, not-pending, status-success. - --automerge <string> What types of upgrades to merge to base branch automatically. Values: none, patch, minor or any + --automerge [boolean] Whether to automerge branches/PRs automatically, without human intervention --automerge-type <string> How to automerge - "branch-merge-commit", "branch-push" or "pr". Branch support is GitHub-only --lazy-grouping [boolean] Use group names only when multiple dependencies upgraded --group-name <string> Human understandable name for the dependency group @@ -145,6 +145,22 @@ Obviously, you can't set repository or package file location with this method. <th>Environment</th> <th>CLI</th> </tr> +<tr> + <td>`extends`</td> + <td>Configuration presets to use/extend</td> + <td>list</td> + <td><pre>[]</pre></td> + <td>`RENOVATE_EXTENDS`</td> + <td><td> +</tr> +<tr> + <td>`description`</td> + <td>Plain text description for a config or preset</td> + <td>list</td> + <td><pre>[]</pre></td> + <td></td> + <td><td> +</tr> <tr> <td>`enabled`</td> <td>Enable or disable renovate</td> @@ -293,7 +309,7 @@ Obviously, you can't set repository or package file location with this method. <td>`dependencies`</td> <td>Configuration specifically for `package.json`>`dependencies`</td> <td>json</td> - <td><pre>{}</pre></td> + <td><pre>{"semanticPrefix": "fix(deps):"}</pre></td> <td>`RENOVATE_DEPENDENCIES`</td> <td><td> </tr> @@ -455,7 +471,7 @@ Obviously, you can't set repository or package file location with this method. <td>`semanticCommits`</td> <td>Enable semantic commit prefixes for commits and PR titles</td> <td>boolean</td> - <td><pre>false</pre></td> + <td><pre>null</pre></td> <td>`RENOVATE_SEMANTIC_COMMITS`</td> <td>`--semantic-commits`<td> </tr> @@ -487,7 +503,7 @@ Obviously, you can't set repository or package file location with this method. <td>`unpublishSafe`</td> <td>Set a status check for unpublish-safe upgrades</td> <td>boolean</td> - <td><pre>true</pre></td> + <td><pre>false</pre></td> <td>`RENOVATE_UNPUBLISH_SAFE`</td> <td>`--unpublish-safe`<td> </tr> @@ -501,9 +517,9 @@ Obviously, you can't set repository or package file location with this method. </tr> <tr> <td>`automerge`</td> - <td>What types of upgrades to merge to base branch automatically. Values: none, patch, minor or any</td> - <td>string</td> - <td><pre>"none"</pre></td> + <td>Whether to automerge branches/PRs automatically, without human intervention</td> + <td>boolean</td> + <td><pre>false</pre></td> <td>`RENOVATE_AUTOMERGE`</td> <td>`--automerge`<td> </tr> diff --git a/lib/config/definitions.js b/lib/config/definitions.js index 7d78c42c01..2a43aa7754 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -380,9 +380,9 @@ const options = [ { name: 'automerge', description: - 'What types of upgrades to merge to base branch automatically. Values: none, patch, minor or any', - type: 'string', - default: 'none', + 'Whether to automerge branches/PRs automatically, without human intervention', + type: 'boolean', + default: false, }, { name: 'automergeType', diff --git a/lib/config/migration.js b/lib/config/migration.js index 59cbaf7435..e922f503b3 100644 --- a/lib/config/migration.js +++ b/lib/config/migration.js @@ -37,9 +37,24 @@ function migrateConfig(config, parentConfig) { isMigrated = true; delete migratedConfig[key]; } - } else if (key === 'automerge' && val === false) { + } else if (key === 'automerge' && typeof val === 'string') { isMigrated = true; - migratedConfig.automerge = 'none'; + if (val === 'none') { + migratedConfig.automerge = false; + } + if (val === 'patch' || val === 'minor') { + delete migratedConfig.automerge; + migratedConfig.patch = migratedConfig.patch || {}; + migratedConfig.patch.automerge = true; + } + if (val === 'minor') { + delete migratedConfig.automerge; + migratedConfig.minor = migratedConfig.minor || {}; + migratedConfig.minor.automerge = true; + } + if (val === 'any') { + migratedConfig.automerge = true; + } } else if (key === 'packages') { isMigrated = true; migratedConfig.packageRules = migratedConfig.packages.map( diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index cec9425ef9..326ef2cfcb 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -19,7 +19,7 @@ function checkStale(config) { return true; } // Commits can't be pushed to a branch unless they are up-to-date - if (config.automergeEnabled && config.automergeType === 'branch-push') { + if (config.automerge && config.automergeType === 'branch-push') { return true; } return false; @@ -225,7 +225,7 @@ async function ensureBranch(config) { ); } } - if (config.automergeEnabled === false || config.automergeType === 'pr') { + if (config.automerge === false || config.automergeType === 'pr') { // No branch automerge return true; } diff --git a/lib/workers/package/versions.js b/lib/workers/package/versions.js index ff4450813a..ae4a76b740 100644 --- a/lib/workers/package/versions.js +++ b/lib/workers/package/versions.js @@ -11,7 +11,6 @@ module.exports = { isValidVersion, isFuture, isPastLatest, - isAutomergeEnabled, }; function determineUpgrades(npmDep, config) { @@ -36,7 +35,7 @@ function determineUpgrades(npmDep, config) { allUpgrades.pin = { type: 'pin', isPin: true, - automergeEnabled: true, + automerge: true, unpublishSafe: false, newVersion: maxSatisfying, newVersionMajor: semver.major(maxSatisfying), @@ -90,12 +89,13 @@ function determineUpgrades(npmDep, config) { // Group by major versions const newVersionMajor = semver.major(newVersion); const newVersionMinor = semver.minor(newVersion); + const hasPatchAutomerge = config.patch && config.patch.automerge === true; let type; if (newVersionMajor > semver.major(changeLogFromVersion)) { type = 'major'; } else if ( newVersionMinor === semver.minor(changeLogFromVersion) && - (config.separatePatchReleases || config.automerge === 'patch') + (config.separatePatchReleases || hasPatchAutomerge) ) { // Only use patch if configured to type = 'patch'; @@ -122,7 +122,6 @@ function determineUpgrades(npmDep, config) { semver.gt(newVersion, allUpgrades[upgradeKey].newVersion) ) { const changeLogToVersion = newVersion; - const automergeEnabled = isAutomergeEnabled(config.automerge, type); allUpgrades[upgradeKey] = { type, newVersion, @@ -130,7 +129,6 @@ function determineUpgrades(npmDep, config) { newVersionMinor, changeLogFromVersion, changeLogToVersion, - automergeEnabled, }; if (type === 'major') { allUpgrades[upgradeKey].isMajor = true; @@ -252,16 +250,3 @@ function isPastLatest(npmDep, version) { logger.warn(`No dist-tags.latest for ${npmDep.name}`); return false; } - -function isAutomergeEnabled(automerge, type) { - if (automerge === 'any') { - return true; - } - if (automerge === 'minor' && type !== 'major') { - return true; - } - if (automerge === 'patch' && type === 'patch') { - return true; - } - return false; -} diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index 3cbcd01bb4..a08cdf11e5 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -24,7 +24,7 @@ async function ensurePr(inputConfig, logger, errors, warnings) { ); // Only create a PR if a branch automerge has failed - if (config.automergeEnabled && config.automergeType.startsWith('branch')) { + if (config.automerge && config.automergeType.startsWith('branch')) { logger.debug( `Branch is configured for branch automerge, branchStatus is: ${branchStatus}` ); @@ -141,7 +141,7 @@ async function ensurePr(inputConfig, logger, errors, warnings) { await config.api.addLabels(pr.number, config.labels); } // Skip assign and review if automerging PR - if (config.automergeEnabled && config.automergeType === 'pr') { + if (config.automerge && config.automergeType === 'pr') { logger.debug( `Skipping assignees and reviewers as automerge=${config.automerge}` ); @@ -176,7 +176,7 @@ async function ensurePr(inputConfig, logger, errors, warnings) { async function checkAutoMerge(pr, config, logger) { logger.trace({ config }, 'checkAutoMerge'); logger.debug(`Checking #${pr.number} for automerge`); - if (config.automergeEnabled && config.automergeType === 'pr') { + if (config.automerge && config.automergeType === 'pr') { logger.info('PR is configured for automerge'); // Return if PR not ready for automerge if (pr.mergeable !== true) { diff --git a/lib/workers/repository/apis.js b/lib/workers/repository/apis.js index 2ddcb883ec..05787595f1 100644 --- a/lib/workers/repository/apis.js +++ b/lib/workers/repository/apis.js @@ -259,6 +259,7 @@ async function resolvePackageFiles(inputConfig) { if (packageFile.content) { // hoist renovate config if exists if (packageFile.content.renovate) { + config.hasPackageJsonRenovateConfig = true; config.logger.debug( { packageFile: packageFile.packageFile, diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap index 74623d899b..e18f201fc8 100644 --- a/test/config/__snapshots__/migration.spec.js.snap +++ b/test/config/__snapshots__/migration.spec.js.snap @@ -3,9 +3,20 @@ exports[`config/migration migrateConfig(config, parentConfig) it migrates config 1`] = ` Object { "autodiscover": true, - "automerge": "none", + "automerge": false, "commitMessage": "some commit message", + "devDependencies": Object { + "minor": Object { + "automerge": true, + }, + "patch": Object { + "automerge": true, + }, + }, "enabled": true, + "lockFileConfig": Object { + "automerge": true, + }, "onboarding": false, "optionalDependencies": Object { "respectLatest": false, diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js index 7952d0cbc5..97c155f819 100644 --- a/test/config/migration.spec.js +++ b/test/config/migration.spec.js @@ -8,7 +8,7 @@ describe('config/migration', () => { enabled: true, maintainYarnLock: true, onboarding: 'false', - automerge: false, + automerge: 'none', autodiscover: 'true', schedule: ['on the last day of the month'], commitMessage: '{{semanticPrefix}}some commit message', @@ -30,6 +30,12 @@ describe('config/migration', () => { enabled: false, }, ], + lockFileConfig: { + automerge: 'any', + }, + devDependencies: { + automerge: 'minor', + }, depTypes: [ 'dependencies', { @@ -46,7 +52,7 @@ describe('config/migration', () => { expect(isMigrated).toBe(true); expect(migratedConfig.depTypes).not.toBeDefined(); expect(migratedConfig.optionalDependencies.respectLatest).toBe(false); - expect(migratedConfig.automerge).toEqual('none'); + expect(migratedConfig.automerge).toEqual(false); expect(migratedConfig).toMatchSnapshot(); }); it('it migrates packages', () => { diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index adb9b09319..b0d29ff8a6 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -77,14 +77,14 @@ describe('workers/branch', () => { expect(config.api.deleteBranch.mock.calls.length).toBe(1); }); it('returns branchName if automerge branch-push and not stale', async () => { - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; expect(await branchWorker.getParentBranch(branchName, config)).toBe( branchName ); }); it('returns undefined if automerge branch-push and stale', async () => { - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; config.api.isBranchStale.mockReturnValueOnce(true); expect(await branchWorker.getParentBranch(branchName, config)).toBe( @@ -154,7 +154,7 @@ describe('workers/branch', () => { branchWorker.getParentBranch.mockReturnValueOnce('dummy branch'); packageJsonHelper.setNewValue.mockReturnValueOnce('new content'); config.api.branchExists.mockReturnValueOnce(true); - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'pr'; expect(await branchWorker.ensureBranch(config)).toBe(true); expect(branchWorker.getParentBranch.mock.calls.length).toBe(1); @@ -202,7 +202,7 @@ describe('workers/branch', () => { config.api.branchExists.mockReturnValueOnce(true); config.api.getBranchStatus.mockReturnValueOnce('success'); config.api.mergeBranch = jest.fn(); - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; expect(await branchWorker.ensureBranch(config)).toBe(false); expect(branchWorker.getParentBranch.mock.calls.length).toBe(1); @@ -219,7 +219,7 @@ describe('workers/branch', () => { config.api.branchExists.mockReturnValueOnce(true); config.api.getBranchStatus.mockReturnValueOnce('pending'); config.api.mergeBranch = jest.fn(); - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; expect(await branchWorker.ensureBranch(config)).toBe(true); expect(branchWorker.getParentBranch.mock.calls.length).toBe(1); @@ -235,7 +235,7 @@ describe('workers/branch', () => { packageJsonHelper.setNewValue.mockReturnValueOnce('new content'); config.api.branchExists.mockReturnValueOnce(true); config.api.getBranchStatus.mockReturnValueOnce('success'); - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; config.api.mergeBranch = jest.fn(() => { throw new Error('automerge failed'); diff --git a/test/workers/package/__snapshots__/index.spec.js.snap b/test/workers/package/__snapshots__/index.spec.js.snap index d876ac8aa6..9cf9f49539 100644 --- a/test/workers/package/__snapshots__/index.spec.js.snap +++ b/test/workers/package/__snapshots__/index.spec.js.snap @@ -69,7 +69,7 @@ exports[`lib/workers/package/index renovatePackage(config) returns error if no n Array [ Object { "assignees": Array [], - "automerge": "none", + "automerge": false, "automergeType": "pr", "branchName": "{{branchPrefix}}{{depName}}-{{newVersionMajor}}.x", "branchPrefix": "renovate/", @@ -221,7 +221,7 @@ exports[`lib/workers/package/index renovatePackage(config) returns error if no n Array [ Object { "assignees": Array [], - "automerge": "none", + "automerge": false, "automergeType": "pr", "branchName": "{{branchPrefix}}{{depName}}-{{newVersionMajor}}.x", "branchPrefix": "renovate/", diff --git a/test/workers/package/__snapshots__/versions.spec.js.snap b/test/workers/package/__snapshots__/versions.spec.js.snap index fbf2467a0a..3d61dd522e 100644 --- a/test/workers/package/__snapshots__/versions.spec.js.snap +++ b/test/workers/package/__snapshots__/versions.spec.js.snap @@ -3,7 +3,7 @@ exports[`workers/package/versions .determineUpgrades(npmDep, config) disables major release separation (major) 1`] = ` Array [ Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -17,7 +17,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -33,7 +32,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) disables major release separation (minor) 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.0.0", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -56,7 +54,6 @@ Object { exports[`workers/package/versions .determineUpgrades(npmDep, config) ignores pinning for ranges when other upgrade exists 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.7", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -67,7 +64,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -86,7 +83,7 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) pins minor ranged versions 1`] = ` Array [ Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -128,7 +125,6 @@ Object { exports[`workers/package/versions .determineUpgrades(npmDep, config) returns both updates if automerging minor 1`] = ` Array [ Object { - "automergeEnabled": true, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -139,7 +135,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -150,7 +145,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -169,7 +164,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns minor update if separate patches not configured 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -180,7 +174,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -196,7 +189,7 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns only one update if automerging any 1`] = ` Array [ Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -210,7 +203,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -226,7 +218,7 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns only one update if grouping 1`] = ` Array [ Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -240,7 +232,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -256,7 +247,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns patch minor and major 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.8.0", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -267,7 +257,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.8.0", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -278,7 +267,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.8.0", "changeLogToVersion": "0.8.12", "isPatch": true, @@ -294,7 +282,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns patch update if automerging patch 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -305,7 +292,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "0.9.7", "isPatch": true, @@ -321,7 +307,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) returns patch update if separatePatchReleases 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -332,7 +317,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.0", "changeLogToVersion": "0.9.7", "isPatch": true, @@ -348,7 +332,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) should allow unstable versions if the current version is unstable 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.0.0-beta", "changeLogToVersion": "1.1.0-beta", "isMinor": true, @@ -376,7 +359,6 @@ Object { exports[`workers/package/versions .determineUpgrades(npmDep, config) should treat zero zero caret ranges as pinned 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.0.34", "changeLogToVersion": "0.0.35", "isMinor": true, @@ -393,7 +375,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) supports > latest versions if configured 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.4.1", "changeLogToVersion": "2.0.1", "isMajor": true, @@ -409,7 +390,7 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) supports future versions if already future 1`] = ` Array [ Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -428,7 +409,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) supports future versions if configured 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.4.1", "changeLogToVersion": "2.0.3", "isMajor": true, @@ -444,7 +424,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) supports minor and major upgrades for ranged versions 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -455,7 +434,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -466,7 +444,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -485,7 +463,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) supports minor and major upgrades for tilde ranges 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -496,7 +473,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.4.4", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -507,7 +483,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -526,7 +502,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades .x major ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.7", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -543,7 +518,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades .x minor ranges 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.3.0", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -554,7 +528,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -573,7 +547,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades .x minor ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.3.0", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -590,7 +563,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades less than equal ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -602,7 +574,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -619,7 +590,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades minor ranged versions 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.0.1", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -630,7 +600,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -649,7 +619,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades multiple caret ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -661,7 +630,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -678,7 +646,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades multiple tilde ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "0.9.7", "isMinor": true, @@ -690,7 +657,6 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": false, "changeLogFromVersion": "0.7.2", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -707,7 +673,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades shorthand major ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "0.9.7", "changeLogToVersion": "1.4.1", "isMajor": true, @@ -724,7 +689,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades shorthand minor ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.3.0", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -741,7 +705,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades tilde ranges 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.3.0", "changeLogToVersion": "1.4.1", "isMinor": true, @@ -752,7 +715,7 @@ Array [ "unpublishable": false, }, Object { - "automergeEnabled": true, + "automerge": true, "group": Object { "prTitle": "{{groupName}}", "semanticPrefix": "refactor(deps):", @@ -771,7 +734,6 @@ Array [ exports[`workers/package/versions .determineUpgrades(npmDep, config) upgrades tilde ranges without pinning 1`] = ` Array [ Object { - "automergeEnabled": false, "changeLogFromVersion": "1.3.0", "changeLogToVersion": "1.4.1", "isMinor": true, diff --git a/test/workers/package/versions.spec.js b/test/workers/package/versions.spec.js index 09c3dee434..6ead615658 100644 --- a/test/workers/package/versions.spec.js +++ b/test/workers/package/versions.spec.js @@ -51,10 +51,16 @@ describe('workers/package/versions', () => { }); it('returns minor update if separate patches not configured', () => { config.currentVersion = '0.9.0'; - expect(versions.determineUpgrades(qJson, config)).toMatchSnapshot(); + const res = versions.determineUpgrades(qJson, config); + expect(res).toMatchSnapshot(); + expect(res.length).toBe(2); + expect(res[0].type).not.toEqual('patch'); + expect(res[1].type).not.toEqual('patch'); }); it('returns patch update if automerging patch', () => { - config.automerge = 'patch'; + config.patch = { + automerge: true, + }; config.currentVersion = '0.9.0'; expect(versions.determineUpgrades(qJson, config)).toMatchSnapshot(); }); @@ -273,30 +279,4 @@ describe('workers/package/versions', () => { versions.isPastLatest(qJson, '2.0.3').should.eql(true); }); }); - describe('.isAutomergeEnabled(automerge, type)', () => { - it('should return true for automerge = any', () => { - versions.isAutomergeEnabled('any', 'whatever').should.eql(true); - }); - it('should return true for automerge = minor and type = minor', () => { - versions.isAutomergeEnabled('minor', 'minor').should.eql(true); - }); - it('should return true for automerge = minor and type = patch', () => { - versions.isAutomergeEnabled('minor', 'patch').should.eql(true); - }); - it('should return true for automerge = patch and type = patch', () => { - versions.isAutomergeEnabled('patch', 'patch').should.eql(true); - }); - it('should return false for automerge = minor and type = major', () => { - versions.isAutomergeEnabled('minor', 'major').should.eql(false); - }); - it('should return false for automerge = patch and type = minor', () => { - versions.isAutomergeEnabled('patch', 'minor').should.eql(false); - }); - it('should return false for automerge = patch and type = major', () => { - versions.isAutomergeEnabled('patch', 'major').should.eql(false); - }); - it('should return false for automerge = none', () => { - versions.isAutomergeEnabled('none', 'whatever').should.eql(false); - }); - }); }); diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js index 943d9f35d8..14c5062ec7 100644 --- a/test/workers/pr/index.spec.js +++ b/test/workers/pr/index.spec.js @@ -49,7 +49,7 @@ describe('workers/pr', () => { expect(config.api.mergePr.mock.calls.length).toBe(0); }); it('should automerge if enabled and pr is mergeable', async () => { - config.automergeEnabled = true; + config.automerge = true; pr.canRebase = true; pr.mergeable = true; config.api.getBranchStatus.mockReturnValueOnce('success'); @@ -57,7 +57,7 @@ describe('workers/pr', () => { expect(config.api.mergePr.mock.calls.length).toBe(1); }); it('should not automerge if enabled and pr is mergeable but cannot rebase', async () => { - config.automergeEnabled = true; + config.automerge = true; pr.canRebase = false; pr.mergeable = true; config.api.getBranchStatus.mockReturnValueOnce('success'); @@ -65,21 +65,21 @@ describe('workers/pr', () => { expect(config.api.mergePr.mock.calls.length).toBe(0); }); it('should not automerge if enabled and pr is mergeable but branch status is not success', async () => { - config.automergeEnabled = true; + config.automerge = true; pr.mergeable = true; config.api.getBranchStatus.mockReturnValueOnce('pending'); await prWorker.checkAutoMerge(pr, config, logger); expect(config.api.mergePr.mock.calls.length).toBe(0); }); it('should not automerge if enabled and pr is mergeable but unstable', async () => { - config.automergeEnabled = true; + config.automerge = true; pr.mergeable = true; pr.mergeable_state = 'unstable'; await prWorker.checkAutoMerge(pr, config, logger); expect(config.api.mergePr.mock.calls.length).toBe(0); }); it('should not automerge if enabled and pr is unmergeable', async () => { - config.automergeEnabled = true; + config.automerge = true; pr.mergeable = false; await prWorker.checkAutoMerge(pr, config, logger); expect(config.api.mergePr.mock.calls.length).toBe(0); @@ -201,7 +201,7 @@ describe('workers/pr', () => { config.api.addReviewers = jest.fn(); config.assignees = ['bar']; config.reviewers = ['baz']; - config.automergeEnabled = true; + config.automerge = true; const pr = await prWorker.ensurePr(config, logger); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addAssignees.mock.calls.length).toBe(0); @@ -233,7 +233,7 @@ describe('workers/pr', () => { expect(pr).toMatchSnapshot(); }); it('should create PR if branch automerging failed', async () => { - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; config.api.getBranchStatus.mockReturnValueOnce('failure'); config.api.getBranchPr = jest.fn(); @@ -241,7 +241,7 @@ describe('workers/pr', () => { expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); }); it('should return null if branch automerging not failed', async () => { - config.automergeEnabled = true; + config.automerge = true; config.automergeType = 'branch-push'; config.api.getBranchStatus.mockReturnValueOnce('pending'); const pr = await prWorker.ensurePr(config, logger); -- GitLab