Aller au contenu

Scripts de dépôt

Les scripts de dépôt sont des scripts shell que vous configurez dépôt par dépôt (Paramètres → Dépôts → l’icône de terminal sur la ligne d’un dépôt) et que le serveur de Control Center exécute sur l’arbre de travail d’un espace pour ce dépôt — la copie de travail isolée située sous <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/, où travaillent les agents.

Il en existe deux types :

Script Quand il s’exécute Utilisez-le pour
Configuration Juste après le provisionnement d’un arbre de travail pour un espace Installer les dépendances, générer des fichiers, copier le fichier .env
Archivage Juste avant qu’un arbre de travail ne soit détruit ou récupéré par le GC Nettoyer les ressources extérieures à l’arbre de travail (réseaux Docker, tunnels, état externe)

Les deux scripts s’exécutent via bash -lc (un shell de connexion, donc les outils installés par Homebrew/nvm sont dans le PATH) avec l’arbre de travail comme répertoire de travail, et les variables d’environnement suivantes définies :

Variable Valeur
CC_WORKSPACE_PATH L’arbre de travail (le répertoire de travail du script)
CC_ROOT_PATH Le dépôt source enregistré — votre propre copie de travail
CC_SPACE_ID L’espace auquel appartient l’arbre de travail
CC_SPACE_NAME Le nom d’affichage de l’espace
CC_REPO_NAME Le nom d’affichage du dépôt

Par exemple, un script de configuration qui installe les dépendances et récupère le fichier .env ignoré par Git du dépôt :

Fenêtre de terminal
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Un script de configuration qui se termine avec un code non nul (ou qui dépasse son délai d’expiration de 5 minutes) fait échouer le provisionnement de l’espace : l’espace affiche l’état d’échec avec une nouvelle tentative, et la fin de la sortie de l’exécution est enregistrée. Une nouvelle tentative effectue le provisionnement à partir d’un arbre de travail propre et relance le script — écrivez vos scripts de configuration de sorte qu’une réexécution après une installation partielle fonctionne (les gestionnaires de paquets se comportent déjà ainsi).
  • Un script d’archivage est exécuté au mieux : un échec (ou son délai d’expiration de 2 minutes) est enregistré, mais ne bloque jamais la suppression. L’archivage s’exécute sur les chemins de GC, où personne ne peut répondre à une invite (espace supprimé, PR fusionnée, nettoyage planifié).

La configuration ne s’exécute que sur un arbre de travail neuf : le lancement de nouveaux agents dans un espace déjà chaud réutilise la copie de travail existante et n’a pas à repayer l’installation.

Chaque exécution est enregistrée avec son état, sa durée, son code de sortie et une fin de sortie bornée, visible dans la même boîte de dialogue de paramètres, sous « Exécutions récentes » (l’abonnement repos.watchScriptRuns la diffuse en direct).

Les scripts étant du shell que le serveur exécute, leur écriture est réservée aux administrateurs d’espace de travail et encadrée par la classe d’actions processSpawn — le même filet de garde-fous que celui qui encadre toute autre opération de lancement de processus.