Tovább a tartalomhoz

Repószkriptek

A repószkriptek olyan shell-szkriptek, amelyeket repónként állít be (Beállítások → Tárolók → a repó sorában lévő terminálikon), és amelyeket a Control Center szervere az adott repó egy térhez tartozó worktree-jén futtat — azon az elszigetelt checkouton, amely a <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ alatt található, és ahol az ügynökök dolgoznak.

Két fajtájuk van:

Szkript Mikor fut Mire használja
Telepítés Közvetlenül azután, hogy egy térhez worktree-t provisionálnak Függőségek telepítése, fájlok generálása, .env másolása
Archiválás Nem sokkal azelőtt, hogy egy worktree megsemmisül vagy szemétgyűjtésre kerül A worktree-n kívüli erőforrások (docker-hálózatok, alagutak, külső állapot) takarítása

Mindkét szkript bash -lc útján fut (bejelentkezési shell, így a Homebrew-val vagy nvm-mel telepített eszközök is rajta vannak a PATH-on), a worktree-t használva munkakönyvtárként, és a következő környezeti változókkal:

Változó Érték
CC_WORKSPACE_PATH A worktree (a szkript munkakönyvtára)
CC_ROOT_PATH A regisztrált forrásrepó — a saját checkoutja
CC_SPACE_ID A tér, amelyhez a worktree tartozik
CC_SPACE_NAME A tér megjelenített neve
CC_REPO_NAME A repó megjelenített neve

Például egy telepítőszkript, amely telepíti a függőségeket és behozza a repó gitignore-olt .env fájlját:

Terminál
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Egy nem nulla kilépési kóddal záruló (vagy az 5 perces időkorlátját túllépő) telepítőszkript sikertelenné teszi a tér provisionálását: a tér a sikertelen állapotot egy újrapróbálkozási lehetőséggel együtt mutatja, és a futtatás kimenetének vége rögzítésre kerül. Az újrapróbálkozás tiszta worktree-ből provisionál, és újra lefuttatja a szkriptet — a telepítőszkripteket úgy írja meg, hogy egy részleges telepítés utáni ismételt futás is működjön (a csomagkezelők már így viselkednek).
  • Az archiválószkript a lehetőségekhez mérten fut: a hibája (vagy a 2 perces időkorlát túllépése) rögzítésre kerül, de soha nem blokkolja a törlést. Az archiválás olyan GC-utakon fut, ahol nincs, aki válaszoljon egy kérdésre (tér törölve, PR összefésülve, ütemezett takarítás).

A telepítés csak friss worktree-n fut: ha ügynököket küld újra egy meleg térbe, az a meglévő checkoutot használja, és nem fizeti meg újra a telepítést.

Minden végrehajtás rögzítésre kerül az állapotával, időtartamával, kilépési kódjával és a kimenet egy korlátos végével; ez ugyanabban a beállítási párbeszédablakban látható a „Legutóbbi futtatások” alatt (a repos.watchScriptRuns feliratkozás élőben streameli).

A szkriptek olyan shell, amelyet a szerver hajt végre, ezért írásuk munkaterület-adminisztrátorokra korlátozódik, és a processSpawn műveletosztály őrzi — ugyanaz a korlátháló, amely minden más folyamatindító műveletet is szabályoz.