Skip to content

Commit

Permalink
Merge pull request #217 from PyO3/find-rust-toolchain
Browse files Browse the repository at this point in the history
Also find `rust-toolchain` file in parent directories
  • Loading branch information
messense committed Oct 6, 2023
2 parents 3392822 + bdcb2cc commit 6fcf55f
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 47 deletions.
62 changes: 39 additions & 23 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11496,7 +11496,7 @@ function getRustTarget(args) {
}
return ((_c = TARGET_ALIASES[process.platform]) === null || _c === void 0 ? void 0 : _c[target]) || target;
}
function getManifestDir(args) {
function getWorkingDirectory() {
const workspace = process.env.GITHUB_WORKSPACE;
let workdir = core.getInput('working-directory');
if (workdir.length > 0) {
Expand All @@ -11505,6 +11505,10 @@ function getManifestDir(args) {
else {
workdir = workspace;
}
return workdir;
}
function getManifestDir(args) {
const workdir = getWorkingDirectory();
const manifestPath = getCliValue(args, '--manifest-path') || getCliValue(args, '-m');
return manifestPath ? path.dirname(path.join(workdir, manifestPath)) : workdir;
}
Expand All @@ -11518,21 +11522,37 @@ async function getRustToolchain(args) {
if (rustToolchain.length > 0) {
return rustToolchain;
}
const root = process.env.GITHUB_WORKSPACE;
const manifestDir = getManifestDir(args);
const rustToolchainToml = path.join(manifestDir, 'rust-toolchain.toml');
if ((0, fs_1.existsSync)(rustToolchainToml)) {
const content = await fs_1.promises.readFile(rustToolchainToml);
rustToolchain = parseRustToolchain(content.toString());
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain.toml `);
}
else if ((0, fs_1.existsSync)(path.join(manifestDir, 'rust-toolchain'))) {
rustToolchain = (await fs_1.promises.readFile(path.join(manifestDir, 'rust-toolchain')))
.toString()
.trim();
if (rustToolchain.includes('[toolchain]')) {
rustToolchain = parseRustToolchain(rustToolchain);
let currentDir = manifestDir;
while (true) {
const toolchainToml = path.join(currentDir, 'rust-toolchain.toml');
const toolchain = path.join(currentDir, 'rust-toolchain');
if ((0, fs_1.existsSync)(toolchainToml)) {
const content = await fs_1.promises.readFile(toolchainToml);
rustToolchain = parseRustToolchain(content.toString());
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain.toml `);
break;
}
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain `);
else {
core.debug(`${toolchainToml} doesn't exist`);
}
if ((0, fs_1.existsSync)(toolchain)) {
rustToolchain = (await fs_1.promises.readFile(toolchain)).toString().trim();
if (rustToolchain.includes('[toolchain]')) {
rustToolchain = parseRustToolchain(rustToolchain);
}
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain `);
break;
}
else {
core.debug(`${toolchain} doesn't exist`);
}
if (currentDir === root) {
core.debug(`No rust-toolchain.toml or rust-toolchain found inside ${root}`);
break;
}
currentDir = path.dirname(currentDir);
}
return rustToolchain;
}
Expand Down Expand Up @@ -11744,10 +11764,11 @@ async function dockerBuild(container, maturinRelease, args) {
'echo "::group::Install Rust"',
`which rustup > /dev/null || curl --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain ${rustToolchain}`,
'export PATH="$HOME/.cargo/bin:$PATH"',
`echo "Install Rust toolchain ${rustToolchain}"`,
`rustup override set ${rustToolchain}`,
`rustup component add llvm-tools-preview || true`,
'echo "::endgroup::"',
'export PATH="$PATH:/opt/python/cp37-cp37m/bin:/opt/python/cp38-cp38/bin:/opt/python/cp39-cp39/bin:/opt/python/cp310-cp310/bin:/opt/python/cp311-cp311/bin"',
'export PATH="$PATH:/opt/python/cp37-cp37m/bin:/opt/python/cp38-cp38/bin:/opt/python/cp39-cp39/bin:/opt/python/cp310-cp310/bin:/opt/python/cp311-cp311/bin:/opt/python/cp312-cp312/bin"',
'echo "::group::Install maturin"',
`curl -L ${url} | tar -xz -C /usr/local/bin`,
'maturin --version || true',
Expand Down Expand Up @@ -11814,13 +11835,7 @@ async function dockerBuild(container, maturinRelease, args) {
dockerEnvs.push(env);
}
}
let workdir = core.getInput('working-directory');
if (workdir.length > 0) {
workdir = path.join(workspace, workdir);
}
else {
workdir = workspace;
}
const workdir = getWorkingDirectory();
const dockerVolumes = [];
const ssh_auth_sock = process.env.SSH_AUTH_SOCK;
if (ssh_auth_sock) {
Expand Down Expand Up @@ -11927,11 +11942,12 @@ async function hostBuild(maturinRelease, args) {
const target = getRustTarget(args);
const rustToolchain = await getRustToolchain(args);
const rustupComponents = core.getInput('rustup-components');
const workdir = core.getInput('working-directory') || process.cwd();
const workdir = getWorkingDirectory();
const sccache = core.getBooleanInput('sccache');
const isUniversal2 = args.includes('--universal2') || target === 'universal2-apple-darwin';
core.startGroup('Install Rust target');
if (rustToolchain.length > 0) {
core.info(`Installing Rust toolchain ${rustToolchain}`);
await exec.exec('rustup', ['override', 'set', rustToolchain]);
await exec.exec('rustup', ['component', 'add', 'llvm-tools-preview'], {
ignoreReturnCode: true
Expand Down
66 changes: 42 additions & 24 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ function getRustTarget(args: string[]): string {
return TARGET_ALIASES[process.platform]?.[target] || target
}

function getManifestDir(args: string[]): string {
function getWorkingDirectory(): string {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const workspace = process.env.GITHUB_WORKSPACE!
let workdir = core.getInput('working-directory')
Expand All @@ -184,6 +184,11 @@ function getManifestDir(args: string[]): string {
} else {
workdir = workspace
}
return workdir
}

function getManifestDir(args: string[]): string {
const workdir = getWorkingDirectory()
const manifestPath =
getCliValue(args, '--manifest-path') || getCliValue(args, '-m')
return manifestPath ? path.dirname(path.join(workdir, manifestPath)) : workdir
Expand All @@ -200,22 +205,39 @@ async function getRustToolchain(args: string[]): Promise<string> {
if (rustToolchain.length > 0) {
return rustToolchain
}
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const root = process.env.GITHUB_WORKSPACE!
const manifestDir = getManifestDir(args)
const rustToolchainToml = path.join(manifestDir, 'rust-toolchain.toml')
if (existsSync(rustToolchainToml)) {
const content = await fs.readFile(rustToolchainToml)
rustToolchain = parseRustToolchain(content.toString())
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain.toml `)
} else if (existsSync(path.join(manifestDir, 'rust-toolchain'))) {
rustToolchain = (
await fs.readFile(path.join(manifestDir, 'rust-toolchain'))
)
.toString()
.trim()
if (rustToolchain.includes('[toolchain]')) {
rustToolchain = parseRustToolchain(rustToolchain)
let currentDir = manifestDir
// eslint-disable-next-line no-constant-condition
while (true) {
const toolchainToml = path.join(currentDir, 'rust-toolchain.toml')
const toolchain = path.join(currentDir, 'rust-toolchain')
if (existsSync(toolchainToml)) {
const content = await fs.readFile(toolchainToml)
rustToolchain = parseRustToolchain(content.toString())
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain.toml `)
break
} else {
core.debug(`${toolchainToml} doesn't exist`)
}
if (existsSync(toolchain)) {
rustToolchain = (await fs.readFile(toolchain)).toString().trim()
if (rustToolchain.includes('[toolchain]')) {
rustToolchain = parseRustToolchain(rustToolchain)
}
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain `)
break
} else {
core.debug(`${toolchain} doesn't exist`)
}
core.info(`Found Rust toolchain ${rustToolchain} in rust-toolchain `)
if (currentDir === root) {
core.debug(
`No rust-toolchain.toml or rust-toolchain found inside ${root}`
)
break
}
currentDir = path.dirname(currentDir)
}
return rustToolchain
}
Expand Down Expand Up @@ -494,11 +516,12 @@ async function dockerBuild(
'echo "::group::Install Rust"',
`which rustup > /dev/null || curl --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain ${rustToolchain}`,
'export PATH="$HOME/.cargo/bin:$PATH"',
`echo "Install Rust toolchain ${rustToolchain}"`,
`rustup override set ${rustToolchain}`,
`rustup component add llvm-tools-preview || true`,
'echo "::endgroup::"',
// Add all supported python versions to PATH
'export PATH="$PATH:/opt/python/cp37-cp37m/bin:/opt/python/cp38-cp38/bin:/opt/python/cp39-cp39/bin:/opt/python/cp310-cp310/bin:/opt/python/cp311-cp311/bin"',
'export PATH="$PATH:/opt/python/cp37-cp37m/bin:/opt/python/cp38-cp38/bin:/opt/python/cp39-cp39/bin:/opt/python/cp310-cp310/bin:/opt/python/cp311-cp311/bin:/opt/python/cp312-cp312/bin"',
// Install maturin
'echo "::group::Install maturin"',
`curl -L ${url} | tar -xz -C /usr/local/bin`,
Expand Down Expand Up @@ -601,13 +624,7 @@ async function dockerBuild(
}
}

let workdir = core.getInput('working-directory')
if (workdir.length > 0) {
workdir = path.join(workspace, workdir)
} else {
workdir = workspace
}

const workdir = getWorkingDirectory()
const dockerVolumes = []

// forward ssh agent
Expand Down Expand Up @@ -744,13 +761,14 @@ async function hostBuild(
const target = getRustTarget(args)
const rustToolchain = await getRustToolchain(args)
const rustupComponents = core.getInput('rustup-components')
const workdir = core.getInput('working-directory') || process.cwd()
const workdir = getWorkingDirectory()
const sccache = core.getBooleanInput('sccache')
const isUniversal2 =
args.includes('--universal2') || target === 'universal2-apple-darwin'

core.startGroup('Install Rust target')
if (rustToolchain.length > 0) {
core.info(`Installing Rust toolchain ${rustToolchain}`)
await exec.exec('rustup', ['override', 'set', rustToolchain])
await exec.exec('rustup', ['component', 'add', 'llvm-tools-preview'], {
ignoreReturnCode: true
Expand Down

0 comments on commit 6fcf55f

Please sign in to comment.