Files
threadcount-community/lib/ops/version.ts
T
ThreadCount 344b1701dd ThreadCount Community edition
Uniform stock management for healthcare linen rooms. Licensed under the GNU AGPL v3.
2026-09-13 08:54:35 +10:00

31 lines
1.3 KiB
TypeScript

import { readFileSync } from "fs";
import path from "path";
/* What is deployed, and what is running. Two different questions.
*
* `.release.json` is written by scripts/deploy.sh just before the build: the sha it pulled, the
* sha it replaced, and when. `NEXT_PUBLIC_RELEASE` is compiled into the bundle by that same build.
* Normally the two agree. When they don't — the file names a newer sha than the running bundle —
* a deploy pulled and built but the process was never restarted, which is the failure the deploy
* script's own health check exists to catch and the console should show anyway. */
export type Version = {
deployed: { sha: string; from: string; at: Date } | null;
running: string | null;
node: string;
uptimeMin: number;
};
export function version(): Version {
let deployed: Version["deployed"] = null;
try {
const j = JSON.parse(readFileSync(path.join(process.cwd(), ".release.json"), "utf8")) as { sha?: string; from?: string; at?: string };
if (j.sha && j.at) deployed = { sha: String(j.sha), from: String(j.from || ""), at: new Date(j.at) };
} catch { /* no file: a box deployed before the script wrote one, or local dev */ }
return {
deployed,
running: process.env.NEXT_PUBLIC_RELEASE || null,
node: process.version,
uptimeMin: Math.floor(process.uptime() / 60),
};
}