feat: version banner UI + GET /api/v1/version backend endpoint

This commit is contained in:
Александр Зимин
2026-05-10 16:50:50 +00:00
parent 17386ba0b4
commit e8f98230f2
9 changed files with 355 additions and 0 deletions
+29
View File
@@ -4,8 +4,37 @@ import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
import { TanStackRouterVite } from '@tanstack/router-vite-plugin'
import path from 'path'
import { execSync } from 'node:child_process'
import { readFileSync } from 'node:fs'
// Build identity injected at compile time. Used by /update banner — client
// сравнивает свой commit с server's /api/v1/version и показывает "Доступна
// новая версия" если различаются.
//
// Fallbacks для CI / sandboxed builds где git unavailable: env var override,
// затем "unknown".
const APP_VERSION: string = JSON.parse(
readFileSync(path.resolve(__dirname, 'package.json'), 'utf-8'),
).version
const APP_COMMIT: string =
process.env.CI_COMMIT_SHORT_SHA ??
(() => {
try {
return execSync('git rev-parse --short HEAD', { stdio: ['ignore', 'pipe', 'ignore'] })
.toString()
.trim()
} catch {
return 'unknown'
}
})()
const APP_BUILT_AT: string = new Date().toISOString()
export default defineConfig({
define: {
__APP_VERSION__: JSON.stringify(APP_VERSION),
__APP_COMMIT__: JSON.stringify(APP_COMMIT),
__APP_BUILT_AT__: JSON.stringify(APP_BUILT_AT),
},
test: {
environment: 'jsdom',
setupFiles: ['./src/test/setup.ts'],