From 29a272c78fb2b9a31be24a44be63691b27ab654b Mon Sep 17 00:00:00 2001
From: Karl-Johan Grahn <6355577+karl-johan-grahn@users.noreply.github.com>
Date: Thu, 23 Jun 2022 19:36:01 +0200
Subject: [PATCH] feat(helm-manager): allow either tag or version for images in
 helm charts (#16058)

* update

Allow either tag or version for images in helm charts

* undo

* lint

* undo

* exports

* rewrite

* add spaces for lint

* chore: prettier fix

Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
---
 lib/modules/manager/helm-values/extract.ts |  2 +-
 lib/modules/manager/helm-values/readme.md  |  4 ++++
 lib/modules/manager/helm-values/types.ts   | 19 +++++++++++++++++--
 lib/modules/manager/helm-values/util.ts    |  5 ++++-
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/lib/modules/manager/helm-values/extract.ts b/lib/modules/manager/helm-values/extract.ts
index 670d8fe2ff..ba58044b15 100644
--- a/lib/modules/manager/helm-values/extract.ts
+++ b/lib/modules/manager/helm-values/extract.ts
@@ -46,7 +46,7 @@ function findDependencies(
       let registry = currentItem.registry;
       registry = registry ? `${registry}/` : '';
       const repository = String(currentItem.repository);
-      const tag = String(currentItem.tag);
+      const tag = `${currentItem.tag ?? currentItem.version}`;
       packageDependencies.push(getHelmDep({ repository, tag, registry }));
     } else if (matchesHelmValuesInlineImage(key, value)) {
       packageDependencies.push(getDep(value));
diff --git a/lib/modules/manager/helm-values/readme.md b/lib/modules/manager/helm-values/readme.md
index a604f2f0c8..c77852fca1 100644
--- a/lib/modules/manager/helm-values/readme.md
+++ b/lib/modules/manager/helm-values/readme.md
@@ -7,6 +7,10 @@ image:
   tag: v1.0.0
   registry: registry.example.com # optional key, will default to "docker.io"
 
+image:
+  repository: 'some-docker/dependency'
+  version: v1.0.0
+
 coreImage:
   registry: docker.io
   repository: bitnami/harbor-core
diff --git a/lib/modules/manager/helm-values/types.ts b/lib/modules/manager/helm-values/types.ts
index b507048353..50dbe42b43 100644
--- a/lib/modules/manager/helm-values/types.ts
+++ b/lib/modules/manager/helm-values/types.ts
@@ -1,5 +1,20 @@
-export type HelmDockerImageDependency = {
+export interface HelmDockerImageDependencyBasic {
   registry?: string;
   repository: string;
+}
+
+export interface HelmDockerImageDependencyTag
+  extends HelmDockerImageDependencyBasic {
   tag: string;
-};
+  version?: never;
+}
+
+export interface HelmDockerImageDependencyVersion
+  extends HelmDockerImageDependencyBasic {
+  version: string;
+  tag?: never;
+}
+
+export type HelmDockerImageDependency =
+  | HelmDockerImageDependencyTag
+  | HelmDockerImageDependencyVersion;
diff --git a/lib/modules/manager/helm-values/util.ts b/lib/modules/manager/helm-values/util.ts
index e88874edcf..58322e176f 100644
--- a/lib/modules/manager/helm-values/util.ts
+++ b/lib/modules/manager/helm-values/util.ts
@@ -15,6 +15,9 @@ const parentKeyRe = regEx(/image$/i);
  * image:
  *   repository: 'something'
  *   tag: v1.0.0
+ * image:
+ *   repository: 'something'
+ *   version: v1.0.0
  * renovateImage:
  *   repository: 'something'
  *   tag: v1.0.0
@@ -28,7 +31,7 @@ export function matchesHelmValuesDockerHeuristic(
     data &&
     typeof data === 'object' &&
     hasKey('repository', data) &&
-    hasKey('tag', data)
+    (hasKey('tag', data) || hasKey('version', data))
   );
 }
 
-- 
GitLab