ข้ามไปยังเนื้อหา

สคริปต์รีโป

สคริปต์รีโปคือสคริปต์เชลล์ที่คุณกำหนดค่าแยกตามรีโป (การตั้งค่า → รีโพสิทอรี → ไอคอนเทอร์มินัลบนแถวของรีโป) ซึ่งเซิร์ฟเวอร์ของ Control Center รันกับ worktree ของสเปซ ของรีโปนั้น — เช็กเอาต์ที่แยกโดดใต้ <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ ซึ่งเอเจนต์ทำงานอยู่

มีสองชนิด:

สคริปต์ รันเมื่อไร ใช้ทำอะไร
ตั้งค่า ทันทีหลังจาก worktree ถูกจัดเตรียมให้สเปซ ติดตั้งดีเพนเดนซี สร้างไฟล์ คัดลอก .env
เก็บถาวร ก่อนที่ worktree จะถูกทำลายหรือถูกกวาดเก็บขยะ ทำความสะอาดทรัพยากรนอก worktree (เครือข่าย docker, อุโมงค์, สถานะภายนอก)

สคริปต์ทั้งสองรันผ่าน bash -lc (เชลล์ล็อกอิน เครื่องมือที่ติดตั้งผ่าน Homebrew/nvm จึงอยู่บน PATH) โดยมี worktree เป็นไดเรกทอรีทำงาน และตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้:

ตัวแปร ค่า
CC_WORKSPACE_PATH worktree (cwd ของสคริปต์)
CC_ROOT_PATH รีโปต้นทางที่ลงทะเบียนไว้ — เช็กเอาต์ของคุณเอง
CC_SPACE_ID สเปซที่ worktree สังกัดอยู่
CC_SPACE_NAME ชื่อที่แสดงของสเปซ
CC_REPO_NAME ชื่อที่แสดงของรีโป

ตัวอย่าง สคริปต์ตั้งค่าที่ติดตั้งดีเพนเดนซีและนำ .env ที่ถูก gitignore ไว้ของรีโปเข้ามา:

หน้าต่างเทอร์มินัล
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • สคริปต์ ตั้งค่า ที่จบด้วยรหัสออกที่ไม่ใช่ศูนย์ (หรือเกินเวลาหมดเวลา 5 นาที) ทำให้การจัดเตรียมสเปซล้มเหลว: สเปซจะแสดงสถานะล้มเหลวพร้อมปุ่มลองใหม่ และส่วนท้ายของเอาต์พุตของการรันจะถูกบันทึกไว้ การลองใหม่จะจัดเตรียมจาก worktree ที่สะอาดแล้วรันสคริปต์อีกครั้ง — เขียนสคริปต์ตั้งค่าให้การรันซ้ำหลังการติดตั้งที่ทำค้างไว้ยังทำงานได้ (ตัวจัดการแพ็กเกจมีพฤติกรรมเช่นนี้อยู่แล้ว)
  • สคริปต์ เก็บถาวร เป็นแบบพยายามเต็มที่: ความล้มเหลว (หรือการหมดเวลา 2 นาที) จะถูกบันทึกไว้แต่ ไม่เคยกั้นการลบ สคริปต์เก็บถาวรรันบนเส้นทาง GC ที่ไม่มีใครตอบคำถามได้ (ลบสเปซ รวม PR แล้ว หรืองานทำความสะอาดตามกำหนดเวลา)

สคริปต์ตั้งค่ารันเฉพาะบน worktree ที่ใหม่เท่านั้น: การสั่งงานเอเจนต์ซ้ำเข้าไปในสเปซที่อุ่นอยู่จะใช้เช็กเอาต์เดิมและไม่ต้องจ่ายค่าติดตั้งซ้ำอีก

การรันทุกครั้งจะถูกบันทึกพร้อมสถานะ ระยะเวลา รหัสออก และส่วนท้ายของเอาต์พุตแบบจำกัดความยาว ซึ่งมองเห็นได้ในกล่องโต้ตอบการตั้งค่าเดียวกันใต้ “รันล่าสุด” (การสมัครรับ repos.watchScriptRuns จะสตรีมข้อมูลนี้แบบสด)

สคริปต์เป็นเชลล์ที่ เซิร์ฟเวอร์ เป็นผู้เรียกใช้ การเขียนสคริปต์จึงจำกัดไว้เฉพาะแอดมินเวิร์กสเปซ และถูกกั้นด้วยคลาสการกระทำ processSpawn — ตาข่ายกฎคุมชุดเดียวกับที่กั้นการดำเนินการสปอว์นโปรเซสอื่น ๆ ทุกอย่าง