69 lines
2.6 KiB
JavaScript
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);
|
|
}
|
|
}
|