Skip to content
Snippets Groups Projects
Unverified Commit c800ee93 authored by Rhys Arkins's avatar Rhys Arkins Committed by GitHub
Browse files

refactor: remove custom docker resolve/contentPatterns (#1897)

parent 43742467
No related branches found
No related tags found
No related merge requests found
const { extractDependencies } = require('./extract'); const { extractDependencies } = require('./extract');
const { getPackageUpdates } = require('../docker/package'); const { getPackageUpdates } = require('../docker/package');
const { resolvePackageFile } = require('./resolve');
const { updateDependency } = require('./update'); const { updateDependency } = require('./update');
const contentPattern = new RegExp('(^|\\n)\\s*image:');
const language = 'docker'; const language = 'docker';
module.exports = { module.exports = {
contentPattern,
extractDependencies, extractDependencies,
getPackageUpdates, getPackageUpdates,
language, language,
resolvePackageFile,
updateDependency, updateDependency,
}; };
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;
}
const { extractDependencies } = require('./extract'); const { extractDependencies } = require('./extract');
const { getPackageUpdates } = require('./package'); const { getPackageUpdates } = require('./package');
const { resolvePackageFile } = require('./resolve');
const { updateDependency } = require('./update'); const { updateDependency } = require('./update');
const contentPattern = new RegExp('(^|\\n)FROM .+\\n', 'i');
module.exports = { module.exports = {
contentPattern,
extractDependencies, extractDependencies,
getPackageUpdates, getPackageUpdates,
resolvePackageFile,
updateDependency, updateDependency,
}; };
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;
}
...@@ -41,6 +41,10 @@ Array [ ...@@ -41,6 +41,10 @@ Array [
"manager": "docker", "manager": "docker",
"packageFile": "other/Dockerfile", "packageFile": "other/Dockerfile",
}, },
Object {
"manager": "docker",
"packageFile": "another/Dockerfile",
},
] ]
`; `;
......
...@@ -47,7 +47,49 @@ Array [ ...@@ -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`] = ` exports[`manager/resolve resolvePackageFiles() strips npmrc with NPM_TOKEN 1`] = `
Array [ Array [
......
...@@ -73,18 +73,9 @@ describe('manager', () => { ...@@ -73,18 +73,9 @@ describe('manager', () => {
'other/Dockerfile', 'other/Dockerfile',
'another/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); const res = await manager.detectPackageFiles(config);
expect(res).toMatchSnapshot(); expect(res).toMatchSnapshot();
expect(res).toHaveLength(2); expect(res).toHaveLength(3);
}); });
it('finds .travis.yml files', async () => { it('finds .travis.yml files', async () => {
config.travis.enabled = true; config.travis.enabled = true;
...@@ -123,12 +114,6 @@ describe('manager', () => { ...@@ -123,12 +114,6 @@ describe('manager', () => {
expect(res).toMatchSnapshot(); expect(res).toMatchSnapshot();
expect(res).toHaveLength(2); 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 () => { it('ignores node modules', async () => {
platform.getFileList.mockReturnValueOnce([ platform.getFileList.mockReturnValueOnce([
'package.json', 'package.json',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment