diff --git a/lib/api/gh-got-wrapper.js b/lib/api/gh-got-wrapper.js index 89018d6d754b1352f5d6c33eddd638425470e86a..fba297867339533626fec085207a01107dc46b1f 100644 --- a/lib/api/gh-got-wrapper.js +++ b/lib/api/gh-got-wrapper.js @@ -48,8 +48,7 @@ async function get(path, opts, retries = 5) { await sleep(5000 / retries); } return get(path, opts, retries - 1); - } - if ( + } else if ( retries > 0 && err.statusCode === 403 && err.message && @@ -65,8 +64,7 @@ async function get(path, opts, retries = 5) { await sleep(180000 / (retries * retries)); } return get(path, opts, retries - 1); - } - if ( + } else if ( err.statusCode === 403 && err.message && err.message.indexOf('rate limit exceeded') !== -1 @@ -82,7 +80,22 @@ async function get(path, opts, retries = 5) { } return get(path, opts, retries - 1); } - logger.info({ headers: err.headers }, 'Failed retrying request'); + } else if ( + err.statusCode === 401 && + err.message && + err.message.indexOf('Bad credentials') !== -1 + ) { + if (retries > 0) { + logger.info( + { statusCode: err.statusCode, message: err.message }, + `Retrying request` + ); + // istanbul ignore if + if (process.env.NODE_ENV !== 'test') { + await sleep(5000 / retries); + } + return get(path, opts, retries - 1); + } } throw err; } diff --git a/test/api/gh-got-wrapper.spec.js b/test/api/gh-got-wrapper.spec.js index ef738176f8c908cf91b33c565f53dfb77f986b4b..adf439a933cb9b999f09503f912e87212b2c9479 100644 --- a/test/api/gh-got-wrapper.spec.js +++ b/test/api/gh-got-wrapper.spec.js @@ -97,6 +97,12 @@ describe('api/gh-got-wrapper', () => { message: 'API rate limit exceeded for x.', }) ); + ghGot.mockImplementationOnce(() => + Promise.reject({ + statusCode: 401, + message: 'Bad credentials', + }) + ); ghGot.mockImplementationOnce(() => Promise.reject({ statusCode: 403,