mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-01 07:33:12 +08:00
The libnode-linux action becomes .github/actions/libnode, which serves the Linux x64 and macOS lanes: the libnode-packs cache for the runner's platform, else the development pack. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
/* Node island tests need a libnode pack (SCRIPTC_LIBNODE). The Linux x64 and
|
|
* macOS CI test lanes provide one (.github/actions/libnode) and must run
|
|
* these tests, so there a missing pack is a failure, never a skip. Other
|
|
* CI platforms do not provision a pack yet, and a local run without a pack
|
|
* skips. */
|
|
import { readFileSync } from "node:fs";
|
|
|
|
/** `// @requires-libnode` in a corpus program's two-line directive head. */
|
|
export function requiresLibnode(file: string): boolean {
|
|
return readFileSync(file, "utf8")
|
|
.split("\n", 2)
|
|
.some((line) => /^\/\/ @requires-libnode\s*$/.test(line));
|
|
}
|
|
|
|
/** Whether CI must run the Node island tests on this machine. */
|
|
export const libnodeRequired =
|
|
process.env["CI"] !== undefined &&
|
|
process.env["CI"] !== "" &&
|
|
process.env["CI"] !== "false" &&
|
|
((process.platform === "linux" && process.arch === "x64") || process.platform === "darwin");
|
|
|
|
/** The configured pack, or null. Throws where CI requires one. */
|
|
export function libnodePack(): string | null {
|
|
const pack = process.env["SCRIPTC_LIBNODE"];
|
|
if (pack !== undefined && pack !== "") return pack;
|
|
if (libnodeRequired)
|
|
throw new Error(
|
|
"Node island tests need a libnode pack in this CI lane, and SCRIPTC_LIBNODE is not set (.github/actions/libnode provides it)",
|
|
);
|
|
return null;
|
|
}
|