From b711e0c3aa03480a7d3b69e3e7a9346a00e3c774 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sun, 31 Dec 2017 20:47:46 +0100 Subject: [PATCH] fix: handle 404 repos gracefully --- lib/platform/github/index.js | 3 +++ lib/workers/repository/error.js | 3 +++ test/platform/github/index.spec.js | 14 ++++++++++++++ test/workers/repository/error.spec.js | 1 + 4 files changed, 21 insertions(+) diff --git a/lib/platform/github/index.js b/lib/platform/github/index.js index 3484477939..c2e232a1ec 100644 --- a/lib/platform/github/index.js +++ b/lib/platform/github/index.js @@ -106,6 +106,9 @@ async function initRepo(repoName, token, endpoint, forkMode, forkToken) { logger.info('Could not find allowed merge methods for repo'); } } catch (err) /* istanbul ignore next */ { + if (err.statusCode === 404) { + throw new Error('not-found'); + } logger.info({ err, res }, 'Unknown GitHub initRepo error'); throw err; } diff --git a/lib/workers/repository/error.js b/lib/workers/repository/error.js index a4024ebd70..cae471f597 100644 --- a/lib/workers/repository/error.js +++ b/lib/workers/repository/error.js @@ -15,6 +15,9 @@ async function handleError(config, err) { } else if (err.message === 'archived') { logger.info('Repository is archived - skipping'); return err.message; + } else if (err.message === 'not-found') { + logger.info('Repository is not found'); + return err.message; } else if (err.message === 'fork') { logger.info('Repository is a fork and not manually configured - skipping'); return err.message; diff --git a/test/platform/github/index.spec.js b/test/platform/github/index.spec.js index 76bec2dfc5..5f23181f58 100644 --- a/test/platform/github/index.spec.js +++ b/test/platform/github/index.spec.js @@ -339,6 +339,20 @@ describe('platform/github', () => { } expect(e).toBeDefined(); }); + it('throws not-found', async () => { + get.mockImplementationOnce(() => + Promise.reject({ + statusCode: 404, + }) + ); + let e; + try { + await github.initRepo('some/repo', 'token'); + } catch (err) { + e = err; + } + expect(e).toBeDefined(); + }); }); describe('getRepoForceRebase', () => { it('should detect repoForceRebase', async () => { diff --git a/test/workers/repository/error.spec.js b/test/workers/repository/error.spec.js index 916a72e69c..19c32a7e75 100644 --- a/test/workers/repository/error.spec.js +++ b/test/workers/repository/error.spec.js @@ -18,6 +18,7 @@ describe('workers/repository/error', () => { 'loops>5', 'config-validation', 'archived', + 'not-found', ]; errors.forEach(err => { it(`errors ${err}`, async () => { -- GitLab