Install rustup.

This commit is contained in:
Miles Johnson 2023-08-01 15:14:21 -07:00
parent c5f1dc6e9e
commit b00fdf0c6c
7 changed files with 46 additions and 12 deletions

View file

@ -7,4 +7,7 @@ module.exports = {
project: 'tsconfig.json', project: 'tsconfig.json',
tsconfigRootDir: __dirname, tsconfigRootDir: __dirname,
}, },
rules: {
'unicorn/prefer-top-level-await': 'off',
},
}; };

View file

@ -1,5 +1,6 @@
# 1.0.0 # 1.0.0
- Will now install `rustup` if it does not exist in the environment.
- Added musl support to `cargo-binstall`. - Added musl support to `cargo-binstall`.
# 0.6.0 # 0.6.0

View file

@ -147,11 +147,6 @@ Outside of being evergreen, this action also supports the following features:
- Assumes `rustup`, `cargo`, and other commands are available globally. This allows you to use them - Assumes `rustup`, `cargo`, and other commands are available globally. This allows you to use them
directly in a `run` command, without having to use `actions-rs/cargo`. directly in a `run` command, without having to use `actions-rs/cargo`.
However, this action _does not_:
- Install `rustup` if it does not exist, while `actions-rs` will. This is typically fine if using
GitHub provided runners as all Rust tooling comes pre-installed.
### `dtolnay/rust-toolchain` ### `dtolnay/rust-toolchain`
Our action is very similar to theirs, which was a great implementation reference, but our action Our action is very similar to theirs, which was a great implementation reference, but our action

View file

@ -1,8 +1,39 @@
import path from 'path'; import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import * as core from '@actions/core'; 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, installBins, restoreCache } from './src/cargo'; import { CARGO_HOME, installBins, restoreCache } from './src/cargo';
import { installToolchain } from './src/rust'; 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 scriptPath = path.join(os.tmpdir(), 'rustup-init');
const script = await tc.downloadTool(
process.platform === 'win32' ? 'https://win.rustup.rs' : 'https://sh.rustup.rs',
scriptPath,
);
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() { async function run() {
core.info('Setting cargo environment variables'); core.info('Setting cargo environment variables');
@ -14,6 +45,7 @@ async function run() {
core.addPath(path.join(CARGO_HOME, 'bin')); core.addPath(path.join(CARGO_HOME, 'bin'));
try { try {
await installRustup();
await installToolchain(); await installToolchain();
await installBins(); await installBins();

View file

@ -34,5 +34,8 @@
"prettier-config-moon": "^1.1.2", "prettier-config-moon": "^1.1.2",
"tsconfig-moon": "^1.3.0", "tsconfig-moon": "^1.3.0",
"typescript": "^5.1.6" "typescript": "^5.1.6"
},
"engines": {
"node": ">=16.0.0"
} }
} }

View file

@ -1,7 +1,7 @@
import crypto from 'crypto'; import crypto from 'node:crypto';
import fs from 'fs'; import fs from 'node:fs';
import os from 'os'; import os from 'node:os';
import path from 'path'; import path from 'node:path';
import * as cache from '@actions/cache'; import * as cache from '@actions/cache';
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as exec from '@actions/exec'; import * as exec from '@actions/exec';

View file

@ -1,7 +1,7 @@
/* eslint-disable import/no-mutable-exports */ /* eslint-disable import/no-mutable-exports */
import fs from 'fs'; import fs from 'node:fs';
import path from 'path'; import path from 'node:path';
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as exec from '@actions/exec'; import * as exec from '@actions/exec';
import TOML from '@ltd/j-toml'; import TOML from '@ltd/j-toml';