import * as core from "@actions/core"; import * as tc from "@actions/tool-cache"; import * as path from "path"; import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/utils"; import { Architecture, Platform } from "../utils/platforms"; import { validateChecksum } from "./checksum/checksum"; export function tryGetFromToolCache( arch: Architecture, version: string, ): string | undefined { core.debug(`Trying to get uv from tool cache for ${version}...`); const cachedVersions = tc.findAllVersions(TOOL_CACHE_NAME, arch); core.debug(`Cached versions: ${cachedVersions}`); return tc.find(TOOL_CACHE_NAME, version, arch); } export async function downloadVersion( platform: Platform, arch: Architecture, version: string, checkSum: string | undefined, githubToken: string | undefined, ): Promise { const artifact = `uv-${arch}-${platform}`; let downloadUrl = `https://github.com/${OWNER}/${REPO}/releases/download/${version}/${artifact}`; if (platform === "pc-windows-msvc") { downloadUrl += ".zip"; } else { downloadUrl += ".tar.gz"; } core.info(`Downloading uv from "${downloadUrl}" ...`); const downloadPath = await tc.downloadTool( downloadUrl, undefined, githubToken, ); await validateChecksum(checkSum, downloadPath, arch, platform, version); let uvDir: string; if (platform === "pc-windows-msvc") { uvDir = await tc.extractZip(downloadPath); // On windows extracting the zip does not create an intermediate directory } else { const extractedDir = await tc.extractTar(downloadPath); uvDir = path.join(extractedDir, artifact); } return await tc.cacheDir(uvDir, TOOL_CACHE_NAME, version, arch); }