fix(version): read CI_COMMIT_TAG as source of truth, package.json as fallback
Previously: vite read package.json.version only, requiring manual bump before each tag pipeline (manual sync ломалось — MR !44 пример костыля). Now: vite reads CI_COMMIT_TAG (passed via Dockerfile ARG GIT_TAG from .gitlab-ci.yml .docker_base) → strips 'v' prefix → exposes как __APP_TAG__. 'none' sentinel filtered → empty string → fallback к package.json. VersionBadge priority chain: 1. serverTag (что прод RUNS, через /api/v1/version) 2. clientTag (что build'илось на tag pipeline) 3. v${clientVersion} (package.json fallback floor для local / branch) Dockerfile: add ARG GIT_TAG=none, ENV CI_COMMIT_TAG=$GIT_TAG (mirrors существующий pattern с GIT_COMMIT → CI_COMMIT_SHORT_SHA). Revert package.json 1.3.1 → 1.2.0 (manual bump из MR !44). Версия теперь follows tag, не наоборот.
This commit is contained in:
@@ -7,15 +7,27 @@ 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 и показывает "Доступна
|
||||
// новая версия" если различаются.
|
||||
// Build identity injected at compile time. Used by VersionBadge / UpdateBanner.
|
||||
//
|
||||
// Fallbacks для CI / sandboxed builds где git unavailable: env var override,
|
||||
// затем "unknown".
|
||||
// Priority chain (most authoritative first):
|
||||
// 1. CI_COMMIT_TAG → set ONLY on tag pipelines (e.g. "v1.3.1"). Это source
|
||||
// of truth для release builds. Strip leading 'v' → "1.3.1".
|
||||
// 2. package.json.version → fallback floor для local dev и branch builds.
|
||||
// НЕ обновляется вручную — release flow добавит автоматический bump
|
||||
// позже (release script tag + npm version в одном commit'е).
|
||||
//
|
||||
// __APP_TAG__ — пустая строка если не tag build. VersionBadge решает что
|
||||
// показать (приоритет: serverTag → clientTag → v${clientVersion}).
|
||||
//
|
||||
// __APP_COMMIT__ — 8-char short SHA. CI передаёт через CI_COMMIT_SHORT_SHA
|
||||
// (GitLab default 8 chars), local через `git rev-parse --short=8`.
|
||||
const APP_VERSION: string = JSON.parse(
|
||||
readFileSync(path.resolve(__dirname, 'package.json'), 'utf-8'),
|
||||
).version
|
||||
// 'none' — Dockerfile default ARG value (см. .gitlab-ci.yml passes
|
||||
// --build-arg GIT_TAG="${CI_COMMIT_TAG:-none}"). Filter → пустая строка.
|
||||
const RAW_TAG = process.env.CI_COMMIT_TAG ?? ''
|
||||
const APP_TAG: string = RAW_TAG === 'none' ? '' : RAW_TAG.replace(/^v/, '')
|
||||
const APP_COMMIT: string =
|
||||
process.env.CI_COMMIT_SHORT_SHA ??
|
||||
(() => {
|
||||
@@ -32,6 +44,7 @@ const APP_BUILT_AT: string = new Date().toISOString()
|
||||
export default defineConfig({
|
||||
define: {
|
||||
__APP_VERSION__: JSON.stringify(APP_VERSION),
|
||||
__APP_TAG__: JSON.stringify(APP_TAG),
|
||||
__APP_COMMIT__: JSON.stringify(APP_COMMIT),
|
||||
__APP_BUILT_AT__: JSON.stringify(APP_BUILT_AT),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user