summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-25 10:49:05 +0100
committerRory& <root@rory.gay>2026-02-25 10:49:05 +0100
commit0a1e4e9d6b9da8086521534d0dca25f83fc8a5f3 (patch)
tree44f1bc3415e144baabb24987e1a65fe5283eaf6e /src/util
parentdisable toJSON for read states? (diff)
downloadserver-ts-0a1e4e9d6b9da8086521534d0dca25f83fc8a5f3.tar.xz
Add /_spacebar/api/version - resolves #1222
Diffstat (limited to 'src/util')
-rw-r--r--src/util/util/Version.ts47
-rw-r--r--src/util/util/index.ts1
2 files changed, 48 insertions, 0 deletions
diff --git a/src/util/util/Version.ts b/src/util/util/Version.ts
new file mode 100644

index 00000000..2d7c4b56 --- /dev/null +++ b/src/util/util/Version.ts
@@ -0,0 +1,47 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2026 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import path from "path"; +import fs from "fs"; +import { execSync } from "child_process"; +import { red } from "picocolors"; + +export function getRevInfoOrFail(): { rev: string | null; lastModified: number } { + const rootDir = path.join(__dirname, "../../../"); + // sanity check + if (!fs.existsSync(path.join(rootDir, "package.json"))) { + console.log(red("Error: Cannot find package.json in root directory. Are you running from the correct location?")); + } + + // use .rev file if it exists + if (fs.existsSync(path.join(rootDir, ".rev"))) { + return JSON.parse(fs.readFileSync(path.join(rootDir, ".rev"), "utf-8")); + } + + // fall back to invoking git + try { + const rev = execSync(`git -C "${rootDir}" rev-parse HEAD`).toString().trim(); + const lastModified = Number(execSync(`git -C "${rootDir}" log -1 --format=%cd --date=unix`).toString().trim()); + return { + rev, + lastModified, + }; + } catch (e) { + return { rev: null, lastModified: 0 }; + } +} diff --git a/src/util/util/index.ts b/src/util/util/index.ts
index aac4e3c0..4c243ade 100644 --- a/src/util/util/index.ts +++ b/src/util/util/index.ts
@@ -55,3 +55,4 @@ export * from "../../schemas/HelperTypes"; export * from "./extensions"; export * from "./Random"; export * from "./Url"; +export * from "./Version";