diff --git a/package.json b/package.json index 226fa5dd827227923215729fcec9308279e45ba4..86474dc24d124ca6cc0c75cf3dbf4fe667196a75 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@fontsource/open-sans": "^4.4.5", "@hcaptcha/react-hcaptcha": "^0.3.6", "@preact/preset-vite": "^2.0.0", + "@rollup/plugin-replace": "^2.4.2", "@styled-icons/bootstrap": "^10.34.0", "@styled-icons/feather": "^10.34.0", "@styled-icons/simple-icons": "^10.33.0", diff --git a/src/pages/settings/Settings.module.scss b/src/pages/settings/Settings.module.scss index 2540c1c0fc1f8232e3e9d2fa351ff0389698f4e3..4f095c0ecde1216f584871c0b95f49c1a08f64ce 100644 --- a/src/pages/settings/Settings.module.scss +++ b/src/pages/settings/Settings.module.scss @@ -104,6 +104,10 @@ display: flex; flex-direction: column; } + + .revision a:hover { + text-decoration: underline; + } } scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); diff --git a/src/pages/settings/Settings.tsx b/src/pages/settings/Settings.tsx index a4115c906ed0c94e112f54a3f5cb566aee6a9b76..a8713521d8c832b29ad4ced111430ae871642af4 100644 --- a/src/pages/settings/Settings.tsx +++ b/src/pages/settings/Settings.tsx @@ -20,6 +20,7 @@ import { User } from "@styled-icons/feather"; import { Megaphone } from "@styled-icons/bootstrap"; +import { GIT_REVISION, REPO_URL } from "../../revision"; import LineDivider from "../../components/ui/LineDivider"; import RequiresOnline from "../../context/revoltjs/RequiresOnline"; import ButtonItem from "../../components/navigation/items/ButtonItem"; @@ -142,6 +143,11 @@ export default function Settings() { </ButtonItem>, <div className={styles.version}> <div> + <span className={styles.revision}> + <a href={`${REPO_URL}/${GIT_REVISION}`} target="_blank"> + { GIT_REVISION.substr(0, 7) } + </a> + </span> <span>Stable {APP_VERSION}</span> <span>API: {client.configuration?.revolt ?? "N/A"}</span> <span>revolt.js: {LIBRARY_VERSION}</span> diff --git a/src/revision.ts b/src/revision.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab519af021427865bdf0bb9915aa2a1d299d4313 --- /dev/null +++ b/src/revision.ts @@ -0,0 +1,2 @@ +export const GIT_REVISION = '__GIT_REVISION__'; +export const REPO_URL = 'https://gitlab.insrt.uk/revolt/revite/-/commit'; diff --git a/vite.config.ts b/vite.config.ts index 372f38d435de02caf5103f0677001cd72eca95bf..dca74704954e7ca34a317a7cff0fbd9a5330af4e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,24 @@ import { resolve } from 'path' +import { readFileSync } from 'fs' import { defineConfig } from 'vite' import preact from '@preact/preset-vite' import { VitePWA } from 'vite-plugin-pwa' +import replace from '@rollup/plugin-replace' + +function getGitRevision() { + try { + const rev = readFileSync('.git/HEAD').toString().trim(); + if (rev.indexOf(':') === -1) { + return rev; + } else { + return readFileSync('.git/' + rev.substring(5)).toString().trim(); + } + } catch (err) { + console.error('Failed to get Git revision.'); + return '?'; + } +} -// https://vitejs.dev/config/ export default defineConfig({ plugins: [ preact(), @@ -31,6 +46,10 @@ export default defineConfig({ ] }, workbox: { } + }), + replace({ + __GIT_REVISION__: getGitRevision(), + preventAssignment: true }) ], build: { diff --git a/yarn.lock b/yarn.lock index a08e2b0489e4db207a71a570333022cd1b034b84..fbae6d6b60994eebe9481a9496cf8a244be84794 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1057,7 +1057,7 @@ is-module "^1.0.0" resolve "^1.19.0" -"@rollup/plugin-replace@^2.4.1": +"@rollup/plugin-replace@^2.4.1", "@rollup/plugin-replace@^2.4.2": version "2.4.2" resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==