From 579214682ff6380d43ef04792a8a17ef472717ce Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 27 Feb 2018 16:58:29 +0100 Subject: [PATCH] fix: throw config validation error if unknown filename Refactors manager.resolve to use file name to manager mappings. --- lib/manager/resolve.js | 38 +++++++++++++------ .../__snapshots__/resolve.spec.js.snap | 9 ++++- test/manager/resolve.spec.js | 9 ++++- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/lib/manager/resolve.js b/lib/manager/resolve.js index e730d66171..5254fc20e9 100644 --- a/lib/manager/resolve.js +++ b/lib/manager/resolve.js @@ -22,9 +22,27 @@ async function resolvePackageFiles(config) { : await manager.detectPackageFiles(config); logger.debug({ allPackageFiles }, 'allPackageFiles'); const fileList = await platform.getFileList(); + const managerFileMappings = { + '.travis.yml': 'node', + Dockerfile: 'docker', + WORKSPACE: 'bazel', + 'package.js': 'meteor', + 'package.json': 'npm', + }; async function resolvePackageFile(p) { const packageFile = typeof p === 'string' ? { packageFile: p } : p; - if (packageFile.packageFile.endsWith('package.json')) { + const fileName = packageFile.packageFile.split('/').pop(); + packageFile.manager = packageFile.manager || managerFileMappings[fileName]; + if (!packageFile.manager) { + // Config error + const error = new Error('config-validation'); + error.configFile = packageFile.packageFile; + error.validationError = 'Unknown file type'; + error.validationMessage = + 'Please correct the file name in your packageFiles array'; + throw error; + } + if (packageFile.manager === 'npm') { logger.debug(`Resolving packageFile ${JSON.stringify(packageFile)}`); const pFileRaw = await platform.getFile(packageFile.packageFile); if (!pFileRaw) { @@ -127,25 +145,21 @@ async function resolvePackageFiles(config) { } packageFile.currentPackageJsonVersion = packageFile.content.version; return mergeChildConfig(config.npm, packageFile); - } else if (packageFile.packageFile.endsWith('package.js')) { - // meteor + } else if (packageFile.manager === 'meteor') { return mergeChildConfig(config.meteor, packageFile); - } else if (packageFile.packageFile.endsWith('Dockerfile')) { - logger.debug('Resolving Dockerfile'); + } else if (packageFile.manager === 'docker') { return dockerResolve.resolvePackageFile(config, packageFile); - } else if (packageFile.packageFile.endsWith('.travis.yml')) { - logger.debug('Resolving .travis.yml'); + } else if (packageFile.manager === 'node') { return nodeResolve.resolvePackageFile(config, packageFile); - } else if (packageFile.packageFile.endsWith('WORKSPACE')) { - logger.debug('Resolving WORKSPACE'); + } else if (packageFile.manager === 'bazel') { return bazelResolve.resolvePackageFile(config, packageFile); } - return null; + // istanbul ignore next + throw new Error('unknown manager'); } - logger.debug('queue'); + // TODO: throttle how many we resolve in parallel const queue = allPackageFiles.map(p => resolvePackageFile(p)); let packageFiles = (await Promise.all(queue)).filter(p => p !== null); - logger.debug('Checking against path rules'); packageFiles = packageFiles.map(pf => { let packageFile = { ...pf }; diff --git a/test/manager/__snapshots__/resolve.spec.js.snap b/test/manager/__snapshots__/resolve.spec.js.snap index d509482f4d..39b85e321f 100644 --- a/test/manager/__snapshots__/resolve.spec.js.snap +++ b/test/manager/__snapshots__/resolve.spec.js.snap @@ -12,6 +12,7 @@ Array [ }, "currentPackageJsonVersion": "1.0.0", "enabled": true, + "manager": "npm", "packageFile": "package.json", }, ] @@ -30,6 +31,7 @@ Array [ }, "currentPackageJsonVersion": "0.0.1", "enabled": true, + "manager": "npm", "npmrc": "npmrc", "packageFile": "package.json", "packageLock": "package-lock.json", @@ -44,6 +46,7 @@ exports[`manager/resolve resolvePackageFiles() detects meteor and docker and tra Array [ Object { "enabled": true, + "manager": "meteor", "packageFile": "package.js", }, Object { @@ -139,6 +142,7 @@ This PR has been generated by [Renovate Bot](https://renovateapp.com).", "major": Object { "enabled": false, }, + "manager": "docker", "packageFile": "Dockerfile", "pin": Object { "branchName": "{{{branchPrefix}}}docker-pin-{{{depNameSanitized}}}-{{{currentTag}}}", @@ -269,6 +273,7 @@ This PR has been generated by [Renovate Bot](https://renovateapp.com).", "content": "hello: world ", "enabled": false, + "manager": "node", "packageFile": ".travis.yml", "prBody": "This Pull Request updates \`{{{depName}}}\` versions from \`{{{currentVersions}}}\` to \`{{{newVersions}}}\`. This is according to the configured node.js support policy \\"{{{supportPolicy}}}\\". @@ -313,13 +318,12 @@ This PR has been generated by [Renovate Bot](https://renovateapp.com).", Object { "content": "# travis", "enabled": true, + "manager": "bazel", "packageFile": "WORKSPACE", }, ] `; -exports[`manager/resolve resolvePackageFiles() handles wrong filenames 1`] = `Array []`; - exports[`manager/resolve resolvePackageFiles() skips if no content or no match 1`] = `Array []`; exports[`manager/resolve resolvePackageFiles() strips npmrc with NPM_TOKEN 1`] = ` @@ -331,6 +335,7 @@ Array [ }, "currentPackageJsonVersion": "0.0.1", "enabled": true, + "manager": "npm", "packageFile": "package.json", }, ] diff --git a/test/manager/resolve.spec.js b/test/manager/resolve.spec.js index fc7ab559ac..028aa28e55 100644 --- a/test/manager/resolve.spec.js +++ b/test/manager/resolve.spec.js @@ -14,8 +14,13 @@ describe('manager/resolve', () => { describe('resolvePackageFiles()', () => { it('handles wrong filenames', async () => { config.packageFiles = ['wrong.txt']; - const res = await resolvePackageFiles(config); - expect(res.packageFiles).toMatchSnapshot(); + let e; + try { + await resolvePackageFiles(config); + } catch (err) { + e = err; + } + expect(e).toBeDefined(); }); it('uses packageFiles if already configured and raises error if not found', async () => { config.packageFiles = [ -- GitLab