From 02bf0dd8622d596c45aa51c0a616952e92237e08 Mon Sep 17 00:00:00 2001 From: Sai Shankar Date: Tue, 17 Mar 2026 09:33:23 +0530 Subject: [PATCH 1/2] add app version label --- server/src/__tests__/health.test.ts | 3 ++- server/src/routes/health.ts | 4 +++- server/src/version.ts | 10 ++++++++++ ui/src/api/health.ts | 1 + ui/src/components/Layout.tsx | 6 ++++++ 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 server/src/version.ts diff --git a/server/src/__tests__/health.test.ts b/server/src/__tests__/health.test.ts index 5583955f..1511b95e 100644 --- a/server/src/__tests__/health.test.ts +++ b/server/src/__tests__/health.test.ts @@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest"; import express from "express"; import request from "supertest"; import { healthRoutes } from "../routes/health.js"; +import { serverVersion } from "../version.js"; describe("GET /health", () => { const app = express(); @@ -10,6 +11,6 @@ describe("GET /health", () => { it("returns 200 with status ok", async () => { const res = await request(app).get("/health"); expect(res.status).toBe(200); - expect(res.body).toEqual({ status: "ok" }); + expect(res.body).toEqual({ status: "ok", version: serverVersion }); }); }); diff --git a/server/src/routes/health.ts b/server/src/routes/health.ts index ddc7c441..59897a89 100644 --- a/server/src/routes/health.ts +++ b/server/src/routes/health.ts @@ -3,6 +3,7 @@ import type { Db } from "@paperclipai/db"; import { and, count, eq, gt, isNull, sql } from "drizzle-orm"; import { instanceUserRoles, invites } from "@paperclipai/db"; import type { DeploymentExposure, DeploymentMode } from "@paperclipai/shared"; +import { serverVersion } from "../version.js"; export function healthRoutes( db?: Db, @@ -22,7 +23,7 @@ export function healthRoutes( router.get("/", async (_req, res) => { if (!db) { - res.json({ status: "ok" }); + res.json({ status: "ok", version: serverVersion }); return; } @@ -56,6 +57,7 @@ export function healthRoutes( res.json({ status: "ok", + version: serverVersion, deploymentMode: opts.deploymentMode, deploymentExposure: opts.deploymentExposure, authReady: opts.authReady, diff --git a/server/src/version.ts b/server/src/version.ts new file mode 100644 index 00000000..39a16a4c --- /dev/null +++ b/server/src/version.ts @@ -0,0 +1,10 @@ +import { createRequire } from "node:module"; + +type PackageJson = { + version?: string; +}; + +const require = createRequire(import.meta.url); +const pkg = require("../package.json") as PackageJson; + +export const serverVersion = pkg.version ?? "0.0.0"; diff --git a/ui/src/api/health.ts b/ui/src/api/health.ts index cb1b1374..b1573805 100644 --- a/ui/src/api/health.ts +++ b/ui/src/api/health.ts @@ -1,5 +1,6 @@ export type HealthStatus = { status: "ok"; + version?: string; deploymentMode?: "local_trusted" | "authenticated"; deploymentExposure?: "private" | "public"; authReady?: boolean; diff --git a/ui/src/components/Layout.tsx b/ui/src/components/Layout.tsx index 43094b51..5c8f43d6 100644 --- a/ui/src/components/Layout.tsx +++ b/ui/src/components/Layout.tsx @@ -268,6 +268,9 @@ export function Layout() { Documentation + + {health?.version ? `v${health.version}` : "v?.?.?"} +