diff --git a/lib/manager/regex/__snapshots__/index.spec.ts.snap b/lib/manager/regex/__snapshots__/index.spec.ts.snap index 90ed65cf6ca0e0165f088ab3c338f1895af3e91b..2cbc5039f10181ae9d72d8588d70aa22c2a42416 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 eb70ef625e2abe27fd1047a6325667915507549e..39faae5dda9bfdb1512eec9b29cb81bec45a28de 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 8dc7133335d18146f92fab22dc6f4d68efbcc209..7eb28b8eec4382dd5515e2f5dd6d8dafdb943d71 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 0847123d4d027681aa3432b800b2ee3724829e59..1e62bb9d002139da3de2f49e3b590f0076811503 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