diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts
index 074e59a7b534b2..3942c9f0530af0 100644
--- a/lib/config/presets/internal/regex-managers.spec.ts
+++ b/lib/config/presets/internal/regex-managers.spec.ts
@@ -173,6 +173,81 @@ describe('config/presets/internal/regex-managers', () => {
});
});
+ describe('Update `_VERSION` environment variables in GitLab pipeline file', () => {
+ const customManager = presets['gitlabPipelineVersions'].customManagers?.[0];
+
+ it(`find dependencies in file`, async () => {
+ const fileContent = codeBlock`
+ variables:
+ # renovate: datasource=node depName=node versioning=node
+ NODE_VERSION: 18.13.0
+ # renovate: datasource=npm depName=pnpm
+ PNPM_VERSION: "7.25.1"
+ # renovate: datasource=npm depName=yarn
+ YARN_VERSION: '3.3.1'
+ # renovate: datasource=custom.hashicorp depName=consul
+ CONSUL_VERSION: 1.3.1
+
+ lint:
+ image: node:\${NODE_VERSION}
+ script:
+ - npm install -g pnpm@\${PNPM_VERSION}
+ `;
+
+ const res = await extractPackageFile(
+ fileContent,
+ 'gitlab-ci.yml',
+ customManager!
+ );
+
+ expect(res?.deps).toMatchObject([
+ {
+ currentValue: '18.13.0',
+ datasource: 'node-version',
+ depName: 'node',
+ replaceString:
+ '# renovate: datasource=node depName=node versioning=node\n NODE_VERSION: 18.13.0\n',
+ versioning: 'node',
+ },
+ {
+ currentValue: '7.25.1',
+ datasource: 'npm',
+ depName: 'pnpm',
+ replaceString:
+ '# renovate: datasource=npm depName=pnpm\n PNPM_VERSION: "7.25.1"\n',
+ },
+ {
+ currentValue: '3.3.1',
+ datasource: 'npm',
+ depName: 'yarn',
+ replaceString:
+ "# renovate: datasource=npm depName=yarn\n YARN_VERSION: '3.3.1'\n",
+ },
+ {
+ currentValue: '1.3.1',
+ datasource: 'custom.hashicorp',
+ depName: 'consul',
+ replaceString:
+ '# renovate: datasource=custom.hashicorp depName=consul\n CONSUL_VERSION: 1.3.1\n',
+ },
+ ]);
+ });
+
+ describe('matches regexes patterns', () => {
+ it.each`
+ path | expected
+ ${'.gitlab-ci.yaml'} | ${true}
+ ${'.gitlab-ci.yml'} | ${true}
+ ${'foo.yaml'} | ${false}
+ ${'foo.yml'} | ${false}
+ ${'.gitlab/ci.yml'} | ${false}
+ ${'includes/gitlab-ci.yml'} | ${false}
+ `('$path', ({ path, expected }) => {
+ expect(regexMatches(path, customManager!.fileMatch)).toBe(expected);
+ });
+ });
+ });
+
describe('Update `appVersion` value in Helm chart Chart.yaml', () => {
const customManager =
presets['helmChartYamlAppVersions'].customManagers?.[0];
@@ -246,7 +321,7 @@ describe('config/presets/internal/regex-managers', () => {
4.0.10
- 4.4.6
+ 4.4.6
`;
const res = await extractPackageFile(
diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts
index d31989b2ec4c8c..cd2e718f9a2870 100644
--- a/lib/config/presets/internal/regex-managers.ts
+++ b/lib/config/presets/internal/regex-managers.ts
@@ -31,6 +31,19 @@ export const presets: Record = {
description:
'Update `_VERSION` environment variables in GitHub Action files.',
},
+ gitlabPipelineVersions: {
+ customManagers: [
+ {
+ customType: 'regex',
+ fileMatch: ['\\.gitlab-ci\\.ya?ml$'],
+ matchStrings: [
+ '# renovate: datasource=(?[a-z-.]+?) depName=(?[^\\s]+?)(?: (?:packageName)=(?[^\\s]+?))?(?: versioning=(?[a-z-0-9]+?))?\\s+[A-Za-z0-9_]+?_VERSION\\s*:\\s*["\']?(?.+?)["\']?\\s',
+ ],
+ },
+ ],
+ description:
+ 'Update `_VERSION` environment variables in GitLab pipeline file.',
+ },
helmChartYamlAppVersions: {
customManagers: [
{