From 726e3e4e4e91c229ec3432312ccf31b0b90c0dfb Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Mon, 12 Feb 2024 16:24:58 -0300 Subject: [PATCH] fix(datasource): Check release constraints validity (#27191) --- lib/modules/datasource/common.spec.ts | 4 +-- lib/modules/datasource/common.ts | 45 ++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/lib/modules/datasource/common.spec.ts b/lib/modules/datasource/common.spec.ts index 67e7ebccde..703283f9c0 100644 --- a/lib/modules/datasource/common.spec.ts +++ b/lib/modules/datasource/common.spec.ts @@ -218,8 +218,8 @@ describe('modules/datasource/common', () => { const releaseResult = { releases: [ { version: '1.0.0' }, - { version: '2.0.0', constraints: {} as never }, - { version: '3.0.0', constraints: { baz: ['^0.9.0'] } }, + { version: '2.0.0', constraints: { baz: [undefined] } as never }, + { version: '3.0.0', constraints: { baz: ['^0.9.0', 'invalid'] } }, ], }; expect(applyConstraintsFiltering(releaseResult, config)).toEqual({ diff --git a/lib/modules/datasource/common.ts b/lib/modules/datasource/common.ts index 9cb24fd158..6b952da4f4 100644 --- a/lib/modules/datasource/common.ts +++ b/lib/modules/datasource/common.ts @@ -181,14 +181,43 @@ export function applyConstraintsFiltering< continue; } - const satisfiesConstraints = constraint.some( - // If the constraint value is a subset of any release's constraints, then it's OK - // fallback to release's constraint match if subset is not supported by versioning - (releaseConstraint) => - !releaseConstraint || - (versioning.subset?.(configConstraint, releaseConstraint) ?? - versioning.matches(configConstraint, releaseConstraint)), - ); + let satisfiesConstraints = false; + for (const releaseConstraint of constraint) { + if (!releaseConstraint) { + satisfiesConstraints = true; + logger.once.debug( + { + packageName: config.packageName, + versioning: versioningName, + constraint: releaseConstraint, + }, + 'Undefined release constraint', + ); + break; + } + + if (!versioning.isValid(releaseConstraint)) { + logger.once.debug( + { + packageName: config.packageName, + versioning: versioningName, + constraint: releaseConstraint, + }, + 'Invalid release constraint', + ); + break; + } + + if (versioning.subset?.(configConstraint, releaseConstraint)) { + satisfiesConstraints = true; + break; + } + + if (versioning.matches(configConstraint, releaseConstraint)) { + satisfiesConstraints = true; + break; + } + } if (!satisfiesConstraints) { filteredReleases.push(release.version); -- GitLab