From 5c369bdb4bf6d5759d81868294093e9d4f324901 Mon Sep 17 00:00:00 2001 From: Oran Avraham Date: Sat, 8 Oct 2022 13:00:06 +0300 Subject: [PATCH] poetry: Set up environment for each project individually --- dist/setup/index.js | 34 +++++++++++++----------- src/cache-distributions/poetry-cache.ts | 35 +++++++++++++------------ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index c77836265..a37e0d0f8 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -66081,18 +66081,33 @@ class PoetryCache extends cache_distributor_1.default { getCacheGlobalDirectories() { var e_1, _a; return __awaiter(this, void 0, void 0, function* () { - const paths = []; + // Same virtualenvs path may appear for different projects, hence we use a Set + const paths = new Set(); const globber = yield glob.create(this.patterns); + const pythonLocation = yield io.which('python'); + if (pythonLocation) { + core.debug(`pythonLocation is ${pythonLocation}`); + } + else { + utils_1.logWarning('python binaries were not found in PATH'); + } try { for (var _b = __asyncValues(globber.globGenerator()), _c; _c = yield _b.next(), !_c.done;) { const file = _c.value; const basedir = path.dirname(file); + core.debug(`Processing Poetry project at ${basedir}`); const poetryConfig = yield this.getPoetryConfiguration(basedir); const cacheDir = poetryConfig['cache-dir']; const virtualenvsPath = poetryConfig['virtualenvs.path'].replace('{cache-dir}', cacheDir); - paths.push(virtualenvsPath); + paths.add(virtualenvsPath); if (poetryConfig['virtualenvs.in-project'] === true) { - paths.push(path.join(basedir, '.venv')); + paths.add(path.join(basedir, '.venv')); + } + if (pythonLocation) { + const { exitCode, stderr } = yield exec.getExecOutput('poetry', ['env', 'use', pythonLocation], { ignoreReturnCode: true, cwd: basedir }); + if (exitCode) { + utils_1.logWarning(stderr); + } } } } @@ -66103,18 +66118,7 @@ class PoetryCache extends cache_distributor_1.default { } finally { if (e_1) throw e_1.error; } } - const pythonLocation = yield io.which('python'); - if (pythonLocation) { - core.debug(`pythonLocation is ${pythonLocation}`); - const { exitCode, stderr } = yield exec.getExecOutput(`poetry env use ${pythonLocation}`, undefined, { ignoreReturnCode: true }); - if (exitCode) { - utils_1.logWarning(stderr); - } - } - else { - utils_1.logWarning('python binaries were not found in PATH'); - } - return paths; + return Array.from(paths); }); } computeKeys() { diff --git a/src/cache-distributions/poetry-cache.ts b/src/cache-distributions/poetry-cache.ts index 27335e318..9c001b606 100644 --- a/src/cache-distributions/poetry-cache.ts +++ b/src/cache-distributions/poetry-cache.ts @@ -20,8 +20,17 @@ class PoetryCache extends CacheDistributor { const paths = new Set(); const globber = await glob.create(this.patterns); + const pythonLocation = await io.which('python'); + if (pythonLocation) { + core.debug(`pythonLocation is ${pythonLocation}`); + } else { + logWarning('python binaries were not found in PATH'); + } + for await (const file of globber.globGenerator()) { const basedir = path.dirname(file); + core.debug(`Processing Poetry project at ${basedir}`); + const poetryConfig = await this.getPoetryConfiguration(basedir); const cacheDir = poetryConfig['cache-dir']; @@ -35,26 +44,18 @@ class PoetryCache extends CacheDistributor { if (poetryConfig['virtualenvs.in-project'] === true) { paths.add(path.join(basedir, '.venv')); } - } - - const pythonLocation = await io.which('python'); - if (pythonLocation) { - core.debug(`pythonLocation is ${pythonLocation}`); - const { - exitCode, - stderr - } = await exec.getExecOutput( - `poetry env use ${pythonLocation}`, - undefined, - {ignoreReturnCode: true} - ); + if (pythonLocation) { + const {exitCode, stderr} = await exec.getExecOutput( + 'poetry', + ['env', 'use', pythonLocation], + {ignoreReturnCode: true, cwd: basedir} + ); - if (exitCode) { - logWarning(stderr); + if (exitCode) { + logWarning(stderr); + } } - } else { - logWarning('python binaries were not found in PATH'); } return Array.from(paths);