import * as cache from '@actions/cache' import * as glob from '@actions/glob' import * as core from '@actions/core' import path from 'path' import {cacheDependencyGlob, cacheLocalPath, cacheSuffix} from '../utils/inputs' import {getArch, getPlatform} from '../utils/platforms' export const STATE_CACHE_KEY = 'cache-key' export const STATE_CACHE_MATCHED_KEY = 'cache-matched-key' const CACHE_VERSION = '1' export async function restoreCache(version: string): Promise { const cacheKey = await computeKeys(version) let matchedKey: string | undefined core.info( `Trying to restore uv cache from GitHub Actions cache with key: ${cacheKey}` ) try { matchedKey = await cache.restoreCache([cacheLocalPath], cacheKey) } catch (err) { const message = (err as Error).message core.warning(message) core.setOutput('cache-hit', false) return } core.saveState(STATE_CACHE_KEY, cacheKey) handleMatchResult(matchedKey, cacheKey) } async function computeKeys(version: string): Promise { let cacheDependencyPathHash = '-' if (cacheDependencyGlob !== '') { const fullCacheDependencyGlob = `${process.env['GITHUB_WORKSPACE']}${path.sep}${cacheDependencyGlob}` cacheDependencyPathHash += await glob.hashFiles(fullCacheDependencyGlob) if (cacheDependencyPathHash === '-') { throw new Error( `No file in ${process.cwd()} matched to [${cacheDependencyGlob}], make sure you have checked out the target repository` ) } } const suffix = cacheSuffix ? `-${cacheSuffix}` : '' return `setup-uv-${CACHE_VERSION}-${getArch()}-${getPlatform()}-${version}${cacheDependencyPathHash}${suffix}` } function handleMatchResult( matchedKey: string | undefined, primaryKey: string ): void { if (!matchedKey) { core.info(`No GitHub Actions cache found for key: ${primaryKey}`) core.setOutput('cache-hit', false) return } core.saveState(STATE_CACHE_MATCHED_KEY, matchedKey) core.info( `uv cache restored from GitHub Actions cache with key: ${matchedKey}` ) core.setOutput('cache-hit', true) }