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()
|