diff --git a/EventHubBackSpec.md b/EventHubBackSpec.md index f9f834f..db34194 100644 --- a/EventHubBackSpec.md +++ b/EventHubBackSpec.md @@ -262,7 +262,7 @@ src/ - `GET /v1/calendars/:calendar_id/view?month=YYYY-MM` — HTML-календарь (владелец), включая архив. ### Административные (порт 8445) -- `GET /admin/health` — состояние сервера (без префикса `/v1`; используется в CT и Traefik healthcheck). +- `GET /admin/health` и `GET /v1/admin/health` — состояние сервера + build identity: `status`, `service`, `version` (из `VERSION` / `EVENTHUB_VERSION`), `git_sha`, `built_at`. `/admin/health` — CT/Traefik; `/v1/admin/health` — admin SPA. - `GET /v1/admin/stats` — агрегированная статистика дашборда. - `POST /v1/admin/login` — вход администратора. - `POST /v1/admin/refresh` — обновление пары access/refresh JWT администратора. diff --git a/EventHubFrontAdminSpec.md b/EventHubFrontAdminSpec.md index 1db2724..6f58b4e 100644 --- a/EventHubFrontAdminSpec.md +++ b/EventHubFrontAdminSpec.md @@ -195,12 +195,14 @@ - Боковое меню (сайдбар) с пунктами, доступными в соответствии с ролью. - В нижней части сайдбара — виджет профиля текущего администратора с аватаром и именем (ник или email). При клике открывается меню «Мой профиль» и «Выйти». Кнопка сворачивания сайдбара находится в этой же панели. - Верхняя панель содержит моки оперативной статистики (онлайн, заказов сегодня, тикетов) — в будущем будут заменены на реальные данные. -- Все даты в интерфейсе русифицированы (dayjs с русской локалью, Ant Design ConfigProvider с русской локалью). +- В меню профиля (аватар в header): «Мой профиль», язык UI, **Admin `MAJOR.MINOR (sha)`** и **API `MAJOR.MINOR (sha)`** (API — из `GET /v1/admin/health`), «Выйти». +- Все даты в интерфейсе русифицированы (dayjs с русской локалью; i18n ru/en). - Единая нормализация данных: пустые значения (`null`, `undefined`, `"undefined"`, `"-"`) заменяются на прочерк, даты приводятся к читаемому формату. Нормализация применяется централизованно в хуках списков; для форм редактирования используются сырые данные. - Все таблицы имеют серверную пагинацию и сортировку через заголовок `X-Total-Count`. ## 7. Развёртывание +- Product version: файл `VERSION` (`MAJOR.MINOR`); в CI bake как `VITE_APP_*`. Образы: `sha-<12>` + floating `:ift` / `:stage` (см. `EventHubSpec/WORKFLOW.md` §6). - Production-сборка: `npm run build` → папка `dist/`. - Docker-образ на основе Nginx Alpine. - Контейнер подключается к сети `eventhub_network`. diff --git a/WORKFLOW.md b/WORKFLOW.md index c60d15d..889749f 100644 --- a/WORKFLOW.md +++ b/WORKFLOW.md @@ -164,6 +164,39 @@ Issue: https://git.sabilin.com/EventHub/EventHubBack/issues/24 --- +## 6. Версии и деплой (IFT / stage) + +### Product version (`VERSION`) + +В корне `EventHubBack` и `EventHubFrontAdmin` лежит файл **`VERSION`** в формате **`MAJOR.MINOR`** (сейчас `0.1`). + +- Бампается **вручную и редко** (релиз продуктовой линейки), не на каждый push. +- Patch-уровень SemVer **не** используется для stage-деплоев. +- Ручные git-теги `v*` для выкладки на stage **не** нужны. + +### Идентичность сборки + +| Поле | Откуда | Назначение | +|------|--------|------------| +| product version | `VERSION` | «линейка» продукта | +| git sha | `GITHUB_SHA` (12 символов) | точная сборка | +| built_at | время CI UTC | диагностика | + +- **FrontAdmin:** bake в Vite (`VITE_APP_VERSION`, `VITE_GIT_SHA`, `VITE_BUILT_AT`) на шаге CI. +- **Back:** bake в Docker image (`EVENTHUB_VERSION`, `EVENTHUB_GIT_SHA`, `EVENTHUB_BUILT_AT`) → `GET /admin/health` и `GET /v1/admin/health` (`version`, `git_sha`, `built_at`). +- В UI (меню профиля): `Admin 0.1 (sha)` + `API 0.1 (sha)`. + +### Registry / окружения + +| Окружение | Тег образа | Когда | +|-----------|------------|--------| +| IFT / push CI | `sha-<12>` + floating `:ift` / `:dev` | после зелёного CI | +| Stage | тот же `sha-<12>` + floating `:stage` | auto после успешного CI на `master` (`deploy-stage.yml` → promote + SSH deploy) | + +IFT и stage крутят **одну и ту же** сборку `sha-*`. Product version из `VERSION` на деплой не влияет. + +--- + ## 4. Расширение правил При появлении новой договорённости в работе: @@ -186,6 +219,7 @@ Issue: https://git.sabilin.com/EventHub/EventHubBack/issues/24 - Секреты и токены не коммитить; Gitea token — только в env / `~/.cursor/secrets/`. - **Git commit/push — через WSL** (`~/.cursor/eventhub/git-commit.sh`, `git-push.sh`); **push — только после подтверждения пользователя** (см. §2.1). - Новая задача — **отдельный чат** с брифом по §5. +- **Версии/деплой:** product = `VERSION` (`MAJOR.MINOR`); IFT+stage = `sha-*` (+ floating `:ift`/`:stage`); без ручных stage-тегов и без patch++ на каждый push (см. §6). --- @@ -193,6 +227,7 @@ Issue: https://git.sabilin.com/EventHub/EventHubBack/issues/24 | Дата | Изменение | |------|-----------| +| 2026-07-14 | §6: VERSION MAJOR.MINOR + auto stage по sha после CI | | 2026-07-07 | Git-скрипты Agent перенесены в `~/.cursor/eventhub/` (не в репозиториях) | | 2026-07-07 | §5: шаблон передачи контекста в новый чат | | 2026-07-07 | Push на remote — только после подтверждения пользователя |