diff --git a/lib/platform/github/index.js b/lib/platform/github/index.js index 480af2d401ac344d1525e801fef66332a52ee882..71f9db1e903b0d89a028d8cea6e81b12d3cc8988 100644 --- a/lib/platform/github/index.js +++ b/lib/platform/github/index.js @@ -773,8 +773,11 @@ async function getPr(prNo) { pr.displayNumber = `Pull Request #${pr.number}`; if (pr.state === 'open') { pr.branchName = pr.head ? pr.head.ref : undefined; - if (!pr.mergeable || pr.mergeable_state === 'dirty') { - logger.debug(`PR is not mergeable`); + if (pr.mergeable === true) { + pr.canMerge = true; + } + if (pr.mergeable_state === 'dirty') { + logger.debug('PR state is dirty so unmergeable'); pr.isUnmergeable = true; } if (pr.commits === 1) { diff --git a/lib/platform/gitlab/index.js b/lib/platform/gitlab/index.js index 15b65fcc950329265b8550038b5f9aba19cb3a2c..a5e9805b26525edb8905223d26e9fb77d0af27b0 100644 --- a/lib/platform/gitlab/index.js +++ b/lib/platform/gitlab/index.js @@ -452,7 +452,11 @@ async function getPr(iid) { pr.body = pr.description; if (pr.merge_status === 'cannot_be_merged') { logger.debug('pr cannot be merged'); + pr.canMerge = false; pr.isUnmergeable = true; + } else { + // Actually.. we can't be sure + pr.canMerge = true; } // Check if the most recent branch commit is by us // If not then we don't allow it to be rebased, in case someone's changes would be lost diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index be18ca7cdf0a513bb358da78a9b04eca6335d81e..a0cbfbaeddbfeeb905844a61e46509ade056cd93 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -343,8 +343,8 @@ async function checkAutoMerge(pr, config) { logger.debug({ pr }); return false; } - if (config.requiredStatusChecks && pr.mergeable_state === 'unstable') { - logger.info('PR mergeable state is unstable'); + if (config.requiredStatusChecks && pr.canMerge !== true) { + logger.info('PR is not ready for merge'); return false; } // Check branch status diff --git a/test/platform/github/__snapshots__/index.spec.js.snap b/test/platform/github/__snapshots__/index.spec.js.snap index be846c2e0d54f964404f49a0624a0a09477de534..91fdb424155c2a47c499176150d46a36367fb35f 100644 --- a/test/platform/github/__snapshots__/index.spec.js.snap +++ b/test/platform/github/__snapshots__/index.spec.js.snap @@ -465,6 +465,7 @@ Object { "sha": "5678", }, "branchName": undefined, + "canMerge": true, "canRebase": true, "commits": 1, "displayNumber": "Pull Request #1", diff --git a/test/platform/gitlab/__snapshots__/index.spec.js.snap b/test/platform/gitlab/__snapshots__/index.spec.js.snap index 3367e9a10d90eb681e1ba9eaa35ff885ef692b1c..f9bdbd1b57770b0a82c29c564d92a341100a64fd 100644 --- a/test/platform/gitlab/__snapshots__/index.spec.js.snap +++ b/test/platform/gitlab/__snapshots__/index.spec.js.snap @@ -169,6 +169,7 @@ Object { }, "body": undefined, "branchName": "some-branch", + "canMerge": true, "commits": 1, "deletions": 1, "displayNumber": "Merge Request #91", @@ -206,6 +207,7 @@ exports[`platform/gitlab getPr(prNo) returns the PR 1`] = ` Object { "body": "a merge request", "branchName": "some-branch", + "canMerge": false, "canRebase": true, "description": "a merge request", "displayNumber": "Merge Request #12345", diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js index 076221c84833ba479daf20afe51e3a19e94c86df..8464342e1f65e5e98b8a760dbc25cb53fc0244aa 100644 --- a/test/workers/pr/index.spec.js +++ b/test/workers/pr/index.spec.js @@ -36,6 +36,7 @@ describe('workers/pr', () => { head: { ref: 'somebranch', }, + canMerge: true, }; }); afterEach(() => { @@ -67,7 +68,7 @@ describe('workers/pr', () => { }); it('should not automerge if enabled and pr is mergeable but unstable', async () => { config.automerge = true; - pr.mergeable_state = 'unstable'; + pr.canMerge = undefined; await prWorker.checkAutoMerge(pr, config); expect(platform.mergePr.mock.calls.length).toBe(0); });