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',
});
}