diff --git a/lib/workers/branch/automerge.js b/lib/workers/branch/automerge.js index 2e878306d4103816a085d696f12114cdfa04c488..0bd8952ca46b5e8a3c30b6d3a0de9132fdbcab97 100644 --- a/lib/workers/branch/automerge.js +++ b/lib/workers/branch/automerge.js @@ -8,13 +8,23 @@ async function tryBranchAutomerge(config) { return 'no automerge'; } const existingPr = await platform.getBranchPr(config.branchName); - if (existingPr) { - return 'automerge aborted - PR exists'; - } + const branchStatus = await platform.getBranchStatus( config.branchName, config.requiredStatusChecks ); + + if (existingPr) { + if (branchStatus === 'success') { + if (existingPr.canRebase) { + await platform.mergeBranch(config.branchName, config.automergeType); + logger.info({ branch: config.branchName }, 'Branch automerged'); + return 'automerged'; // Branch no longer exists + } + return 'automerge aborted - Human commits detected'; + } + return 'automerge aborted - PR exists'; + } if (branchStatus === 'success') { logger.debug(`Automerging branch`); try { diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js index 3fbdd5cd55c0f59efe0e1a3feb4e5153a55aa20a..36394db7979f126016a1f249c1ddeb4203327927 100644 --- a/test/workers/branch/automerge.spec.js +++ b/test/workers/branch/automerge.spec.js @@ -34,11 +34,19 @@ describe('workers/branch/automerge', () => { platform.getBranchPr.mockReturnValueOnce({}); config.automerge = true; config.automergeType = 'branch'; - platform.getBranchStatus.mockReturnValueOnce('success'); expect(await tryBranchAutomerge(config)).toBe( 'automerge aborted - PR exists' ); }); + it('returns false if PR exists and success branch', async () => { + platform.getBranchPr.mockReturnValueOnce({}); + config.automerge = true; + config.automergeType = 'branch'; + platform.getBranchStatus.mockReturnValueOnce('success'); + expect(await tryBranchAutomerge(config)).toBe( + 'automerge aborted - Human commits detected' + ); + }); it('returns false if automerge fails', async () => { config.automerge = true; config.automergeType = 'branch'; @@ -54,5 +62,12 @@ describe('workers/branch/automerge', () => { platform.getBranchStatus.mockReturnValueOnce('success'); expect(await tryBranchAutomerge(config)).toBe('automerged'); }); + it('merge branch if PR exists and have one commit and success branch', async () => { + platform.getBranchPr.mockReturnValueOnce({ canRebase: true }); + config.automerge = true; + config.automergeType = 'branch'; + platform.getBranchStatus.mockReturnValueOnce('success'); + expect(await tryBranchAutomerge(config)).toBe('automerged'); + }); }); });