# Расширения: git-репы на первый bootstrap Срабатывает на каждом `up` (и `seed-extensions`): - нет каталога → `git clone`; - каталог есть → по умолчанию `fetch` + `reset --hard` на `ref` (или текущую ветку для уже установленных вне yaml); - `--no-update` / `UPDATE_GIT=false` → существующие репы не трогаем, только недостающие clone. Также обновляется сам SwarmUI в `/opt/swarmui` (тот же флаг). Два разных мира — не путать: | Вид | Куда клонировать | Что это | | --- | --- | --- | | `swarmui` | `/mnt/swarm_data/Extensions/` → `/opt/swarmui/src/Extensions/` | C# extension SwarmUI (класс `: Extension`). После рестарта подхватывается сам | | `comfy` | `/mnt/swarm_data/DLNodes/` → `…/ComfyUIBackend/DLNodes/` | Custom nodes ComfyUI (Python). `requirements.txt` ставит SwarmUI/Comfy при первом старте backend | Пустой манифест или его нет — ничего не клонируем, SwarmUI как из коробки. Это не связано с Civitai-токеном. ## Манифест Пример: [`extensions.example.yaml`](../extensions.example.yaml). Рабочая копия: `extensions.yaml` в корне репо (или `EXTENSIONS_MANIFEST`). ```yaml swarmui: - url: https://github.com/example/SwarmUI-SomeExt.git ref: main # ветка, тег или commit SHA; по умолчанию HEAD default branch dir: SomeExt # имя папки; по умолчанию последний сегмент URL без .git comfy: - url: https://github.com/example/ComfyUI-Something.git ref: v1.2.0 ``` В git репозитория gpu-rent не коммитить рабочий список с приватными URL. В примере — вымышленные репы. ## Когда в жизненном цикле Idle-killer ещё не вооружён. Git нужен на VM (`apt` в bootstrap, если нет в образе). 1. Маркер FS data volume. 2. **Clone extensions** (этот документ). Маркер `/mnt/swarm_data/.gpu-rent-extensions-seeded` после успешного прохода всех строк. 3. Civitai-seed моделей ([models.md](models.md)), если есть токен. 4. Первый `systemctl start swarmui`: видит `src/Extensions`, собирает их; ComfyUI ставит pip из DLNodes. 5. Backend Idle → idle-killer. Порядок 2→3 важен: расширения до старта UI, модели тоже до старта (чтобы не качать дефолт SwarmUI). Позже: `gpu-rent seed-extensions` — те же clone/fetch на живом диске, затем **рестарт** SwarmUI (иначе новый C# extension не подхватится). CLI предупреждает и делает `systemctl restart swarmui`, если VM жива. ## Clone на VM - `git clone --recurse-submodules`. - Если `ref` — ветка/тег: `--depth 1` + `checkout`. - Если `ref` похож на SHA: fetch этого commit (shallow может не хватить). - Каталог уже есть и `remote origin` совпадает с `url` → `fetch` + `checkout ref`, не `rm -rf`. - Каталог есть, origin другой → fail этой строки, не молча перезаписывать. Публичный HTTPS без секретов. Приватный репозиторий: - `GIT_TOKEN` в `.env` (GitHub: `x-access-token`; GitLab: `oauth2` / PAT). CLI подставляет в URL **только на VM**, не пишет токен в yaml и не в cloud-init. - Либо отдельный deploy key `/.gpu-rent/git_deploy` — v1.1, не обязательно сейчас. Не использовать `git://`. Только `https://` и `git@` + ключ. ## Сбой Одна строка упала (404, auth, сеть) — остальные можно продолжить; `up` в конце ненулевой, маркер seeded не ставить, повтор доклонирует. Не оставлять полупустой `.git`. ## Конфиг ```env EXTENSIONS_MANIFEST= # пусто = /extensions.yaml GIT_TOKEN= # опционально, для приватных https ```