diff --git a/dist/setup/index.js b/dist/setup/index.js index e038284..ac48421 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -89685,62 +89685,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.downloadLatest = downloadLatest; -const core = __importStar(__nccwpck_require__(7484)); -const tc = __importStar(__nccwpck_require__(3472)); -const exec = __importStar(__nccwpck_require__(5236)); -const path = __importStar(__nccwpck_require__(6760)); -const node_fs_1 = __nccwpck_require__(3024); -const checksum_1 = __nccwpck_require__(5391); +exports.getLatestReleaseVersion = getLatestReleaseVersion; const constants_1 = __nccwpck_require__(6156); -function downloadLatest(platform, arch, checkSum, githubToken) { +const github = __importStar(__nccwpck_require__(3228)); +function getLatestReleaseVersion(githubToken) { return __awaiter(this, void 0, void 0, function* () { - const artifact = `uv-${arch}-${platform}`; - let extension = ".tar.gz"; - if (platform === "pc-windows-msvc") { - extension = ".zip"; + const octokit = github.getOctokit(githubToken); + const { data: latestRelease } = yield octokit.rest.repos.getLatestRelease({ + owner: constants_1.OWNER, + repo: constants_1.REPO, + }); + if (latestRelease) { + return latestRelease.tag_name; } - const downloadUrl = `https://github.com/${constants_1.OWNER}/${constants_1.REPO}/releases/latest/download/${artifact}${extension}`; - core.info(`Downloading uv from "${downloadUrl}" ...`); - const downloadPath = yield tc.downloadTool(downloadUrl, undefined, githubToken); - let uvExecutablePath; - let uvDir; - if (platform === "pc-windows-msvc") { - const fullPathWithExtension = `${downloadPath}${extension}`; - yield node_fs_1.promises.copyFile(downloadPath, fullPathWithExtension); - uvDir = yield tc.extractZip(fullPathWithExtension); - // On windows extracting the zip does not create an intermediate directory - uvExecutablePath = path.join(uvDir, "uv.exe"); - } - else { - const extractedDir = yield tc.extractTar(downloadPath); - uvDir = path.join(extractedDir, artifact); - uvExecutablePath = path.join(uvDir, "uv"); - } - const version = yield getVersion(uvExecutablePath); - yield (0, checksum_1.validateChecksum)(checkSum, downloadPath, arch, platform, version); - const cachedToolDir = yield tc.cacheDir(uvDir, constants_1.TOOL_CACHE_NAME, version, arch); - return { cachedToolDir, version }; - }); -} -function getVersion(uvExecutablePath) { - return __awaiter(this, void 0, void 0, function* () { - // Parse the output of `uv --version` to get the version - // The output looks like - // uv 0.3.1 (be17d132a 2024-08-21) - const options = { - silent: !core.isDebug(), - }; - const execArgs = ["--version"]; - let output = ""; - options.listeners = { - stdout: (data) => { - output += data.toString(); - }, - }; - yield exec.exec(uvExecutablePath, execArgs, options); - const parts = output.split(" "); - return parts[1].trim(); + throw new Error("No releases found for this repository."); }); } @@ -89787,6 +89745,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge Object.defineProperty(exports, "__esModule", ({ value: true })); exports.tryGetFromToolCache = tryGetFromToolCache; exports.downloadVersion = downloadVersion; +exports.resolveVersion = resolveVersion; const core = __importStar(__nccwpck_require__(7484)); const tc = __importStar(__nccwpck_require__(3472)); const path = __importStar(__nccwpck_require__(6760)); @@ -90045,27 +90004,16 @@ function run() { } function setupUv(platform, arch, versionInput, checkSum, githubToken) { return __awaiter(this, void 0, void 0, function* () { - let installedPath; - let cachedToolDir; - let version; - if (versionInput === "latest") { - const latestResult = yield (0, download_latest_1.downloadLatest)(platform, arch, checkSum, githubToken); - version = latestResult.version; - cachedToolDir = latestResult.cachedToolDir; + const resolvedVersion = yield (0, download_version_1.resolveVersion)(versionInput === "latest" + ? yield (0, download_latest_1.getLatestReleaseVersion)(githubToken) + : versionInput, githubToken); + const toolCacheResult = (0, download_version_1.tryGetFromToolCache)(arch, resolvedVersion); + if (toolCacheResult.installedPath) { + core.info(`Found uv in tool-cache for ${resolvedVersion}`); + return { uvDir: toolCacheResult.installedPath, version: resolvedVersion }; } - else { - const toolCacheResult = (0, download_version_1.tryGetFromToolCache)(arch, versionInput); - version = toolCacheResult.version; - installedPath = toolCacheResult.installedPath; - if (installedPath) { - core.info(`Found uv in tool-cache for ${versionInput}`); - return { uvDir: installedPath, version }; - } - const versionResult = yield (0, download_version_1.downloadVersion)(platform, arch, versionInput, checkSum, githubToken); - cachedToolDir = versionResult.cachedToolDir; - version = versionResult.version; - } - return { uvDir: cachedToolDir, version }; + const versionResult = yield (0, download_version_1.downloadVersion)(platform, arch, resolvedVersion, checkSum, githubToken); + return { uvDir: versionResult.cachedToolDir, version: versionResult.version }; }); } function addUvToPath(cachedPath) { diff --git a/src/download/download-latest.ts b/src/download/download-latest.ts index edb8926..5723cf1 100644 --- a/src/download/download-latest.ts +++ b/src/download/download-latest.ts @@ -1,73 +1,16 @@ -import * as core from "@actions/core"; -import * as tc from "@actions/tool-cache"; -import * as exec from "@actions/exec"; -import * as path from "node:path"; -import { promises as fs } from "node:fs"; -import type { Architecture, Platform } from "../utils/platforms"; -import { validateChecksum } from "./checksum/checksum"; -import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants"; +import { OWNER, REPO } from "../utils/constants"; +import * as github from "@actions/github"; -export async function downloadLatest( - platform: Platform, - arch: Architecture, - checkSum: string | undefined, - githubToken: string | undefined, -): Promise<{ cachedToolDir: string; version: string }> { - const artifact = `uv-${arch}-${platform}`; - let extension = ".tar.gz"; - if (platform === "pc-windows-msvc") { - extension = ".zip"; +export async function getLatestReleaseVersion(githubToken: string) { + const octokit = github.getOctokit(githubToken); + + const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({ + owner: OWNER, + repo: REPO, + }); + + if (latestRelease) { + return latestRelease.tag_name; } - const downloadUrl = `https://github.com/${OWNER}/${REPO}/releases/latest/download/${artifact}${extension}`; - core.info(`Downloading uv from "${downloadUrl}" ...`); - - const downloadPath = await tc.downloadTool( - downloadUrl, - undefined, - githubToken, - ); - let uvExecutablePath: string; - let uvDir: string; - if (platform === "pc-windows-msvc") { - const fullPathWithExtension = `${downloadPath}${extension}`; - await fs.copyFile(downloadPath, fullPathWithExtension); - uvDir = await tc.extractZip(fullPathWithExtension); - // On windows extracting the zip does not create an intermediate directory - uvExecutablePath = path.join(uvDir, "uv.exe"); - } else { - const extractedDir = await tc.extractTar(downloadPath); - uvDir = path.join(extractedDir, artifact); - uvExecutablePath = path.join(uvDir, "uv"); - } - const version = await getVersion(uvExecutablePath); - await validateChecksum(checkSum, downloadPath, arch, platform, version); - const cachedToolDir = await tc.cacheDir( - uvDir, - TOOL_CACHE_NAME, - version, - arch, - ); - - return { cachedToolDir, version }; -} - -async function getVersion(uvExecutablePath: string): Promise { - // Parse the output of `uv --version` to get the version - // The output looks like - // uv 0.3.1 (be17d132a 2024-08-21) - - const options: exec.ExecOptions = { - silent: !core.isDebug(), - }; - const execArgs = ["--version"]; - - let output = ""; - options.listeners = { - stdout: (data: Buffer) => { - output += data.toString(); - }, - }; - await exec.exec(uvExecutablePath, execArgs, options); - const parts = output.split(" "); - return parts[1].trim(); + throw new Error("No releases found for this repository."); } diff --git a/src/download/download-version.ts b/src/download/download-version.ts index 3e9fb59..ba09aff 100644 --- a/src/download/download-version.ts +++ b/src/download/download-version.ts @@ -70,7 +70,7 @@ export async function downloadVersion( return { version: resolvedVersion, cachedToolDir }; } -async function resolveVersion( +export async function resolveVersion( version: string, githubToken: string, ): Promise { diff --git a/src/setup-uv.ts b/src/setup-uv.ts index 43a469a..40e1e3a 100644 --- a/src/setup-uv.ts +++ b/src/setup-uv.ts @@ -3,10 +3,11 @@ import * as path from "node:path"; import { downloadVersion, tryGetFromToolCache, + resolveVersion, } from "./download/download-version"; import { restoreCache } from "./cache/restore-cache"; -import { downloadLatest } from "./download/download-latest"; +import { getLatestReleaseVersion } from "./download/download-latest"; import { type Architecture, getArch, @@ -69,38 +70,28 @@ async function setupUv( checkSum: string | undefined, githubToken: string, ): Promise<{ uvDir: string; version: string }> { - let installedPath: string | undefined; - let cachedToolDir: string; - let version: string; - if (versionInput === "latest") { - const latestResult = await downloadLatest( - platform, - arch, - checkSum, - githubToken, - ); - version = latestResult.version; - cachedToolDir = latestResult.cachedToolDir; - } else { - const toolCacheResult = tryGetFromToolCache(arch, versionInput); - version = toolCacheResult.version; - installedPath = toolCacheResult.installedPath; - if (installedPath) { - core.info(`Found uv in tool-cache for ${versionInput}`); - return { uvDir: installedPath, version }; - } - const versionResult = await downloadVersion( - platform, - arch, - versionInput, - checkSum, - githubToken, - ); - cachedToolDir = versionResult.cachedToolDir; - version = versionResult.version; + const resolvedVersion = await resolveVersion( + versionInput === "latest" + ? await getLatestReleaseVersion(githubToken) + : versionInput, + githubToken, + ); + + const toolCacheResult = tryGetFromToolCache(arch, resolvedVersion); + if (toolCacheResult.installedPath) { + core.info(`Found uv in tool-cache for ${resolvedVersion}`); + return { uvDir: toolCacheResult.installedPath, version: resolvedVersion }; } - return { uvDir: cachedToolDir, version }; + const versionResult = await downloadVersion( + platform, + arch, + resolvedVersion, + checkSum, + githubToken, + ); + + return { uvDir: versionResult.cachedToolDir, version: versionResult.version }; } function addUvToPath(cachedPath: string): void {