chore: simplify root tooling and repository boundaries
Conventional commits / commits (pull_request) Successful in 10s
Conventional commits / commits (pull_request) Successful in 10s
This commit was merged in pull request #10.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
Локальное приложение для портфеля T-Bank, операций, дохода и будущих выплат,
|
||||
а также ручного учёта банковских карт и расходов.
|
||||
[Обзор продукта](docs/overview.md) и [документация системы](docs/README.md).
|
||||
[Обзор продукта](https://git.personal.ksv741.ru/WealthLedger/docs/src/commit/c557af4ea51cd3c578d0755e909e62e06462b5bc/overview.md) и [документация системы](https://git.personal.ksv741.ru/WealthLedger/docs/src/commit/c557af4ea51cd3c578d0755e909e62e06462b5bc/README.md).
|
||||
|
||||
## Структура workspace
|
||||
|
||||
@@ -12,10 +12,10 @@ Workspace состоит из пяти независимых Git-репозит
|
||||
| Путь от root | Репозиторий Gitea | Назначение |
|
||||
| --- | --- | --- |
|
||||
| `.` | `WealthLedger/main` | Вход в workspace, инструкции и правила root tracking |
|
||||
| `frontend/` | `WealthLedger/frontend` | [React/Vite UI](frontend/README.md) |
|
||||
| `backend/` | `WealthLedger/backend` | [NestJS API, Prisma и SQLite](backend/README.md) |
|
||||
| `docs/` | `WealthLedger/docs` | [Объяснение системы](docs/README.md) |
|
||||
| `specs/` | `WealthLedger/specs` | [Требования и OpenSpec](specs/README.md) |
|
||||
| `frontend/` | `WealthLedger/frontend` | [React/Vite UI](https://git.personal.ksv741.ru/WealthLedger/frontend/src/commit/9f7e342333b80bfacfd5bc394a2dcd0613d33ff3/README.md) |
|
||||
| `backend/` | `WealthLedger/backend` | [NestJS API, Prisma и SQLite](https://git.personal.ksv741.ru/WealthLedger/backend/src/commit/016782657acfd35ff3fd755462007938fac35156/README.md) |
|
||||
| `docs/` | `WealthLedger/docs` | [Объяснение системы](https://git.personal.ksv741.ru/WealthLedger/docs/src/commit/c557af4ea51cd3c578d0755e909e62e06462b5bc/README.md) |
|
||||
| `specs/` | `WealthLedger/specs` | [Требования и OpenSpec](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/README.md) |
|
||||
|
||||
### Получение checkout
|
||||
|
||||
@@ -34,13 +34,14 @@ git clone ssh://git@git.personal.ksv741.ru:2222/WealthLedger/specs.git specs
|
||||
Для существующего workspace клонируйте только отсутствующие checkout в пустые
|
||||
каталоги. Проверяйте состояние каждого repo отдельно, например
|
||||
`git -C frontend status`. Обновление main не обновляет соседние repos;
|
||||
общего lockfile revisions нет. Относительные ссылки требуют указанных имён каталогов.
|
||||
общего lockfile revisions нет. Такая раскладка удобна для совместной работы,
|
||||
но каждый checkout можно использовать отдельно.
|
||||
|
||||
### Что хранится в main
|
||||
|
||||
Root отслеживает входные документы, общие engineering conventions и их migration
|
||||
Root отслеживает входные документы, собственные engineering conventions и исторический migration
|
||||
inventory в `.ai/`, npm/release-конфигурацию, changelog,
|
||||
проверки tracking/release и три CI workflow. Точный allowlist — в `.gitignore`.
|
||||
один CI workflow с commitlint. Точный allowlist — в `.gitignore`.
|
||||
Остальные root-пути игнорируются по умолчанию:
|
||||
вложенные repos, `.env`, базы и WAL, импорты выписок, PDF, `references/`,
|
||||
`design/`, `todo/` и локальные настройки инструментов.
|
||||
@@ -61,7 +62,7 @@ inventory в `.ai/`, npm/release-конфигурацию, changelog,
|
||||
После смены major Node переустановите native dependencies через `npm ci`.
|
||||
Разрешения install scripts заданы в `package.json` соответствующего repo.
|
||||
|
||||
Для нового backend создайте `.env` по [backend README](backend/README.md),
|
||||
Для нового backend создайте `.env` по [backend README](https://git.personal.ksv741.ru/WealthLedger/backend/src/commit/016782657acfd35ff3fd755462007938fac35156/README.md),
|
||||
замените оба placeholder-секрета и проверьте `DATABASE_URL`.
|
||||
Существующий `.env` сохраняйте. Из backend:
|
||||
|
||||
@@ -74,13 +75,13 @@ npm run start:dev
|
||||
|
||||
Build генерирует Prisma client. Перед миграцией существующей базы сохраните
|
||||
согласованный backup и ключ шифрования; процедуру и ограничения отката смотрите
|
||||
в [описании хранения](docs/architecture/containers.md#сохранение-и-восстановление-данных).
|
||||
в [описании хранения](https://git.personal.ksv741.ru/WealthLedger/docs/src/commit/c557af4ea51cd3c578d0755e909e62e06462b5bc/architecture/containers.md#сохранение-и-восстановление-данных).
|
||||
Известная ошибка fresh migration при `RUST_LOG=warn/error` устранена в
|
||||
`backend/prisma.config.ts`: CLI удаляет унаследованную переменную.
|
||||
Используйте штатный `prisma migrate deploy` из backend; прежний Prisma blocker
|
||||
снят. [Подробности и границы проверки](backend/README.md#реальная-sqlite-и-сохранность-данных).
|
||||
снят. [Подробности и границы проверки](https://git.personal.ksv741.ru/WealthLedger/backend/src/commit/016782657acfd35ff3fd755462007938fac35156/README.md#реальная-sqlite-и-сохранность-данных).
|
||||
|
||||
В другом терминале подготовьте `.env` по [frontend README](frontend/README.md),
|
||||
В другом терминале подготовьте `.env` по [frontend README](https://git.personal.ksv741.ru/WealthLedger/frontend/src/commit/9f7e342333b80bfacfd5bc394a2dcd0613d33ff3/README.md),
|
||||
затем из frontend:
|
||||
|
||||
```bash
|
||||
@@ -99,7 +100,7 @@ npm run dev
|
||||
OpenSpec не нужен для запуска приложения и применяется по явному запросу.
|
||||
Specs использует Node из своей `.nvmrc`; проверенная версия CLI — 1.10.0.
|
||||
Store `wealth-ledger-specs` расположен в `specs/openspec/`.
|
||||
[Работа с OpenSpec](specs/AGENTS.md), [команды validation](specs/README.md#проверка).
|
||||
[Работа с OpenSpec](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/AGENTS.md), [команды validation](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/README.md#проверка).
|
||||
|
||||
## Проверки
|
||||
|
||||
@@ -107,17 +108,18 @@ Store `wealth-ledger-specs` расположен в `specs/openspec/`.
|
||||
|
||||
| Где | Команда | Что проверяет |
|
||||
| --- | --- | --- |
|
||||
| root | `python3 test-workspace-tracking.py` | Массовый add на вымышленных данных; сохранность файлов и вложенных Git |
|
||||
| root | `npm exec --no -- commitlint --strict --from <base> --to <head>` | Формат сообщений коммитов |
|
||||
| root | `git diff --check` | Whitespace в изменениях root |
|
||||
| frontend | `npm run verify` | Типы, lint, тесты, зависимости, OpenAPI snapshot и сборки |
|
||||
| backend | `npm run verify` | Lint, типы, unit tests и build |
|
||||
| backend | `npm run test:e2e` | HTTP/SQLite suites и контракт с соседним frontend |
|
||||
| backend | `npm run test:e2e` | HTTP/SQLite suites и локальный OpenAPI artifact |
|
||||
| docs | `npm run verify` | Markdown, относительные ссылки и diff |
|
||||
|
||||
Python 3 нужен только для проверки root tracking. Backend e2e использует
|
||||
Root CI выполняет только commitlint: проверяет сообщения коммитов и заголовок PR.
|
||||
Allowlist root проверяется вручную по staged paths. Backend e2e использует
|
||||
временные базы; verify отдельно не доказывает HTTP/DB-сценарии или доступность
|
||||
T-Bank. Полные команды и ограничения принадлежат README
|
||||
[frontend](frontend/README.md#проверка) и [backend](backend/README.md#проверка).
|
||||
[frontend](https://git.personal.ksv741.ru/WealthLedger/frontend/src/commit/9f7e342333b80bfacfd5bc394a2dcd0613d33ff3/README.md#проверка) и [backend](https://git.personal.ksv741.ru/WealthLedger/backend/src/commit/016782657acfd35ff3fd755462007938fac35156/README.md#проверка).
|
||||
Для изменения проекта начните с [AGENTS](AGENTS.md).
|
||||
|
||||
## Релизы и ветки
|
||||
@@ -144,18 +146,19 @@ Commits и заголовки PR — Conventional Commits. `feat:` повыша
|
||||
1. Обновить `main`, `develop` и теги командой `git fetch origin --tags`.
|
||||
Проверить, что текущий `develop` содержит последний релиз из `main`.
|
||||
Создать `release/<name>` от проверенного `develop` и выполнить `npm ci`.
|
||||
2. Для backend и docs обновить `.ci/refs.json`: полные SHA совместимых соседних
|
||||
репозиториев. Эти revisions должны быть доступны в Gitea. Проверить именно
|
||||
их совместимость; движущиеся ветки не являются фиксацией состава релиза.
|
||||
Закоммитить обновлённые pins до подготовки версии.
|
||||
2. Проверить локальные входы и публичные artifacts выпускаемого репозитория.
|
||||
Совместимость развёрнутых участников согласовать отдельно через публичные
|
||||
контракты; CI не скачивает соседние checkout и не требует их SHA.
|
||||
3. Выполнить `npm run release:preview`. Проверить номер и changelog, затем
|
||||
`npm run release:prepare`. Команда создаёт `chore(release): X.Y.Z`, обновляет
|
||||
`package.json`, lockfile и `CHANGELOG.md`; теги и push не выполняет.
|
||||
Не использовать обход branch/clean/tag guards. Незакоммиченные файлы,
|
||||
неподходящая ветка, отсутствие изменений и уже подготовленная версия блокируют выпуск.
|
||||
В root встроенные проверки release-it контролируют ветку, чистое дерево и
|
||||
наличие коммитов. Теги и соответствие версии последнему принятому тегу
|
||||
проверяются вручную; уже подготовленную версию повторно не повышать.
|
||||
4. Проверить diff релизного коммита и штатные gates. Отправить только релизную
|
||||
ветку: `git push -u origin HEAD`. Открыть PR в `main` с заголовком
|
||||
`chore(release): X.Y.Z`. После зелёных `verify`, `security`, `commits`
|
||||
`chore(release): X.Y.Z`. После зелёных обязательных проверок (`commits` в root;
|
||||
`verify`, `security`, `commits` в остальных repo)
|
||||
выполнить **fast-forward-only merge**. Если `main` изменился, сначала
|
||||
согласовать историю и повторить проверку кандидата; не обходить защиту.
|
||||
5. После merge получить `main` и убедиться, что его HEAD — проверенный релизный
|
||||
@@ -185,25 +188,26 @@ Commits и заголовки PR — Conventional Commits. `feat:` повыша
|
||||
`release/hotfix-<name>` в `main`, затем обязательно возвращается в `develop`.
|
||||
Если ломается публичный контракт, major сохраняется и для hotfix.
|
||||
|
||||
Backend CI проверяет runtime OpenAPI с frontend; docs CI — межрепозиторные
|
||||
ссылки. Для `main`, PR в `main` и `release/*` соседи берутся из `.ci/refs.json`;
|
||||
для разработки — из `develop`. SHA записываются в логи. Для изменения сразу
|
||||
нескольких репозиториев сначала согласовать их revisions, затем проверять
|
||||
релизный набор; порядок публикации сам по себе не доказывает совместимость.
|
||||
Каждый CI использует только свой checkout. Backend генерирует OpenAPI без сервера,
|
||||
сверяет генератор с configured app и не хранит JSON в Git; frontend проверяет types по входному
|
||||
snapshot. Docs проверяет внутренние ссылки; внешние источники даются как
|
||||
справочные веб-ссылки. Обновление API artifact потребителя — отдельное действие.
|
||||
Зелёные локальные gates и порядок публикации не доказывают совместимость
|
||||
развёрнутых версий. Процедуры выпуска находятся также в README каждого repo;
|
||||
доступ к root для выпуска другого репозитория не требуется.
|
||||
|
||||
В Gitea для `main` и `develop` нужны запрет прямого push и force-push,
|
||||
обязательные проверки `verify`, `security`, `commits` и запрет обхода правил
|
||||
обязательные проверки: в root только `commits`, в остальных repo —
|
||||
`verify`, `security`, `commits`; также нужен запрет обхода правил
|
||||
администратором. Требование отдельного одобрения review не вводится для
|
||||
разработки одним владельцем. Ветка по умолчанию — `develop`; Renovate тоже
|
||||
отправляет PR в `develop`. Теги `v*` защищены, создание разрешается владельцу
|
||||
релиза; их удаление или перенос не входит в обычный процесс.
|
||||
|
||||
`node test-release.cjs` из root проверяет настоящий release-it во временном Git.
|
||||
Для проверки конфигурации соседа после установки его dependencies:
|
||||
`node test-release.cjs frontend` (аналогично backend, docs, specs).
|
||||
Тест не публикует refs и не использует рабочие базы. Root `npm run verify`
|
||||
включает tracking и этот тест; frontend/backend/docs сохраняют свои gates,
|
||||
backend дополнительно требует `npm run test:e2e`.
|
||||
В root нет собственного test/verify runner и release hooks. Release-it и
|
||||
commitlint используются напрямую. Остальные репозитории сохраняют свои gates.
|
||||
Если в защите веток root ранее были обязательными `verify` и `security`, их
|
||||
нужно убрать из required checks в Gitea; YAML не меняет настройки сервера.
|
||||
|
||||
Npm publishing, автоматический deploy и карточки Gitea Releases не включены.
|
||||
Граница выпуска — принятый коммит, changelog и Git-тег.
|
||||
|
||||
Reference in New Issue
Block a user