From a1e1b1770f4c0801d0784c6834f72eec65e75529 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Sat, 5 Aug 2017 05:53:24 +0200 Subject: [PATCH] fix: log full package lock generation error (#621) --- lib/workers/branch/index.js | 6 +++++- lib/workers/branch/npm.js | 17 ++++++++++++++--- lib/workers/branch/yarn.js | 18 +++++++++++++++--- test/workers/branch/index.spec.js | 6 ++++++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index 8527009ff9..42ec44e3a0 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -260,7 +260,11 @@ async function processBranchUpgrades(branchUpgrades, errors, warnings) { } } } catch (err) { - logger.error({ err }, `Error updating branch: ${err.message}`); + if (err.message !== 'Error generating lock file') { + logger.error({ err }, `Error updating branch: ${err.message}`); + } else { + logger.info('Error updating branch'); + } // Don't throw here - we don't want to stop the other renovations } } diff --git a/lib/workers/branch/npm.js b/lib/workers/branch/npm.js index 5646f970f7..60b511a528 100644 --- a/lib/workers/branch/npm.js +++ b/lib/workers/branch/npm.js @@ -13,13 +13,14 @@ async function generateLockFile(newPackageJson, npmrcContent, logger) { logger.debug('Generating new package-lock.json file'); const tmpDir = tmp.dirSync({ unsafeCleanup: true }); let packageLock; + let result = {}; try { fs.writeFileSync(path.join(tmpDir.name, 'package.json'), newPackageJson); if (npmrcContent) { fs.writeFileSync(path.join(tmpDir.name, '.npmrc'), npmrcContent); } logger.debug('Spawning npm install'); - const result = cp.spawnSync('npm', ['install', '--ignore-scripts'], { + result = cp.spawnSync('npm', ['install', '--ignore-scripts'], { cwd: tmpDir.name, shell: true, env: { ...process.env, ...{ NODE_ENV: 'dev' } }, @@ -29,13 +30,23 @@ async function generateLockFile(newPackageJson, npmrcContent, logger) { 'npm install complete' ); packageLock = fs.readFileSync(path.join(tmpDir.name, 'package-lock.json')); - } catch (error) /* istanbul ignore next */ { + } catch (err) /* istanbul ignore next */ { + logger.warn( + { + err, + newPackageJson, + npmrcContent, + stdout: result.stdout, + stderr: result.stderr, + }, + 'Error generating package-lock.json' + ); try { tmpDir.removeCallback(); } catch (err2) { logger.warn(`Failed to remove tmpDir ${tmpDir.name}`); } - throw error; + throw Error('Error generating lock file'); } try { tmpDir.removeCallback(); diff --git a/lib/workers/branch/yarn.js b/lib/workers/branch/yarn.js index 6514379d8d..b9a232e6de 100644 --- a/lib/workers/branch/yarn.js +++ b/lib/workers/branch/yarn.js @@ -20,6 +20,7 @@ async function generateLockFile( logger.debug('Generating new yarn.lock file'); const tmpDir = tmp.dirSync({ unsafeCleanup: true }); let yarnLock; + let result = {}; try { fs.writeFileSync(path.join(tmpDir.name, 'package.json'), newPackageJson); if (npmrcContent) { @@ -40,7 +41,7 @@ async function generateLockFile( `yarn-${yarnVersion}.js` ); const yarnOptions = [yarnBin, 'install', '--ignore-scripts']; - const result = cp.spawnSync('node', yarnOptions, { + result = cp.spawnSync('node', yarnOptions, { cwd: tmpDir.name, shell: true, env: { ...process.env, ...{ NODE_ENV: 'dev' } }, @@ -48,13 +49,24 @@ async function generateLockFile( logger.debug(String(result.stdout)); logger.debug(String(result.stderr)); yarnLock = fs.readFileSync(path.join(tmpDir.name, 'yarn.lock')); - } catch (error) /* istanbul ignore next */ { + } catch (err) /* istanbul ignore next */ { + logger.warn( + { + err, + newPackageJson, + npmrcContent, + yarnrcContent, + stdout: result.stdout, + stderr: result.stderr, + }, + 'Error generating yarn.lock' + ); try { tmpDir.removeCallback(); } catch (err2) { logger.warn(`Failed to remove tmpDir ${tmpDir.name}`); } - throw error; + throw Error('Error generating lock file'); } try { tmpDir.removeCallback(); diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index 71b63d618e..40e33c75d9 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -419,5 +419,11 @@ describe('workers/branch', () => { await branchWorker.processBranchUpgrades(config); expect(branchWorker.ensureBranch.mock.calls.length).toBe(0); }); + it('handles known errors', async () => { + branchWorker.ensureBranch.mockImplementationOnce(() => { + throw Error('Error generating lock file'); + }); + await branchWorker.processBranchUpgrades(config); + }); }); }); -- GitLab