Перейти к содержимому

Мультирегиональная госплатформа

Frontend Architect · Lean Solutions · 2022 — н. в.

Новые фичи: копипаст в репозиторий каждого региона → пишутся один раз и выходят во всех регионах

  • Angular 22
  • Nx
  • TypeScript
  • Tailwind v4
  • Elf
  • Transloco
  • GitLab CI

Платформа в цифрах

регионов: портал и админка у каждого
17
библиотек
49
моих коммитов
1 164
моих смёрженных MR
436
версии Angular
6 → 22

Задача

Каждый регион был отдельным Angular-проектом, скопированным с предыдущего. Фичу, сделанную для одного региона, приходилось вручную копировать во все остальные. CI/CD не было.

Что я сделал

  • Перевёл региональные приложения в единый Nx-монорепозиторий: 10+ публичных порталов и админ-панелей на общих библиотеках (ui, ui-widgets, data-access, feature-*) с контролем границ зависимостей
  • Создал внутреннюю UI-библиотеку и дизайн-систему на токенах Tailwind CSS v4
  • Настроил GitLab CI с нуля: один пайплайн линтит, тестирует, собирает и деплоит все staging-приложения
  • Обновил стек с Angular 6 до 22 (signals, standalone-компоненты, новый control flow)

Результаты

кода — в общих библиотеках; каждое региональное приложение — тонкая оболочка (~18 тыс. из ~200 тыс. строк)
~90%
на запуск нового региона: новая оболочка приложения со своими текстами, логотипом и favicon
~5 мин
автоматический деплой на все staging-приложения; раньше пайплайна не было
~7 мин
Где живёт кодвсего ~200 тыс. строк
Общие библиотеки: ~90% 10+ оболочек приложений: ~18 тыс. строк
До → после
До После
Новая фича До: копипаст в каждый региональный репозиторий После: пишется один раз, выходит во всех регионах
Новый регион До: копия предыдущего проекта После: ~5 минут: новая оболочка приложения
Деплой на staging До: пайплайна не было После: ~7 минут, полностью автоматически
Angular До: 6 После: 22

Медиа

Схема архитектуры снизу вверх: библиотеки ui, ui-widgets, data-access, feature-*, над ними — 10+ публичных порталов и админ-панелей.10+ публичных порталов и админ-панелей(тонкие оболочки) feature-* data-access ui-widgets ui
Приложения собраны из общих библиотек; границы зависимостей контролирует Nx.
Упрощённый граф проектов Nx: оболочки приложений сверху используют библиотеки feature-*, те — data-access и ui-widgets, ui-widgets — ui. При выборе библиотеки подсвечиваются все проекты, которые от неё зависят. приложения feature-* data-access ui-widgets ui

Выберите библиотеку ниже

Изменить библиотеку:
Упрощённая схема, не настоящий граф проекта: выберите библиотеку и посмотрите, какие проекты от неё зависят. Изменение в ui или ui-widgets доходит до каждого приложения, поэтому чаще всего пайплайн собирает их все.

Подробнее в блоге

  1. Из 10+ скопированных Angular-проектов в один Nx-монорепозиторий
  2. CI с нуля для Nx-монорепозитория: от «пайплайна нет» до 7 минут на все staging-приложения
  3. Angular 6 → 22: путь обновления и на чём спотыкаешься
  4. Миграция Tailwind v3 → v4 в большом монорепозитории
  5. Sentry в Angular-монорепозитории: от «пользователи не жалуются» до 6889 событий в одной группе
  6. Свои ESLint-правила как защита от повторяющихся ошибок
  7. ESLint-правила, которые чинят сами: fixer, suggestions и Angular-шаблоны