From 2b582140c26d3c30b3792911e7ea20c21a8bcf7e Mon Sep 17 00:00:00 2001 From: Florian Greinacher <florian@greinacher.de> Date: Wed, 13 Jul 2022 08:22:52 +0200 Subject: [PATCH] fix(manager/docker): use correct autoreplace string for registry aliases (#16542) * fix(manager/docker): use correct autoreplace string for registry aliases * fix: re-establish old behavior --- lib/modules/manager/dockerfile/extract.spec.ts | 12 +++++++----- lib/modules/manager/dockerfile/extract.ts | 4 ++-- lib/modules/manager/gitlabci/extract.spec.ts | 6 +++--- lib/modules/manager/gitlabci/utils.spec.ts | 12 +++++++----- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/modules/manager/dockerfile/extract.spec.ts b/lib/modules/manager/dockerfile/extract.spec.ts index 7025eedd99..9bab59d41e 100644 --- a/lib/modules/manager/dockerfile/extract.spec.ts +++ b/lib/modules/manager/dockerfile/extract.spec.ts @@ -1151,16 +1151,18 @@ describe('modules/manager/dockerfile/extract', () => { `); }); + const versionAndDigestTemplate = + ':{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}'; const defaultAutoReplaceStringTemplate = '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}'; it.each` name | registryAliases | imageName | dep - ${'multiple aliases'} | ${{ foo: 'foo.registry.com', bar: 'bar.registry.com' }} | ${'foo/image:1.0'} | ${{ depName: 'foo.registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `foo/${defaultAutoReplaceStringTemplate}` }} - ${'aliased variable'} | ${{ $CI_REGISTRY: 'registry.com' }} | ${'$CI_REGISTRY/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$CI_REGISTRY/${defaultAutoReplaceStringTemplate}` }} - ${'variables with brackets'} | ${{ '${CI_REGISTRY}': 'registry.com' }} | ${'${CI_REGISTRY}/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$\{CI_REGISTRY}/${defaultAutoReplaceStringTemplate}` }} - ${'not aliased variable'} | ${{}} | ${'$CI_REGISTRY/image:1.0'} | ${{ autoReplaceStringTemplate: `${defaultAutoReplaceStringTemplate}` }} - ${'plain image'} | ${{}} | ${'registry.com/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `${defaultAutoReplaceStringTemplate}` }} + ${'multiple aliases'} | ${{ foo: 'foo.registry.com', bar: 'bar.registry.com' }} | ${'foo/image:1.0'} | ${{ depName: 'foo.registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `foo/image${versionAndDigestTemplate}` }} + ${'aliased variable'} | ${{ $CI_REGISTRY: 'registry.com' }} | ${'$CI_REGISTRY/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$CI_REGISTRY/image${versionAndDigestTemplate}` }} + ${'variables with brackets'} | ${{ '${CI_REGISTRY}': 'registry.com' }} | ${'${CI_REGISTRY}/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$\{CI_REGISTRY}/image${versionAndDigestTemplate}` }} + ${'not aliased variable'} | ${{}} | ${'$CI_REGISTRY/image:1.0'} | ${{ autoReplaceStringTemplate: defaultAutoReplaceStringTemplate }} + ${'plain image'} | ${{}} | ${'registry.com/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: defaultAutoReplaceStringTemplate }} `( 'supports registry aliases - $name', ({ diff --git a/lib/modules/manager/dockerfile/extract.ts b/lib/modules/manager/dockerfile/extract.ts index d870d49019..9433aeab41 100644 --- a/lib/modules/manager/dockerfile/extract.ts +++ b/lib/modules/manager/dockerfile/extract.ts @@ -166,7 +166,7 @@ export function getDep( // Resolve registry aliases first so that we don't need special casing later on: for (const [name, value] of Object.entries(registryAliases ?? {})) { const escapedName = escapeRegExp(name); - const groups = regEx(`(?<prefix>${escapedName}/)(?<depName>.+)`).exec( + const groups = regEx(`(?<prefix>${escapedName})/(?<depName>.+)`).exec( currentFrom )?.groups; if (groups) { @@ -174,7 +174,7 @@ export function getDep( ...getDep(`${value}/${groups.depName}`), replaceString: currentFrom, }; - dep.autoReplaceStringTemplate = `${groups.prefix}${dep.autoReplaceStringTemplate}`; + dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep)!; return dep; } } diff --git a/lib/modules/manager/gitlabci/extract.spec.ts b/lib/modules/manager/gitlabci/extract.spec.ts index 96a720b30e..f7d4d071c7 100644 --- a/lib/modules/manager/gitlabci/extract.spec.ts +++ b/lib/modules/manager/gitlabci/extract.spec.ts @@ -245,7 +245,7 @@ describe('modules/manager/gitlabci/extract', () => { expect(res?.deps).toEqual([ { autoReplaceStringTemplate: - '$CI_REGISTRY/{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + '$CI_REGISTRY/renovate/renovate:{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', currentDigest: undefined, currentValue: '31.65.1-slim', datasource: 'docker', @@ -255,7 +255,7 @@ describe('modules/manager/gitlabci/extract', () => { }, { autoReplaceStringTemplate: - 'foo/{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + 'foo/mariadb:{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', currentDigest: undefined, currentValue: '10.4.11', datasource: 'docker', @@ -265,7 +265,7 @@ describe('modules/manager/gitlabci/extract', () => { }, { autoReplaceStringTemplate: - '$CI_REGISTRY/{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + '$CI_REGISTRY/other/image1:{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', currentDigest: undefined, currentValue: '1.0.0', datasource: 'docker', diff --git a/lib/modules/manager/gitlabci/utils.spec.ts b/lib/modules/manager/gitlabci/utils.spec.ts index f9f929780a..f68e151191 100644 --- a/lib/modules/manager/gitlabci/utils.spec.ts +++ b/lib/modules/manager/gitlabci/utils.spec.ts @@ -3,6 +3,8 @@ import { getGitlabDep } from './utils'; describe('modules/manager/gitlabci/utils', () => { describe('getGitlabDep', () => { + const versionAndDigestTemplate = + ':{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}'; const defaultAutoReplaceStringTemplate = '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}'; @@ -45,11 +47,11 @@ describe('modules/manager/gitlabci/utils', () => { it.each` name | registryAliases | imageName | dep - ${'multiple aliases'} | ${{ foo: 'foo.registry.com', bar: 'bar.registry.com' }} | ${'foo/image:1.0'} | ${{ depName: 'foo.registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `foo/${defaultAutoReplaceStringTemplate}` }} - ${'aliased variable'} | ${{ $CI_REGISTRY: 'registry.com' }} | ${'$CI_REGISTRY/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$CI_REGISTRY/${defaultAutoReplaceStringTemplate}` }} - ${'variables with brackets'} | ${{ '${CI_REGISTRY}': 'registry.com' }} | ${'${CI_REGISTRY}/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$\{CI_REGISTRY}/${defaultAutoReplaceStringTemplate}` }} - ${'not aliased variable'} | ${{}} | ${'$CI_REGISTRY/image:1.0'} | ${{ autoReplaceStringTemplate: `${defaultAutoReplaceStringTemplate}` }} - ${'plain image'} | ${{}} | ${'registry.com/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `${defaultAutoReplaceStringTemplate}` }} + ${'multiple aliases'} | ${{ foo: 'foo.registry.com', bar: 'bar.registry.com' }} | ${'foo/image:1.0'} | ${{ depName: 'foo.registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `foo/image${versionAndDigestTemplate}` }} + ${'aliased variable'} | ${{ $CI_REGISTRY: 'registry.com' }} | ${'$CI_REGISTRY/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$CI_REGISTRY/image${versionAndDigestTemplate}` }} + ${'variables with brackets'} | ${{ '${CI_REGISTRY}': 'registry.com' }} | ${'${CI_REGISTRY}/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: `$\{CI_REGISTRY}/image${versionAndDigestTemplate}` }} + ${'not aliased variable'} | ${{}} | ${'$CI_REGISTRY/image:1.0'} | ${{ autoReplaceStringTemplate: defaultAutoReplaceStringTemplate }} + ${'plain image'} | ${{}} | ${'registry.com/image:1.0'} | ${{ depName: 'registry.com/image', currentValue: '1.0', autoReplaceStringTemplate: defaultAutoReplaceStringTemplate }} `( 'supports registry aliases - $name', ({ -- GitLab