From 2f4d5836f33713406e96e3ad5256ab6e9b51e20a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C8=9Aurcanu=20Dragomir?= <dragomirt22@gmail.com> Date: Thu, 5 Apr 2018 23:42:07 +0300 Subject: [PATCH] feat: Raise config error if config found within nested package.json (#1777) Raises config error if renovate config found in a nested package.json Closes #1742 --- lib/manager/npm/resolve.js | 15 +++++++++++++++ test/manager/resolve.spec.js | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/manager/npm/resolve.js b/lib/manager/npm/resolve.js index 786d52cb45..af45443278 100644 --- a/lib/manager/npm/resolve.js +++ b/lib/manager/npm/resolve.js @@ -11,6 +11,7 @@ async function resolvePackageFile(config, inputFile) { logger.debug( `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}` ); + const pFileRaw = await platform.getFile(packageFile.packageFile); if (!pFileRaw) { logger.info( @@ -45,6 +46,20 @@ async function resolvePackageFile(config, inputFile) { }); return null; } + + if ( + inputFile.packageFile.includes('package.json') && + inputFile.packageFile !== 'package.json' && + packageFile.content.renovate !== undefined + ) { + const error = new Error('config-validation'); + error.configFile = packageFile.packageFile; + error.validationError = 'package.json configuration error'; + error.validationMessage = + 'Nested package.json must not contain renovate configuration'; + throw error; + } + if (!config.ignoreNpmrcFile) { packageFile.npmrc = await platform.getFile( upath.join(path.dirname(packageFile.packageFile), '.npmrc') diff --git a/test/manager/resolve.spec.js b/test/manager/resolve.spec.js index 10a1d111ba..3ae257a8bb 100644 --- a/test/manager/resolve.spec.js +++ b/test/manager/resolve.spec.js @@ -169,5 +169,21 @@ describe('manager/resolve', () => { expect(res.packageFiles).toMatchSnapshot(); expect(res.warnings).toHaveLength(0); }); + it('checks if renovate config in nested package.json throws an error', async () => { + manager.detectPackageFiles = jest.fn(() => [ + { packageFile: 'package.json', manager: 'npm' }, + ]); + platform.getFileList.mockReturnValue(['test/package.json']); + platform.getFile.mockReturnValueOnce( + '{"name": "test/package.json", "version": "0.0.1", "renovate":{"enabled": true}}' + ); + let e; + try { + await resolvePackageFiles(config); + } catch (err) { + e = err; + } + expect(e).toEqual(new Error('config-validation')); + }); }); }); -- GitLab