45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as glob from '@actions/glob';
 | |
| import * as os from 'os';
 | |
| import * as path from 'path';
 | |
| import * as core from '@actions/core';
 | |
| 
 | |
| import CacheDistributor from './cache-distributor';
 | |
| 
 | |
| class PipenvCache extends CacheDistributor {
 | |
|   constructor(
 | |
|     private pythonVersion: string,
 | |
|     protected patterns: string = '**/Pipfile.lock'
 | |
|   ) {
 | |
|     super('pipenv', patterns);
 | |
|   }
 | |
| 
 | |
|   protected async getCacheGlobalDirectories() {
 | |
|     let virtualEnvRelativePath;
 | |
| 
 | |
|     // Default virtualenv directories are hardcoded,
 | |
|     // because pipenv is not preinstalled on hosted images and virtualenv is not created:
 | |
|     // https://github.com/pypa/pipenv/blob/1daaa0de9a0b00d386c6baeb809d8d4ee6795cfd/pipenv/utils.py#L1990-L2002
 | |
|     if (process.platform === 'win32') {
 | |
|       virtualEnvRelativePath = '.virtualenvs';
 | |
|     } else {
 | |
|       virtualEnvRelativePath = '.local/share/virtualenvs';
 | |
|     }
 | |
|     const resolvedPath = path.join(os.homedir(), virtualEnvRelativePath);
 | |
|     core.debug(`global cache directory path is ${resolvedPath}`);
 | |
| 
 | |
|     return [resolvedPath];
 | |
|   }
 | |
| 
 | |
|   protected async computeKeys() {
 | |
|     const hash = await glob.hashFiles(this.patterns);
 | |
|     const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`;
 | |
|     const restoreKey = undefined;
 | |
|     return {
 | |
|       primaryKey,
 | |
|       restoreKey
 | |
|     };
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default PipenvCache;
 |