From c127ead62237d1a99d6c62d939cfdf10d51eee2d Mon Sep 17 00:00:00 2001
From: Jameel Al-Aziz <247849+jalaziz@users.noreply.github.com>
Date: Tue, 7 Feb 2023 12:20:26 -0800
Subject: [PATCH] feat(manager/terraform): support OCI registry in helm_release
 `repository` (#20237)

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
---
 lib/modules/manager/terraform/__fixtures__/helm.tf     |  8 ++++++++
 lib/modules/manager/terraform/extract.spec.ts          |  9 ++++++++-
 .../terraform/extractors/resources/helm-release.ts     | 10 +++++++++-
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lib/modules/manager/terraform/__fixtures__/helm.tf b/lib/modules/manager/terraform/__fixtures__/helm.tf
index a977c66268..6cae1674ac 100644
--- a/lib/modules/manager/terraform/__fixtures__/helm.tf
+++ b/lib/modules/manager/terraform/__fixtures__/helm.tf
@@ -45,3 +45,11 @@ resource "helm_release" "karpenter" {
   chart = "oci://public.ecr.aws/karpenter/karpenter"
   version = "v0.22.1"
 }
+
+## chart in OCI registry
+resource "helm_release" "karpenter_oci_repo" {
+  name  = "karpenter"
+  repository = "oci://public.ecr.aws/karpenter"
+  chart = "karpenter"
+  version = "v0.22.1"
+}
diff --git a/lib/modules/manager/terraform/extract.spec.ts b/lib/modules/manager/terraform/extract.spec.ts
index 978645438f..27bdaa4d62 100644
--- a/lib/modules/manager/terraform/extract.spec.ts
+++ b/lib/modules/manager/terraform/extract.spec.ts
@@ -574,7 +574,7 @@ describe('modules/manager/terraform/extract', () => {
 
     it('extract helm releases', async () => {
       const res = await extractPackageFile(helm, 'helm.tf', {});
-      expect(res?.deps).toHaveLength(7);
+      expect(res?.deps).toHaveLength(8);
       expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2);
       expect(res?.deps).toIncludeAllPartialMembers([
         {
@@ -623,6 +623,13 @@ describe('modules/manager/terraform/extract', () => {
           depName: 'public.ecr.aws/karpenter/karpenter',
           depType: 'helm_release',
         },
+        {
+          currentValue: 'v0.22.1',
+          datasource: 'docker',
+          depName: 'karpenter',
+          depType: 'helm_release',
+          registryUrls: ['https://public.ecr.aws/karpenter'],
+        },
       ]);
     });
 
diff --git a/lib/modules/manager/terraform/extractors/resources/helm-release.ts b/lib/modules/manager/terraform/extractors/resources/helm-release.ts
index 62e3e81d5d..753e912d32 100644
--- a/lib/modules/manager/terraform/extractors/resources/helm-release.ts
+++ b/lib/modules/manager/terraform/extractors/resources/helm-release.ts
@@ -27,7 +27,15 @@ export class HelmReleaseExtractor extends DependencyExtractor {
         datasource: HelmDatasource.id,
       };
       if (is.nonEmptyString(helmRelease.repository)) {
-        dep.registryUrls = [helmRelease.repository];
+        if (isOCIRegistry(helmRelease.repository)) {
+          // For oci repos, we remove the oci:// and use the docker datasource
+          dep.registryUrls = [
+            helmRelease.repository.replace('oci://', 'https://'),
+          ];
+          dep.datasource = DockerDatasource.id;
+        } else {
+          dep.registryUrls = [helmRelease.repository];
+        }
       }
       if (!helmRelease.chart) {
         dep.skipReason = 'invalid-name';
-- 
GitLab