|
1 | 1 | # Совместная разработка: ветки, PR, конфликты, тест, прод |
2 | 2 |
|
3 | | -## Ветки |
| 3 | +## Три уровня, не один срез |
4 | 4 |
|
5 | | -| Ветка | Назначение | Версия (2–3 цифры) | Деплой | |
6 | | -|--------|------------|-------------------|--------| |
7 | | -| **`main`** | Интеграция: сюда вливаются фичи через PR | **Авто** после merge ([VERSIONING.md](./VERSIONING.md)) | Локально / dev | |
8 | | -| **`staging`** | Тестовый стенд: только проверенный снимок с `main` | **Та же**, что в `main` (повторно не bump) | Тестовый сервер | |
9 | | -| **Тег / прод** | Внешний стабильный срез | **1-я цифра** вручную ([ADMIN.md](./ADMIN.md)) | Прод | |
| 5 | +| Уровень | Ветка / срез | Для кого | Как обновляется | |
| 6 | +|---------|----------------|----------|-----------------| |
| 7 | +| **Интеграция** | `main` | Разработчики | Каждая фича через PR; версия 2/3 цифры **растёт автоматически** после merge | |
| 8 | +| **Тестовый стенд** | `staging` | Тестировщики, отчёты о багах | **Только вручную**, после **локальных** проверок; на стенде **одна зафиксированная** версия `X.Y.Z` | |
| 9 | +| **Прод** | тег / релиз | Пользователи «во вне» | Вручную, 1-я цифра — [ADMIN.md](./ADMIN.md) | |
10 | 10 |
|
11 | 11 | ```text |
12 | | -feature/* ──PR──► main ──(+бот chore(version))──► PR ──► staging ──► тест-стенд |
13 | | - │ │ |
14 | | - └──────────────────────────────────────────────┘ |
15 | | - позже: прод (ADMIN) |
| 12 | +feature/* ──PR──► main ──(бот: версия 0.7.3)──► локально: build + smoke |
| 13 | + │ |
| 14 | + «готовы к QA» ▼ |
| 15 | + PR main → staging ──► деплой стенда |
| 16 | + (версия на стенде = 0.7.3) |
| 17 | + │ |
| 18 | + позже: прод |
16 | 19 | ``` |
17 | 20 |
|
| 21 | +**`staging` не копия `main` в реальном времени.** Пока вы не сделали PR «выкладка на тест», на стенде остаётся **прошлый** стабильный снимок — тестировщики не ловят «полуфабрикат» с только что влитой фичей. |
| 22 | + |
18 | 23 | --- |
19 | 24 |
|
20 | | -## Обычный день (фича) |
| 25 | +## Обычная разработка (только `main`) |
21 | 26 |
|
22 | 27 | 1. `git checkout main && git pull` |
23 | | -2. `git checkout -b feature/краткое-имя` |
24 | | -3. Код, коммиты, push ветки |
25 | | -4. GitHub → **Pull request → `main`** |
26 | | -5. Ждёте **CI (build)** — зелёная галочка |
27 | | -6. Если **«This branch has conflicts»** — конфликт **до** merge (см. ниже) |
28 | | -7. Ревью → **Merge** |
29 | | -8. Бот (если нужно) коммитит `chore(version): bump to v…` в `main` |
30 | | -9. У партнёра: `git pull origin main` |
| 28 | +2. `git checkout -b feature/краткое-имя` → код → push |
| 29 | +3. **Pull request → `main`**, дождаться зелёного **CI (build)** |
| 30 | +4. При **conflicts** — merge недоступен, правите локально → push (см. ниже) |
| 31 | +5. **Merge** → бот может добавить `chore(version): bump to v…` |
| 32 | +6. Партнёр: `git pull origin main` |
31 | 33 |
|
32 | | -**В `staging` и на тест ничего само не попадает** — только когда создадите PR `main` → `staging`. |
| 34 | +На тестовый стенд это **не** попадает автоматически. |
33 | 35 |
|
34 | 36 | --- |
35 | 37 |
|
36 | | -## Вывод на тестовый стенд |
| 38 | +## Выкладка на тестовый стенд (осознанный срез) |
37 | 39 |
|
38 | | -Когда `main` готов к проверке на стенде: |
| 40 | +Делайте, когда на **`main`** уже есть нужная версия (например `0.7.3`) и вы **локально** убедились, что сборка ок. |
39 | 41 |
|
40 | | -1. PR **`main` → `staging`** (база `staging`, head `main`) |
41 | | -2. Разрешить конфликты, если есть (редко, если `staging` регулярно обновлять) |
42 | | -3. Merge → деплой с ветки **`staging`** (настройка сервера — [DEPLOYMENT.md](./DEPLOYMENT.md)) |
43 | | -4. Версия на стенде = версия в `main` (из «О программе» / `package.json`) |
| 42 | +### Чеклист перед PR на `staging` |
44 | 43 |
|
45 | | -Отдельного bump версии при merge в `staging` **нет** — иначе тест и интеграция разъедутся. |
| 44 | +- [ ] `git checkout main && git pull` (включая коммит `chore(version)`, если был) |
| 45 | +- [ ] `npm ci` (или `npm install`) |
| 46 | +- [ ] `npm run build` без ошибок |
| 47 | +- [ ] `npm run dev` — smoke: вход, комната, ключевые сценарии фичи |
| 48 | +- [ ] Миграции: `npm run db:deploy` на **тестовой** БД стенда (не на прод) |
| 49 | +- [ ] В PR указать версию: **«Promote v0.7.3 to staging for QA»** |
46 | 50 |
|
47 | | ---- |
| 51 | +### PR на стенд |
| 52 | + |
| 53 | +1. GitHub → **New pull request**: base **`staging`**, compare **`main`** |
| 54 | +2. Описание для тестировщиков: что проверять, известные ограничения |
| 55 | +3. **CI (build)** зелёный, конфликтов нет → **Merge** |
| 56 | +4. Деплой с ветки **`staging`** на тест-сервер ([DEPLOYMENT.md](./DEPLOYMENT.md)) |
| 57 | +5. **Сообщение тестировщикам** (чат / issue), например: |
48 | 58 |
|
49 | | -## Конфликты: когда и как |
| 59 | + > Стенд обновлён. Версия для отчётов: **0.7.3** (О программе → номер версии). |
| 60 | + > В баге указывайте: версию, браузер, шаги. |
50 | 61 |
|
51 | | -| Этап | Что видите | Что делать | |
52 | | -|------|------------|------------| |
53 | | -| PR в `main` | GitHub: **Can’t merge**, conflicts | Локально: `git checkout feature/…`, `git merge main`, правка `<<<<`, `git push` | |
54 | | -| PR `main` → `staging` | То же | `git checkout staging`, `git pull`, `git merge main` в PR-ветку или в `staging` по инструкции GitHub | |
55 | | -| После merge | Нет «тихих» конфликтов в git | — | |
56 | | -| Доска Retrogen (409) | Два редактора одной комнаты | Логика приложения, не git | |
| 62 | +### Фиксация версии для отчётов (рекомендуется) |
57 | 63 |
|
58 | | -**Защита ветки** (см. [GITHUB_BRANCH_PROTECTION.md](./GITHUB_BRANCH_PROTECTION.md)): |
| 64 | +После merge PR в `staging`, на коммите стенда: |
59 | 65 |
|
60 | | -- в `main` нельзя merge с конфликтами (GitHub не даст кнопку); |
61 | | -- можно требовать **актуальную ветку** (`main` обновлён перед merge) и **зелёный CI**. |
| 66 | +```bash |
| 67 | +git checkout staging && git pull |
| 68 | +VER=$(node -p "require('./package.json').version") |
| 69 | +git tag -a "qa/v${VER}" -m "QA build on staging" |
| 70 | +git push origin "qa/v${VER}" |
| 71 | +``` |
| 72 | + |
| 73 | +Тег **`qa/v0.7.3`** — точная точка в git, если нужно воспроизвести баг. Номер для людей — тот же **`0.7.3`** в UI. |
62 | 74 |
|
63 | | -Автоматически конфликты **не решаются** — только показываются; исправление и новый push — **вы**. |
| 75 | +Повторная выкладка на тот же стенд без смены версии на `main` не нужна; новая выкладка — когда на `main` уже **0.7.4** и снова прошли локальные тесты. |
64 | 76 |
|
65 | 77 | --- |
66 | 78 |
|
67 | | -## Что автоматизировано, что нет |
| 79 | +## Конфликты |
| 80 | + |
| 81 | +| Этап | Действие | |
| 82 | +|------|----------| |
| 83 | +| PR в `main` | GitHub блокирует merge → `git merge main` в feature-ветку, правка, push | |
| 84 | +| PR `main` → `staging` | То же; base — **текущий** `staging`, head — **main** | |
| 85 | +| Доска (409) | Не git — логика приложения | |
| 86 | + |
| 87 | +Защита веток: [GITHUB_BRANCH_PROTECTION.md](./GITHUB_BRANCH_PROTECTION.md). |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## Автоматизация |
68 | 92 |
|
69 | 93 | | Действие | Авто? | |
70 | 94 | |----------|--------| |
71 | | -| Сборка на PR (CI) | Да | |
72 | | -| Блок merge при конфликте | Да (GitHub + настройки) | |
73 | | -| Bump 2/3 цифры после merge в `main` | Да | |
74 | | -| Push в `main` без PR | Нет (если включена защита) | |
75 | | -| Обновление `staging` | Нет — PR вручную | |
76 | | -| Прод (1-я цифра) | Нет — [ADMIN.md](./ADMIN.md) | |
77 | | -| CHANGELOG | Нет — вручную / `npm run changelog:append` | |
| 95 | +| CI на PR в `main` / `staging` | Да | |
| 96 | +| Bump версии при merge в `main` | Да | |
| 97 | +| Обновление `staging` | **Нет** — только PR после локальных тестов | |
| 98 | +| Тег `qa/v…` | Вручную (рекомендуется) | |
| 99 | +| Прод | [ADMIN.md](./ADMIN.md) | |
78 | 100 |
|
79 | 101 | --- |
80 | 102 |
|
81 | | -## Labels (GitHub) |
82 | | - |
83 | | -`version:minor`, `version:patch`, `version:skip` — для бота версий. |
| 103 | +## Labels |
84 | 104 |
|
85 | | -Опционально: `ready-for-staging` на PR в `main`, когда готовы к выкладке на тест после merge. |
| 105 | +- `version:minor` / `version:patch` / `version:skip` — бот версий на **main** |
| 106 | +- `qa-request` (создайте сами) — PR в `main` готов к выкладке на стенд после merge |
0 commit comments