diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index 8527009ff989b6e5593ddcdbace5a02f43fb03e5..42ec44e3a0ba8defc859b81179a8edcaae67a289 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 5646f970f7cd773f91f47e51a44bde2c026ee356..60b511a5286c04be35479b4db5cf31a25cc65575 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 6514379d8db7f3e28b7e30e07e6c250133da8a37..b9a232e6def5e9d89d403715068912179a2a56fc 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 71b63d618e875bf2d9baec65656287b4b2cd143a..40e33c75d908d37ba2eb17a7d808f700f8305511 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); + }); }); });