From 5f531f49457c5393af423b135619aa66ac20503b Mon Sep 17 00:00:00 2001
From: Duncan Casteleyn <10881109+DuncanCasteleyn@users.noreply.github.com>
Date: Thu, 16 Feb 2023 07:37:08 +0100
Subject: [PATCH] fix: apply recreateClosed to grouped pinDigests (#20430)

---
 .../repository/updates/generate.spec.ts       | 70 +++++++++++++++++++
 lib/workers/repository/updates/generate.ts    |  5 +-
 2 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts
index 557ae43779..d5f409246c 100644
--- a/lib/workers/repository/updates/generate.spec.ts
+++ b/lib/workers/repository/updates/generate.spec.ts
@@ -269,6 +269,76 @@ describe('workers/repository/updates/generate', () => {
       expect(res.recreateClosed).toBeTrue();
     });
 
+    it('Grouped pin & pinDigest can be recreated', () => {
+      // TODO #7154 incompatible types
+      const branch: BranchUpgradeConfig[] = [
+        {
+          ...defaultConfig,
+          isPinDigest: true,
+          updateType: 'pinDigest',
+          newValue: 'v2',
+          newDigest: 'dc323e67f16fb5f7663d20ff7941f27f5809e9b6',
+        } as BranchUpgradeConfig,
+        {
+          ...defaultConfig,
+          updateType: 'pin',
+          isPin: true,
+          newValue: "'2.2.0'",
+          newVersion: '2.2.0',
+          newMajor: 2,
+        } as BranchUpgradeConfig,
+      ];
+      const res = generateBranchConfig(branch);
+      expect(res.recreateClosed).toBeTrue();
+    });
+
+    it('Grouped pin can be recreated', () => {
+      // TODO #7154 incompatible types
+      const branch: BranchUpgradeConfig[] = [
+        {
+          ...defaultConfig,
+          updateType: 'pin',
+          isPin: true,
+          newValue: "'2.2.0'",
+          newVersion: '2.2.0',
+          newMajor: 2,
+        } as BranchUpgradeConfig,
+        {
+          ...defaultConfig,
+          updateType: 'pin',
+          isPin: true,
+          newValue: "'3.2.0'",
+          newVersion: '3.2.0',
+          newMajor: 3,
+        } as BranchUpgradeConfig,
+      ];
+      const res = generateBranchConfig(branch);
+      expect(res.recreateClosed).toBeTrue();
+    });
+
+    it('grouped pinDigest can be recreated', () => {
+      // TODO #7154 incompatible types
+      const branch: BranchUpgradeConfig[] = [
+        {
+          ...defaultConfig,
+          isPinDigest: true,
+          newDigest: 'abcd',
+          newValue: 'v3',
+          updateType: 'pinDigest',
+        } as BranchUpgradeConfig,
+        {
+          ...defaultConfig,
+          isPinDigest: true,
+          newDigest: 'dcba',
+          newMajor: 2,
+          newValue: 'v2',
+          updateType: 'pinDigest',
+        } as BranchUpgradeConfig,
+      ];
+      const res = generateBranchConfig(branch);
+      expect(res.recreateClosed).toBeTrue();
+    });
+
     it('groups multiple upgrades different version', () => {
       const branch: BranchUpgradeConfig[] = [
         {
diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts
index 93d2e12209..5a3ff3e05b 100644
--- a/lib/workers/repository/updates/generate.ts
+++ b/lib/workers/repository/updates/generate.ts
@@ -179,7 +179,10 @@ export function generateBranchConfig(
       logger.trace({ toValues });
       delete upgrade.commitMessageExtra;
       upgrade.recreateClosed = true;
-    } else if (newValue.length > 1 && upgrade.isDigest) {
+    } else if (
+      newValue.length > 1 &&
+      (upgrade.isDigest || upgrade.isPinDigest)
+    ) {
       logger.trace({ newValue });
       delete upgrade.commitMessageExtra;
       upgrade.recreateClosed = true;
-- 
GitLab