From b7bf78939d77607a9ccb489e4ec4651ba1092d5c Mon Sep 17 00:00:00 2001 From: Tom Gillam Date: Thu, 16 Oct 2025 12:41:50 +0100 Subject: [PATCH] Fix "lowest" resolution strategy with lower-bound only (#649) - towards https://github.com/astral-sh/setup-uv/issues/648 Fix the bug described there, but this doesn't add the fast-path optimisation suggested in that issue. --- .github/workflows/test.yml | 3 +++ biome.json | 2 +- dist/setup/index.js | 9 +++++---- src/download/download-version.ts | 10 ++++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f59dc9f..3290e3a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -114,6 +114,9 @@ jobs: - version-input: ">=0.4.25,<0.5" expected-version: "0.4.25" resolution-strategy: "lowest" + - version-input: ">=0.4.25" + expected-version: "0.4.25" + resolution-strategy: "lowest" - version-input: ">=0.1,<0.2" expected-version: "0.1.45" resolution-strategy: "highest" diff --git a/biome.json b/biome.json index df1e86c..5289cab 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.5/schema.json", "assist": { "actions": { "source": { diff --git a/dist/setup/index.js b/dist/setup/index.js index f2dc045..5102ed3 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -129214,24 +129214,25 @@ async function resolveVersion(versionInput, manifestFile, githubToken, resolutio core.debug(`Resolving version: ${versionInput}`); let version; const isSimpleMinimumVersionSpecifier = versionInput.includes(">") && !versionInput.includes(","); - if (isSimpleMinimumVersionSpecifier) { + const resolveVersionSpecifierToLatest = isSimpleMinimumVersionSpecifier && resolutionStrategy === "highest"; + if (resolveVersionSpecifierToLatest) { core.info("Found minimum version specifier, using latest version"); } if (manifestFile) { version = - versionInput === "latest" || isSimpleMinimumVersionSpecifier + versionInput === "latest" || resolveVersionSpecifierToLatest ? await (0, version_manifest_1.getLatestKnownVersion)(manifestFile) : versionInput; } else { version = - versionInput === "latest" || isSimpleMinimumVersionSpecifier + versionInput === "latest" || resolveVersionSpecifierToLatest ? await getLatestVersion(githubToken) : versionInput; } if (tc.isExplicitVersion(version)) { core.debug(`Version ${version} is an explicit version.`); - if (isSimpleMinimumVersionSpecifier) { + if (resolveVersionSpecifierToLatest) { if (!pep440.satisfies(version, versionInput)) { throw new Error(`No version found for ${versionInput}`); } diff --git a/src/download/download-version.ts b/src/download/download-version.ts index fa86ebe..3e7096c 100644 --- a/src/download/download-version.ts +++ b/src/download/download-version.ts @@ -141,23 +141,25 @@ export async function resolveVersion( let version: string; const isSimpleMinimumVersionSpecifier = versionInput.includes(">") && !versionInput.includes(","); - if (isSimpleMinimumVersionSpecifier) { + const resolveVersionSpecifierToLatest = + isSimpleMinimumVersionSpecifier && resolutionStrategy === "highest"; + if (resolveVersionSpecifierToLatest) { core.info("Found minimum version specifier, using latest version"); } if (manifestFile) { version = - versionInput === "latest" || isSimpleMinimumVersionSpecifier + versionInput === "latest" || resolveVersionSpecifierToLatest ? await getLatestVersionInManifest(manifestFile) : versionInput; } else { version = - versionInput === "latest" || isSimpleMinimumVersionSpecifier + versionInput === "latest" || resolveVersionSpecifierToLatest ? await getLatestVersion(githubToken) : versionInput; } if (tc.isExplicitVersion(version)) { core.debug(`Version ${version} is an explicit version.`); - if (isSimpleMinimumVersionSpecifier) { + if (resolveVersionSpecifierToLatest) { if (!pep440.satisfies(version, versionInput)) { throw new Error(`No version found for ${versionInput}`); }