73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as cache from '@actions/cache';
 | |
| import * as core from '@actions/core';
 | |
| import * as glob from '@actions/glob';
 | |
| import path from 'path';
 | |
| import fs from 'fs';
 | |
| 
 | |
| import {State, Outputs} from './constants';
 | |
| import {PackageManagerInfo} from './package-managers';
 | |
| import {getCacheDirectoryPath, getPackageManagerInfo} from './cache-utils';
 | |
| 
 | |
| export const restoreCache = async (
 | |
|   packageManager: string,
 | |
|   cacheDependencyPath?: string
 | |
| ) => {
 | |
|   const packageManagerInfo = await getPackageManagerInfo(packageManager);
 | |
|   const platform = process.env.RUNNER_OS;
 | |
|   const versionSpec = core.getInput('go-version');
 | |
| 
 | |
|   const cachePaths = await getCacheDirectoryPath(packageManagerInfo);
 | |
| 
 | |
|   const dependencyFilePath = cacheDependencyPath
 | |
|     ? cacheDependencyPath
 | |
|     : findDependencyFile(packageManagerInfo);
 | |
|   const fileHash = await glob.hashFiles(dependencyFilePath);
 | |
| 
 | |
|   if (!fileHash) {
 | |
|     throw new Error(
 | |
|       'Some specified paths were not resolved, unable to cache dependencies.'
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   const primaryKey = `setup-go-${platform}-go-${versionSpec}-${fileHash}`;
 | |
|   core.debug(`primary key is ${primaryKey}`);
 | |
| 
 | |
|   core.saveState(State.CachePrimaryKey, primaryKey);
 | |
| 
 | |
|   try {
 | |
|     const cacheKey = await cache.restoreCache(cachePaths, primaryKey);
 | |
|     core.setOutput(Outputs.CacheHit, Boolean(cacheKey));
 | |
| 
 | |
|     if (!cacheKey) {
 | |
|       core.info(`Cache is not found`);
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     core.saveState(State.CacheMatchedKey, cacheKey);
 | |
|     core.info(`Cache restored from key: ${cacheKey}`);
 | |
|   } catch (error) {
 | |
|     const typedError = error as Error;
 | |
|     if (typedError.name === cache.ValidationError.name) {
 | |
|       throw error;
 | |
|     } else {
 | |
|       core.warning(typedError.message);
 | |
|       core.setOutput(Outputs.CacheHit, false);
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| const findDependencyFile = (packageManager: PackageManagerInfo) => {
 | |
|   let dependencyFile = packageManager.dependencyFilePattern;
 | |
|   const workspace = process.env.GITHUB_WORKSPACE!;
 | |
|   const rootContent = fs.readdirSync(workspace);
 | |
| 
 | |
|   const goSumFileExists = rootContent.includes(dependencyFile);
 | |
|   if (!goSumFileExists) {
 | |
|     throw new Error(
 | |
|       `Dependencies file is not found in ${workspace}. Supported file pattern: ${dependencyFile}`
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   return path.join(workspace, dependencyFile);
 | |
| };
 |