From c061ffdca727740888f98e6eaff748910e5080b7 Mon Sep 17 00:00:00 2001 From: Janus Automation Date: Thu, 5 Dec 2024 17:43:13 -0600 Subject: [PATCH] add registryAliases support to circleci manager --- docs/usage/configuration-options.md | 1 + lib/modules/manager/circleci/extract.spec.ts | 25 ++++++++++++++++++++ lib/modules/manager/circleci/extract.ts | 11 ++++++--- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 343eeb76405c5a..1141080923cd00 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3691,6 +3691,7 @@ This feature works with the following managers: - [`ansible`](modules/manager/ansible/index.md) - [`bitbucket-pipelines`](modules/manager/bitbucket-pipelines/index.md) +- [`circleci`](modules/manager/circleci/index.md) - [`docker-compose`](modules/manager/docker-compose/index.md) - [`dockerfile`](modules/manager/dockerfile/index.md) - [`droneci`](modules/manager/droneci/index.md) diff --git a/lib/modules/manager/circleci/extract.spec.ts b/lib/modules/manager/circleci/extract.spec.ts index 92eb5c145d9c62..4ddcdc0f8e39bc 100644 --- a/lib/modules/manager/circleci/extract.spec.ts +++ b/lib/modules/manager/circleci/extract.spec.ts @@ -13,6 +13,31 @@ describe('modules/manager/circleci/extract', () => { expect(extractPackageFile('nothing here')).toBeNull(); }); + it('handles registry alias', () => { + const res = extractPackageFile( + 'executors:\n my-executor:\n docker:\n - image: quay.io/myName/myPackage:0.6.2', + '', + { + registryAliases: { + 'quay.io': 'my-quay-mirror.registry.com', + 'index.docker.io': 'my-docker-mirror.registry.com', + }, + }, + ); + expect(res?.deps).toEqual([ + { + autoReplaceStringTemplate: + 'quay.io/myName/myPackage:{{#if newValue}}{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '0.6.2', + datasource: 'docker', + depName: 'my-quay-mirror.registry.com/myName/myPackage', + depType: 'docker', + replaceString: 'quay.io/myName/myPackage:0.6.2', + }, + ]); + }); + it('extracts multiple image and resolves yaml anchors', () => { const res = extractPackageFile(file1); expect(res?.deps).toEqual([ diff --git a/lib/modules/manager/circleci/extract.ts b/lib/modules/manager/circleci/extract.ts index e56da71ea4b39f..660fb4eb35e620 100644 --- a/lib/modules/manager/circleci/extract.ts +++ b/lib/modules/manager/circleci/extract.ts @@ -4,12 +4,17 @@ import { parseSingleYaml } from '../../../util/yaml'; import { OrbDatasource } from '../../datasource/orb'; import * as npmVersioning from '../../versioning/npm'; import { getDep } from '../dockerfile/extract'; -import type { PackageDependency, PackageFileContent } from '../types'; +import type { + ExtractConfig, + PackageDependency, + PackageFileContent, +} from '../types'; import { CircleCiFile, type CircleCiJob } from './schema'; export function extractPackageFile( content: string, packageFile?: string, + config?: ExtractConfig, ): PackageFileContent | null { const deps: PackageDependency[] = []; try { @@ -38,7 +43,7 @@ export function extractPackageFile( for (const job of environments) { for (const dockerElement of coerceArray(job.docker)) { deps.push({ - ...getDep(dockerElement.image), + ...getDep(dockerElement.image, true, config?.registryAliases), depType: 'docker', }); } @@ -46,7 +51,7 @@ export function extractPackageFile( for (const alias of coerceArray(parsed.aliases)) { deps.push({ - ...getDep(alias.image), + ...getDep(alias.image, true, config?.registryAliases), depType: 'docker', }); }