diff --git a/lib/workers/branch/automerge.js b/lib/workers/branch/automerge.js index ab4353134927f93df9bf216a921791354f86be9d..90a1f61d5a965f3ecd8137420832587d90dc52e0 100644 --- a/lib/workers/branch/automerge.js +++ b/lib/workers/branch/automerge.js @@ -8,6 +8,10 @@ async function tryBranchAutomerge(config) { if (!config.automerge || config.automergeType === 'pr') { return 'no automerge'; } + const existingPr = config.api.getBranchPr(config.branchName); + if (existingPr) { + return 'automerge aborted - PR exists'; + } const branchStatus = await config.api.getBranchStatus( config.branchName, config.requiredStatusChecks diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js index 114a96f1f6f61613f3f92e29cd305968b5ad5c56..0d3bd5d306627142588edbd0ab216f9a9c05ab1b 100644 --- a/test/workers/branch/automerge.spec.js +++ b/test/workers/branch/automerge.spec.js @@ -8,7 +8,11 @@ describe('workers/branch/automerge', () => { beforeEach(() => { config = { ...defaultConfig, - api: { getBranchStatus: jest.fn(), mergeBranch: jest.fn() }, + api: { + getBranchPr: jest.fn(), + getBranchStatus: jest.fn(), + mergeBranch: jest.fn(), + }, logger, }; }); @@ -27,6 +31,15 @@ describe('workers/branch/automerge', () => { config.api.getBranchStatus.mockReturnValueOnce('pending'); expect(await tryBranchAutomerge(config)).toBe('no automerge'); }); + it('returns false if PR exists', async () => { + config.api.getBranchPr.mockReturnValueOnce({}); + config.automerge = true; + config.automergeType = 'branch-push'; + config.api.getBranchStatus.mockReturnValueOnce('success'); + expect(await tryBranchAutomerge(config)).toBe( + 'automerge aborted - PR exists' + ); + }); it('returns false if automerge fails', async () => { config.automerge = true; config.automergeType = 'branch-push';