Files
packages/.github/scripts/configure-sccache.js
Gilver d2e74d4b37 fix: sccache setup and toggle (#10028)
* fix: Try and fix sccache toggle...again

Signed-off-by: Gilver <roachy@fyralabs.com>

* Beep

Signed-off-by: Gilver <roachy@fyralabs.com>

* Revert "Beep"

This reverts commit 34ee5aa7fa.

* ?

Signed-off-by: Gilver <roachy@fyralabs.com>

* chore: sccache path

Signed-off-by: Gilver <roachy@fyralabs.com>

* chore: Add back if

Signed-off-by: Gilver <roachy@fyralabs.com>

* The Success

* fix: Reminder to disable autoformatting on Kate again

* feat: sccache summary back

Signed-off-by: Gilver <roachy@fyralabs.com>

---------

Signed-off-by: Gilver <roachy@fyralabs.com>
2026-02-22 11:18:33 -06:00

181 lines
6.0 KiB
JavaScript

// Configure sccache environment variables for GitHub Actions cache integration
//
// This script is still unused until we build terra-sccache with this supported,
// Turns out that Fedora's sccache build has the GHA feature support disabled.
//
// Note: ACTIONS_CACHE_SERVICE_V2 and SCCACHE_GHA_ENABLED are set at workflow level
module.exports = async ({ github, context, core, exec }) => {
// Find sccache path (try which command)
let sccachePath = "/usr/bin/sccache";
try {
const result = await exec.getExecOutput("which", ["sccache"], {
ignoreReturnCode: true,
silent: true,
});
if (result.exitCode === 0 && result.stdout.trim()) {
sccachePath = result.stdout.trim();
core.info(`Found sccache at: ${sccachePath}`);
}
} catch (e) {
core.debug(`Could not find sccache path: ${e.message}`);
}
// Check sccache version
try {
const versionResult = await exec.getExecOutput(sccachePath, ["--version"], {
ignoreReturnCode: true,
silent: true,
});
core.info(`sccache version: ${versionResult.stdout.trim()}`);
} catch (e) {
core.warning(`Could not get sccache version: ${e.message}`);
}
// Enable caching
core.exportVariable("RUSTC_WRAPPER", sccachePath);
core.exportVariable("SCCACHE_GHA_ENABLED", "true");
// Disable Cargo incremental builds to not interfere with caching
core.exportVariable("CARGO_INCREMENTAL", "false");
// Debug: Show what environment variables are available
core.info("=== Environment Variables Diagnostic ===");
core.info(`SCCACHE_GHA_ENABLED: ${process.env.SCCACHE_GHA_ENABLED}`);
core.info(
`ACTIONS_CACHE_SERVICE_V2: ${process.env.ACTIONS_CACHE_SERVICE_V2}`,
);
core.info(
`ACTIONS_RESULTS_URL: ${process.env.ACTIONS_RESULTS_URL ? "SET (length: " + process.env.ACTIONS_RESULTS_URL.length + ")" : "NOT SET"}`,
);
core.info(
`ACTIONS_RUNTIME_TOKEN: ${process.env.ACTIONS_RUNTIME_TOKEN ? "SET (length: " + process.env.ACTIONS_RUNTIME_TOKEN.length + ")" : "NOT SET"}`,
);
core.info(`RUSTC_WRAPPER: ${process.env.RUSTC_WRAPPER}`);
core.info(`SCCACHE_LOG: ${process.env.SCCACHE_LOG}`);
core.info("========================================");
// Export SCCACHE_PATH so it's available to subsequent steps
core.exportVariable("SCCACHE_PATH", sccachePath);
// Expose the GHA cache related variables to make it easier for users to
// integrate with GHA support (from upstream mozilla/sccache-action)
if (process.env.ACTIONS_RESULTS_URL) {
core.exportVariable("ACTIONS_RESULTS_URL", process.env.ACTIONS_RESULTS_URL);
core.info("✓ Exported ACTIONS_RESULTS_URL");
} else {
core.error(
"ACTIONS_RESULTS_URL is not set - GitHub Actions cache WILL NOT work",
);
}
if (process.env.ACTIONS_RUNTIME_TOKEN) {
core.exportVariable(
"ACTIONS_RUNTIME_TOKEN",
process.env.ACTIONS_RUNTIME_TOKEN,
);
core.info("✓ Exported ACTIONS_RUNTIME_TOKEN");
} else {
core.error(
"ACTIONS_RUNTIME_TOKEN is not set - GitHub Actions cache WILL NOT work",
);
}
// Set cache version and restore keys for this specific build matrix
if (process.env.SCCACHE_GHA_VERSION) {
core.exportVariable("SCCACHE_GHA_VERSION", process.env.SCCACHE_GHA_VERSION);
}
if (process.env.SCCACHE_GHA_CACHE_FROM) {
core.exportVariable(
"SCCACHE_GHA_CACHE_FROM",
process.env.SCCACHE_GHA_CACHE_FROM,
);
}
// Check if cache busting is enabled
const inputs =
(github &&
github.context &&
github.context.payload &&
github.context.payload.inputs) ||
{};
const rawBustCache =
inputs.bust_cache ??
inputs.bustCache ??
process.env.INPUT_BUST_CACHE ??
process.env.BUST_CACHE;
let bustCache = false;
if (typeof rawBustCache === "string") {
const v = rawBustCache.toLowerCase().trim();
bustCache = v === "true" || v === "1" || v === "yes";
} else {
bustCache = !!rawBustCache;
}
if (bustCache) {
core.exportVariable("SCCACHE_BUST_CACHE", "true");
core.exportVariable("SCCACHE_RECACHE", "1");
core.info("SCCACHE_RECACHE enabled because bust_cache is true");
}
// Stop any running sccache daemon so it picks up the new environment variables
core.info("Stopping any running sccache daemon to pick up configuration...");
try {
await exec.exec(sccachePath, ["--stop-server"], {
ignoreReturnCode: true,
});
core.info("✓ sccache daemon stopped successfully");
} catch (e) {
core.debug(
`Could not stop sccache daemon (it may not be running): ${e.message}`,
);
}
// Verify sccache can see the GHA environment variables by starting server with explicit env
core.info("Starting sccache server with GHA environment variables...");
const sccacheEnv = {
...process.env,
SCCACHE_GHA_ENABLED: process.env.SCCACHE_GHA_ENABLED || "on",
ACTIONS_CACHE_SERVICE_V2: process.env.ACTIONS_CACHE_SERVICE_V2 || "on",
};
try {
await exec.exec(sccachePath, ["--start-server"], {
ignoreReturnCode: true,
env: sccacheEnv,
});
core.info("✓ sccache server started");
} catch (e) {
core.warning(`Could not start sccache server: ${e.message}`);
}
// Show the current sccache configuration
core.info("Verifying sccache configuration:");
try {
const statsResult = await exec.getExecOutput(
sccachePath,
["--show-stats"],
{
ignoreReturnCode: true,
env: sccacheEnv,
},
);
// Check if it's using GitHub Actions cache
if (statsResult.stdout.includes("GitHub Actions")) {
core.info("✓ sccache is configured to use GitHub Actions cache");
} else if (statsResult.stdout.includes("Local disk")) {
core.error(
"✗ sccache is using Local disk cache instead of GitHub Actions cache!",
);
core.error(
"This means SCCACHE_GHA_ENABLED or required env vars are not being recognized.",
);
core.info("Stats output:");
core.info(statsResult.stdout);
}
} catch (e) {
core.debug(`Could not show sccache stats: ${e.message}`);
}
};