Update backend process spawning in Electron by adding error handling for failed process initiation and allow overriding the Python command in the build script for cross-platform compatibility.
Some checks failed
CI / test-backend (push) Successful in 4s
OSV-Scanner Scheduled Scan / scan-scheduled (push) Successful in 10s
CI / lint (push) Successful in 9m42s
CI / build-frontend (push) Successful in 9m49s
CI / test-lang (push) Successful in 9m45s
Tests / test (push) Successful in 13m18s
Build Test / Build and Test (push) Failing after 32m38s

This commit is contained in:
2026-01-10 18:35:43 -06:00
parent 8489f4531f
commit eff722ee18
2 changed files with 16 additions and 3 deletions

View File

@@ -539,11 +539,15 @@ app.whenReady().then(async () => {
}
// spawn executable
exeChildProcess = await spawn(exe, [
exeChildProcess = spawn(exe, [
...requiredArguments, // always provide required arguments
...userProvidedArguments, // also include any user provided arguments
]);
if (!exeChildProcess || !exeChildProcess.pid) {
throw new Error("Failed to start backend process (no PID).");
}
// log stdout
var stdoutLines = [];
exeChildProcess.stdout.setEncoding("utf8");

View File

@@ -49,8 +49,11 @@ try {
const buildDirRelative = isWin ? "build/exe/win32" : "build/exe/linux";
const buildDir = path.join(__dirname, "..", buildDirRelative);
// Allow overriding the python command (e.g., to use wine python for cross-builds)
const pythonCmd = process.env.PYTHON_CMD || "poetry run python";
console.log(
`Building backend for ${platform} (target: ${targetName}, output: ${buildDirRelative}) with cx_Freeze...`
`Building backend for ${platform} (target: ${targetName}, output: ${buildDirRelative}) using: ${pythonCmd}`
);
const env = {
@@ -58,7 +61,13 @@ try {
CX_FREEZE_TARGET_NAME: targetName,
CX_FREEZE_BUILD_EXE: buildDirRelative,
};
const result = spawnSync("poetry", ["run", "python", "cx_setup.py", "build"], {
// Split pythonCmd to handle arguments like "wine python"
const cmdParts = pythonCmd.split(" ");
const cmd = cmdParts[0];
const args = [...cmdParts.slice(1), "cx_setup.py", "build"];
const result = spawnSync(cmd, args, {
stdio: "inherit",
shell: false,
env: env,