kitchen-sink/scripts/check-installed-package.mjs
2026-04-29 14:29:07 -07:00

69 lines
2.6 KiB
JavaScript

#!/usr/bin/env node
import assert from "node:assert/strict";
import { spawnSync } from "node:child_process";
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
const repoRoot = process.cwd();
const tempRoot = mkdtempSync(path.join(tmpdir(), "kitchen-sink-install-"));
const keepTemp = process.env.KEEP_KITCHEN_INSTALL_SMOKE === "1";
let lastStdout = "";
try {
const packDir = path.join(tempRoot, "pack");
mkdirSync(packDir, { recursive: true });
run("npm", ["pack", "--json", "--pack-destination", packDir], { cwd: repoRoot });
const packOutput = JSON.parse(lastStdout);
const tarball = path.join(packDir, packOutput[0].filename);
const projectDir = path.join(tempRoot, "consumer");
mkdirSync(projectDir, { recursive: true });
run("npm", ["init", "-y"], { cwd: tempRoot });
run("npm", ["install", "--prefix", projectDir, "--package-lock=false", "--ignore-scripts", "--no-audit", "--no-fund", tarball], {
cwd: tempRoot,
});
const packageDir = path.join(projectDir, "node_modules", "@openclaw", "kitchen-sink");
const installedPackageJson = JSON.parse(readFileSync(path.join(packageDir, "package.json"), "utf8"));
assert.equal(installedPackageJson.name, "@openclaw/kitchen-sink");
assert.equal(installedPackageJson.version, JSON.parse(readFileSync("package.json", "utf8")).version);
const probeFile = path.join(projectDir, "probe.mjs");
writeFileSync(probeFile, readFileSync(new URL("./fixtures/installed-consumer-probe.mjs", import.meta.url), "utf8"));
run(process.execPath, [probeFile], { cwd: projectDir });
const inspectorBin = path.join(repoRoot, "node_modules", ".bin", "plugin-inspector");
run(inspectorBin, ["check", "--config", "plugin-inspector.config.json", "--no-openclaw", "--runtime", "--mock-sdk"], {
cwd: packageDir,
env: {
...process.env,
PLUGIN_INSPECTOR_EXECUTE_ISOLATED: "1",
},
});
console.log(`Installed package smoke OK: ${installedPackageJson.name}@${installedPackageJson.version}`);
} finally {
if (!keepTemp) {
rmSync(tempRoot, { recursive: true, force: true });
} else {
console.log(`Kept install smoke temp dir: ${tempRoot}`);
}
}
function run(command, args, options = {}) {
const result = spawnSync(command, args, {
cwd: options.cwd,
env: options.env || process.env,
encoding: "utf8",
stdio: ["ignore", "pipe", "pipe"],
});
lastStdout = result.stdout;
if (result.status !== 0) {
process.stdout.write(result.stdout);
process.stderr.write(result.stderr);
process.exit(result.status ?? 1);
}
}