From 5eacc5e16f2bc21def65f7a277d24add4f44b395 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 7 Jul 2024 06:39:37 -0300 Subject: [PATCH] fix: Use versioning comparison for release lookup filtering (#30059) --- .../repository/process/lookup/filter.spec.ts | 29 +++++++++++++++++++ .../repository/process/lookup/filter.ts | 9 +++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/process/lookup/filter.spec.ts b/lib/workers/repository/process/lookup/filter.spec.ts index 5fe0a6a9acd97b..e445a9b0fdffdb 100644 --- a/lib/workers/repository/process/lookup/filter.spec.ts +++ b/lib/workers/repository/process/lookup/filter.spec.ts @@ -81,5 +81,34 @@ describe('workers/repository/process/lookup/filter', () => { expect(filteredVersions).toEqual([{ version: '1.2.3-beta' }]); }); + + it('ignores version insufficient prefixes', () => { + const releases = [ + { version: '1.0.1' }, + { version: '1.2.0' }, + { version: '2.0.0', isDeprecated: true }, + { version: '2.1.0' }, + ] satisfies Release[]; + + const config = partial({ + ignoreUnstable: true, + ignoreDeprecated: true, + }); + const currentVersion = 'v1.0.1'; + const latestVersion = 'v2.0.0'; + + const filteredVersions = filterVersions( + config, + currentVersion, + latestVersion, + releases, + versioning, + ); + + expect(filteredVersions).toEqual([ + { version: '1.2.0' }, + { version: '2.1.0' }, + ]); + }); }); }); diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 71e85ec3d1c57d..7c2bd0aa2619be 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -43,7 +43,14 @@ export function filterVersions( versioning.isGreaterThan(r.version, currentVersion), ); - const currentRelease = releases.find((r) => r.version === currentVersion); + const currentRelease = releases.find( + (r) => + versioning.isValid(r.version) && + versioning.isVersion(r.version) && + versioning.isValid(currentVersion) && + versioning.isVersion(currentVersion) && + versioning.equals(r.version, currentVersion), + ); // Don't upgrade from non-deprecated to deprecated if (ignoreDeprecated && currentRelease && !currentRelease.isDeprecated) {