CI / changes (push) Successful in 7s
CI / commitlint (push) Has been skipped
CI / openapi (push) Has been skipped
CI / web (push) Failing after 35s
CI / go (push) Has been skipped
CI / bird2 (push) Has been skipped
CI / release (push) Has been skipped
На проде API отдаёт только api_version и git_sha=unknown без поля version; карточка показывала SHA вместо semver. Общий хелпер version-info.ts: version → api_version, placeholder SHA не в заголовке. Co-authored-by: Cursor <[email protected]>
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
/** Ответ GET /v1/version (см. docs/openapi.yaml VersionInfo). */
|
|
export type VersionInfo = {
|
|
version?: string;
|
|
api_version?: string;
|
|
git_sha?: string;
|
|
build_time?: string;
|
|
};
|
|
|
|
const PLACEHOLDER_SHA = new Set(['', 'unknown']);
|
|
|
|
function nonEmptyString(value: unknown): string {
|
|
if (typeof value === 'string') {
|
|
const s = value.trim();
|
|
return s;
|
|
}
|
|
if (value == null) return '';
|
|
return String(value).trim();
|
|
}
|
|
|
|
/** Semver или legacy api_version; пустая строка, если полей нет. */
|
|
export function resolveVersionString(info: VersionInfo | null | undefined): string {
|
|
if (!info) return '';
|
|
return nonEmptyString(info.version) || nonEmptyString(info.api_version);
|
|
}
|
|
|
|
/** Короткий git SHA; пусто для placeholder «unknown». */
|
|
export function resolveGitSha(info: VersionInfo | null | undefined): string {
|
|
if (!info) return '';
|
|
const sha = nonEmptyString(info.git_sha);
|
|
if (!sha || PLACEHOLDER_SHA.has(sha.toLowerCase())) return '';
|
|
return sha;
|
|
}
|
|
|
|
/** Заголовок карточки «Версия» на /monitoring. */
|
|
export function formatVersionHeadline(info: VersionInfo | null | undefined): string {
|
|
if (!info) return '—';
|
|
const ver = resolveVersionString(info);
|
|
const sha = resolveGitSha(info);
|
|
if (ver && sha) return `${ver} (${sha.slice(0, 12)})`;
|
|
if (ver) return ver;
|
|
if (sha) return sha.slice(0, 12);
|
|
return '—';
|
|
}
|
|
|
|
/** Подпись в сайдбаре (v1.2.3). */
|
|
export function formatVersionSidebarLabel(info: VersionInfo | null | undefined): string | null {
|
|
const ver = resolveVersionString(info);
|
|
return ver ? `v${ver}` : null;
|
|
}
|