Enhance build process and server version management
Some checks failed
farmcontrol/farmcontrol-server/pipeline/head There was a failure building this commit

Refactor build-linux-bundle.mjs to include package version and build number from environment variables and package.json. Update headless.js to streamline initialization and improve error handling. Introduce serverVersion.js to centralize version information retrieval, replacing redundant code in localserver.js. Enhance logging in index.js to display build number and version more clearly.
This commit is contained in:
Tom Butcher 2026-07-26 23:27:08 +01:00
parent 4d35df3051
commit 9f927b1ef5
5 changed files with 65 additions and 31 deletions

View File

@ -1,8 +1,20 @@
import { readFileSync } from 'node:fs'
import * as esbuild from 'esbuild' import * as esbuild from 'esbuild'
import { fileURLToPath } from 'node:url' import { fileURLToPath } from 'node:url'
import path from 'node:path' import path from 'node:path'
const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') 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 {}
await esbuild.build({ await esbuild.build({
entryPoints: [path.join(rootDir, 'src/headless.js')], entryPoints: [path.join(rootDir, 'src/headless.js')],
@ -21,7 +33,9 @@ await esbuild.build({
], ],
inject: [path.join(rootDir, 'scripts/import-meta-url.js')], inject: [path.join(rootDir, 'scripts/import-meta-url.js')],
define: { define: {
'import.meta.url': 'import_meta_url' 'import.meta.url': 'import_meta_url',
'process.env.FC_PACKAGE_VERSION': JSON.stringify(packageJson.version),
'process.env.FC_BUILD_NUMBER': JSON.stringify(buildNumber)
}, },
logLevel: 'info' logLevel: 'info'
}) })

View File

@ -1,6 +1,9 @@
import { init } from "./index.js"; process.env.FC_HEADLESS_ENTRY = "1";
init({ headless: true }).catch((err) => { import("./index.js")
console.error(err.message); .then(({ init }) =>
process.exit(1); init({ headless: true }).catch((err) => {
}); console.error(err.message);
process.exit(1);
}),
);

View File

@ -95,9 +95,18 @@ export async function init(options = {}) {
} }
if (isInfo) { if (isInfo) {
const buildNumber =
runningServer.buildNumber ?? runningServer.build ?? "n/a";
logger.info("-----FarmControl Server-----"); logger.info("-----FarmControl Server-----");
logger.info("Version:", "v" + runningServer.version || "n/a"); logger.info(
logger.info("Build:", runningServer.build || "n/a"); "Version:",
runningServer.version ? `v${runningServer.version}` : "n/a",
);
logger.info(
"Build:",
buildNumber === "dev" ? "dev" : `b${buildNumber}`,
);
logger.info( logger.info(
"Authenticated:", "Authenticated:",
runningServer.authenticated == true ? "Yes" : "No", runningServer.authenticated == true ? "Yes" : "No",
@ -167,7 +176,7 @@ const isMainModule =
process.argv[1] && process.argv[1] &&
fileURLToPath(import.meta.url) === path.resolve(process.argv[1]); fileURLToPath(import.meta.url) === path.resolve(process.argv[1]);
if (isMainModule) { if (isMainModule && !process.env.FC_HEADLESS_ENTRY) {
init().catch((err) => { init().catch((err) => {
logger.error(err.message); logger.error(err.message);
process.exit(1); process.exit(1);

View File

@ -1,29 +1,8 @@
import { readFileSync } from "node:fs";
import express from "express"; import express from "express";
import log4js from "log4js"; import log4js from "log4js";
import { notPrompting } from "../utils.js"; import { notPrompting } from "../utils.js";
import { loadConfig } from "../config.js"; import { loadConfig } from "../config.js";
import { getServerVersionInfo } from "../serverVersion.js";
const readJsonFile = (fileUrl) => {
try {
return JSON.parse(readFileSync(fileUrl, "utf8"));
} catch {
return {};
}
};
const packageJsonUrl = new URL("../../package.json", import.meta.url);
const buildInfoUrl = new URL("../buildInfo.json", import.meta.url);
const getServerVersionInfo = () => {
const packageJson = readJsonFile(packageJsonUrl);
const buildInfo = readJsonFile(buildInfoUrl);
return {
version: packageJson.version ?? "dev",
buildNumber: buildInfo.buildNumber ?? "dev",
};
};
export const LOCAL_SERVER_PORT = 47291; export const LOCAL_SERVER_PORT = 47291;

29
src/serverVersion.js Normal file
View File

@ -0,0 +1,29 @@
import { readFileSync } from "node:fs";
const readJsonFile = (fileUrl) => {
try {
return JSON.parse(readFileSync(fileUrl, "utf8"));
} catch {
return {};
}
};
const packageJsonUrl = new URL("../package.json", import.meta.url);
const buildInfoUrl = new URL("./buildInfo.json", import.meta.url);
export const getServerVersionInfo = () => {
if (process.env.FC_PACKAGE_VERSION && process.env.FC_BUILD_NUMBER) {
return {
version: process.env.FC_PACKAGE_VERSION,
buildNumber: process.env.FC_BUILD_NUMBER,
};
}
const packageJson = readJsonFile(packageJsonUrl);
const buildInfo = readJsonFile(buildInfoUrl);
return {
version: packageJson.version ?? "dev",
buildNumber: buildInfo.buildNumber ?? "dev",
};
};