Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 48 additions & 21 deletions docs/architecture/MONOREPO_TOOLING.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,58 @@
Monorepo Tooling
# Monorepo Tooling

Этот документ объясняет monorepo.
Metrix хранит web-клиент, Telegram bot runtime, общие пакеты, Prisma схему,
документацию и тесты в одном репозитории. Цель tooling - дать одинаковые
команды для локальной разработки и CI без лишней платформенной сложности.

Что такое monorepo
## Карта репозитория

Это один репозиторий, где лежит несколько приложений и пакетов.
- `apps/web` - Next.js web-клиент.
- `apps/bot` - npm workspace для Telegram microservices.
- `packages/api` - общий API/data пакет.
- `packages/*` - shared библиотеки, контракты и UI/helpers.
- `prisma` - root Prisma schema и миграции для API слоя.
- `tests` - root unit, integration и contract tests.
- `docs` - архитектура, эксплуатация и workflow команды.

В Metrix есть:
## Root scripts

- apps/web;
- apps/bot;
- packages/api;
- packages/shared;
- packages/ui;
- docs;
- tests.
Root `package.json` держит команды, которые нужны всей команде:

Почему npm workspaces достаточно сейчас
- `npm run typecheck` - API, bot и web typecheck.
- `npm run typecheck:api` - только `packages/api`.
- `npm run typecheck:bot` - build всех bot workspaces.
- `npm run typecheck:web` - Next typegen и web TypeScript.
- `npm test` - root test suite через `node --test`.
- `npm run openapi:validate` - проверка OpenAPI spec.
- `npm run prisma:validate` - синтаксис и валидность root Prisma schema.

Проект уже может:
## Web tooling

- ставить зависимости;
- собирать bot workspaces;
- запускать root scripts;
- проверять API, bot и web отдельно.
`apps/web` использует Next.js, React, TypeScript и ESLint:

Когда нужен Turborepo или Nx
- `npm --prefix apps/web run dev` - локальный dev server.
- `npm --prefix apps/web run build` - production build.
- `npm --prefix apps/web run typecheck` - Next typegen и `tsc`.
- `npm --prefix apps/web run lint` - web ESLint rules.

Если станет много пакетов, тяжелые builds и сложный cache.
Пока npm workspaces достаточно и проще.
TypeScript настройки лежат в `apps/web/tsconfig*.json`. ESLint конфигурация
лежит в `apps/web/eslint.config.mjs`, а prettier правила берутся из root
`prettier.config.js`.

## Bot tooling

`apps/bot` сам является npm workspace. Каждый сервис в `apps/bot/services/*`
имеет собственный `package.json`, но общая команда `npm --prefix apps/bot run
build` собирает все сервисы через workspace scripts.

## Почему npm workspaces достаточно

Сейчас проекту хватает npm workspaces, потому что:

- пакетов еще немного;
- build graph понятен вручную;
- CI jobs разделены по API, bot, web, Docker и contract tests;
- кэширование можно держать на уровне npm и GitHub Actions.

Turborepo или Nx стоит добавлять только когда появятся тяжелые инкрементальные
builds, сложные зависимости между пакетами или заметная экономия от remote cache.
Loading