Przejdź do głównej zawartości

Skrypty repozytorium

Skrypty repozytorium to skrypty powłoki, które konfigurujesz dla poszczególnych repozytoriów (Ustawienia → Repozytoria → ikona terminala w wierszu repozytorium), a które serwer Control Center uruchamia względem worktree przestrzeni tego repozytorium — izolowanego checkoutu pod <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/, w którym pracują agenci.

Wyróżniamy dwa rodzaje:

Skrypt Kiedy się uruchamia Do czego służy
Skrypt konfiguracyjny Zaraz po przygotowaniu worktree dla przestrzeni Instalowanie zależności, generowanie plików, kopiowanie .env
Skrypt archiwizacji Tuż przed zniszczeniem worktree lub odzyskaniem go przez GC Sprzątanie zasobów poza worktree (sieci Dockera, tunele, stan zewnętrzny)

Oba skrypty uruchamiają się przez bash -lc (powłoka logowania, więc zainstalowane przez Homebrew/nvm narzędzia są dostępne w PATH), z worktree jako katalogiem roboczym i ustawionymi następującymi zmiennymi środowiskowymi:

Zmienna Wartość
CC_WORKSPACE_PATH Worktree (katalog roboczy skryptu)
CC_ROOT_PATH Zarejestrowane repozytorium źródłowe — Twój własny checkout
CC_SPACE_ID Przestrzeń, do której należy worktree
CC_SPACE_NAME Nazwa wyświetlana przestrzeni
CC_REPO_NAME Nazwa wyświetlana repozytorium

Na przykład skrypt konfiguracyjny, który instaluje zależności i dociąga ignorowany przez gita plik .env repozytorium:

Okno terminala
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Skrypt konfiguracyjny, który zakończy się kodem wyjścia różnym od zera (albo przekroczy swój 5-minutowy limit czasu), powoduje niepowodzenie przygotowania przestrzeni: przestrzeń pokazuje stan niepowodzenia z możliwością ponowienia, a końcówka danych wyjściowych uruchomienia zostaje zapisana. Ponowienie przygotowuje przestrzeń od zera, z czystego worktree, i uruchamia skrypt ponownie — pisz skrypty konfiguracyjne tak, aby ponowne uruchomienie po częściowej instalacji działało (menedżery pakietów już tak się zachowują).
  • Skrypt archiwizacji działa w trybie najlepszych starań: niepowodzenie (lub jego 2-minutowy limit czasu) zostaje zapisane, ale nigdy nie blokuje usunięcia. Archiwizacja uruchamia się na ścieżkach GC, na których nie ma nikogo, kto mógłby odpowiedzieć na monit (usunięcie przestrzeni, scalenie PR-a, zaplanowane sprzątanie).

Skrypt konfiguracyjny uruchamia się wyłącznie na świeżym worktree: ponowne wysłanie agentów do ciepłej przestrzeni używa ponownie istniejącego checkoutu i nie płaci drugi raz za instalację.

Każde wykonanie jest zapisywane wraz ze swoim statusem, czasem trwania, kodem wyjścia i ograniczoną końcówką danych wyjściowych; widać je w tym samym oknie ustawień, pod „Ostatnie uruchomienia” (subskrypcja repos.watchScriptRuns strumieniuje je na żywo).

Skrypty to powłoka, którą wykonuje serwer, więc ich pisanie jest ograniczone do administratorów obszaru roboczego i chronione przez klasę akcji processSpawn — tę samą siatkę guardraili, która obejmuje każdą inną operację uruchamiającą proces.