From e64739cea5df45b7427ae8a1c1fdedd9cbc190ed Mon Sep 17 00:00:00 2001
From: Maxime Brunet <max@brnt.mx>
Date: Wed, 28 Sep 2022 10:20:40 -0700
Subject: [PATCH] fix(gomod): avoid duplicating "incompatible" metadata
 (#17867)

---
 lib/modules/manager/gomod/update.spec.ts | 17 +++++++++++++++++
 lib/modules/manager/gomod/update.ts      |  5 ++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lib/modules/manager/gomod/update.spec.ts b/lib/modules/manager/gomod/update.spec.ts
index 0f1fb82db7..741699102b 100644
--- a/lib/modules/manager/gomod/update.spec.ts
+++ b/lib/modules/manager/gomod/update.spec.ts
@@ -259,6 +259,23 @@ describe('modules/manager/gomod/update', () => {
       );
     });
 
+    it('handles +incompatible tag without duplicating it', () => {
+      const upgrade = {
+        depName: 'github.com/Azure/azure-sdk-for-go',
+        managerData: { lineNumber: 8 },
+        newValue: 'v26.0.0+incompatible',
+        depType: 'require',
+      };
+      const res = updateDependency({ fileContent: gomod1, upgrade });
+      expect(res).not.toEqual(gomod1);
+      expect(res).not.toContain(
+        'github.com/Azure/azure-sdk-for-go v26.0.0+incompatible+incompatible'
+      );
+      expect(res).toContain(
+        'github.com/Azure/azure-sdk-for-go v26.0.0+incompatible'
+      );
+    });
+
     it('handles replace line with minor version update', () => {
       const upgrade = {
         depName: 'github.com/pravesht/gocql',
diff --git a/lib/modules/manager/gomod/update.ts b/lib/modules/manager/gomod/update.ts
index de7f06b346..50884c80d0 100644
--- a/lib/modules/manager/gomod/update.ts
+++ b/lib/modules/manager/gomod/update.ts
@@ -120,7 +120,10 @@ export function updateDependency({
         }
       }
     }
-    if (lineToChange.endsWith('+incompatible')) {
+    if (
+      lineToChange.endsWith('+incompatible') &&
+      !upgrade.newValue?.endsWith('+incompatible')
+    ) {
       let toAdd = '+incompatible';
 
       if (upgrade.updateType === 'major' && upgrade.newMajor! >= 2) {
-- 
GitLab