setup-uv/src/setup-uv.ts

100 lines
2.5 KiB
TypeScript
Raw Normal View History

2024-08-23 23:58:26 +02:00
import * as core from '@actions/core'
import * as path from 'path'
import {downloadVersion, tryGetFromToolCache} from './download/download-version'
import {restoreCache} from './cache/restore-cache'
import {downloadLatest} from './download/download-latest'
import {Architecture, getArch, getPlatform, Platform} from './utils/platforms'
import {
cacheLocalPath,
checkSum,
enableCache,
githubToken,
version
} from './utils/inputs'
async function run(): Promise<void> {
const platform = getPlatform()
const arch = getArch()
try {
if (platform === undefined) {
throw new Error(`Unsupported platform: ${process.platform}`)
}
if (arch === undefined) {
throw new Error(`Unsupported architecture: ${process.arch}`)
}
2024-08-24 00:14:50 +02:00
const setupResult = await setupUv(
2024-08-23 23:58:26 +02:00
platform,
arch,
version,
checkSum,
githubToken
)
2024-08-24 00:14:50 +02:00
addUvToPath(setupResult.uvDir)
core.setOutput('uv-version', version)
core.info(`Successfully installed uv version ${version}`)
2024-08-23 23:58:26 +02:00
addMatchers()
setCacheDir(cacheLocalPath)
if (enableCache) {
2024-08-24 00:14:50 +02:00
await restoreCache(setupResult.version)
2024-08-23 23:58:26 +02:00
}
} catch (err) {
core.setFailed((err as Error).message)
}
process.exit(0)
}
async function setupUv(
platform: Platform,
arch: Architecture,
versionInput: string,
checkSum: string | undefined,
githubToken: string | undefined
2024-08-24 00:14:50 +02:00
): Promise<{uvDir: string; version: string}> {
2024-08-23 23:58:26 +02:00
let installedPath: string | undefined
2024-08-24 00:14:50 +02:00
let cachedToolDir: string
2024-08-23 23:58:26 +02:00
let version: string
if (versionInput === 'latest') {
const result = await downloadLatest(platform, arch, checkSum, githubToken)
version = result.version
2024-08-24 00:14:50 +02:00
cachedToolDir = result.cachedToolDir
2024-08-23 23:58:26 +02:00
} else {
version = versionInput
installedPath = tryGetFromToolCache(arch, versionInput)
if (installedPath) {
core.info(`Found uv in tool-cache for ${versionInput}`)
2024-08-24 00:14:50 +02:00
return {uvDir: installedPath, version}
2024-08-23 23:58:26 +02:00
}
2024-08-24 00:14:50 +02:00
cachedToolDir = await downloadVersion(
2024-08-23 23:58:26 +02:00
platform,
arch,
versionInput,
checkSum,
githubToken
)
}
2024-08-24 00:14:50 +02:00
return {uvDir: cachedToolDir, version}
2024-08-23 23:58:26 +02:00
}
function addUvToPath(cachedPath: string): void {
core.addPath(cachedPath)
core.info(`Added ${cachedPath} to the path`)
}
function setCacheDir(cacheLocalPath: string): void {
core.exportVariable('UV_CACHE_DIR', cacheLocalPath)
core.info(`Set UV_CACHE_DIR to ${cacheLocalPath}`)
}
function addMatchers(): void {
const matchersPath = path.join(__dirname, `..${path.sep}..`, '.github')
core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`)
}
run()