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: [ {