diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index 76eef99ec61617a7a08aa8b94fe516cf3380a29e..6a6b009744764f68abda40369820d6d351b45615 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -86,6 +86,12 @@ async function processBranch(branchConfig, packageFiles) { const branchPr = await platform.getBranchPr(config.branchName); if (branchPr) { logger.debug('Found existing branch PR'); + if (branchPr.state !== 'open') { + logger.info( + 'PR has been closed or merged since this run started - aborting' + ); + throw new Error('repository-changed'); + } if (!branchPr.canRebase) { const subject = 'PR has been edited'; logger.info(subject); diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index d296f028a215bcd34393aa810ba64f7d33ab7fa1..5d1c7611e456e14d11f25a7783de12f0c6e885f9 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -110,6 +110,17 @@ describe('workers/branch', () => { await branchWorker.processBranch(config); expect(parent.getParentBranch.mock.calls.length).toBe(0); }); + it('throws error if closed PR found', async () => { + schedule.isScheduledNow.mockReturnValueOnce(false); + platform.branchExists.mockReturnValueOnce(true); + platform.getBranchPr.mockReturnValueOnce({ + state: 'merged', + canRebase: false, + }); + await expect(branchWorker.processBranch(config)).rejects.toThrow( + /repository-changed/ + ); + }); it('skips branch if edited PR found', async () => { schedule.isScheduledNow.mockReturnValueOnce(false); platform.branchExists.mockReturnValueOnce(true);