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
@@ -0,0 +1,46 @@
import { useAppVersion } from './useAppVersion'
/**
* Subtle version indicator в header. Показывает client version + short commit.
*
* <p>Hover/title attribute exposes полную идентификацию (server tag, build time).
* Используется как secondary affordance для эксплуатационной диагностики
* (юзер скриншотит badge в bug report → ops знает точную сборку).
*
* <p>Если update available — badge подсвечивается dot indicator. Banner делает
* primary CTA, badge — passive signal.
*/
export function VersionBadge() {
const {
clientVersion,
clientCommit,
clientBuiltAt,
serverVersion,
serverCommit,
serverTag,
updateAvailable,
} = useAppVersion()
const tooltip = [
`client: ${clientVersion} (${clientCommit})`,
`server: ${serverTag || serverVersion} (${serverCommit ?? '...'})`,
`built: ${clientBuiltAt}`,
].join('\n')
return (
<span
className="inline-flex items-center gap-1.5 text-xs text-carbon/60 font-mono select-none"
title={tooltip}
>
{updateAvailable && (
<span
aria-label="Доступна новая версия"
className="inline-block w-1.5 h-1.5 rounded-full bg-ultramarain animate-pulse"
/>
)}
<span>v{clientVersion}</span>
<span className="text-carbon/40">·</span>
<span>{clientCommit.substring(0, 7)}</span>
</span>
)
}