Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
const { execFileSync } = require("node:child_process");
|
|
|
|
const ELECTRON_BUILDER_ARCH = {
|
|
0: "ia32",
|
|
1: "x64",
|
|
2: "armv7l",
|
|
3: "arm64",
|
|
4: "universal",
|
|
};
|
|
|
|
function nodePtyArtifacts(projectDir) {
|
|
const releaseDir = path.join(projectDir, "node_modules", "node-pty", "build", "Release");
|
|
return [
|
|
{ source: path.join(releaseDir, "conpty.node"), relative: "conpty.node" },
|
|
{ source: path.join(releaseDir, "conpty", "conpty.dll"), relative: path.join("conpty", "conpty.dll") },
|
|
{ source: path.join(releaseDir, "conpty", "OpenConsole.exe"), relative: path.join("conpty", "OpenConsole.exe") },
|
|
];
|
|
}
|
|
|
|
function rebuildPatchedNodePty({
|
|
projectDir,
|
|
platform,
|
|
arch,
|
|
run = execFileSync,
|
|
exists = fs.existsSync,
|
|
logger = console,
|
|
}) {
|
|
if (platform !== "win32") return false;
|
|
const targetArch = typeof arch === "number" ? ELECTRON_BUILDER_ARCH[arch] : arch;
|
|
if (!targetArch || targetArch === "universal") {
|
|
throw new Error(`[nodePtyConptyPatch] Unsupported Windows architecture: ${String(arch)}`);
|
|
}
|
|
|
|
const rebuildCli = path.join(projectDir, "node_modules", "@electron", "rebuild", "lib", "cli.js");
|
|
logger.log(`[nodePtyConptyPatch] Rebuilding patched node-pty for Windows ${targetArch}`);
|
|
run(process.execPath, [
|
|
rebuildCli,
|
|
"--force",
|
|
"--build-from-source",
|
|
"--only",
|
|
"node-pty",
|
|
"--arch",
|
|
targetArch,
|
|
], {
|
|
cwd: projectDir,
|
|
stdio: "inherit",
|
|
});
|
|
|
|
const nodePtyDir = path.join(projectDir, "node_modules", "node-pty");
|
|
run(process.execPath, [path.join(nodePtyDir, "scripts", "post-install.js")], {
|
|
cwd: projectDir,
|
|
stdio: "inherit",
|
|
env: { ...process.env, npm_config_arch: targetArch },
|
|
});
|
|
|
|
const missingArtifacts = nodePtyArtifacts(projectDir)
|
|
.map(({ source }) => source)
|
|
.filter((filePath) => !exists(filePath));
|
|
if (missingArtifacts.length > 0) {
|
|
throw new Error(
|
|
`[nodePtyConptyPatch] Patched node-pty artifacts missing: ${missingArtifacts.join(", ")}`,
|
|
);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function copyPatchedNodePtyToPackagedApp({ projectDir, resourcesDir, copy = fs.copyFileSync, mkdir = fs.mkdirSync }) {
|
|
const packagedReleaseDir = path.join(
|
|
resourcesDir,
|
|
"app.asar.unpacked",
|
|
"node_modules",
|
|
"node-pty",
|
|
"build",
|
|
"Release",
|
|
);
|
|
const copied = [];
|
|
for (const artifact of nodePtyArtifacts(projectDir)) {
|
|
const destination = path.join(packagedReleaseDir, artifact.relative);
|
|
mkdir(path.dirname(destination), { recursive: true });
|
|
copy(artifact.source, destination);
|
|
copied.push(destination);
|
|
}
|
|
return copied;
|
|
}
|
|
|
|
module.exports = {
|
|
copyPatchedNodePtyToPackagedApp,
|
|
nodePtyArtifacts,
|
|
rebuildPatchedNodePty,
|
|
};
|