feat: support lock file maintenance automerge ()

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 
pull/699/head v9.44.0
Rhys Arkins 2017-08-21 13:41:48 +02:00 committed by GitHub
parent f598c5f899
commit b657d3c291
14 changed files with 108 additions and 132 deletions

View File

@ -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>

View File

@ -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',

View File

@ -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(

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) {

View File

@ -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,

View File

@ -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,

View File

@ -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', () => {

View File

@ -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');

View File

@ -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/",

View File

@ -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,

View File

@ -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);
});
});
});

View File

@ -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);