diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index e02ea8a5fbacfb..d450cbad183722 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 92f23dfdabe32d..5d896ed774dee7 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 { - 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 743552e57ea2b8..a8a7d1c1c6502a 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 652c190d66e8d3..c08a04ae3fa415 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 d6a978abed0b7a..0d17bad8eb1abe 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 ??=