mirror of
https://github.com/actions-rs/toolchain.git
synced 2025-08-14 21:05:05 +00:00
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import TOML from "@iarna/toml";
|
|
import { ToolchainOptions } from "./args";
|
|
import { existsSync, readFileSync } from "fs";
|
|
import { debug } from "@actions/core";
|
|
|
|
interface RustToolchainFileToolchain {
|
|
channel: string;
|
|
targets: string[] | undefined;
|
|
profile: string | undefined;
|
|
components?: string[] | undefined;
|
|
}
|
|
|
|
interface RustToolchainFile {
|
|
toolchain: RustToolchainFileToolchain;
|
|
}
|
|
|
|
export function parseToolchainFile(
|
|
overrideFile: string
|
|
): ToolchainOptions | null {
|
|
if (!existsSync(overrideFile)) {
|
|
if (existsSync(`${overrideFile}.toml`)) {
|
|
overrideFile = `${overrideFile}.toml`;
|
|
} else {
|
|
debug("Repository does not have a rust-toolchain file");
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const rustToolchainFile = readFileSync(overrideFile, {
|
|
encoding: "utf-8",
|
|
flag: "r",
|
|
}).trim();
|
|
|
|
try {
|
|
debug(`using toolchain from rust-toolchain file: ${rustToolchainFile}`);
|
|
|
|
// eslint-disable-next-line
|
|
const parsedToolchain = (TOML.parse(
|
|
rustToolchainFile
|
|
) as unknown) as RustToolchainFile;
|
|
|
|
return {
|
|
name: parsedToolchain.toolchain.channel,
|
|
target: parsedToolchain.toolchain.targets?.[0],
|
|
profile: parsedToolchain.toolchain.profile,
|
|
components: parsedToolchain.toolchain.components,
|
|
};
|
|
} catch (err) {
|
|
debug(
|
|
`using toolchain from old style rust-toolchain file: ${rustToolchainFile}`
|
|
);
|
|
|
|
return {
|
|
name: rustToolchainFile,
|
|
default: true,
|
|
override: false,
|
|
};
|
|
}
|
|
}
|