From a19f44b2a8f852602ae01a9abae266d906108096 Mon Sep 17 00:00:00 2001
From: Sebastian Poxhofer <secustor@users.noreply.github.com>
Date: Thu, 1 Dec 2022 11:23:53 +0100
Subject: [PATCH] fix(terraform): allow `_` and `-` in hostnames of provider
 sources (#19203)

---
 .../manager/terraform/__fixtures__/providers.tf     |  4 ++++
 .../terraform/__snapshots__/extract.spec.ts.snap    | 13 ++++++++++++-
 lib/modules/manager/terraform/extract.spec.ts       |  2 +-
 lib/modules/manager/terraform/providers.ts          |  2 +-
 4 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/lib/modules/manager/terraform/__fixtures__/providers.tf b/lib/modules/manager/terraform/__fixtures__/providers.tf
index 3d1071f916..8575726e90 100644
--- a/lib/modules/manager/terraform/__fixtures__/providers.tf
+++ b/lib/modules/manager/terraform/__fixtures__/providers.tf
@@ -69,6 +69,10 @@ terraform {
       source  = "terraform.example.com/hashicorp/kubernetes"
       version = ">= 1.0"
     }
+    oci = {
+      source  = "terraform-company_special.example.com/oracle/oci"
+      version = ">= 4.0"
+    }
   }
   required_version = ">= 0.13"
 }
diff --git a/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap
index 66212bfc2e..9b69b84919 100644
--- a/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap
+++ b/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap
@@ -388,7 +388,7 @@ exports[`modules/manager/terraform/extract extractPackageFile() extracts provide
       "depName": "hashicorp/terraform",
       "depType": "required_version",
       "extractVersion": "v(?<version>.*)$",
-      "lineNumber": 72,
+      "lineNumber": 76,
     },
     {
       "currentValue": "2.7.2",
@@ -443,6 +443,17 @@ exports[`modules/manager/terraform/extract extractPackageFile() extracts provide
         "https://terraform.example.com",
       ],
     },
+    {
+      "currentValue": ">= 4.0",
+      "datasource": "terraform-provider",
+      "depName": "oci",
+      "depType": "required_provider",
+      "lockedVersion": undefined,
+      "packageName": "oracle/oci",
+      "registryUrls": [
+        "https://terraform-company_special.example.com",
+      ],
+    },
   ],
 }
 `;
diff --git a/lib/modules/manager/terraform/extract.spec.ts b/lib/modules/manager/terraform/extract.spec.ts
index 48bbcb6cfb..f048345e84 100644
--- a/lib/modules/manager/terraform/extract.spec.ts
+++ b/lib/modules/manager/terraform/extract.spec.ts
@@ -91,7 +91,7 @@ describe('modules/manager/terraform/extract', () => {
 
     it('extracts providers', async () => {
       const res = await extractPackageFile(providers, 'providers.tf', {});
-      expect(res?.deps).toHaveLength(14);
+      expect(res?.deps).toHaveLength(15);
       expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2);
       expect(res).toMatchSnapshot();
     });
diff --git a/lib/modules/manager/terraform/providers.ts b/lib/modules/manager/terraform/providers.ts
index 4c20e6d0e6..10501357ff 100644
--- a/lib/modules/manager/terraform/providers.ts
+++ b/lib/modules/manager/terraform/providers.ts
@@ -12,7 +12,7 @@ import {
 } from './util';
 
 export const sourceExtractionRegex = regEx(
-  /^(?:(?<hostname>(?:[a-zA-Z0-9]+\.+)+[a-zA-Z0-9]+)\/)?(?:(?<namespace>[^/]+)\/)?(?<type>[^/]+)/
+  /^(?:(?<hostname>(?:[a-zA-Z0-9-_]+\.+)+[a-zA-Z0-9-_]+)\/)?(?:(?<namespace>[^/]+)\/)?(?<type>[^/]+)/
 );
 
 export function extractTerraformProvider(
-- 
GitLab