farmcontrol-server/scripts/build-linux-binary.mjs
Tom Butcher 8453e7c7cf Switch package manager and runtime from Node/pnpm to Bun.
Update build scripts, entry points, and packaged-path detection for the new toolchain.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-28 22:03:20 +01:00

71 lines
1.7 KiB
JavaScript

import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import path from "node:path";
const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const packageJson = JSON.parse(
readFileSync(path.join(rootDir, "package.json"), "utf8"),
);
let buildNumber =
process.env.BUILD_NUMBER || process.env.VITE_BUILD_NUMBER || "dev";
try {
const buildInfo = JSON.parse(
readFileSync(path.join(rootDir, "src/buildInfo.json"), "utf8"),
);
buildNumber = buildInfo.buildNumber ?? buildNumber;
} catch {}
const outputDir = path.join(rootDir, "app_dist/linux");
const outputFile = path.join(outputDir, "farmcontrol-server");
await Bun.$`mkdir -p ${outputDir}`;
const result = await Bun.build({
entrypoints: [path.join(rootDir, "src/headless.js")],
outdir: path.join(rootDir, "build/linux-bundle"),
target: "bun",
format: "esm",
external: [
"sharp",
"canvas",
"@napi-rs/canvas",
"pdf-to-img",
"pdfjs-dist",
"@img/*",
"@napi-rs/*",
],
define: {
"process.env.FC_PACKAGE_VERSION": JSON.stringify(packageJson.version),
"process.env.FC_BUILD_NUMBER": JSON.stringify(buildNumber),
},
});
if (!result.success) {
console.error("Bun build failed");
for (const log of result.logs) {
console.error(log);
}
process.exit(1);
}
const compileResult = await Bun.spawn([
"bun",
"build",
"--compile",
"--target=bun-linux-x64",
path.join(rootDir, "build/linux-bundle/headless.js"),
"--outfile",
outputFile,
], {
cwd: rootDir,
stdout: "inherit",
stderr: "inherit",
});
if (compileResult.exitCode !== 0) {
process.exit(compileResult.exitCode ?? 1);
}
console.log(`Linux binary written to ${outputFile}`);