diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index b1dc63afd57a32cc53b4516fa8c0ae207f8d5520..2a0922429297690414698840fcdcc4745389ed08 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -151,7 +151,14 @@ async function ensurePr(prConfig) { return existingPr; } logger.debug({ prTitle }, `Creating PR for branch ${branchName}`); - const pr = await config.api.createPr(branchName, prTitle, prBody); + let pr; + try { + pr = await config.api.createPr(branchName, prTitle, prBody); + } catch (err) { + logger.warn({ err }, `Failed to create PR - deleting branch`); + await config.api.deleteBranch(branchName); + return null; + } if (config.labels.length > 0) { await config.api.addLabels(pr.number, config.labels); } diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js index 07a0b758ec03c52d70b9b0886b9f73e6a9455f0b..0d6b9671fe8ac97c12ad95d3aca392a870de0909 100644 --- a/test/workers/pr/index.spec.js +++ b/test/workers/pr/index.spec.js @@ -137,6 +137,18 @@ describe('workers/pr', () => { const pr = await prWorker.ensurePr(config); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); }); + it('should delete branch and return null if creating PR fails', async () => { + config.api.getBranchStatus = jest.fn(() => 'success'); + config.api.getBranchPr = jest.fn(); + config.api.createPr = jest.fn(() => { + throw new Error('failed to create PR'); + }); + config.api.deleteBranch = jest.fn(); + config.prCreation = 'status-success'; + const pr = await prWorker.ensurePr(config); + expect(config.api.deleteBranch.mock.calls).toHaveLength(1); + expect(pr).toBe(null); + }); it('should return null if waiting for not pending', async () => { config.api.getBranchStatus = jest.fn(() => 'pending'); config.api.getBranchLastCommitTime = jest.fn(() => new Date());