mirror of
https://github.com/moonrepo/setup-rust.git
synced 2025-04-19 09:08:43 +00:00
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import fs from 'node:fs';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import * as core from '@actions/core';
|
|
import * as exec from '@actions/exec';
|
|
import * as io from '@actions/io';
|
|
import * as tc from '@actions/tool-cache';
|
|
import { CARGO_HOME } from './src/cache';
|
|
import { installBins, restoreCache } from './src/cargo';
|
|
import { installToolchain } from './src/rust';
|
|
|
|
export async function installRustup() {
|
|
try {
|
|
await io.which('rustup', true);
|
|
return;
|
|
} catch {
|
|
// Doesn't exist
|
|
}
|
|
|
|
core.info('rustup does not exist, attempting to install');
|
|
|
|
const script = await tc.downloadTool(
|
|
process.platform === 'win32' ? 'https://win.rustup.rs' : 'https://sh.rustup.rs',
|
|
path.join(os.tmpdir(), 'rustup-init'),
|
|
);
|
|
|
|
core.info(`Downloaded installation script to ${script}`);
|
|
|
|
// eslint-disable-next-line no-magic-numbers
|
|
await fs.promises.chmod(script, 0o755);
|
|
|
|
await exec.exec(script, ['--default-toolchain', 'none', '-y']);
|
|
|
|
core.info('Installed rustup');
|
|
}
|
|
|
|
async function run() {
|
|
core.info('Setting cargo environment variables');
|
|
|
|
core.exportVariable('CARGO_INCREMENTAL', '0');
|
|
core.exportVariable('CARGO_TERM_COLOR', 'always');
|
|
|
|
core.info('Adding ~/.cargo/bin to PATH');
|
|
|
|
core.addPath(path.join(CARGO_HOME, 'bin'));
|
|
|
|
try {
|
|
await installRustup();
|
|
await installToolchain();
|
|
await installBins();
|
|
|
|
// Restore cache after the toolchain has been installed,
|
|
// as we use the rust version and commit hashes in the cache key!
|
|
await restoreCache();
|
|
} catch (error: unknown) {
|
|
core.setFailed((error as Error).message);
|
|
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
void run();
|