feat: добавить документацию Template Sync Strategy
- добавлены каноны и VitePress-сайт стратегии обновления шаблонов - подключена карточка документации на главной странице - добавлены сборочные скрипты, Caddy-маршрут и Docker-сборка - добавлена git-иконка для карточки и сгенерированы публичные артефакты
This commit is contained in:
78
canons/template-sync-strategy/workflows/resolve-conflicts.md
Normal file
78
canons/template-sync-strategy/workflows/resolve-conflicts.md
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
title: Решение конфликтов
|
||||
description: Почему конфликты при обновлении шаблона должны решаться только в sync-ветках.
|
||||
---
|
||||
|
||||
# Решение конфликтов
|
||||
|
||||
Конфликт при обновлении шаблона — нормальная ситуация. Важно не то, что конфликт возник, а где он возник.
|
||||
|
||||
Правильное место для конфликтов — временная ветка `sync/*`.
|
||||
|
||||
## Пример
|
||||
|
||||
Шаблон поменял строку в `README.md`:
|
||||
|
||||
```text
|
||||
Base template version: template-conflict-v10
|
||||
```
|
||||
|
||||
Приложение поменяло ту же строку иначе:
|
||||
|
||||
```text
|
||||
Base template version: application-conflict-v10
|
||||
```
|
||||
|
||||
При merge `origin/template` в `sync/update-template-v10` появится конфликт:
|
||||
|
||||
```text
|
||||
<<<<<<< HEAD
|
||||
Base template version: application-conflict-v10
|
||||
=======
|
||||
Base template version: template-conflict-v10
|
||||
>>>>>>> origin/template
|
||||
```
|
||||
|
||||
Это правильное место конфликта: `master` ещё не изменён, `template` остаётся чистой, а итоговое решение можно проверить в PR/MR.
|
||||
|
||||
## Как решать
|
||||
|
||||
1. Оставайтесь в ветке `sync/*`.
|
||||
2. Разберите конфликт по смыслу: что должно остаться в приложении после обновления шаблона.
|
||||
3. Удалите conflict markers.
|
||||
4. Проверьте проект локально.
|
||||
5. Закоммитьте результат.
|
||||
|
||||
```bash
|
||||
git status
|
||||
git add .
|
||||
git commit
|
||||
```
|
||||
|
||||
## Что нельзя делать
|
||||
|
||||
Нельзя переносить conflict resolve в `template`.
|
||||
|
||||
`template` должна совпадать с шаблоном. Если решение конфликта попадёт туда, она перестанет быть эталоном и дальнейшие обновления станут менее предсказуемыми.
|
||||
|
||||
Нельзя решать конфликт прямо в `master`, потому что основная ветка приложения должна получать только проверенный результат через PR/MR.
|
||||
|
||||
## Что проверить после resolve
|
||||
|
||||
Посмотрите статус:
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
Посмотрите diff относительно текущего приложения:
|
||||
|
||||
```bash
|
||||
git --no-pager diff origin/master...HEAD
|
||||
```
|
||||
|
||||
Посмотрите граф:
|
||||
|
||||
```bash
|
||||
git --no-pager log --oneline --graph --decorate --all --max-count=50
|
||||
```
|
||||
75
canons/template-sync-strategy/workflows/review-and-merge.md
Normal file
75
canons/template-sync-strategy/workflows/review-and-merge.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: Review и merge
|
||||
description: Как проверять и вливать sync-ветку с обновлением шаблона в master приложения.
|
||||
---
|
||||
|
||||
# Review и merge
|
||||
|
||||
После подготовки `sync/*` ветки обновление шаблона должно попасть в `master` через PR/MR.
|
||||
|
||||
## Создать PR/MR
|
||||
|
||||
Параметры:
|
||||
|
||||
```text
|
||||
source: sync/update-template-vX
|
||||
target: master
|
||||
```
|
||||
|
||||
Цель review — увидеть:
|
||||
|
||||
- какие изменения пришли из шаблона;
|
||||
- какие конфликтные решения были сделаны в `sync/*`;
|
||||
- не попали ли в обновление лишние изменения приложения;
|
||||
- проходят ли проверки проекта.
|
||||
|
||||
## Настройки merge
|
||||
|
||||
Для sync-PR/MR важно:
|
||||
|
||||
```text
|
||||
squash = off
|
||||
fast-forward merge = хорошо
|
||||
merge commit = допустимо
|
||||
squash merge = нельзя
|
||||
```
|
||||
|
||||
Squash нельзя использовать, потому что он может уничтожить связь истории `master` с историей `template`. Особенно это критично после миграционного `sync/bootstrap-template`.
|
||||
|
||||
## Проверки перед merge
|
||||
|
||||
Проверьте граф истории:
|
||||
|
||||
```bash
|
||||
git --no-pager log --oneline --graph --decorate --all --max-count=50
|
||||
```
|
||||
|
||||
Проверьте итоговый diff:
|
||||
|
||||
```bash
|
||||
git --no-pager diff origin/master...sync/update-template-vX
|
||||
```
|
||||
|
||||
Проверьте проект обычными командами конкретного приложения, например:
|
||||
|
||||
```bash
|
||||
npm run lint
|
||||
npm run build
|
||||
```
|
||||
|
||||
## После merge
|
||||
|
||||
После успешного merge в `master` можно удалить временную ветку:
|
||||
|
||||
```bash
|
||||
git branch -d sync/update-template-vX
|
||||
git push origin --delete sync/update-template-vX
|
||||
```
|
||||
|
||||
Проверьте, что `master` теперь содержит обновление шаблона:
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git --no-pager log origin/template..origin/master --oneline
|
||||
git --no-pager diff origin/template...origin/master
|
||||
```
|
||||
111
canons/template-sync-strategy/workflows/update-template.md
Normal file
111
canons/template-sync-strategy/workflows/update-template.md
Normal file
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Обычное обновление шаблона
|
||||
description: Повторяемый процесс доставки изменений шаблона в приложение после первичной настройки.
|
||||
---
|
||||
|
||||
# Обычное обновление шаблона
|
||||
|
||||
Эта инструкция подходит после любого стартового сценария:
|
||||
|
||||
- [Новый проект от шаблона](../setup/clean-repository.md).
|
||||
- [Миграция существующего master](../setup/existing-master-migration.md).
|
||||
|
||||
Целевой маршрут:
|
||||
|
||||
```text
|
||||
templates/master -> template -> sync/* -> master
|
||||
```
|
||||
|
||||
## 1. Обновить слепок шаблона
|
||||
|
||||
В репозитории приложения:
|
||||
|
||||
```bash
|
||||
cd /path/to/app-repo
|
||||
git switch template
|
||||
git pull --ff-only
|
||||
git push
|
||||
```
|
||||
|
||||
Этот вариант работает, если для ветки `template` настроено:
|
||||
|
||||
```text
|
||||
pull из templates/master
|
||||
push в origin/template
|
||||
```
|
||||
|
||||
Явная форма без зависимости от tracking-настроек:
|
||||
|
||||
```bash
|
||||
git fetch templates
|
||||
git switch template
|
||||
git merge --ff-only templates/master
|
||||
git push origin template
|
||||
```
|
||||
|
||||
Если `--ff-only` падает, значит `template` перестал быть чистым слепком шаблона. Остановитесь и разберите причину до продолжения.
|
||||
|
||||
Проверьте, что `origin/template` обновился до шаблона:
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git fetch templates
|
||||
git --no-pager log --oneline -1 origin/template
|
||||
git --no-pager log --oneline -1 templates/master
|
||||
```
|
||||
|
||||
Оба коммита должны совпадать.
|
||||
|
||||
## 2. Создать ветку обновления приложения
|
||||
|
||||
После обновления `template` создайте временную ветку от текущего приложения:
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git switch -c sync/update-template-v2 origin/master
|
||||
git merge origin/template
|
||||
```
|
||||
|
||||
Имя ветки можно менять под версию или дату:
|
||||
|
||||
```text
|
||||
sync/update-template-v2
|
||||
sync/update-template-2026-05-09
|
||||
sync/update-template-1.8.0
|
||||
```
|
||||
|
||||
Проверьте, что временная ветка реально отличается от `origin/master` изменениями шаблона:
|
||||
|
||||
```bash
|
||||
git --no-pager diff --stat origin/master...HEAD
|
||||
```
|
||||
|
||||
Если diff пустой, значит обновлённый `origin/template` не был влит в `sync/*` ветку или в шаблоне нет новых изменений.
|
||||
|
||||
## 3. Решить конфликты
|
||||
|
||||
Если есть конфликты, решайте их именно в `sync/*`.
|
||||
|
||||
После решения конфликтов:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit
|
||||
```
|
||||
|
||||
Если конфликтов не было, Git сам создаст merge-коммит или выполнит fast-forward, в зависимости от истории.
|
||||
|
||||
## 4. Запушить sync-ветку
|
||||
|
||||
```bash
|
||||
git push -u origin sync/update-template-v2
|
||||
```
|
||||
|
||||
Дальше откройте PR/MR:
|
||||
|
||||
```text
|
||||
source: sync/update-template-v2
|
||||
target: master
|
||||
```
|
||||
|
||||
Правила merge описаны в [Review и merge](./review-and-merge.md).
|
||||
Reference in New Issue
Block a user