Files
scriptc/tests/harness/libnode.ts
T
Malte UblandClaude Opus 5.5 5f3e97998d Merge the macOS island fixes of ni/1-libnode-loader
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>
2026-10-26 12:50:39 -07:00

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;
}