Files
scriptc/scripts/verify-llvm-package-mode.mjs
Chris Tate c7b24413f7 Fix published LLVM helper execute permissions (#430) (#442)
- Declare POSIX helpers as npm bins so package tarballs retain executable mode.
- Check packed helper modes during release and in integration tests.
2026-09-25 15:32:37 -05:00

30 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
import { execFileSync } from "node:child_process";
import { mkdtempSync, readFileSync, rmSync, statSync } from "node:fs";
import { join } from "node:path";
const [tarball, expectedName] = process.argv.slice(2);
if (!tarball || !expectedName) {
throw new Error("usage: verify-llvm-package-mode.mjs <tarball> <package-name>");
}
const work = mkdtempSync("/tmp/scriptc-llvm-package-mode-");
try {
execFileSync("tar", ["-xzf", tarball, "-C", work]);
const root = join(work, "package");
const manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
if (manifest.name !== expectedName) {
throw new Error(`expected ${expectedName} in ${tarball}, found ${manifest.name}`);
}
if (!Object.values(manifest.bin ?? {}).includes("bin/scriptc-llvm-codegen")) {
throw new Error(`${expectedName} must declare the LLVM helper as an npm bin`);
}
const mode = statSync(join(root, "bin", "scriptc-llvm-codegen")).mode & 0o777;
if (mode !== 0o755) {
throw new Error(`${expectedName} LLVM helper has mode ${mode.toString(8)} in ${tarball}, expected 755`);
}
process.stdout.write(`verified ${expectedName} LLVM helper tarball mode 755\n`);
} finally {
rmSync(work, { recursive: true, force: true });
}