Скрипты репозитория
Скрипты репозитория — это shell-скрипты, которые вы настраиваете для каждого
репозитория (Настройки → Рабочее пространство → Репозитории → значок
терминала в строке репозитория), и которые сервер Control Center выполняет в
worktree пространства для этого репозитория — изолированной рабочей копии по
пути <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/, где работают
агенты.
Их два вида:
| Скрипт | Когда выполняется | Для чего |
|---|---|---|
| Настройка | Сразу после подготовки worktree для пространства | Установка зависимостей, генерация файлов, копирование .env |
| Архивация | Непосредственно перед удалением или сборкой мусора worktree | Очистка ресурсов вне worktree (сети Docker, туннели, внешнее состояние) |
Где выполняются скрипты
Заголовок раздела «Где выполняются скрипты»Оба скрипта выполняются через bash -lc (это login-shell, поэтому инструменты,
установленные через Homebrew/nvm, попадают в PATH), причём рабочим каталогом
служит worktree, а также заданы следующие переменные окружения:
| Переменная | Значение |
|---|---|
CC_WORKSPACE_PATH |
Worktree (рабочий каталог скрипта) |
CC_ROOT_PATH |
Зарегистрированный исходный репозиторий — ваша собственная рабочая копия |
CC_SPACE_ID |
Пространство, которому принадлежит worktree |
CC_SPACE_NAME |
Отображаемое имя пространства |
CC_REPO_NAME |
Отображаемое имя репозитория |
Например, скрипт настройки, который устанавливает зависимости и подхватывает
.env репозитория, игнорируемый Git:
pnpm installcp "$CC_ROOT_PATH/.env" .envpnpm run buildПоведение при сбоях
Заголовок раздела «Поведение при сбоях»- Скрипт настройки, завершившийся с ненулевым кодом (или превысивший таймаут в 5 минут), срывает подготовку пространства: пространство показывает сбойное состояние с возможностью повтора, а хвост вывода запуска записывается. Повтор подготавливает пространство из чистого worktree и снова запускает скрипт — пишите скрипты настройки так, чтобы повторный запуск после частичной установки работал (менеджеры пакетов уже ведут себя именно так).
- Скрипт архивации работает по принципу «насколько получится»: сбой (или таймаут в 2 минуты) записывается, но никогда не блокирует удаление. Архивация выполняется на путях сборки мусора, где некому ответить на запрос подтверждения (пространство удалено, PR смержен, плановая очистка).
Настройка выполняется только для свежего worktree: повторная отправка агентов в уже прогретое пространство переиспользует существующую рабочую копию и не оплачивает установку заново.
История запусков
Заголовок раздела «История запусков»Каждое выполнение записывается вместе со своим статусом, длительностью, кодом
выхода и ограниченным хвостом вывода; всё это видно в том же диалоге настроек в
разделе Недавние запуски (подписка repos.watchScriptRuns передаёт их в
реальном времени).
Разрешения
Заголовок раздела «Разрешения»Скрипты — это shell, который выполняет сервер, поэтому их написание
разрешено только администраторам рабочего пространства и защищено классом
действий processSpawn — той же сетью ограничений, которая отсекает любую
другую операцию запуска процесса.