From 96d174b460707ba07ff81d50887ebfe1848a7f1f Mon Sep 17 00:00:00 2001 From: RahulGautamSingh <rahultesnik@gmail.com> Date: Sat, 3 Feb 2024 12:21:00 +0545 Subject: [PATCH] fix(update/pr): stricter de-deduplicationof upgrades (#27029) --- .../repository/update/pr/index.spec.ts | 48 +++++++++++++++++++ lib/workers/repository/update/pr/index.ts | 6 +-- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/lib/workers/repository/update/pr/index.spec.ts b/lib/workers/repository/update/pr/index.spec.ts index 6e0f81d0ad..d50959fb92 100644 --- a/lib/workers/repository/update/pr/index.spec.ts +++ b/lib/workers/repository/update/pr/index.spec.ts @@ -798,6 +798,54 @@ describe('workers/repository/update/pr/index', () => { ], }); }); + + // compares currentVersion and currentValue separately to + // prevent removal false duplicates + it('stricter de-deuplication of changelogs', async () => { + platform.createPr.mockResolvedValueOnce(pr); + const upgrade = { + ...dummyUpgrade, + currentValue: + '1.21.5-alpine3.18@sha256:d8b99943fb0587b79658af03d4d4e8b57769b21dcf08a8401352a9f2a7228754', + newValue: + '1.21.6-alpine3.18@sha256:3354c3a94c3cf67cb37eb93a8e9474220b61a196b13c26f1c01715c301b22a69', + currentVersion: '1.21.5-alpine3.18', + newVersion: '1.21.6-alpine3.18', + logJSON: undefined, + sourceUrl: 'https://github.com/foo/bar', + hasReleaseNotes: true, + }; + delete upgrade.logJSON; + + const res = await ensurePr({ + ...config, + upgrades: [ + upgrade, + { + ...upgrade, + currentValue: + '1.21.5-alpine3.19@sha256:d8b99943fb0587b79658af03d4d4e8b57769b21dcf08a8401352a9f2a7228754', + newValue: + '1.21.6-alpine3.19@sha256:3354c3a94c3cf67cb37eb93a8e9474220b61a196b13c26f1c01715c301b22a69', + currentVersion: '1.21.5-alpine3.19', + newVersion: '1.21.6-alpine3.19', + }, + // adding this object for coverage + { + ...upgrade, + currentValue: undefined, + newValue: + '1.21.6-alpine3.19@sha256:3354c3a94c3cf67cb37eb93a8e9474220b61a196b13c26f1c01715c301b22a69', + currentVersion: '1.21.5-alpine3.19', + newVersion: undefined, + }, + ], + }); + + expect(res).toEqual({ type: 'with-pr', pr }); + const [[bodyConfig]] = prBody.getPrBody.mock.calls; + expect(bodyConfig.upgrades).toHaveLength(3); + }); }); describe('prCache', () => { diff --git a/lib/workers/repository/update/pr/index.ts b/lib/workers/repository/update/pr/index.ts index 0629f0bc68..02f5ba42da 100644 --- a/lib/workers/repository/update/pr/index.ts +++ b/lib/workers/repository/update/pr/index.ts @@ -243,11 +243,7 @@ export async function ensurePr( // Get changelog and then generate template strings for (const upgrade of upgrades) { // TODO: types (#22198) - const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${ - upgrade.manager - }-${ - upgrade.currentVersion ?? upgrade.currentValue! - }-${upgrade.newVersion!}`; + const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${upgrade.manager}-${upgrade.currentVersion ?? ''}-${upgrade.currentValue ?? ''}-${upgrade.newVersion ?? ''}-${upgrade.newValue ?? ''}`; if (processedUpgrades.includes(upgradeKey)) { continue; } -- GitLab