From ad0a2e144d81d4ff721c36c9be2ee4a31adbbcf6 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sun, 23 Apr 2023 11:21:09 +0200 Subject: [PATCH] fix(versioning/composer): compatible composer numeric soft (#21744) --- lib/modules/versioning/composer/index.spec.ts | 10 ++++---- lib/modules/versioning/composer/index.ts | 23 ++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/modules/versioning/composer/index.spec.ts b/lib/modules/versioning/composer/index.spec.ts index f5ad722ef6..63eaed7e24 100644 --- a/lib/modules/versioning/composer/index.spec.ts +++ b/lib/modules/versioning/composer/index.spec.ts @@ -84,8 +84,9 @@ describe('modules/versioning/composer/index', () => { test.each` versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~6'} | ${null} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~4'} | ${'4.2.0'} - ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'4.2.0'} + ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'v4.2.0'} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~0.4'} | ${'0.5.0'} ${['0.4.0', '0.5.0', '4.0.0-beta1', '4.0.0-beta2', '4.2.0-beta1', '4.2.0-beta2', '5.0.0']} | ${'~4@beta'} | ${'4.0.0-beta2'} `( @@ -97,8 +98,9 @@ describe('modules/versioning/composer/index', () => { test.each` versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~6'} | ${null} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~4'} | ${'4.0.0'} - ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'4.0.0'} + ${['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0']} | ${'~4'} | ${'v4.0.0'} ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~0.4'} | ${'0.4.0'} ${['0.4.0', '0.5.0', '4.0.0-beta1', '4.0.0', '4.2.0-beta1', '4.2.0-beta2', '5.0.0']} | ${'~4@beta'} | ${'4.0.0-beta1'} `( @@ -195,8 +197,8 @@ describe('modules/versioning/composer/index', () => { ); test.each` - versions | expected - ${['1.2.3-beta', '2.0.1', '1.3.4', '1.2.3']} | ${['1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']} + versions | expected + ${['1.2.3-beta', '1.0.0-alpha24', '2.0.1', '1.3.4', '1.0.0-alpha9', '1.2.3']} | ${['1.0.0-alpha9', '1.0.0-alpha24', '1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']} `('$versions -> sortVersions -> $expected ', ({ versions, expected }) => { expect(versions.sort(semver.sortVersions)).toEqual(expected); }); diff --git a/lib/modules/versioning/composer/index.ts b/lib/modules/versioning/composer/index.ts index 1c1db9884b..7fc94cd290 100644 --- a/lib/modules/versioning/composer/index.ts +++ b/lib/modules/versioning/composer/index.ts @@ -93,6 +93,7 @@ function composer2npm(input: string): string { return output + stability; }) + .map((part) => part.replace(/([a-z])([0-9])/gi, '$1.$2')) .join(' || '); } @@ -147,20 +148,26 @@ function getSatisfyingVersion( versions: string[], range: string ): string | null { - return npm.getSatisfyingVersion( - versions.map(composer2npm), - composer2npm(range) - ); + const npmVersions = versions.map(composer2npm); + const npmVersion = npm.getSatisfyingVersion(npmVersions, composer2npm(range)); + if (!npmVersion) { + return null; + } + // get index of npmVersion in npmVersions + return versions[npmVersions.indexOf(npmVersion)] ?? npmVersion; } function minSatisfyingVersion( versions: string[], range: string ): string | null { - return npm.minSatisfyingVersion( - versions.map(composer2npm), - composer2npm(range) - ); + const npmVersions = versions.map(composer2npm); + const npmVersion = npm.minSatisfyingVersion(npmVersions, composer2npm(range)); + if (!npmVersion) { + return null; + } + // get index of npmVersion in npmVersions + return versions[npmVersions.indexOf(npmVersion)] ?? npmVersion; } function subset(subRange: string, superRange: string): boolean | undefined { -- GitLab