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

5.0 KiB
Raw Blame History

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):

#!/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:

# 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>/:

    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:

    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:

    git add .
    git commit -m "Initial backup of frontend_<NEW_PORT>"
    
  4. Оновити docs/SITES.md — додати рядок з портом, доменом, кластером.

Як зробити локальну зміну

  1. Sync прод стан:

    cd ~/backup_<port>
    ./sync.sh
    git status               # перевір чи прод змінився під час твоєї роботи
    
  2. Edit: редагуй views/, static/, etc. НЕ йди у /home/nosfortube/.

  3. Commit локально:

    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 #1.


Source: gocc1 + gocc2 + gocc4 audits 2026-04-30.