Spaces:
Running
Running
| const SOURCE_DIR = "backup/exocore-ide"; | |
| const OUT_BINARY = "exocore-ide"; | |
| const PTY_DIR = "tools/pty-helper"; | |
| const PTY_OUT = "tools/pty-helper/bin/pty-helper-linux-x64"; | |
| const srcExists = await Deno.stat(`${SOURCE_DIR}/index.tsx`).then(() => true).catch(() => false); | |
| if (!srcExists) { | |
| console.error(`[build] Source not found at ${SOURCE_DIR}/`); | |
| console.error("Expected: backup/exocore-ide/index.tsx"); | |
| Deno.exit(1); | |
| } | |
| // Step 1: Compile Rust PTY helper | |
| console.log(`[build] Compiling PTY helper (tools/pty-helper/) ...`); | |
| try { | |
| const ptyBuild = new Deno.Command("cargo", { | |
| args: ["build", "--release"], | |
| cwd: PTY_DIR, | |
| stdout: "inherit", | |
| stderr: "inherit", | |
| }); | |
| const ptyCode = (await ptyBuild.spawn().output()).code; | |
| if (ptyCode !== 0) { | |
| console.warn(`[build] PTY helper build failed (exit ${ptyCode}). Continuing without it.`); | |
| } else { | |
| await Deno.mkdir("tools/pty-helper/bin", { recursive: true }); | |
| await Deno.copyFile(`${PTY_DIR}/target/release/pty-helper`, PTY_OUT); | |
| console.log(`[build] PTY helper built: ${PTY_OUT}`); | |
| } | |
| } catch (err) { | |
| console.warn(`[build] PTY helper unavailable (${err.message}). Continuing without it.`); | |
| } | |
| // Copy PTY helper into source dir so it's included in the binary | |
| const PTY_HELPER_BIN = "pty-helper-linux-x64"; | |
| if (await Deno.stat(PTY_OUT).then(() => true).catch(() => false)) { | |
| await Deno.copyFile(PTY_OUT, `${SOURCE_DIR}/${PTY_HELPER_BIN}`); | |
| console.log(`[build] PTY helper bundled: ${SOURCE_DIR}/${PTY_HELPER_BIN}`); | |
| } | |
| // Step 2: Compile Deno binary (from within SOURCE_DIR so --include uses bare dir names) | |
| console.log(`[build] Compiling ${SOURCE_DIR}/index.tsx \u2192 ${OUT_BINARY} ...`); | |
| const denoCmd = new Deno.Command("deno", { | |
| args: [ | |
| "compile", | |
| "--no-check", | |
| "--config", "../../deno.json", | |
| "--allow-net", | |
| "--allow-read", | |
| "--allow-write", | |
| "--allow-run", | |
| "--allow-env", | |
| "--allow-sys", | |
| "--unstable-sloppy-imports", | |
| "--unstable-node-globals", | |
| "--include", "static-pages", | |
| "--include", "templates", | |
| "--include", "extension", | |
| "--include", "scripts", | |
| "--include", "routes", | |
| "--include", PTY_HELPER_BIN, | |
| "--output", `../../${OUT_BINARY}`, | |
| "index.tsx", | |
| ], | |
| cwd: SOURCE_DIR, | |
| stdout: "piped", | |
| stderr: "piped", | |
| }); | |
| const { code } = await denoCmd.spawn().output(); | |
| if (code !== 0) { | |
| console.error(`[build] Deno compile failed with exit code ${code}`); | |
| Deno.exit(code); | |
| } | |
| await Deno.chmod(OUT_BINARY, 0o755); | |
| const stats = await Deno.stat(OUT_BINARY); | |
| const sizeMB = (stats.size / 1024 / 1024).toFixed(1); | |
| console.log(`[build] Done: ${OUT_BINARY} (${sizeMB} MB)`); | |