Files
vtube/docs/SYNC_WORKFLOW.md
goboss a9db23dfa4 initial: tubev infrastructure docs
- CLAUDE.md lean entry-point + index
- BOT_WORKFLOW.md dispatch rules + no-make-work + recommendations cadence
- SITES.md 14 ports inventory
- SYNC_WORKFLOW.md 2 sync paradigms
- MODULES.md module map + DEL_/test/obfuscated flags
- REFACTOR_RULES.md REFACTOR vs CLEANUP vs BUG vs FEATURE
- RECOMMENDATIONS.md initial backlog from gocc1+2+3+4 audits 2026-04-30
- docs/roles/ 4 bot roles
2026-04-30 14:18:23 +00:00

131 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# tubev — Sync Workflow
`sync.sh` копіює фронтенд з prod (`/home/nosfortube/frontend_<port>/`) → backup (`~/backup_<port>/`).
## Дві парадигми
### Group A — rsync mirror (7 сайтів)
**Сайти:** 8084, 8085, 8100, 8102, 8107, 8126, 8131
**Шаблон (12 рядків, ідентичний після port-mask):**
```bash
#!/bin/bash
SRC="/home/nosfortube/frontend_<port>"
DST="/home/w4/backup_<port>"
# Mirror views/
rsync -a --delete --exclude='.git' "$SRC/views/" "$DST/views/"
# Mirror lib/<port>/
mkdir -p "$DST/lib/<port>"
rsync -a --delete "$SRC/lib/<port>/" "$DST/lib/<port>/"
```
**Властивості:**
- `--delete` → backup завжди = SRC. Drift=0.
- Підтягує ВСЕ під `views/`, включно зі сміттям (`*copy*`, `*bak*`, `_test`, `DEL_*`).
- Безпечно для drift.
### Group B — selective cp (7 сайтів)
**Сайти:** 8081, 8086, 8112, 8120, 8129, 8133, 8148
**Pattern:** explicit allowlist файлів через `cp` per-file.
| Site | Lines | Особливість |
|------|-------|-------------|
| 8081 | 46 | Templates + JS allowlist; profile_* + videojs-v10 |
| 8086 | 36 | header/footer + ~14 modules + minimal css/js |
| 8112 | 50 | Templates з ad/no-ad варіантами + banners + player + var.lua |
| 8120 | 46 | Templates + 14 modules + 5 css + forms + dropzone JS |
| 8129 | 36 | Templates + 7 modules + 5 css + timeline JS |
| 8133 | 37 | Templates + 11 modules + 9 banners + static html |
| 8148 | **79** | + auto-rebuild ad-bundle (md5) + pjs/timeline-pjs/tests |
**Властивості:**
- Drift-prone: якщо у prod з'являється файл якого нема у allowlist — backup його не знає.
- Швидко (sync лише потрібного).
- Жорсткий контроль що бекапиться.
### 8148 — особливий
`sync.sh` 8148 не лише копіює, а й **виконує MUTATION на prod source:**
```bash
# Builds ad-bundle, computes md5, replaces ?v=HASH у layout.etlua
build-ad-bundle.sh
HASH=$(md5sum ad-bundle.js | cut -d' ' -f1)
sed -i "s/ad-bundle.js?v=[a-f0-9]*/ad-bundle.js?v=$HASH/" layout.etlua
```
Це дельта sync ↔ build. Інші sync.sh — read-only operations. **Рекомендація** — винести build у окремий скрипт (див. RECOMMENDATIONS.md).
## Як додати новий сайт
1. **Створити `~/backup_<NEW_PORT>/`:**
```bash
mkdir -p ~/backup_<NEW_PORT>
cd ~/backup_<NEW_PORT>
git init
git remote add origin <repo-url-from-developer>
```
2. **Скопіювати rsync-template (Group A) — recommended:**
```bash
cat > sync.sh <<'SHELL'
#!/bin/bash
SRC="/home/nosfortube/frontend_<NEW_PORT>"
DST="/home/w4/backup_<NEW_PORT>"
rsync -a --delete --exclude='.git' "$SRC/views/" "$DST/views/"
mkdir -p "$DST/lib/<NEW_PORT>"
rsync -a --delete "$SRC/lib/<NEW_PORT>/" "$DST/lib/<NEW_PORT>/"
SHELL
chmod +x sync.sh
./sync.sh
```
3. **Закомітити перший snapshot:**
```bash
git add .
git commit -m "Initial backup of frontend_<NEW_PORT>"
```
4. **Оновити `docs/SITES.md`** — додати рядок з портом, доменом, кластером.
## Як зробити локальну зміну
1. **Sync прод стан:**
```bash
cd ~/backup_<port>
./sync.sh
git status # перевір чи прод змінився під час твоєї роботи
```
2. **Edit:** редагуй `views/`, `static/`, etc. **НЕ йди у `/home/nosfortube/`**.
3. **Commit локально:**
```bash
git add <files>
git commit -m "<scope>: <change>"
```
4. **Push до prod:** **goboss НЕ пушить**. Це робить розробник через свій процес. Боти лишають коміти у власному worktree (`~/gocc{N}/<repo>/`), goboss збирає через cherry-pick.
5. **Verify:** preview/test domain механізм наразі не ідентифіковано (питання до розробника).
## Git remote
Тільки **8112** має `origin = git@git.tubev.sex:nosfotube/frontend.git`. Інші 13 — local-only repos. Це означає що pull/push між backup'ами не централізовано.
**Рекомендація:** з'ясувати у розробника правильний git workflow (чи всі сайти ідуть через `git.tubev.sex`, чи інакше).
## Рекомендація: уніфікація на rsync (S, ~1h)
7 selective sync.sh роблять те саме що 7 rsync, але через ad-hoc allowlists. Це drift-magnet (gocc1 знайшов 8086: 30+ файлів на disk не у sync.sh; 8112: untracked `rotator/`, `lib/`, `nginx.conf`).
Краще — один template на 14 сайтів. Деталі: **[docs/RECOMMENDATIONS.md](RECOMMENDATIONS.md)** #1.
---
*Source: gocc1 + gocc2 + gocc4 audits 2026-04-30.*