diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index 19fdd88224..26ab3c9e63 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -116,6 +116,11 @@ async function processBranch(branchConfig) { config.forcePr = true; } } catch (err) { + // istanbul ignore if + if (err.statusCode === 404 || err.statusCode === 422) { + logger.warn({ err }, `Error updating branch: ${err.message}`); + return 'platform-error'; + } logger.error({ err }, `Error updating branch: ${err.message}`); // Don't throw here - we don't want to stop the other renovations return 'error'; diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js index ef6f1ad13f..00b3312693 100644 --- a/lib/workers/repository/index.js +++ b/lib/workers/repository/index.js @@ -32,6 +32,10 @@ async function renovateRepository(repoConfig, token, loop = 1) { logger.info('Restarting repo renovation after automerge'); return renovateRepository(repoConfig, token, loop + 1); } + if (res === 'platform-error') { + logger.info('Restarting renovation after platform error'); + return renovateRepository(repoConfig, token, loop + 1); + } return res; } catch (err) { return handleError(config, err); diff --git a/lib/workers/repository/write.js b/lib/workers/repository/write.js index 076f6e0688..455537d0a5 100644 --- a/lib/workers/repository/write.js +++ b/lib/workers/repository/write.js @@ -21,6 +21,9 @@ async function writeUpdates(config) { // Stop procesing other branches because base branch has been changed by an automerge return 'automerged'; } + if (res === 'platform-error') { + return 'platform-error'; + } } return 'done'; } finally { diff --git a/test/workers/repository/index.spec.js b/test/workers/repository/index.spec.js index 2c39859c8c..267a983f0b 100644 --- a/test/workers/repository/index.spec.js +++ b/test/workers/repository/index.spec.js @@ -28,6 +28,7 @@ describe('workers/repository', () => { it('writes', async () => { determineUpdates.mockReturnValue({ repoIsOnboarded: true }); writeUpdates.mockReturnValueOnce('automerged'); + writeUpdates.mockReturnValueOnce('platform-error'); writeUpdates.mockReturnValueOnce('onboarded'); const res = await renovateRepository(config, 'some-token'); expect(res).toMatchSnapshot(); diff --git a/test/workers/repository/write.spec.js b/test/workers/repository/write.spec.js index 6f8e335811..3ab58a9c29 100644 --- a/test/workers/repository/write.spec.js +++ b/test/workers/repository/write.spec.js @@ -25,5 +25,12 @@ describe('workers/repository/write', () => { expect(res).toEqual('automerged'); expect(branchWorker.processBranch.mock.calls).toHaveLength(2); }); + it('stops after platform error', async () => { + config.branches = [{}, {}]; + branchWorker.processBranch.mockReturnValueOnce('platform-error'); + const res = await writeUpdates(config); + expect(res).toEqual('platform-error'); + expect(branchWorker.processBranch.mock.calls).toHaveLength(1); + }); }); });