Add untest poetry cache implementation
This commit is contained in:
		
							parent
							
								
									18c67b44e4
								
							
						
					
					
						commit
						59cb3f4919
					
				
							
								
								
									
										75
									
								
								src/cache-distributions/poetry-cache.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/cache-distributions/poetry-cache.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| import * as glob from '@actions/glob'; | ||||
| import * as os from 'os'; | ||||
| import * as path from 'path'; | ||||
| import * as exec from '@actions/exec'; | ||||
| 
 | ||||
| import CacheDistributor from './cache-distributor'; | ||||
| 
 | ||||
| class PoetryCache extends CacheDistributor { | ||||
|   constructor( | ||||
|     private pythonVersion: string, | ||||
|     protected patterns: string = '**/poetry.lock' | ||||
|   ) { | ||||
|     super('poetry', patterns); | ||||
|   } | ||||
| 
 | ||||
|   protected async getCacheGlobalDirectories() { | ||||
|     const poetryConfig = await this.getPoetryConfiguration(); | ||||
| 
 | ||||
|     const cacheDir = poetryConfig['cache-dir']; | ||||
|     const virtualenvsPath = poetryConfig['virtualenvs.path'].replace( | ||||
|       '{cache-dir}', | ||||
|       cacheDir | ||||
|     ); | ||||
| 
 | ||||
|     const paths = [virtualenvsPath]; | ||||
| 
 | ||||
|     if (poetryConfig['virtualenvs.in-project'] === 'true') { | ||||
|       paths.push(path.join(process.cwd(), '.venv')); | ||||
|     } | ||||
| 
 | ||||
|     return paths; | ||||
|   } | ||||
| 
 | ||||
|   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 | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   private async getPoetryConfiguration() { | ||||
|     const {stdout, stderr, exitCode} = await exec.getExecOutput( | ||||
|       'poetry config --list' | ||||
|     ); | ||||
| 
 | ||||
|     if (exitCode && stderr) { | ||||
|       throw new Error( | ||||
|         `Could not get cache folder path for poetry package manager` | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     const lines = stdout.split(os.EOL); | ||||
| 
 | ||||
|     const config = {} as { | ||||
|       'cache-dir': string; | ||||
|       'virtualenvs.in-project': string; | ||||
|       'virtualenvs.path': string; | ||||
|     }; | ||||
| 
 | ||||
|     for (let line of lines) { | ||||
|       line = line.replace(/#.*$/, ''); | ||||
| 
 | ||||
|       const [key, value] = line.split('=').map(part => part.trim()); | ||||
| 
 | ||||
|       config[key as keyof typeof config] = value; | ||||
|     } | ||||
| 
 | ||||
|     return config; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export default PoetryCache; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Patrick Arminio
						Patrick Arminio