diff --git a/lib/workers/branch/lock-files.js b/lib/workers/branch/lock-files.js index 5b66be1fcf23b63a056df9f9e4c474a45dc280bd..7ae4f262c98f4276759b619309a10fe8a3b845d2 100644 --- a/lib/workers/branch/lock-files.js +++ b/lib/workers/branch/lock-files.js @@ -100,9 +100,16 @@ async function writeExistingFiles(config) { ); if (packageFile.packageFile.endsWith('package.json')) { logger.debug(`Writing package.json to ${basedir}`); + // Massage the file to eliminate yarn errors + const massagedFile = { ...packageFile.content }; + if (!massagedFile.name.match(/^[0-9a-z-_]+$/)) { + massagedFile.name = 'dummy'; + } + delete massagedFile.engines; + delete massagedFile.scripts; await fs.outputFile( path.join(basedir, 'package.json'), - JSON.stringify(packageFile.content) + JSON.stringify(massagedFile) ); } if (packageFile.npmrc) { @@ -131,9 +138,15 @@ async function writeUpdatedPackageFiles(config) { } for (const packageFile of config.updatedPackageFiles) { logger.debug(`Writing ${packageFile.name}`); + const massagedFile = JSON.parse(packageFile.contents); + if (!massagedFile.name.match(/^[0-9a-z-_]+$/)) { + massagedFile.name = 'dummy'; + } + delete massagedFile.engines; + delete massagedFile.scripts; await fs.outputFile( path.join(config.tmpDir.name, packageFile.name), - packageFile.contents + JSON.stringify(massagedFile) ); } } diff --git a/test/workers/branch/__snapshots__/lock-files.spec.js.snap b/test/workers/branch/__snapshots__/lock-files.spec.js.snap index dc3f6ab903bcef49386175b13446a55b29a447e5..a732a11b45656f03f23dce1a29882b780d47e45b 100644 --- a/test/workers/branch/__snapshots__/lock-files.spec.js.snap +++ b/test/workers/branch/__snapshots__/lock-files.spec.js.snap @@ -86,7 +86,7 @@ exports[`workers/branch/lock-files writeExistingFiles writes files and removes f Array [ Array [ "some-tmp-dir/package.json", - "{\\"name\\":\\"package 1\\"}", + "{\\"name\\":\\"dummy\\"}", ], Array [ "some-tmp-dir/.npmrc", @@ -94,7 +94,7 @@ Array [ ], Array [ "some-tmp-dir/backend/package.json", - "{\\"name\\":\\"package 2\\"}", + "{\\"name\\":\\"package-2\\"}", ], Array [ "some-tmp-dir/backend/.yarnrc", @@ -107,11 +107,11 @@ exports[`workers/branch/lock-files writeUpdatedPackageFiles writes updated packa Array [ Array [ "some-tmp-dir/package.json", - "raw contents", + "{\\"name\\":\\"dummy\\"}", ], Array [ "some-tmp-dir/backend/package.json", - "more raw contents", + "{\\"name\\":\\"some-other-name\\"}", ], ] `; diff --git a/test/workers/branch/lock-files.spec.js b/test/workers/branch/lock-files.spec.js index 16ba4ff814225d3acdf7e96489796cf94fee41e4..c0ab1c68dce356bf5ab1b0b925737283361abc58 100644 --- a/test/workers/branch/lock-files.spec.js +++ b/test/workers/branch/lock-files.spec.js @@ -201,7 +201,7 @@ describe('workers/branch/lock-files', () => { }, { packageFile: 'backend/package.json', - content: { name: 'package 2' }, + content: { name: 'package-2', engines: { yarn: '^0.27.5' } }, yarnrc: 'some yarnrc', }, ]; @@ -230,16 +230,19 @@ describe('workers/branch/lock-files', () => { config.updatedPackageFiles = [ { name: 'package.json', - contents: 'raw contents', + contents: '{ "name": "{{some-template}}" }', }, { name: 'backend/package.json', - contents: 'more raw contents', + contents: + '{ "name": "some-other-name", "engines": { "node": "^6.0.0" }}', }, ]; await writeUpdatedPackageFiles(config); expect(fs.outputFile.mock.calls).toMatchSnapshot(); expect(fs.outputFile.mock.calls).toHaveLength(2); + expect(fs.outputFile.mock.calls[0][1].includes('"dummy"')).toBe(true); + expect(fs.outputFile.mock.calls[1][1].includes('"engines"')).toBe(false); }); }); describe('getUpdatedLockFiles', () => {