From 4d585a08e2fd41a71d89fb22188d3ece25aceea0 Mon Sep 17 00:00:00 2001 From: zkldi <20380519+zkldi@users.noreply.github.com> Date: Tue, 31 May 2022 18:46:54 +0100 Subject: [PATCH] feat: read version from package.json, read latest commit and read pre-release tags. --- server/package.json | 2 ++ server/pnpm-lock.yaml | 19 ++++++++---- server/src/lib/constants/version.ts | 48 +++++++++++++++++++++++------ 3 files changed, 53 insertions(+), 16 deletions(-) diff --git a/server/package.json b/server/package.json index 1300bf3b2..f182ad490 100644 --- a/server/package.json +++ b/server/package.json @@ -53,6 +53,7 @@ "@aws-sdk/client-s3": "3.49.0", "@aws-sdk/signature-v4-crt": "3.49.0", "@types/bson": "1.0.11", + "@types/semver": "^7.3.9", "@valuabletouch/winston-seq": "1.3.0", "bcryptjs": "2.4.3", "bullmq": "1.68.4", @@ -85,6 +86,7 @@ "rg-stats": "^0.2.0", "rimraf": "3.0.2", "safe-json-stringify": "1.2.0", + "semver": "^7.3.7", "seq-logging": "1.1.1", "tachi-common": "0.12.1", "ts-node": "10.4.0", diff --git a/server/pnpm-lock.yaml b/server/pnpm-lock.yaml index 1c46cb215..cc536ab97 100644 --- a/server/pnpm-lock.yaml +++ b/server/pnpm-lock.yaml @@ -19,6 +19,7 @@ specifiers: '@types/rate-limit-redis': 1.7.4 '@types/rimraf': 3.0.2 '@types/safe-json-stringify': 1.1.2 + '@types/semver': ^7.3.9 '@types/supertest': 2.0.11 '@types/tap': 15.0.5 '@types/uuid': 8.3.4 @@ -64,6 +65,7 @@ specifiers: rg-stats: ^0.2.0 rimraf: 3.0.2 safe-json-stringify: 1.2.0 + semver: ^7.3.7 seq-logging: 1.1.1 supertest: 6.2.2 tachi-common: 0.12.1 @@ -80,6 +82,7 @@ dependencies: '@aws-sdk/client-s3': 3.49.0_@aws-sdk+signature-v4-crt@3.49.0 '@aws-sdk/signature-v4-crt': 3.49.0 '@types/bson': 1.0.11 + '@types/semver': 7.3.9 '@valuabletouch/winston-seq': 1.3.0 bcryptjs: 2.4.3 bullmq: 1.68.4 @@ -112,6 +115,7 @@ dependencies: rg-stats: 0.2.0 rimraf: 3.0.2 safe-json-stringify: 1.2.0 + semver: 7.3.7 seq-logging: 1.1.1 tachi-common: 0.12.1 ts-node: 10.4.0_2615db9039ce432b4abf2fc39ef336ec @@ -1504,6 +1508,10 @@ packages: resolution: {integrity: sha512-Hj/LZMBXFH3Qj9sNmNu6syBpkZqBaM00HgP7naf9CnZhB3kdxmrenWUD2cY6vvTWjuBM3NPOLknPKDUOQuTWXA==} dev: true + /@types/semver/7.3.9: + resolution: {integrity: sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==} + dev: false + /@types/serve-static/1.13.10: resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} dependencies: @@ -1560,7 +1568,7 @@ packages: functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 - semver: 7.3.5 + semver: 7.3.7 tsutils: 3.21.0_typescript@4.5.5 typescript: 4.5.5 transitivePeerDependencies: @@ -1633,7 +1641,7 @@ packages: debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.5 + semver: 7.3.7 tsutils: 3.21.0_typescript@4.5.5 typescript: 4.5.5 transitivePeerDependencies: @@ -5123,13 +5131,12 @@ packages: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true - /semver/7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /send/0.17.2: resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} @@ -5411,7 +5418,7 @@ packages: mime: 2.6.0 qs: 6.10.3 readable-stream: 3.6.0 - semver: 7.3.5 + semver: 7.3.7 transitivePeerDependencies: - supports-color dev: true diff --git a/server/src/lib/constants/version.ts b/server/src/lib/constants/version.ts index 13783616f..9cad1f8c3 100644 --- a/server/src/lib/constants/version.ts +++ b/server/src/lib/constants/version.ts @@ -1,10 +1,11 @@ // Note that Version Info is intentionally identical between all variants of tachi // viz. btchi and ktchi share versioning. This is because they // essentially share codebases. - -const MAJOR = 2; -const MINOR = 2; -const PATCH = 0; +import CreateLogCtx from "lib/logger/logger"; +import semver from "semver"; +import { execSync } from "child_process"; +import fs from "fs"; +import path from "path"; // As is with all front-facing zkldi projects, the version names for tachi-server // are from an album I like. In this case, the album is Portishead - Dummy. @@ -47,13 +48,40 @@ const PORTISHEAD_DUMMY = [ // v2.11+ onwards are not expected to occur, but if they do, we'll figure something out. ]; +const logger = CreateLogCtx(__filename); + +const packageJSON = JSON.parse( + fs.readFileSync(path.join(__dirname, "../../../package.json"), "utf-8") +) as { version: string }; + +const semverInfo = semver.parse(packageJSON.version); + +if (!semverInfo) { + logger.warn( + `Couldn't parse semverInfo out of package.json? Got a string of '${packageJSON.version}', but couldn't parse. Defaulting to 0.` + ); +} + +let commit: string | null = null; + +try { + // This fetches the HEAD of our current running branch. This is useful for debugging. + // Note that git returns this with a trailing newline, so we have to trim that off. + commit = execSync("git rev-parse --short HEAD").toString("utf-8").trim(); +} catch (err) { + logger.warn(`Failed to read what commit we're on -- Using null as our commit version.`, { + err, + }); +} + export const VERSION_INFO = { - major: MAJOR, - minor: MINOR, - patch: PATCH, - name: PORTISHEAD_DUMMY[MINOR], + major: semverInfo?.major ?? 0, + minor: semverInfo?.minor ?? 0, + patch: semverInfo?.patch ?? 0, + commit, + name: PORTISHEAD_DUMMY[semverInfo?.minor ?? 0] ?? "No Version Name", }; -export const VERSION_STR = `${MAJOR}.${MINOR}.${PATCH}`; +export const VERSION_STR = semverInfo?.raw ?? "0.0.0-unknown"; -export const VERSION_PRETTY = `v${VERSION_STR} (${VERSION_INFO.name})`; +export const VERSION_PRETTY = `v${VERSION_STR} (${VERSION_INFO.name}) [${commit}]`;