From 158fa38a5c7c3cedd482fc21e2f3fba8f308d472 Mon Sep 17 00:00:00 2001
From: Manuel Blechschmidt <manuel.blechschmidt@incentergy.de>
Date: Thu, 29 Feb 2024 16:59:33 +0100
Subject: [PATCH] fix(datasource/go):  don't strip `api/` from `packageName` on
 gitlab (#27635)

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
---
 ...go-get-gitlab-ee-private-subgroup-api.html | 12 ++++++++++
 lib/modules/datasource/go/base.spec.ts        | 23 +++++++++++++++++++
 lib/modules/datasource/go/base.ts             |  2 +-
 3 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 lib/modules/datasource/go/__fixtures__/go-get-gitlab-ee-private-subgroup-api.html

diff --git a/lib/modules/datasource/go/__fixtures__/go-get-gitlab-ee-private-subgroup-api.html b/lib/modules/datasource/go/__fixtures__/go-get-gitlab-ee-private-subgroup-api.html
new file mode 100644
index 0000000000..fcbfae005d
--- /dev/null
+++ b/lib/modules/datasource/go/__fixtures__/go-get-gitlab-ee-private-subgroup-api.html
@@ -0,0 +1,12 @@
+<html>
+
+<head>
+  <meta name="go-import"
+    content="my.custom.domain/group/subgroup-api/myrepo git https://my.custom.domain/group/subgroup-api/myrepo.git" />
+  <meta name="go-source"
+    content="my.custom.domain/group/subgroup-api/myrepo https://my.custom.domain/group/subgroup-api/myrepo https://my.custom.domain/group/subgroup-api/myrepo/-/tree/master{/dir} https://my.custom.domain/group/subgroup-api/myrepo/-/blob/master{/dir}/{file}#L{line}" />
+</head>
+
+<body>go get https://my.custom.domain/group/subgroup-api/myrepo</body>
+
+</html>
diff --git a/lib/modules/datasource/go/base.spec.ts b/lib/modules/datasource/go/base.spec.ts
index 3c8a08400d..cb406e63e4 100644
--- a/lib/modules/datasource/go/base.spec.ts
+++ b/lib/modules/datasource/go/base.spec.ts
@@ -240,6 +240,29 @@ describe('modules/datasource/go/base', () => {
         });
       });
 
+      it('supports GitLab EE deps in private subgroup with api/ as part of packageName and api/v4 as part of endpoint', async () => {
+        GlobalConfig.set({ endpoint: 'https://my.custom.domain/api/v4' });
+
+        hostRules.hostType.mockReturnValue('gitlab');
+        httpMock
+          .scope('https://my.custom.domain')
+          .get('/group/subgroup-api/myrepo?go-get=1')
+          .reply(
+            200,
+            Fixtures.get('go-get-gitlab-ee-private-subgroup-api.html'),
+          );
+
+        const res = await BaseGoDatasource.getDatasource(
+          'my.custom.domain/group/subgroup-api/myrepo',
+        );
+
+        expect(res).toEqual({
+          datasource: GitlabTagsDatasource.id,
+          packageName: 'group/subgroup-api/myrepo',
+          registryUrl: 'https://my.custom.domain/',
+        });
+      });
+
       it('supports GitLab EE deps in subgroup with version', async () => {
         hostRules.hostType.mockReturnValue('gitlab');
         httpMock
diff --git a/lib/modules/datasource/go/base.ts b/lib/modules/datasource/go/base.ts
index 375987839b..3bde8e040f 100644
--- a/lib/modules/datasource/go/base.ts
+++ b/lib/modules/datasource/go/base.ts
@@ -184,7 +184,7 @@ export class BaseGoDatasource {
         endpoint,
       );
 
-      if (endpointPrefix) {
+      if (endpointPrefix && endpointPrefix[1] !== 'api/') {
         packageName = packageName.replace(endpointPrefix[1], '');
       }
 
-- 
GitLab