콘텐츠로 이동

저장소 스크립트

저장소 스크립트는 저장소별로 구성하는 셸 스크립트입니다(설정 → 리포지토리 → 저장소 행의 터미널 아이콘). Control Center의 서버는 이 스크립트를 해당 저장소의 스페이스 워크트리, 즉 에이전트가 작업하는 <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ 아래의 격리된 체크아웃을 대상으로 실행합니다.

종류는 두 가지입니다.

스크립트 실행 시점 용도
셋업 스페이스에 워크트리가 프로비저닝된 직후 의존성 설치, 파일 생성, .env 복사
아카이브 워크트리가 삭제되거나 가비지 컬렉션되기 직전 워크트리 바깥의 리소스 정리(docker 네트워크, 터널, 외부 상태)

두 스크립트 모두 bash -lc(로그인 셸이므로 Homebrew/nvm으로 설치한 도구가 PATH에 있습니다)로 실행되며, 작업 디렉터리는 워크트리이고 다음 환경 변수가 설정됩니다.

변수 값
CC_WORKSPACE_PATH 워크트리(스크립트의 cwd)
CC_ROOT_PATH 등록된 소스 저장소 — 본인의 체크아웃
CC_SPACE_ID 워크트리가 속한 스페이스
CC_SPACE_NAME 스페이스의 표시 이름
CC_REPO_NAME 저장소의 표시 이름

예를 들어 의존성을 설치하고 저장소의 gitignore된 .env를 가져오는 셋업 스크립트는 다음과 같습니다.

터미널 창
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • 셋업 스크립트가 0이 아닌 코드로 종료되거나 5분 타임아웃을 초과하면 스페이스 프로비저닝이 실패합니다. 스페이스는 재시도와 함께 실패 상태를 표시하고, 그 실행의 출력 마지막 부분이 기록됩니다. 재시도하면 깨끗한 워크트리에서 프로비저닝한 뒤 스크립트를 다시 실행합니다 — 설치가 일부만 끝난 뒤 다시 실행해도 동작하도록 셋업 스크립트를 작성하세요(패키지 관리자는 이미 그렇게 동작합니다).
  • 아카이브 스크립트는 최선 노력 방식입니다. 실패하거나 2분 타임아웃을 넘겨도 기록될 뿐 삭제를 결코 막지 않습니다. 아카이브는 프롬프트에 응답할 사람이 없는 GC 경로(스페이스 삭제, PR 병합, 예약 정리)에서 실행됩니다.

셋업은 새 워크트리에서만 실행됩니다. 이미 준비된 스페이스에 에이전트를 다시 디스패치하면 기존 체크아웃을 재사용하며 설치 비용을 다시 치르지 않습니다.

모든 실행은 상태, 소요 시간, 종료 코드와 길이가 제한된 출력 마지막 부분과 함께 기록되며, 같은 설정 대화 상자의 최근 실행 아래에서 볼 수 있습니다 (repos.watchScriptRuns 구독이 이를 실시간으로 스트리밍합니다).

스크립트는 서버가 실행하는 셸이므로, 작성은 워크스페이스 관리자로 제한되며 processSpawn 액션 클래스로 보호됩니다. 다른 모든 프로세스 생성 작업에 관문을 세우는 것과 같은 가드레일 체계입니다.