refactor: перенести сборку в проекты
- перенесены каноны и VitePress-конфиги в projects/<slug> - добавлены корневой и проектные build.ts для сборки артефактов - добавлены shared-библиотеки сборки в projects/_shared/lib - обновлены CI, Dockerfile, package.json, gitignore и README - удалена сборка frontend-агента
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: Памятка
|
||||
description: Короткий набор команд для регулярного обновления приложения от шаблона.
|
||||
---
|
||||
|
||||
# Памятка
|
||||
|
||||
Рабочая схема:
|
||||
|
||||
```text
|
||||
templates/master -> template -> sync/* -> master
|
||||
```
|
||||
|
||||
## Обновить template
|
||||
|
||||
В репозитории приложения:
|
||||
|
||||
```bash
|
||||
git switch template
|
||||
git pull --ff-only
|
||||
git push
|
||||
```
|
||||
|
||||
Это подтягивает свежий шаблон из `templates/master` и пушит его в `origin/template`.
|
||||
|
||||
## Создать ветку обновления
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git switch -c sync/update-template-vX origin/master
|
||||
git merge origin/template
|
||||
```
|
||||
|
||||
Если есть конфликты, решить их в этой же ветке:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit
|
||||
```
|
||||
|
||||
## Запушить sync-ветку
|
||||
|
||||
```bash
|
||||
git push -u origin sync/update-template-vX
|
||||
```
|
||||
|
||||
## Влить через UI
|
||||
|
||||
Создать PR/MR:
|
||||
|
||||
```text
|
||||
source: sync/update-template-vX
|
||||
target: master
|
||||
```
|
||||
|
||||
Важно:
|
||||
|
||||
```text
|
||||
squash = off
|
||||
```
|
||||
|
||||
## Проверка
|
||||
|
||||
```bash
|
||||
git --no-pager log --oneline --graph --decorate --all --max-count=30
|
||||
```
|
||||
|
||||
## Суть процесса
|
||||
|
||||
1. Обновить `template` из `templates/master`.
|
||||
2. Создать `sync/*` от `origin/master`.
|
||||
3. Влить `origin/template` в `sync/*`.
|
||||
4. Решить конфликты, если есть.
|
||||
5. Запушить `sync/*`.
|
||||
6. Через UI влить `sync/* -> master`.
|
||||
52
projects/template-sync-strategy/canons/reference/glossary.md
Normal file
52
projects/template-sync-strategy/canons/reference/glossary.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Глоссарий
|
||||
description: Термины, которые используются в Template Sync Strategy.
|
||||
---
|
||||
|
||||
# Глоссарий
|
||||
|
||||
## Template repo
|
||||
|
||||
Репозиторий шаблона. В нём живёт общая техническая база: CI/CD, Dockerfile, зависимости, линтер, сборка, структура и документация.
|
||||
|
||||
## App repo
|
||||
|
||||
Репозиторий приложения. В нём живёт продуктовый код и локальные настройки конкретного приложения.
|
||||
|
||||
## templates
|
||||
|
||||
Git remote внутри репозитория приложения, который указывает на репозиторий шаблона.
|
||||
|
||||
Пример:
|
||||
|
||||
```bash
|
||||
git remote add templates <template-repo-url>
|
||||
```
|
||||
|
||||
## templates/master
|
||||
|
||||
Ветка `master` из репозитория шаблона, доступная в приложении через remote `templates`.
|
||||
|
||||
## template
|
||||
|
||||
Ветка внутри репозитория приложения, которая должна быть чистым слепком `templates/master`.
|
||||
|
||||
## master
|
||||
|
||||
Основная ветка приложения. Содержит шаблонную базу плюс продуктовый слой.
|
||||
|
||||
## sync/*
|
||||
|
||||
Временные ветки для обновления приложения от шаблона. Создаются от `origin/master`, получают merge из `origin/template`, проходят review и затем вливаются в `master`.
|
||||
|
||||
## Fast-forward
|
||||
|
||||
Обновление ветки без merge-коммита, когда текущая ветка может быть просто передвинута вперёд по истории.
|
||||
|
||||
## Merge commit
|
||||
|
||||
Коммит слияния, который сохраняет связь двух историй. Допустим для `sync/* -> master`.
|
||||
|
||||
## Squash
|
||||
|
||||
Способ merge, при котором все изменения source branch превращаются в один новый коммит. Для sync-PR/MR запрещён, потому что может разрушить полезную связь истории `master` с историей `template`.
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
title: Troubleshooting
|
||||
description: Типовые ошибки при обновлении проекта от шаблона и способы диагностики.
|
||||
---
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
## fatal: отказ слияния несвязанных историй изменений
|
||||
|
||||
Ошибка:
|
||||
|
||||
```text
|
||||
fatal: отказ слияния несвязанных историй изменений
|
||||
```
|
||||
|
||||
Причина: `master` приложения не был создан от `template`, поэтому у веток нет общего предка.
|
||||
|
||||
Решение: выполнить одноразовую миграцию через `sync/bootstrap-template` по инструкции [Миграция существующего master](../setup/existing-master-migration.md).
|
||||
|
||||
Коротко:
|
||||
|
||||
```bash
|
||||
git switch -c sync/bootstrap-template origin/master
|
||||
git merge --allow-unrelated-histories origin/template
|
||||
git push -u origin sync/bootstrap-template
|
||||
```
|
||||
|
||||
## --ff-only падает на template
|
||||
|
||||
Ошибка возникает при команде:
|
||||
|
||||
```bash
|
||||
git merge --ff-only templates/master
|
||||
```
|
||||
|
||||
Причина: в `template` появились коммиты, которых нет в шаблоне. Значит ветка перестала быть чистым слепком.
|
||||
|
||||
Что проверить:
|
||||
|
||||
```bash
|
||||
git fetch templates
|
||||
git --no-pager log --oneline --graph --decorate templates/master..template
|
||||
```
|
||||
|
||||
Решение зависит от причины. Не продолжайте обновление, пока не станет понятно, какие локальные коммиты попали в `template`.
|
||||
|
||||
## Пустой diff в sync-ветке
|
||||
|
||||
Симптом:
|
||||
|
||||
```bash
|
||||
git --no-pager diff --stat origin/master...HEAD
|
||||
```
|
||||
|
||||
не показывает изменений.
|
||||
|
||||
Возможные причины:
|
||||
|
||||
- в шаблоне нет новых изменений;
|
||||
- `origin/template` не был обновлён;
|
||||
- `origin/template` не был влит в `sync/*`;
|
||||
- sync-ветка создана не от актуального `origin/master`.
|
||||
|
||||
Что проверить:
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git fetch templates
|
||||
git --no-pager log --oneline -1 origin/template
|
||||
git --no-pager log --oneline -1 templates/master
|
||||
git --no-pager log --oneline --graph --decorate --all --max-count=50
|
||||
```
|
||||
|
||||
## Случайно включили squash
|
||||
|
||||
Если sync-PR/MR уже влит squash-merge, история шаблона могла не сохраниться как нормальная merge-связь.
|
||||
|
||||
Что сделать:
|
||||
|
||||
- зафиксировать факт в описании проекта;
|
||||
- проверить, видит ли Git последующие обновления шаблона без повторного применения старых изменений;
|
||||
- при следующем обновлении внимательно смотреть diff и конфликты;
|
||||
- для будущих sync-PR/MR отключить squash.
|
||||
|
||||
Если ситуация стала неуправляемой, может потребоваться отдельная техническая миграция истории.
|
||||
|
||||
## cannot run less
|
||||
|
||||
Ошибка:
|
||||
|
||||
```text
|
||||
cannot run less
|
||||
```
|
||||
|
||||
Причина: Git пытается открыть pager `less`, которого нет в системе.
|
||||
|
||||
Решение: использовать `git --no-pager`:
|
||||
|
||||
```bash
|
||||
git --no-pager log --oneline --graph --decorate --all --max-count=50
|
||||
git --no-pager diff template...master
|
||||
```
|
||||
Reference in New Issue
Block a user