mirror of
https://github.com/moonrepo/setup-rust.git
synced 2025-05-01 22:30:04 +00:00
Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
52e0bc3392 | ||
![]() |
2d9112aa0c | ||
![]() |
1670d14080 | ||
![]() |
dcab3dcf9f |
9 changed files with 2249 additions and 1702 deletions
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
|
@ -10,7 +10,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install -g pnpm
|
||||
- run: pnpm install
|
||||
- run: pnpm run check
|
||||
|
@ -23,7 +23,7 @@ jobs:
|
|||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install -g pnpm
|
||||
- run: pnpm install
|
||||
- run: pnpm run build
|
||||
|
@ -39,7 +39,7 @@ jobs:
|
|||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install -g pnpm
|
||||
- run: pnpm install
|
||||
- run: pnpm run build
|
||||
|
|
2
.github/workflows/publish.yml
vendored
2
.github/workflows/publish.yml
vendored
|
@ -9,7 +9,7 @@ jobs:
|
|||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.release.tag_name }}
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install -g pnpm
|
||||
- run: pnpm install
|
||||
- run: pnpm run build
|
||||
|
|
16
CHANGELOG.md
16
CHANGELOG.md
|
@ -1,3 +1,19 @@
|
|||
# 1.2.2
|
||||
|
||||
- Updated dependencies.
|
||||
|
||||
# 1.2.1
|
||||
|
||||
- Pinned the `cargo-binstall` version to v1.8 to work around the 404 errors in CI.
|
||||
- Added support for the `CARGO_BINSTALL_VERSION` environment variable.
|
||||
|
||||
# 1.2.0
|
||||
|
||||
- Added a `target-dirs` input, allowing the target folders to be specified. Can now cache multiple
|
||||
target folders.
|
||||
- Updated to skip caching a directory if it does not exist, instead of failing.
|
||||
- Updated dependencies.
|
||||
|
||||
# 1.1.0
|
||||
|
||||
- Added a `cache-base` input. When provided, will only save cache on this branch/ref, but will
|
||||
|
|
|
@ -30,6 +30,8 @@ optional.
|
|||
- `inherit-toolchain` - Inherit all toolchain settings from the `rust-toolchain.toml` file. Defaults
|
||||
to `false`.
|
||||
- `targets` - Comma-separated list of additional targets to install.
|
||||
- `target-dirs` - Comma-separated list of target folder paths, relative from the repository root.
|
||||
Defaults to `target`.
|
||||
- `profile` - Profile to install. Defaults to `minimal`.
|
||||
|
||||
## Configuring the Rust toolchain
|
||||
|
|
|
@ -8,7 +8,7 @@ inputs:
|
|||
description: 'Comma-separated list of global binaries to install into Cargo.'
|
||||
cache:
|
||||
description: 'Toggle caching of ~/.cargo/registry and /target/<cache-target> directories.'
|
||||
default: true
|
||||
default: 'true'
|
||||
cache-base:
|
||||
description:
|
||||
'Base branch/ref to save a warmup cache on. Other branches/refs will restore from this base.'
|
||||
|
@ -21,9 +21,12 @@ inputs:
|
|||
description: 'Comma-separated list of additional components to install.'
|
||||
inherit-toolchain:
|
||||
description: 'Inherit all toolchain settings from the rust-toolchain.toml file.'
|
||||
default: false
|
||||
default: 'false'
|
||||
targets:
|
||||
description: 'Comma-separated list of additional targets to install.'
|
||||
target-dirs:
|
||||
description: 'Comma-separated list of target folder paths, relative from the repository root.'
|
||||
default: 'target'
|
||||
profile:
|
||||
description: 'Profile to install. Defaults to "minimal".'
|
||||
outputs:
|
||||
|
|
14
package.json
14
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@moonrepo/setup-rust",
|
||||
"version": "1.0.3",
|
||||
"version": "1.2.2",
|
||||
"description": "A GitHub action for setting up Rust and Cargo.",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
|
@ -16,24 +16,24 @@
|
|||
"author": "Miles Johnson",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/cache": "^3.2.2",
|
||||
"@actions/cache": "^4.0.0",
|
||||
"@actions/core": "^1.10.1",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/glob": "^0.4.0",
|
||||
"@actions/glob": "^0.5.0",
|
||||
"@actions/io": "^1.1.3",
|
||||
"@actions/tool-cache": "^2.0.1",
|
||||
"@ltd/j-toml": "^1.38.0",
|
||||
"detect-libc": "^2.0.2"
|
||||
"detect-libc": "^2.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.9.1",
|
||||
"@types/node": "^20.13.4",
|
||||
"@vercel/ncc": "^0.38.1",
|
||||
"eslint": "^8.53.0",
|
||||
"eslint-config-moon": "^2.0.11",
|
||||
"prettier": "^3.1.0",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-config-moon": "^1.1.2",
|
||||
"tsconfig-moon": "^1.3.0",
|
||||
"typescript": "^5.2.2"
|
||||
"typescript": "^5.4.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
|
|
3853
pnpm-lock.yaml
generated
3853
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
12
src/cache.ts
12
src/cache.ts
|
@ -18,12 +18,22 @@ export function getCacheTarget(): string {
|
|||
return core.getInput('cache-target') || 'debug';
|
||||
}
|
||||
|
||||
export function getTargetPaths(): string[] {
|
||||
const profile = getCacheTarget();
|
||||
const dirs = core.getInput('target-dirs', { required: true }).split(',');
|
||||
|
||||
return dirs
|
||||
.map((dir) => dir.trim())
|
||||
.filter(Boolean)
|
||||
.map((dir) => path.join(WORKSPACE_ROOT, dir, profile));
|
||||
}
|
||||
|
||||
export function getCachePaths(): string[] {
|
||||
return [
|
||||
// ~/.cargo/registry
|
||||
path.join(CARGO_HOME, 'registry'),
|
||||
// /workspace/target/debug
|
||||
path.join(WORKSPACE_ROOT, 'target', getCacheTarget()),
|
||||
...getTargetPaths(),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
39
src/cargo.ts
39
src/cargo.ts
|
@ -17,6 +17,7 @@ import {
|
|||
} from './cache';
|
||||
import { rmrf } from './fs';
|
||||
|
||||
// eslint-disable-next-line complexity
|
||||
export async function downloadAndInstallBinstall(binDir: string) {
|
||||
core.info('cargo-binstall does not exist, attempting to install');
|
||||
|
||||
|
@ -62,7 +63,11 @@ export async function downloadAndInstallBinstall(binDir: string) {
|
|||
throw new Error(`Unsupported platform: ${process.platform}`);
|
||||
}
|
||||
|
||||
const url = `https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-${file}`;
|
||||
// https://github.com/cargo-bins/cargo-binstall/issues/1864
|
||||
const version = process.env.CARGO_BINSTALL_VERSION ?? 'v1.8.0';
|
||||
const url = version === 'latest'
|
||||
? `https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-${file}`
|
||||
: `https://github.com/cargo-bins/cargo-binstall/releases/download/${version}/cargo-binstall-${file}`;
|
||||
const dlPath = await tc.downloadTool(url);
|
||||
|
||||
if (url.endsWith('.zip')) {
|
||||
|
@ -165,12 +170,33 @@ export async function saveCache() {
|
|||
return;
|
||||
}
|
||||
|
||||
const cachePaths = getCachePaths().filter((cachePath) => {
|
||||
if (!fs.existsSync(cachePath)) {
|
||||
core.info(`Cache path ${cachePath} does not exist, skipping`);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
if (cachePaths.length === 0) {
|
||||
core.info('No paths to cache, skipping save entirely');
|
||||
return;
|
||||
}
|
||||
|
||||
await cleanCargoRegistry();
|
||||
await cleanTargetProfile();
|
||||
|
||||
core.info(`Saving cache with key ${primaryKey}`);
|
||||
|
||||
await cache.saveCache(getCachePaths(), primaryKey);
|
||||
core.debug(`Cache key: ${primaryKey}`);
|
||||
core.debug('Cache paths:');
|
||||
|
||||
for (const cachePath of cachePaths) {
|
||||
core.debug(`- ${cachePath}`);
|
||||
}
|
||||
|
||||
await cache.saveCache(cachePaths, primaryKey);
|
||||
}
|
||||
|
||||
export async function restoreCache() {
|
||||
|
@ -181,6 +207,15 @@ export async function restoreCache() {
|
|||
core.info('Attempting to restore cache');
|
||||
|
||||
const primaryKey = await getPrimaryCacheKey();
|
||||
const cachePaths = getCachePaths();
|
||||
|
||||
core.debug(`Cache key: ${primaryKey}`);
|
||||
core.debug('Cache paths:');
|
||||
|
||||
for (const cachePath of cachePaths) {
|
||||
core.debug(`- ${cachePath}`);
|
||||
}
|
||||
|
||||
const cacheKey = await cache.restoreCache(getCachePaths(), primaryKey, getCachePrefixes());
|
||||
|
||||
if (cacheKey) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue