mirror of
https://github.com/moonrepo/setup-rust.git
synced 2025-04-29 13:30:03 +00:00
Create cache file.
This commit is contained in:
parent
131628d94f
commit
d87f327046
5 changed files with 94 additions and 68 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# 1.1.0
|
||||||
|
|
||||||
|
- Updated dependencies.
|
||||||
|
|
||||||
# 1.0.3
|
# 1.0.3
|
||||||
|
|
||||||
- Include `GITHUB_WORKFLOW` in cache key.
|
- Include `GITHUB_WORKFLOW` in cache key.
|
||||||
|
|
|
@ -9,6 +9,8 @@ inputs:
|
||||||
cache:
|
cache:
|
||||||
description: 'Toggle caching of ~/.cargo/registry and /target/<cache-target> directories.'
|
description: 'Toggle caching of ~/.cargo/registry and /target/<cache-target> directories.'
|
||||||
default: true
|
default: true
|
||||||
|
cache-base:
|
||||||
|
description: 'Base branch or ref to save cache. Other branches and refs will restore from this base.'
|
||||||
cache-target:
|
cache-target:
|
||||||
description: 'Name of the target profile to cache.'
|
description: 'Name of the target profile to cache.'
|
||||||
default: 'debug'
|
default: 'debug'
|
||||||
|
|
3
index.ts
3
index.ts
|
@ -5,7 +5,8 @@ import * as core from '@actions/core';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
import { CARGO_HOME, installBins, restoreCache } from './src/cargo';
|
import { CARGO_HOME } from './src/cache';
|
||||||
|
import { installBins, restoreCache } from './src/cargo';
|
||||||
import { installToolchain } from './src/rust';
|
import { installToolchain } from './src/rust';
|
||||||
|
|
||||||
export async function installRustup() {
|
export async function installRustup() {
|
||||||
|
|
74
src/cache.ts
Normal file
74
src/cache.ts
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import crypto from 'node:crypto';
|
||||||
|
import os from 'node:os';
|
||||||
|
import path from 'node:path';
|
||||||
|
import * as cache from '@actions/cache';
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import * as glob from '@actions/glob';
|
||||||
|
import { RUST_HASH, RUST_VERSION } from './rust';
|
||||||
|
|
||||||
|
export const CARGO_HOME = process.env.CARGO_HOME ?? path.join(os.homedir(), '.cargo');
|
||||||
|
|
||||||
|
export const WORKSPACE_ROOT = process.env.GITHUB_WORKSPACE ?? process.cwd();
|
||||||
|
|
||||||
|
export function isCacheEnabled(): boolean {
|
||||||
|
return core.getBooleanInput('cache') && cache.isFeatureAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isUsingBaseWarmupStrategy(): boolean {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCacheTarget(): string {
|
||||||
|
return core.getInput('cache-target') || 'debug';
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCachePaths(): string[] {
|
||||||
|
return [
|
||||||
|
// ~/.cargo/registry
|
||||||
|
path.join(CARGO_HOME, 'registry'),
|
||||||
|
// /workspace/target/debug
|
||||||
|
path.join(WORKSPACE_ROOT, 'target', getCacheTarget()),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCachePrefixes(): string[] {
|
||||||
|
return [`setup-rustcargo-v1-${process.platform}`, 'setup-rustcargo-v1'];
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getPrimaryCacheKey() {
|
||||||
|
const hasher = crypto.createHash('sha1');
|
||||||
|
|
||||||
|
core.info('Generating cache key');
|
||||||
|
|
||||||
|
core.debug(`Hashing Rust version = ${RUST_VERSION}`);
|
||||||
|
hasher.update(RUST_VERSION);
|
||||||
|
|
||||||
|
core.debug(`Hashing Rust commit hash = ${RUST_HASH}`);
|
||||||
|
hasher.update(RUST_HASH);
|
||||||
|
|
||||||
|
const lockHash = await glob.hashFiles('Cargo.lock');
|
||||||
|
|
||||||
|
core.debug(`Hashing Cargo.lock = ${lockHash}`);
|
||||||
|
hasher.update(lockHash);
|
||||||
|
|
||||||
|
const cacheTarget = getCacheTarget();
|
||||||
|
|
||||||
|
core.debug(`Hashing target profile = ${cacheTarget}`);
|
||||||
|
hasher.update(cacheTarget);
|
||||||
|
|
||||||
|
const workflow = process.env.GITHUB_WORKFLOW;
|
||||||
|
|
||||||
|
if (workflow) {
|
||||||
|
core.debug(`Hashing GITHUB_WORKFLOW = ${workflow}`);
|
||||||
|
hasher.update(workflow);
|
||||||
|
}
|
||||||
|
|
||||||
|
const job = process.env.GITHUB_JOB;
|
||||||
|
|
||||||
|
if (job) {
|
||||||
|
core.debug(`Hashing GITHUB_JOB = ${job}`);
|
||||||
|
hasher.update(job);
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${getCachePrefixes()[0]}-${hasher.digest('hex')}`;
|
||||||
|
}
|
79
src/cargo.ts
79
src/cargo.ts
|
@ -1,6 +1,4 @@
|
||||||
import crypto from 'node:crypto';
|
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import os from 'node:os';
|
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { family } from 'detect-libc';
|
import { family } from 'detect-libc';
|
||||||
import * as cache from '@actions/cache';
|
import * as cache from '@actions/cache';
|
||||||
|
@ -8,14 +6,16 @@ import * as core from '@actions/core';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
import * as glob from '@actions/glob';
|
import * as glob from '@actions/glob';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import {
|
||||||
|
CARGO_HOME,
|
||||||
|
getCachePaths,
|
||||||
|
getCachePrefixes,
|
||||||
|
getCacheTarget,
|
||||||
|
getPrimaryCacheKey,
|
||||||
|
isCacheEnabled,
|
||||||
|
WORKSPACE_ROOT,
|
||||||
|
} from './cache';
|
||||||
import { rmrf } from './fs';
|
import { rmrf } from './fs';
|
||||||
import { RUST_HASH, RUST_VERSION } from './rust';
|
|
||||||
|
|
||||||
export const CARGO_HOME = process.env.CARGO_HOME ?? path.join(os.homedir(), '.cargo');
|
|
||||||
|
|
||||||
export const WORKSPACE_ROOT = process.env.GITHUB_WORKSPACE ?? process.cwd();
|
|
||||||
|
|
||||||
export const CACHE_ENABLED = core.getBooleanInput('cache') && cache.isFeatureAvailable();
|
|
||||||
|
|
||||||
export async function downloadAndInstallBinstall(binDir: string) {
|
export async function downloadAndInstallBinstall(binDir: string) {
|
||||||
core.info('cargo-binstall does not exist, attempting to install');
|
core.info('cargo-binstall does not exist, attempting to install');
|
||||||
|
@ -79,7 +79,7 @@ export async function installBins() {
|
||||||
.map((bin) => bin.trim())
|
.map((bin) => bin.trim())
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
if (CACHE_ENABLED) {
|
if (isCacheEnabled()) {
|
||||||
bins.push('cargo-cache');
|
bins.push('cargo-cache');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,61 +98,6 @@ export async function installBins() {
|
||||||
await exec.exec('cargo', ['binstall', '--no-confirm', '--log-level', 'info', ...bins]);
|
await exec.exec('cargo', ['binstall', '--no-confirm', '--log-level', 'info', ...bins]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCacheTarget(): string {
|
|
||||||
return core.getInput('cache-target') || 'debug';
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getCachePaths(): string[] {
|
|
||||||
return [
|
|
||||||
// ~/.cargo/registry
|
|
||||||
path.join(CARGO_HOME, 'registry'),
|
|
||||||
// /workspace/target/debug
|
|
||||||
path.join(WORKSPACE_ROOT, 'target', getCacheTarget()),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getCachePrefixes(): string[] {
|
|
||||||
return [`setup-rustcargo-v1-${process.platform}`, 'setup-rustcargo-v1'];
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getPrimaryCacheKey() {
|
|
||||||
const hasher = crypto.createHash('sha1');
|
|
||||||
|
|
||||||
core.info('Generating cache key');
|
|
||||||
|
|
||||||
core.debug(`Hashing Rust version = ${RUST_VERSION}`);
|
|
||||||
hasher.update(RUST_VERSION);
|
|
||||||
|
|
||||||
core.debug(`Hashing Rust commit hash = ${RUST_HASH}`);
|
|
||||||
hasher.update(RUST_HASH);
|
|
||||||
|
|
||||||
const lockHash = await glob.hashFiles('Cargo.lock');
|
|
||||||
|
|
||||||
core.debug(`Hashing Cargo.lock = ${lockHash}`);
|
|
||||||
hasher.update(lockHash);
|
|
||||||
|
|
||||||
const cacheTarget = getCacheTarget();
|
|
||||||
|
|
||||||
core.debug(`Hashing target profile = ${cacheTarget}`);
|
|
||||||
hasher.update(cacheTarget);
|
|
||||||
|
|
||||||
const workflow = process.env.GITHUB_WORKFLOW;
|
|
||||||
|
|
||||||
if (workflow) {
|
|
||||||
core.debug(`Hashing GITHUB_WORKFLOW = ${workflow}`);
|
|
||||||
hasher.update(workflow);
|
|
||||||
}
|
|
||||||
|
|
||||||
const job = process.env.GITHUB_JOB;
|
|
||||||
|
|
||||||
if (job) {
|
|
||||||
core.debug(`Hashing GITHUB_JOB = ${job}`);
|
|
||||||
hasher.update(job);
|
|
||||||
}
|
|
||||||
|
|
||||||
return `${getCachePrefixes()[0]}-${hasher.digest('hex')}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function cleanCargoRegistry() {
|
export async function cleanCargoRegistry() {
|
||||||
core.info('Cleaning ~/.cargo before saving');
|
core.info('Cleaning ~/.cargo before saving');
|
||||||
|
|
||||||
|
@ -208,7 +153,7 @@ export async function cleanTargetProfile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function saveCache() {
|
export async function saveCache() {
|
||||||
if (!CACHE_ENABLED) {
|
if (!isCacheEnabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +174,7 @@ export async function saveCache() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function restoreCache() {
|
export async function restoreCache() {
|
||||||
if (!CACHE_ENABLED) {
|
if (!isCacheEnabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue