Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
import { access, readFile } from "node:fs/promises";
|
|
import { dirname, join } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { spawnSync } from "node:child_process";
|
|
|
|
if (process.platform === "win32") {
|
|
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
const runtimeRoot = join(scriptDir, "..", "build", "managed-posix-shell");
|
|
const metadataPath = join(runtimeRoot, "runtime.json");
|
|
|
|
if (!(await hasPreparedRuntime(metadataPath, runtimeRoot))) {
|
|
const vendorScript = join(scriptDir, "vendor-managed-posix-shell.mjs");
|
|
const result = spawnSync(
|
|
process.execPath,
|
|
[vendorScript, "--platform=windows-amd64"],
|
|
{ stdio: "inherit", windowsHide: true }
|
|
);
|
|
if (result.status !== 0) {
|
|
throw result.error ?? new Error("prepare managed POSIX shell failed");
|
|
}
|
|
}
|
|
}
|
|
|
|
async function hasPreparedRuntime(metadataPath, runtimeRoot) {
|
|
try {
|
|
const metadata = JSON.parse(await readFile(metadataPath, "utf8"));
|
|
if (
|
|
metadata.schemaVersion !== "tutti.managed-posix-shell.v1" ||
|
|
typeof metadata.executable !== "string" ||
|
|
metadata.executable.trim() !== metadata.executable ||
|
|
metadata.executable === ""
|
|
) {
|
|
return false;
|
|
}
|
|
await access(join(runtimeRoot, metadata.executable));
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|