fix: handle the MacOS/Linux exec prefix paths

This commit is contained in:
Amin Yahyaabadi 2022-11-04 14:53:28 -07:00
parent 2dde08dd51
commit 623216a193
6 changed files with 38 additions and 18 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -12,6 +12,8 @@ import { dirname, join } from "patha"
import { hasDnf } from "../utils/env/hasDnf" import { hasDnf } from "../utils/env/hasDnf"
import { setupDnfPack } from "../utils/setup/setupDnfPack" import { setupDnfPack } from "../utils/setup/setupDnfPack"
import { isUbuntu } from "../utils/env/isUbuntu" import { isUbuntu } from "../utils/env/isUbuntu"
import { getExecOutput } from "@actions/exec"
import { existsSync } from "fs"
export async function setupPython(version: string, setupDir: string, arch: string) { export async function setupPython(version: string, setupDir: string, arch: string) {
if (ciDetect() !== "github-actions") { if (ciDetect() !== "github-actions") {
@ -75,3 +77,33 @@ export async function setupPythonViaSystem(
} }
} }
} }
export async function addPythonBaseExecPrefix(python: string) {
let dirs: string[] = []
// detection based on the platform
if (process.platform === "linux") {
dirs.push("/home/runner/.local/bin/")
} else if (process.platform === "darwin") {
dirs.push("/usr/local/bin/")
}
// detection using python.sys
const base_exec_prefix = (await getExecOutput(`${python} -c "import sys;print(sys.base_exec_prefix);"`)).stdout.trim()
dirs.push(join(base_exec_prefix, "Scripts"), join(base_exec_prefix, "Scripts", "bin"))
// exclude the non existing ones
dirs = dirs.filter((dir) => existsSync(dir))
// add the directories to the path
await Promise.all(dirs.map((dir) => addPath(dir)))
// the last directory is the bin directory (not empty)
const foundBinDir = dirs.pop()
if (foundBinDir === undefined) {
warning("The binary directory for pip dependencies could not be found")
}
return foundBinDir!
}

View File

@ -1,12 +1,9 @@
/* eslint-disable require-atomic-updates */ /* eslint-disable require-atomic-updates */
import { getExecOutput } from "@actions/exec"
import execa from "execa" import execa from "execa"
import which from "which" import which from "which"
import { info } from "@actions/core" import { info } from "@actions/core"
import { addPath } from "../env/addEnv" import { addPythonBaseExecPrefix, setupPython } from "../../python/python"
import { setupPython } from "../../python/python"
import { isBinUptoDate } from "./version" import { isBinUptoDate } from "./version"
import { join } from "patha"
import { getVersion } from "../../versions/versions" import { getVersion } from "../../versions/versions"
import { InstallationInfo } from "./setupBin" import { InstallationInfo } from "./setupBin"
import { setupAptPack } from "./setupAptPack" import { setupAptPack } from "./setupAptPack"
@ -65,17 +62,8 @@ export async function setupPipPack(name: string, version?: string): Promise<Inst
}) })
if (binDir === undefined) { if (binDir === undefined) {
binDir = await addPythonBaseExecPrefix() binDir = await addPythonBaseExecPrefix(python)
} }
return { binDir } return { binDir }
} }
async function addPythonBaseExecPrefix() {
const base_exec_prefix = join(
(await getExecOutput(`${python} -c "import sys;print(sys.base_exec_prefix);"`)).stdout.trim(),
"Scripts"
)
await addPath(base_exec_prefix)
return base_exec_prefix
}