From b95af46ebda86baa9004766c6264d5b05dfd2213 Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Wed, 15 Feb 2023 00:45:34 +0100
Subject: [PATCH] fix(manager/regex): migrate datasource renames (#20415)

---
 .../migrations/custom/datasource-migration.ts | 21 +++++++-------
 lib/modules/manager/regex/index.spec.ts       | 29 +++++++++++++++++++
 lib/modules/manager/regex/utils.ts            |  4 +++
 3 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/lib/config/migrations/custom/datasource-migration.ts b/lib/config/migrations/custom/datasource-migration.ts
index b20445935a..d9158db39c 100644
--- a/lib/config/migrations/custom/datasource-migration.ts
+++ b/lib/config/migrations/custom/datasource-migration.ts
@@ -6,17 +6,18 @@ export class DatasourceMigration extends AbstractMigration {
 
   override run(value: unknown): void {
     if (is.string(value)) {
-      let newValue = value;
-      switch (newValue) {
-        case 'adoptium-java':
-          newValue = 'java-version';
-          break;
-        case 'dotnet':
-          newValue = 'dotnet-version';
-          break;
-      }
-
+      const newValue = migrateDatasource(value);
       this.rewrite(newValue);
     }
   }
 }
+
+export function migrateDatasource(value: string): string {
+  switch (value) {
+    case 'adoptium-java':
+      return 'java-version';
+    case 'dotnet':
+      return 'dotnet-version';
+  }
+  return value;
+}
diff --git a/lib/modules/manager/regex/index.spec.ts b/lib/modules/manager/regex/index.spec.ts
index d683f54483..1146c533f2 100644
--- a/lib/modules/manager/regex/index.spec.ts
+++ b/lib/modules/manager/regex/index.spec.ts
@@ -1,3 +1,4 @@
+import { codeBlock } from 'common-tags';
 import { Fixtures } from '../../../../test/fixtures';
 import { logger } from '../../../logger';
 import type { CustomExtractConfig } from '../types';
@@ -449,4 +450,32 @@ describe('modules/manager/regex/index', () => {
       ],
     });
   });
+
+  it('migrates', async () => {
+    const config: CustomExtractConfig = {
+      matchStrings: [
+        '# renovate: datasource=(?<datasource>[a-z-]+?)(?: (?:packageName|lookupName)=(?<packageName>.+?))?(?: versioning=(?<versioning>[a-z-]+?))?\\sRUN install-[a-z]+? (?<depName>[a-z-]+?) (?<currentValue>.+?)(?:\\s|$)',
+      ],
+      versioningTemplate:
+        '{{#if versioning}}{{versioning}}{{else}}semver{{/if}}',
+    };
+    const res = await extractPackageFile(
+      codeBlock`
+        # renovate: datasource=dotnet packageName=dotnet-runtime
+        RUN install-tool dotnet 6.0.13
+      `,
+      'Dockerfile',
+      config
+    );
+    expect(res).toMatchObject({
+      deps: [
+        {
+          depName: 'dotnet',
+          packageName: 'dotnet-runtime',
+          currentValue: '6.0.13',
+          datasource: 'dotnet-version',
+        },
+      ],
+    });
+  });
 });
diff --git a/lib/modules/manager/regex/utils.ts b/lib/modules/manager/regex/utils.ts
index fbe31c506b..e54317e43d 100644
--- a/lib/modules/manager/regex/utils.ts
+++ b/lib/modules/manager/regex/utils.ts
@@ -1,5 +1,6 @@
 import { URL } from 'url';
 import is from '@sindresorhus/is';
+import { migrateDatasource } from '../../../config/migrations/custom/datasource-migration';
 import type { RegexManagerTemplates } from '../../../config/types';
 import { logger } from '../../../logger';
 import * as template from '../../../util/template';
@@ -35,6 +36,9 @@ function updateDependency(
         logger.warn({ value }, 'Invalid regex manager registryUrl');
       }
       break;
+    case 'datasource':
+      dependency.datasource = migrateDatasource(value);
+      break;
     default:
       dependency[field] = value;
       break;
-- 
GitLab