From fd6398ef69c6ed4843c6f65252b4ea1ebe84d07b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Mon, 3 Dec 2018 12:03:46 +0100 Subject: [PATCH] fix(github): gracefully handle integration unauthorized --- lib/platform/github/gh-got-wrapper.js | 8 ++++---- lib/workers/branch/index.js | 4 ++++ lib/workers/repository/error.js | 5 +++++ test/platform/github/gh-got-wrapper.spec.js | 16 ++++++++++++++++ test/workers/repository/error.spec.js | 1 + 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/platform/github/gh-got-wrapper.js b/lib/platform/github/gh-got-wrapper.js index 2738dcc826..64a0fbe1e3 100644 --- a/lib/platform/github/gh-got-wrapper.js +++ b/lib/platform/github/gh-got-wrapper.js @@ -159,11 +159,11 @@ async function get(path, options, retries = 5) { throw err; } else if ( err.statusCode === 403 && - !( - err.message && - err.message.startsWith('Resource not accessible by integration') - ) + err.message && + err.message.startsWith('Resource not accessible by integration') ) { + throw new Error('integration-unauthorized'); + } else if (err.statusCode === 403) { if (retries > 0) { logger.info( { statusCode: err.statusCode, message: err.message }, diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index b884250432..7443558168 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -299,6 +299,10 @@ async function processBranch(branchConfig, prHourlyLimitReached, packageFiles) { logger.debug('Passing bad-credentials error up'); throw err; } + if (err.message === 'integration-unauthorized') { + logger.debug('Passing integration-unauthorized error up'); + throw err; + } if (err.message === 'lockfile-error') { logger.debug('Passing lockfile-error up'); throw err; diff --git a/lib/workers/repository/error.js b/lib/workers/repository/error.js index d1e1eee5b1..f2c726c50b 100644 --- a/lib/workers/repository/error.js +++ b/lib/workers/repository/error.js @@ -94,6 +94,11 @@ async function handleError(config, err) { delete config.branchList; // eslint-disable-line no-param-reassign return err.message; } + if (err.message === 'integration-unauthorized') { + logger.warn('Integration unauthorized - aborting'); + delete config.branchList; // eslint-disable-line no-param-reassign + return err.message; + } if (err.message === 'lockfile-error') { delete config.branchList; // eslint-disable-line no-param-reassign logger.info('Lock file error - aborting'); diff --git a/test/platform/github/gh-got-wrapper.spec.js b/test/platform/github/gh-got-wrapper.spec.js index 0fa27ec6c2..abb6aeae66 100644 --- a/test/platform/github/gh-got-wrapper.spec.js +++ b/test/platform/github/gh-got-wrapper.spec.js @@ -314,4 +314,20 @@ describe('platform/gh-got-wrapper', () => { expect(e).toBeDefined(); expect(e.message).toEqual('platform-failure'); }); + it('should throw for unauthorized integration', async () => { + ghGot.mockImplementationOnce(() => + Promise.reject({ + statusCode: 403, + message: 'Resource not accessible by integration (403)', + }) + ); + let e; + try { + await get('some-url', {}, 0); + } catch (err) { + e = err; + } + expect(e).toBeDefined(); + expect(e.message).toEqual('integration-unauthorized'); + }); }); diff --git a/test/workers/repository/error.spec.js b/test/workers/repository/error.spec.js index 36866aee74..3cc00d5a47 100644 --- a/test/workers/repository/error.spec.js +++ b/test/workers/repository/error.spec.js @@ -30,6 +30,7 @@ describe('workers/repository/error', () => { 'platform-failure', 'no-vulnerability-alerts', 'cannot-fork', + 'integration-unauthorized', ]; errors.forEach(err => { it(`errors ${err}`, async () => { -- GitLab