mirror of
https://github.com/actions/setup-python.git
synced 2024-11-25 10:26:54 +01:00
Add untest poetry cache implementation
This commit is contained in:
parent
18c67b44e4
commit
59cb3f4919
1 changed files with 75 additions and 0 deletions
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…
Reference in a new issue