From 93b3a7a68f05a3c1116c3a62e2d4dc7d8f73883b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Birger=20J=2E=20Nord=C3=B8lum?= <contact@mindtooth.no> Date: Thu, 28 Sep 2023 15:16:20 +0200 Subject: [PATCH] feat(presets): add regex preset for gitlab pipeline versions (#24510) Co-authored-by: Rhys Arkins <rhys@arkins.net> Co-authored-by: Michael Kriese <michael.kriese@visualon.de> --- .../presets/internal/regex-managers.spec.ts | 77 ++++++++++++++++++- lib/config/presets/internal/regex-managers.ts | 13 ++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/internal/regex-managers.spec.ts b/lib/config/presets/internal/regex-managers.spec.ts index 074e59a7b5..3942c9f053 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', () => { <groovy.version>4.0.10</groovy.version> <!-- renovate: datasource=docker depName=mongo --> - <mongo.container.version>4.4.6</mongo.container.version> + <mongo.container.version>4.4.6</mongo.container.version> `; const res = await extractPackageFile( diff --git a/lib/config/presets/internal/regex-managers.ts b/lib/config/presets/internal/regex-managers.ts index d31989b2ec..cd2e718f9a 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<string, Preset> = { description: 'Update `_VERSION` environment variables in GitHub Action files.', }, + gitlabPipelineVersions: { + customManagers: [ + { + customType: 'regex', + fileMatch: ['\\.gitlab-ci\\.ya?ml$'], + matchStrings: [ + '# renovate: datasource=(?<datasource>[a-z-.]+?) depName=(?<depName>[^\\s]+?)(?: (?:packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[a-z-0-9]+?))?\\s+[A-Za-z0-9_]+?_VERSION\\s*:\\s*["\']?(?<currentValue>.+?)["\']?\\s', + ], + }, + ], + description: + 'Update `_VERSION` environment variables in GitLab pipeline file.', + }, helmChartYamlAppVersions: { customManagers: [ { -- GitLab