diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb8505e..0c57aab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -540,7 +540,6 @@ jobs: - name: Install from custom manifest file uses: ./ with: - version: 0.7.12-alpha.1 manifest-file: "https://raw.githubusercontent.com/astral-sh/setup-uv/${{ github.ref }}/__tests__/download/custom-manifest.json" - run: uv sync working-directory: __tests__/fixtures/uv-project diff --git a/README.md b/README.md index a75541d..895ffee 100644 --- a/README.md +++ b/README.md @@ -430,6 +430,11 @@ This is useful if you maintain your own uv builds or want to override the defaul manifest-file: "https://example.com/my-custom-manifest.json" ``` +> [!NOTE] +> When you use a custom manifest file and do not set the `version` input, its default value is `latest`. +> This means the action will install the latest version available in the custom manifest file. +> This is different from the default behavior of installing the latest version from the official uv releases. + ## How it works This action downloads uv from the uv repo's official diff --git a/dist/setup/index.js b/dist/setup/index.js index eed451c..a096a2b 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -124735,11 +124735,21 @@ async function downloadVersion(downloadUrl, artifactName, platform, arch, versio function getExtension(platform) { return platform === "pc-windows-msvc" ? ".zip" : ".tar.gz"; } -async function resolveVersion(versionInput, githubToken) { +async function resolveVersion(versionInput, manifestFile, githubToken) { core.debug(`Resolving version: ${versionInput}`); - const version = versionInput === "latest" - ? await getLatestVersion(githubToken) - : versionInput; + let version; + if (manifestFile) { + version = + versionInput === "latest" + ? await (0, version_manifest_1.getLatestKnownVersion)(manifestFile) + : versionInput; + } + else { + version = + versionInput === "latest" + ? await getLatestVersion(githubToken) + : versionInput; + } if (tc.isExplicitVersion(version)) { core.debug(`Version ${version} is an explicit version.`); return version; @@ -125105,7 +125115,7 @@ function detectEmptyWorkdir() { } } async function setupUv(platform, arch, checkSum, githubToken) { - const resolvedVersion = await determineVersion(); + const resolvedVersion = await determineVersion(inputs_1.manifestFile); const toolCacheResult = (0, download_version_1.tryGetFromToolCache)(arch, resolvedVersion); if (toolCacheResult.installedPath) { core.info(`Found uv in tool-cache for ${toolCacheResult.version}`); @@ -125127,16 +125137,16 @@ async function setupUv(platform, arch, checkSum, githubToken) { version: downloadVersionResult.version, }; } -async function determineVersion() { +async function determineVersion(manifestFile) { if (inputs_1.version !== "") { - return await (0, download_version_1.resolveVersion)(inputs_1.version, inputs_1.githubToken); + return await (0, download_version_1.resolveVersion)(inputs_1.version, manifestFile, inputs_1.githubToken); } const versionFromUvToml = (0, config_file_1.getUvVersionFromConfigFile)(`${inputs_1.workingDirectory}${path.sep}uv.toml`); const versionFromPyproject = (0, config_file_1.getUvVersionFromConfigFile)(`${inputs_1.workingDirectory}${path.sep}pyproject.toml`); if (versionFromUvToml === undefined && versionFromPyproject === undefined) { core.info("Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest."); } - return await (0, download_version_1.resolveVersion)(versionFromUvToml || versionFromPyproject || "latest", inputs_1.githubToken); + return await (0, download_version_1.resolveVersion)(versionFromUvToml || versionFromPyproject || "latest", manifestFile, inputs_1.githubToken); } function addUvToPathAndOutput(cachedPath) { core.setOutput("uv-path", `${cachedPath}${path.sep}uv`); diff --git a/src/download/download-version.ts b/src/download/download-version.ts index e06efae..3204e26 100644 --- a/src/download/download-version.ts +++ b/src/download/download-version.ts @@ -7,7 +7,10 @@ import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants"; import type { Architecture, Platform } from "../utils/platforms"; import { validateChecksum } from "./checksum/checksum"; import { Octokit } from "../utils/octokit"; -import { getDownloadUrl } from "./version-manifest"; +import { + getDownloadUrl, + getLatestKnownVersion as getLatestVersionInManifest, +} from "./version-manifest"; export function tryGetFromToolCache( arch: Architecture, @@ -127,13 +130,22 @@ function getExtension(platform: Platform): string { export async function resolveVersion( versionInput: string, + manifestFile: string | undefined, githubToken: string, ): Promise { core.debug(`Resolving version: ${versionInput}`); - const version = - versionInput === "latest" - ? await getLatestVersion(githubToken) - : versionInput; + let version: string; + if (manifestFile) { + version = + versionInput === "latest" + ? await getLatestVersionInManifest(manifestFile) + : versionInput; + } else { + version = + versionInput === "latest" + ? await getLatestVersion(githubToken) + : versionInput; + } if (tc.isExplicitVersion(version)) { core.debug(`Version ${version} is an explicit version.`); return version; diff --git a/src/setup-uv.ts b/src/setup-uv.ts index de9129d..f6ed2af 100644 --- a/src/setup-uv.ts +++ b/src/setup-uv.ts @@ -87,7 +87,7 @@ async function setupUv( checkSum: string | undefined, githubToken: string, ): Promise<{ uvDir: string; version: string }> { - const resolvedVersion = await determineVersion(); + const resolvedVersion = await determineVersion(manifestFile); const toolCacheResult = tryGetFromToolCache(arch, resolvedVersion); if (toolCacheResult.installedPath) { core.info(`Found uv in tool-cache for ${toolCacheResult.version}`); @@ -127,9 +127,11 @@ async function setupUv( }; } -async function determineVersion(): Promise { +async function determineVersion( + manifestFile: string | undefined, +): Promise { if (versionInput !== "") { - return await resolveVersion(versionInput, githubToken); + return await resolveVersion(versionInput, manifestFile, githubToken); } const versionFromUvToml = getUvVersionFromConfigFile( `${workingDirectory}${path.sep}uv.toml`, @@ -144,6 +146,7 @@ async function determineVersion(): Promise { } return await resolveVersion( versionFromUvToml || versionFromPyproject || "latest", + manifestFile, githubToken, ); }