From ac34279690adab84e15a224cb758e1445903341d Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Tue, 24 Nov 2020 12:43:05 +0400
Subject: [PATCH] feat(regex-manager): Support for registryUrl capture group
 (#7792)

---
 .../regex/__snapshots__/index.spec.ts.snap    | 27 +++++++++++++++++++
 lib/manager/regex/index.spec.ts               | 26 ++++++++++++++++++
 lib/manager/regex/index.ts                    |  8 ++++++
 lib/manager/regex/readme.md                   |  1 +
 4 files changed, 62 insertions(+)

diff --git a/lib/manager/regex/__snapshots__/index.spec.ts.snap b/lib/manager/regex/__snapshots__/index.spec.ts.snap
index 90ed65cf6c..2cbc5039f1 100644
--- a/lib/manager/regex/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/regex/__snapshots__/index.spec.ts.snap
@@ -73,3 +73,30 @@ Object {
   ],
 }
 `;
+
+exports[`manager/regex/index extracts registryUrl 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "8.12.13",
+      "datasource": "helm",
+      "depName": "prometheus-operator",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com/",
+      ],
+      "replaceString": "chart:
+          repository: https://kubernetes-charts.storage.googleapis.com/
+          name: prometheus-operator
+          version: 8.12.13
+",
+    },
+  ],
+  "matchStrings": Array [
+    "chart:
+ *repository: (?<registryUrl>.*?)
+ *name: (?<depName>.*?)
+ *version: (?<currentValue>.*)
+",
+  ],
+}
+`;
diff --git a/lib/manager/regex/index.spec.ts b/lib/manager/regex/index.spec.ts
index eb70ef625e..39faae5dda 100644
--- a/lib/manager/regex/index.spec.ts
+++ b/lib/manager/regex/index.spec.ts
@@ -60,4 +60,30 @@ describe(getName(__filename), () => {
     );
     expect(res).toBeNull();
   });
+  it('extracts registryUrl', async () => {
+    const config = {
+      matchStrings: [
+        'chart:\n *repository: (?<registryUrl>.*?)\n *name: (?<depName>.*?)\n *version: (?<currentValue>.*)\n',
+      ],
+      datasourceTemplate: 'helm',
+    };
+    const res = await extractPackageFile(
+      `
+      apiVersion: helm.fluxcd.io/v1
+      kind: HelmRelease
+      metadata:
+        name: prometheus-operator
+        namespace: monitoring
+      spec:
+        releaseName: prometheus-operator
+        chart:
+          repository: https://kubernetes-charts.storage.googleapis.com/
+          name: prometheus-operator
+          version: 8.12.13
+      `,
+      'Dockerfile',
+      config
+    );
+    expect(res).toMatchSnapshot();
+  });
 });
diff --git a/lib/manager/regex/index.ts b/lib/manager/regex/index.ts
index 8dc7133335..7eb28b8eec 100644
--- a/lib/manager/regex/index.ts
+++ b/lib/manager/regex/index.ts
@@ -1,3 +1,4 @@
+import url from 'url';
 import { logger } from '../../logger';
 import { regEx } from '../../util/regex';
 import * as template from '../../util/template';
@@ -27,6 +28,7 @@ export function extractPackageFile(
         'currentDigest',
         'datasource',
         'versioning',
+        'registryUrl',
       ];
       for (const field of fields) {
         const fieldTemplate = `${field}Template`;
@@ -45,6 +47,12 @@ export function extractPackageFile(
         }
       }
       dep.replaceString = String(matchResult[0]);
+      if (dep.registryUrl) {
+        if (url.parse(dep.registryUrl)) {
+          dep.registryUrls = [dep.registryUrl];
+        }
+        delete dep.registryUrl;
+      }
       deps.push(dep);
     }
   } while (matchResult);
diff --git a/lib/manager/regex/readme.md b/lib/manager/regex/readme.md
index 0847123d4d..1e62bb9d00 100644
--- a/lib/manager/regex/readme.md
+++ b/lib/manager/regex/readme.md
@@ -23,6 +23,7 @@ Configuration-wise, it works like this:
 - You must have either a `datasource` capture group or a `datasourceTemplate` config field
 - You can optionally have a `versioning` capture group or a `versioningTemplate` config field. If neither are present, `semver` will be used as the default
 - You can optionally have a `currentDigest` capture group.
+- You can optionally have a `registryUrl` capture group. If it's a valid URL, it will be converted to the `registryUrls` field as a single-length array.
 
 ### Regular Expression Capture Groups
 
-- 
GitLab