From 5dfc850b3bf6b978657395f99d83cd3a16c58bb4 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 19 Oct 2022 10:17:16 +0200
Subject: [PATCH] fix: immortal digest groups (#18402)

---
 .../repository/updates/generate.spec.ts       | 30 +++++++++++++
 lib/workers/repository/updates/generate.ts    | 44 +++++++++----------
 2 files changed, 52 insertions(+), 22 deletions(-)

diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts
index 782ec1dc7c..f5b5873df1 100644
--- a/lib/workers/repository/updates/generate.spec.ts
+++ b/lib/workers/repository/updates/generate.spec.ts
@@ -238,6 +238,36 @@ describe('workers/repository/updates/generate', () => {
       expect(res.recreateClosed).toBeFalsy();
     });
 
+    it('groups multiple digest updates immortally', () => {
+      const branch: BranchUpgradeConfig[] = [
+        {
+          manager: 'some-manager',
+          depName: 'some-dep',
+          groupName: 'some-group',
+          branchName: 'some-branch',
+          prTitle: 'some-title',
+          commitMessageExtra: 'to {{{newDigestShort}}}',
+          newValue: '5.1.2',
+          newDigest: 'sha256:abcdef123',
+          isDigest: true,
+        },
+        {
+          manager: 'some-manager',
+          depName: 'some-other-dep',
+          groupName: 'some-group',
+          branchName: 'some-branch',
+          prTitle: 'some-title',
+          commitMessageExtra: 'to {{{newDigestShort}}}',
+          newValue: '5.2.0',
+          newDigest: 'sha256:abcdef987654321',
+          isDigest: true,
+        },
+      ];
+      const res = generateBranchConfig(branch);
+      expect(res.groupName).toBeDefined();
+      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 02278169c7..b569f3f507 100644
--- a/lib/workers/repository/updates/generate.ts
+++ b/lib/workers/repository/updates/generate.ts
@@ -83,6 +83,28 @@ export function generateBranchConfig(
   const toVersions: string[] = [];
   const toValues = new Set<string>();
   for (const upg of branchUpgrades) {
+    if (upg.currentDigest) {
+      upg.currentDigestShort =
+        upg.currentDigestShort ??
+        upg.currentDigest.replace('sha256:', '').substring(0, 7);
+    }
+    if (upg.newDigest) {
+      upg.newDigestShort =
+        upg.newDigestShort ||
+        upg.newDigest.replace('sha256:', '').substring(0, 7);
+    }
+    if (upg.isDigest || upg.isPinDigest) {
+      upg.displayFrom = upg.currentDigestShort;
+      upg.displayTo = upg.newDigestShort;
+    } else if (upg.isLockfileUpdate) {
+      upg.displayFrom = upg.currentVersion;
+      upg.displayTo = upg.newVersion;
+    } else if (!upg.isLockFileMaintenance) {
+      upg.displayFrom = upg.currentValue;
+      upg.displayTo = upg.newValue;
+    }
+    upg.displayFrom ??= '';
+    upg.displayTo ??= '';
     if (!depNames.includes(upg.depName!)) {
       depNames.push(upg.depName!);
     }
@@ -123,28 +145,6 @@ export function generateBranchConfig(
       upgrade.commitMessageExtra = `to v${toVersions[0]}`;
     }
 
-    if (upgrade.currentDigest) {
-      upgrade.currentDigestShort =
-        upgrade.currentDigestShort ??
-        upgrade.currentDigest.replace('sha256:', '').substring(0, 7);
-    }
-    if (upgrade.newDigest) {
-      upgrade.newDigestShort =
-        upgrade.newDigestShort ||
-        upgrade.newDigest.replace('sha256:', '').substring(0, 7);
-    }
-    if (upgrade.isDigest || upgrade.isPinDigest) {
-      upgrade.displayFrom = upgrade.currentDigestShort;
-      upgrade.displayTo = upgrade.newDigestShort;
-    } else if (upgrade.isLockfileUpdate) {
-      upgrade.displayFrom = upgrade.currentVersion;
-      upgrade.displayTo = upgrade.newVersion;
-    } else if (!upgrade.isLockFileMaintenance) {
-      upgrade.displayFrom = upgrade.currentValue;
-      upgrade.displayTo = upgrade.newValue;
-    }
-    upgrade.displayFrom ??= '';
-    upgrade.displayTo ??= '';
     const pendingVersionsLength = upgrade.pendingVersions?.length;
     if (pendingVersionsLength) {
       upgrade.displayPending = `\`${upgrade
-- 
GitLab