From d5f3d6fcea4324aea4e4da7dc1e8719c0a0c9c36 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 5 Mar 2024 15:02:51 +0100 Subject: [PATCH] fix(datasource/docker): better reuse of lookupName for getDigest (#27724) --- lib/modules/datasource/docker/index.spec.ts | 6 ++++-- lib/modules/datasource/docker/index.ts | 19 ++++++++++++++----- lib/modules/datasource/index.ts | 19 +++++++++++-------- lib/modules/datasource/types.ts | 3 +++ .../repository/process/lookup/index.ts | 3 ++- 5 files changed, 34 insertions(+), 16 deletions(-) diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index e02ea8a5fb..d450cbad18 100644 --- a/lib/modules/datasource/docker/index.spec.ts +++ b/lib/modules/datasource/docker/index.spec.ts @@ -491,14 +491,16 @@ describe('modules/datasource/docker/index', () => { .scope(gcrUrl) .get('/') .reply(200) - .head('/some-project/some-package/manifests/some-tag') + .head('/google.com/some-project/some-package/manifests/some-tag') .reply(200, '', { 'docker-content-digest': 'some-digest' }); hostRules.find.mockReturnValue({}); const res = await getDigest( { datasource: 'docker', - packageName: 'eu.gcr.io/some-project/some-package', + registryUrl: 'https://eu.gcr.io', + lookupName: 'google.com/some-project/some-package', + packageName: 'eu.gcr.io/google.com/some-project/some-package', }, 'some-tag', ); diff --git a/lib/modules/datasource/docker/index.ts b/lib/modules/datasource/docker/index.ts index 92f23dfdab..5d896ed774 100644 --- a/lib/modules/datasource/docker/index.ts +++ b/lib/modules/datasource/docker/index.ts @@ -788,13 +788,22 @@ export class DockerDatasource extends Datasource { }, }) override async getDigest( - { registryUrl, packageName, currentDigest }: DigestConfig, + { registryUrl, lookupName, packageName, currentDigest }: DigestConfig, newValue?: string, ): Promise<string | null> { - const { registryHost, dockerRepository } = getRegistryRepository( - packageName, - registryUrl!, - ); + let registryHost: string; + let dockerRepository: string; + if (registryUrl && lookupName) { + // Reuse the resolved values from getReleases() + registryHost = registryUrl; + dockerRepository = lookupName; + } else { + // Resolve values independently + ({ registryHost, dockerRepository } = getRegistryRepository( + packageName, + registryUrl!, + )); + } logger.debug( // TODO: types (#22198) `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`, diff --git a/lib/modules/datasource/index.ts b/lib/modules/datasource/index.ts index 743552e57e..a8a7d1c1c6 100644 --- a/lib/modules/datasource/index.ts +++ b/lib/modules/datasource/index.ts @@ -398,15 +398,18 @@ function getDigestConfig( datasource: DatasourceApi, config: GetDigestInputConfig, ): DigestConfig { - const { currentValue, currentDigest } = config; + const { lookupName, currentValue, currentDigest } = config; const packageName = config.replacementName ?? config.packageName; - const [registryUrl] = resolveRegistryUrls( - datasource, - config.defaultRegistryUrls, - config.registryUrls, - config.additionalRegistryUrls, - ); - return { packageName, registryUrl, currentValue, currentDigest }; + // Prefer registryUrl from getReleases() lookup if it has been passed + const registryUrl = + config.registryUrl ?? + resolveRegistryUrls( + datasource, + config.defaultRegistryUrls, + config.registryUrls, + config.additionalRegistryUrls, + )[0]; + return { lookupName, packageName, registryUrl, currentValue, currentDigest }; } export function getDigest( diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts index 652c190d66..c08a04ae3f 100644 --- a/lib/modules/datasource/types.ts +++ b/lib/modules/datasource/types.ts @@ -9,6 +9,8 @@ export interface GetDigestInputConfig { packageName: string; defaultRegistryUrls?: string[]; registryUrls?: string[] | null; + registryUrl?: string; + lookupName?: string; additionalRegistryUrls?: string[]; currentValue?: string; currentDigest?: string; @@ -17,6 +19,7 @@ export interface GetDigestInputConfig { export interface DigestConfig { packageName: string; + lookupName?: string; registryUrl?: string; currentValue?: string; currentDigest?: string; diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index d6a978abed..0d17bad8eb 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -500,7 +500,8 @@ export async function lookupUpdates( if (config.pinDigests === true || config.currentDigest) { const getDigestConfig: GetDigestInputConfig = { ...config, - packageName: res.lookupName ?? config.packageName, + registryUrl: update.registryUrl ?? res.registryUrl, + lookupName: res.lookupName, }; // TODO #22198 update.newDigest ??= -- GitLab