Перейти к содержимому

Скрипты репозитория

Скрипты репозитория — это 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 install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Скрипт настройки, завершившийся с ненулевым кодом (или превысивший таймаут в 5 минут), срывает подготовку пространства: пространство показывает сбойное состояние с возможностью повтора, а хвост вывода запуска записывается. Повтор подготавливает пространство из чистого worktree и снова запускает скрипт — пишите скрипты настройки так, чтобы повторный запуск после частичной установки работал (менеджеры пакетов уже ведут себя именно так).
  • Скрипт архивации работает по принципу «насколько получится»: сбой (или таймаут в 2 минуты) записывается, но никогда не блокирует удаление. Архивация выполняется на путях сборки мусора, где некому ответить на запрос подтверждения (пространство удалено, PR смержен, плановая очистка).

Настройка выполняется только для свежего worktree: повторная отправка агентов в уже прогретое пространство переиспользует существующую рабочую копию и не оплачивает установку заново.

Каждое выполнение записывается вместе со своим статусом, длительностью, кодом выхода и ограниченным хвостом вывода; всё это видно в том же диалоге настроек в разделе Недавние запуски (подписка repos.watchScriptRuns передаёт их в реальном времени).

Скрипты — это shell, который выполняет сервер, поэтому их написание разрешено только администраторам рабочего пространства и защищено классом действий processSpawn — той же сетью ограничений, которая отсекает любую другую операцию запуска процесса.