From c800ee93445d30c1e748b32f5a2af795d6d8ae3b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Mon, 30 Apr 2018 18:57:52 +0200 Subject: [PATCH] refactor: remove custom docker resolve/contentPatterns (#1897) --- lib/manager/docker-compose/index.js | 4 -- lib/manager/docker-compose/resolve.js | 22 ---------- lib/manager/docker/index.js | 5 --- lib/manager/docker/resolve.js | 29 ------------ test/manager/__snapshots__/index.spec.js.snap | 4 ++ .../__snapshots__/resolve.spec.js.snap | 44 ++++++++++++++++++- test/manager/index.spec.js | 17 +------ 7 files changed, 48 insertions(+), 77 deletions(-) delete mode 100644 lib/manager/docker-compose/resolve.js delete mode 100644 lib/manager/docker/resolve.js diff --git a/lib/manager/docker-compose/index.js b/lib/manager/docker-compose/index.js index 32df37546d..293eec585b 100644 --- a/lib/manager/docker-compose/index.js +++ b/lib/manager/docker-compose/index.js @@ -1,16 +1,12 @@ const { extractDependencies } = require('./extract'); const { getPackageUpdates } = require('../docker/package'); -const { resolvePackageFile } = require('./resolve'); const { updateDependency } = require('./update'); -const contentPattern = new RegExp('(^|\\n)\\s*image:'); const language = 'docker'; module.exports = { - contentPattern, extractDependencies, getPackageUpdates, language, - resolvePackageFile, updateDependency, }; diff --git a/lib/manager/docker-compose/resolve.js b/lib/manager/docker-compose/resolve.js deleted file mode 100644 index 04d77824c1..0000000000 --- a/lib/manager/docker-compose/resolve.js +++ /dev/null @@ -1,22 +0,0 @@ -const { mergeChildConfig } = require('../../config'); - -module.exports = { - resolvePackageFile, -}; - -async function resolvePackageFile(config, inputFile) { - const composeConfig = mergeChildConfig( - config.docker, - config['docker-compose'] - ); - const packageFile = mergeChildConfig(composeConfig, inputFile); - logger.debug( - `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}` - ); - packageFile.content = await platform.getFile(packageFile.packageFile); - if (!packageFile.content) { - logger.debug('No packageFile content'); - return null; - } - return packageFile; -} diff --git a/lib/manager/docker/index.js b/lib/manager/docker/index.js index eb6283fdc1..0e96876493 100644 --- a/lib/manager/docker/index.js +++ b/lib/manager/docker/index.js @@ -1,14 +1,9 @@ const { extractDependencies } = require('./extract'); const { getPackageUpdates } = require('./package'); -const { resolvePackageFile } = require('./resolve'); const { updateDependency } = require('./update'); -const contentPattern = new RegExp('(^|\\n)FROM .+\\n', 'i'); - module.exports = { - contentPattern, extractDependencies, getPackageUpdates, - resolvePackageFile, updateDependency, }; diff --git a/lib/manager/docker/resolve.js b/lib/manager/docker/resolve.js deleted file mode 100644 index 3815d167bd..0000000000 --- a/lib/manager/docker/resolve.js +++ /dev/null @@ -1,29 +0,0 @@ -const configParser = require('../../config'); - -module.exports = { - resolvePackageFile, -}; - -async function resolvePackageFile(config, inputFile) { - const packageFile = configParser.mergeChildConfig(config.docker, inputFile); - logger.debug( - `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}` - ); - packageFile.content = await platform.getFile(packageFile.packageFile); - if (!packageFile.content) { - logger.debug('No packageFile content'); - return null; - } - const strippedComment = packageFile.content.replace(/^((#.*?|\s*)\n)+/, ''); - const fromMatch = strippedComment.match(/^[Ff][Rr][Oo][Mm] (.*)\n/); - if (!fromMatch) { - logger.debug( - { content: packageFile.content, strippedComment }, - 'No FROM found' - ); - return null; - } - [, packageFile.currentFrom] = fromMatch; - logger.debug('Adding Dockerfile'); - return packageFile; -} diff --git a/test/manager/__snapshots__/index.spec.js.snap b/test/manager/__snapshots__/index.spec.js.snap index 79791a0c18..38ee9dcdec 100644 --- a/test/manager/__snapshots__/index.spec.js.snap +++ b/test/manager/__snapshots__/index.spec.js.snap @@ -41,6 +41,10 @@ Array [ "manager": "docker", "packageFile": "other/Dockerfile", }, + Object { + "manager": "docker", + "packageFile": "another/Dockerfile", + }, ] `; diff --git a/test/manager/__snapshots__/resolve.spec.js.snap b/test/manager/__snapshots__/resolve.spec.js.snap index b71a0751cd..a9694296cc 100644 --- a/test/manager/__snapshots__/resolve.spec.js.snap +++ b/test/manager/__snapshots__/resolve.spec.js.snap @@ -47,7 +47,49 @@ Array [ ] `; -exports[`manager/resolve resolvePackageFiles() skips if no content or no match 1`] = `Array []`; +exports[`manager/resolve resolvePackageFiles() skips if no content or no match 1`] = ` +Array [ + Object { + "commitMessageTopic": "{{{depName}}} Docker tag", + "content": "# comment +", + "digest": Object { + "branchTopic": "{{{depNameSanitized}}}-{{{currentTag}}}", + "commitMessageExtra": "to {{newDigestShort}}", + "commitMessageTopic": "{{{depName}}}:{{{currentTag}}} Docker digest", + "group": Object { + "commitMessageTopic": "{{{groupName}}}", + "prBody": "This Pull Request updates Dockerfiles to the latest image digests. For details on Renovate's Docker support, please visit https://renovatebot.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n- {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, + "prBody": "This Pull Request updates Docker base image \`{{{depName}}}:{{{currentTag}}}\` to the latest digest (\`{{{newDigest}}}\`). For details on Renovate's Docker support, please visit https://renovatebot.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, + "fileMatch": Array [ + "(^|/)Dockerfile$", + ], + "group": Object { + "commitMessageTopic": "{{{groupName}}} Docker tags", + "prBody": "This Pull Request updates Dockerfiles to use image digests.\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n- {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, + "major": Object { + "enabled": false, + }, + "manager": "docker", + "managerBranchPrefix": "docker-", + "packageFile": "Dockerfile", + "pin": Object { + "commitMessageExtra": "", + "group": Object { + "branchTopic": "digests-pin", + "commitMessageTopic": "{{{groupName}}}", + "prBody": "This Pull Request pins Dockerfiles to use image digests. For details on Renovate's Docker support, please visit https://renovatebot.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n- {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, + "groupName": "Docker digests", + "prBody": "This Pull Request pins Docker base image \`{{{depName}}}:{{{currentTag}}}\` to use a digest (\`{{{newDigest}}}\`).\\nThis digest will then be kept updated via Pull Requests whenever the image is updated on the Docker registry. For details on Renovate's Docker support, please visit https://renovatebot.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, + "prBody": "This Pull Request updates Docker base image \`{{{depName}}}\` from tag \`{{{currentTag}}}\` to new tag \`{{{newTag}}}\`. For details on Renovate's Docker support, please visit https://renovatebot.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n- \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n- \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}", + }, +] +`; exports[`manager/resolve resolvePackageFiles() strips npmrc with NPM_TOKEN 1`] = ` Array [ diff --git a/test/manager/index.spec.js b/test/manager/index.spec.js index df40b3137d..f8af1dcc1d 100644 --- a/test/manager/index.spec.js +++ b/test/manager/index.spec.js @@ -73,18 +73,9 @@ describe('manager', () => { 'other/Dockerfile', 'another/Dockerfile', ]); - platform.getFile.mockReturnValueOnce( - '### comment\n\n \nFROM something\nRUN something\nFROM something-else\nRUN bar' - ); - platform.getFile.mockReturnValueOnce( - 'ARG foo\nFROM something\nRUN something' - ); - platform.getFile.mockReturnValueOnce( - 'ARG foo\nno FROM at all\nRUN something' - ); const res = await manager.detectPackageFiles(config); expect(res).toMatchSnapshot(); - expect(res).toHaveLength(2); + expect(res).toHaveLength(3); }); it('finds .travis.yml files', async () => { config.travis.enabled = true; @@ -123,12 +114,6 @@ describe('manager', () => { expect(res).toMatchSnapshot(); expect(res).toHaveLength(2); }); - it('skips Dockerfiles with no content', async () => { - platform.getFileList.mockReturnValueOnce(['Dockerfile']); - platform.getFile.mockReturnValueOnce(null); - const res = await manager.detectPackageFiles(config); - expect(res).toHaveLength(0); - }); it('ignores node modules', async () => { platform.getFileList.mockReturnValueOnce([ 'package.json', -- GitLab