From da1ded53449183f16cba122a45193b63b29de349 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Tue, 24 Oct 2017 13:50:07 +0200 Subject: [PATCH] refactor: move more package worker logic to manager --- lib/manager/docker/package.js | 4 +-- lib/manager/index.js | 18 +++++++++++++ lib/manager/npm/package.js | 4 +-- lib/workers/package/index.js | 11 ++------ .../docker/__snapshots__/package.spec.js.snap | 4 +-- test/manager/docker/package.spec.js | 16 ++++++------ .../npm/__snapshots__/package.spec.js.snap | 10 ++++---- test/manager/npm/package.spec.js | 14 +++++------ .../package/__snapshots__/index.spec.js.snap | 2 +- test/workers/package/index.spec.js | 25 +++++++++++++------ 10 files changed, 65 insertions(+), 43 deletions(-) create mode 100644 lib/manager/index.js diff --git a/lib/manager/docker/package.js b/lib/manager/docker/package.js index 7d0a7f6a9c..6d8cbc8e45 100644 --- a/lib/manager/docker/package.js +++ b/lib/manager/docker/package.js @@ -4,10 +4,10 @@ const versions = require('../../workers/package/versions'); const compareVersions = require('compare-versions'); module.exports = { - renovateDockerImage, + getPackageUpdates, }; -async function renovateDockerImage(config) { +async function getPackageUpdates(config) { const { currentFrom, currentTag, logger } = config; const upgrades = []; if (config.pinDigests) { diff --git a/lib/manager/index.js b/lib/manager/index.js new file mode 100644 index 0000000000..4c0f2cfe5d --- /dev/null +++ b/lib/manager/index.js @@ -0,0 +1,18 @@ +const docker = require('./docker/package'); +const npm = require('./npm/package'); + +module.exports = { + getPackageUpdates, +}; + +async function getPackageUpdates(config) { + if (config.packageFile.endsWith('Dockerfile')) { + return docker.getPackageUpdates(config); + } else if (config.packageFile.endsWith('package.json')) { + return npm.getPackageUpdates(config); + } else if (config.packageFile.endsWith('package.js')) { + return npm.getPackageUpdates(config); + } + config.logger.info(`Cannot find manager for ${config.packageFile}`); + throw new Error('Unsupported package manager'); +} diff --git a/lib/manager/npm/package.js b/lib/manager/npm/package.js index 2831aac70b..afa44d1255 100644 --- a/lib/manager/npm/package.js +++ b/lib/manager/npm/package.js @@ -2,10 +2,10 @@ const npmApi = require('./registry'); const versions = require('../../workers/package/versions'); module.exports = { - renovateNpmPackage, + getPackageUpdates, }; -async function renovateNpmPackage(config) { +async function getPackageUpdates(config) { const { logger } = config; let results = []; if (!versions.isValidVersion(config.currentVersion)) { diff --git a/lib/workers/package/index.js b/lib/workers/package/index.js index 89908d3e89..dfabb56b83 100644 --- a/lib/workers/package/index.js +++ b/lib/workers/package/index.js @@ -1,6 +1,5 @@ const configParser = require('../../config'); -const { renovateDockerImage } = require('../../manager/docker/package'); -const { renovateNpmPackage } = require('../../manager/npm/package'); +const { getPackageUpdates } = require('../../manager'); module.exports = { renovatePackage, @@ -14,13 +13,7 @@ async function renovatePackage(config) { logger.debug('package is disabled'); return []; } - let results; - if (config.depType === 'Dockerfile') { - results = await renovateDockerImage(config); - } else { - // npm - results = await renovateNpmPackage(config); - } + const results = await getPackageUpdates(config); logger.debug({ results }, `${config.depName} lookup results`); // Flatten the result on top of config, add repositoryUrl return ( diff --git a/test/manager/docker/__snapshots__/package.spec.js.snap b/test/manager/docker/__snapshots__/package.spec.js.snap index 6455d888bf..c17b7f4e05 100644 --- a/test/manager/docker/__snapshots__/package.spec.js.snap +++ b/test/manager/docker/__snapshots__/package.spec.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`lib/workers/package/docker renovateDockerImage adds digest 1`] = ` +exports[`lib/workers/package/docker getPackageUpdates adds digest 1`] = ` Array [ Object { "isPin": true, @@ -23,7 +23,7 @@ Array [ ] `; -exports[`lib/workers/package/docker renovateDockerImage returns major and minor upgrades 1`] = ` +exports[`lib/workers/package/docker getPackageUpdates returns major and minor upgrades 1`] = ` Array [ Object { "currentVersion": "1.0.0", diff --git a/test/manager/docker/package.spec.js b/test/manager/docker/package.spec.js index cd34a2c0e3..6b963261c2 100644 --- a/test/manager/docker/package.spec.js +++ b/test/manager/docker/package.spec.js @@ -8,7 +8,7 @@ dockerApi.getDigest = jest.fn(); dockerApi.getTags = jest.fn(); describe('lib/workers/package/docker', () => { - describe('renovateDockerImage', () => { + describe('getPackageUpdates', () => { let config; beforeEach(() => { config = { @@ -20,29 +20,29 @@ describe('lib/workers/package/docker', () => { }; }); it('returns empty if no digest', async () => { - expect(await docker.renovateDockerImage(config)).toEqual([]); + expect(await docker.getPackageUpdates(config)).toEqual([]); }); it('returns empty if digest is same', async () => { dockerApi.getDigest.mockReturnValueOnce(config.currentDigest); - expect(await docker.renovateDockerImage(config)).toEqual([]); + expect(await docker.getPackageUpdates(config)).toEqual([]); }); it('returns a digest', async () => { dockerApi.getDigest.mockReturnValueOnce('sha256:1234567890'); - const res = await docker.renovateDockerImage(config); + const res = await docker.getPackageUpdates(config); expect(res).toHaveLength(1); expect(res[0].type).toEqual('digest'); }); it('returns a pin', async () => { delete config.currentDigest; dockerApi.getDigest.mockReturnValueOnce('sha256:1234567890'); - const res = await docker.renovateDockerImage(config); + const res = await docker.getPackageUpdates(config); expect(res).toHaveLength(1); expect(res[0].type).toEqual('pin'); }); it('returns empty if current tag is not valid version', async () => { config.currentTag = 'some-text-tag'; dockerApi.getDigest.mockReturnValueOnce(config.currentDigest); - expect(await docker.renovateDockerImage(config)).toEqual([]); + expect(await docker.getPackageUpdates(config)).toEqual([]); }); it('returns major and minor upgrades', async () => { dockerApi.getDigest.mockReturnValueOnce(config.currentDigest); @@ -55,7 +55,7 @@ describe('lib/workers/package/docker', () => { '2.0.0', '3.0.0', ]); - const res = await docker.renovateDockerImage(config); + const res = await docker.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(3); expect(res[0].type).toEqual('minor'); @@ -71,7 +71,7 @@ describe('lib/workers/package/docker', () => { '1.1.0-something', '1.2.0-otherthing', ]); - const res = await docker.renovateDockerImage(config); + const res = await docker.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(2); expect(res[1].type).toEqual('minor'); diff --git a/test/manager/npm/__snapshots__/package.spec.js.snap b/test/manager/npm/__snapshots__/package.spec.js.snap index df7ce9d2cd..de45e88d21 100644 --- a/test/manager/npm/__snapshots__/package.spec.js.snap +++ b/test/manager/npm/__snapshots__/package.spec.js.snap @@ -1,12 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`lib/workers/package/npm renovateNpmPackage returns array if upgrades found 1`] = ` +exports[`lib/workers/package/npm getPackageUpdates returns array if upgrades found 1`] = ` Array [ "repositoryUrl", ] `; -exports[`lib/workers/package/npm renovateNpmPackage returns error if no npm scoped dep found 1`] = ` +exports[`lib/workers/package/npm getPackageUpdates returns error if no npm scoped dep found 1`] = ` Array [ Object { "message": "Failed to look up dependency. This will block *all* dependencies from being updated due to presence of lock file.", @@ -16,7 +16,7 @@ Array [ ] `; -exports[`lib/workers/package/npm renovateNpmPackage returns warning if no npm dep found 1`] = ` +exports[`lib/workers/package/npm getPackageUpdates returns warning if no npm dep found 1`] = ` Array [ Object { "message": "Failed to look up dependency", @@ -26,7 +26,7 @@ Array [ ] `; -exports[`lib/workers/package/npm renovateNpmPackage returns warning if no npm dep found and lock file 1`] = ` +exports[`lib/workers/package/npm getPackageUpdates returns warning if no npm dep found and lock file 1`] = ` Array [ Object { "message": "Failed to look up dependency. This will block *all* dependencies from being updated due to presence of lock file.", @@ -36,7 +36,7 @@ Array [ ] `; -exports[`lib/workers/package/npm renovateNpmPackage returns warning if using invalid version 1`] = ` +exports[`lib/workers/package/npm getPackageUpdates returns warning if using invalid version 1`] = ` Array [ Object { "depName": "some-dep", diff --git a/test/manager/npm/package.spec.js b/test/manager/npm/package.spec.js index 0918b947a0..f93cc58972 100644 --- a/test/manager/npm/package.spec.js +++ b/test/manager/npm/package.spec.js @@ -8,7 +8,7 @@ jest.mock('../../../lib/manager/npm/registry'); npmApi.getDependency = jest.fn(); describe('lib/workers/package/npm', () => { - describe('renovateNpmPackage', () => { + describe('getPackageUpdates', () => { let config; beforeEach(() => { jest.resetAllMocks(); @@ -22,11 +22,11 @@ describe('lib/workers/package/npm', () => { it('returns warning if using invalid version', async () => { config.currentVersion = 'git+ssh://git@github.com/joefraley/eslint-config-meridian.git'; - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res).toMatchSnapshot(); }); it('returns warning if no npm dep found', async () => { - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(1); expect(res[0].type).toEqual('warning'); @@ -34,7 +34,7 @@ describe('lib/workers/package/npm', () => { }); it('returns warning if no npm dep found and lock file', async () => { config.packageLock = 'some package lock'; - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(1); expect(res[0].type).toEqual('warning'); @@ -43,7 +43,7 @@ describe('lib/workers/package/npm', () => { it('returns error if no npm scoped dep found', async () => { config.depName = '@foo/something'; config.yarnLock = '# some yarn lock'; - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(1); expect(res[0].type).toEqual('warning'); @@ -56,13 +56,13 @@ describe('lib/workers/package/npm', () => { message: 'bad version', }, ]); - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res[0].type).toEqual('warning'); }); it('returns array if upgrades found', async () => { npmApi.getDependency.mockReturnValueOnce({ repositoryUrl: 'some-url' }); versions.determineUpgrades = jest.fn(() => [{}]); - const res = await npm.renovateNpmPackage(config); + const res = await npm.getPackageUpdates(config); expect(res).toHaveLength(1); expect(Object.keys(res[0])).toMatchSnapshot(); expect(res[0].repositoryUrl).toBeDefined(); diff --git a/test/workers/package/__snapshots__/index.spec.js.snap b/test/workers/package/__snapshots__/index.spec.js.snap index 7c82620c8d..1e74edc7b4 100644 --- a/test/workers/package/__snapshots__/index.spec.js.snap +++ b/test/workers/package/__snapshots__/index.spec.js.snap @@ -10,7 +10,6 @@ Object { "commitMessage": "Update dependency {{depName}} to v{{newVersion}}", "currentVersion": "1.0.0", "depName": "foo", - "depType": "npm", "description": Array [], "group": Object { "branchName": "{{branchPrefix}}{{groupSlug}}", @@ -93,6 +92,7 @@ This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](ht "warn": [Function], }, "npmrc": null, + "packageFile": "package.json", "packageFiles": Array [], "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{depName}}]({{repositoryUrl}}){{else}}\`{{depName}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{currentVersion}}\` to \`{{#unless isRange}}v{{/unless}}{{newVersion}}\`{{#if isRollback}}. This is necessary and important because \`v{{currentVersion}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}} {{#if releases.length}} diff --git a/test/workers/package/index.spec.js b/test/workers/package/index.spec.js index bdc0a19490..869a172427 100644 --- a/test/workers/package/index.spec.js +++ b/test/workers/package/index.spec.js @@ -23,21 +23,21 @@ describe('lib/workers/package/index', () => { expect(res).toMatchObject([]); }); it('calls docker', async () => { - docker.renovateDockerImage.mockReturnValueOnce([]); - config.depType = 'Dockerfile'; + docker.getPackageUpdates.mockReturnValueOnce([]); + config.packageFile = 'Dockerfile'; const res = await pkgWorker.renovatePackage(config); expect(res).toMatchObject([]); }); - it('calls npm', async () => { - npm.renovateNpmPackage.mockReturnValueOnce([]); - config.depType = 'npm'; + it('calls meteor', async () => { + npm.getPackageUpdates.mockReturnValueOnce([]); + config.packageFile = 'package.js'; const res = await pkgWorker.renovatePackage(config); expect(res).toMatchObject([]); }); it('maps and filters type', async () => { - config.depType = 'npm'; + config.packageFile = 'package.json'; config.major.enabled = false; - npm.renovateNpmPackage.mockReturnValueOnce([ + npm.getPackageUpdates.mockReturnValueOnce([ { type: 'pin' }, { type: 'major' }, { type: 'minor', enabled: false }, @@ -47,5 +47,16 @@ describe('lib/workers/package/index', () => { expect(res[0]).toMatchSnapshot(); expect(res[0].groupName).toEqual('Pin Dependencies'); }); + it('throws', async () => { + npm.getPackageUpdates.mockReturnValueOnce([]); + config.packageFile = 'something-else'; + let e; + try { + await pkgWorker.renovatePackage(config); + } catch (err) { + e = err; + } + expect(e).toBeDefined(); + }); }); }); -- GitLab