Skip to content
Snippets Groups Projects
Unverified Commit a53c6092 authored by Jonas Michaelis's avatar Jonas Michaelis Committed by GitHub
Browse files

fix(gitlabci): multiple named services (#13867)


* fix(gitlabci): multiple named services

* improve regex to allow different ordering

* regex allow only one dash

Co-authored-by: default avatarRhys Arkins <rhys@arkins.net>
Co-authored-by: default avatarMichael Kriese <michael.kriese@visualon.de>
parent 41f198c6
No related branches found
No related tags found
No related merge requests found
image:
# comment
name: renovate/renovate:19.70.8-slim
services:
# comment
- name: other/image1:1.0.0
alias: imagealias1
# another comment
- alias: imagealias2
name: other/image2:1.0.0
......@@ -184,6 +184,43 @@ Array [
]
`;
exports[`manager/gitlabci/extract extractAllPackageFiles() extracts multiple named services 1`] = `
Array [
Object {
"deps": Array [
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "19.70.8-slim",
"datasource": "docker",
"depName": "renovate/renovate",
"depType": "image-name",
"replaceString": "renovate/renovate:19.70.8-slim",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "1.0.0",
"datasource": "docker",
"depName": "other/image1",
"depType": "service-image",
"replaceString": "other/image1:1.0.0",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "1.0.0",
"datasource": "docker",
"depName": "other/image2",
"depType": "service-image",
"replaceString": "other/image2:1.0.0",
},
],
"packageFile": "lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml",
},
]
`;
exports[`manager/gitlabci/extract extractAllPackageFiles() extracts named services 1`] = `
Array [
Object {
......
......@@ -51,6 +51,15 @@ describe('manager/gitlabci/extract', () => {
expect(res[0].deps).toHaveLength(3);
});
it('extracts multiple named services', async () => {
const res = await extractAllPackageFiles(config, [
'lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml',
]);
expect(res).toMatchSnapshot();
expect(res).toHaveLength(1);
expect(res[0].deps).toHaveLength(3);
});
it('extracts multiple image lines', async () => {
const res = await extractAllPackageFiles(config, [
'lib/manager/gitlabci/__fixtures__/gitlab-ci.yaml',
......
......@@ -9,20 +9,24 @@ import type { GitlabPipeline } from './types';
import { replaceReferenceTags } from './utils';
const commentsRe = regEx(/^\s*#/);
const aliasesRe = regEx(`^\\s*-?\\s*alias:`);
const whitespaceRe = regEx(`^(?<whitespace>\\s*)`);
const imageRe = regEx(
`^(?<whitespace>\\s*)image:(?:\\s+['"]?(?<image>[^\\s'"]+)['"]?)?\\s*$`
);
const nameRe = regEx(`^\\s*name:\\s+['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`);
const serviceRe = regEx(
`^\\s*-\\s*(?:name:\\s+)?['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`
`^\\s*-?\\s*(?:name:\\s+)?['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`
);
function skipCommentLines(
function skipCommentAndAliasLines(
lines: string[],
lineNumber: number
): { lineNumber: number; line: string } {
let ln = lineNumber;
while (ln < lines.length - 1 && commentsRe.test(lines[ln])) {
while (
ln < lines.length - 1 &&
(commentsRe.test(lines[ln]) || aliasesRe.test(lines[ln]))
) {
ln += 1;
}
return { line: lines[ln], lineNumber: ln };
......@@ -71,7 +75,10 @@ export function extractPackageFile(content: string): PackageFile | null {
let foundImage: boolean;
do {
foundImage = false;
const serviceImageLine = skipCommentLines(lines, lineNumber + 1);
const serviceImageLine = skipCommentAndAliasLines(
lines,
lineNumber + 1
);
logger.trace(`serviceImageLine: "${serviceImageLine.line}"`);
const serviceImageMatch = serviceRe.exec(serviceImageLine.line);
if (serviceImageMatch) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment