رفتن به محتوا

اسکریپت‌های مخزن

اسکریپت‌های مخزن، اسکریپت‌های پوسته‌ای‌اند که به‌ازای هر مخزن پیکربندی می‌کنید (تنظیمات → مخزن‌ها → آیکون ترمینال در سطر آن مخزن) و سرور Control Center آن‌ها را روی worktree یک فضا از آن مخزن اجرا می‌کند — همان چک‌اوت ایزوله زیر <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ که عامل‌ها در آن کار می‌کنند.

دو نوع وجود دارد:

اسکریپت زمان اجرا کاربرد
راه‌اندازی درست پس از آماده‌سازی یک worktree برای یک فضا نصب وابستگی‌ها، تولید فایل، کپی‌کردن .env
بایگانی درست پیش از نابودی یا جمع‌آوری زبالهٔ یک worktree پاک‌سازی منابع بیرون از worktree (شبکه‌های docker، تونل‌ها، وضعیت بیرونی)

هر دو اسکریپت با bash -lc اجرا می‌شوند (یک پوستهٔ ورود، پس ابزارهای نصب‌شده با Homebrew/nvm روی PATH هستند) و worktree پوشهٔ کاری آن‌هاست؛ این متغیرهای محیطی هم تنظیم می‌شوند:

متغیر مقدار
CC_WORKSPACE_PATH همان worktree (پوشهٔ کاری اسکریپت)
CC_ROOT_PATH مخزن مبدأ ثبت‌شده — چک‌اوت خودتان
CC_SPACE_ID فضایی که worktree به آن تعلق دارد
CC_SPACE_NAME نام نمایشی فضا
CC_REPO_NAME نام نمایشی مخزن

برای نمونه، یک اسکریپت راه‌اندازی که وابستگی‌ها را نصب می‌کند و .env نادیده‌گرفته‌شدهٔ مخزن را می‌آورد:

پنجرهٔ ترمینال
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • اسکریپت راه‌اندازییی که با کد خروج غیرصفر خارج شود (یا از مهلت ۵ دقیقه‌ای‌اش بگذرد)، آماده‌سازی فضا را ناموفق می‌کند: فضا وضعیت ناموفق را همراه با یک تلاش مجدد نشان می‌دهد و دنبالهٔ خروجی اجرا ثبت می‌شود. تلاش مجدد از یک worktree پاک آماده‌سازی می‌کند و اسکریپت را دوباره اجرا می‌کند — اسکریپت‌های راه‌اندازی را طوری بنویسید که اجرای دوباره پس از یک نصب نیمه‌کاره کار کند (مدیرهای بسته از قبل همین رفتار را دارند).
  • اسکریپت بایگانی با تلاش حداکثری اجرا می‌شود: شکست آن (یا مهلت ۲ دقیقه‌ای‌اش) ثبت می‌شود اما هرگز حذف را مسدود نمی‌کند. بایگانی روی مسیرهای GC اجرا می‌شود، جایی که کسی نیست به پرامپتی پاسخ دهد (فضا حذف شده، PR ادغام شده، پاک‌سازی زمان‌بندی‌شده).

راه‌اندازی فقط روی یک worktree تازه اجرا می‌شود: اعزام دوبارهٔ عامل‌ها به یک فضای گرم، همان چک‌اوت موجود را دوباره به کار می‌گیرد و هزینهٔ نصب را دوباره نمی‌پردازد.

هر اجرا با وضعیت، مدت، کد خروج و یک دنبالهٔ خروجی محدود ثبت می‌شود که در همان پنجرهٔ تنظیمات زیر «اجراهای اخیر» دیده می‌شود (اشتراک repos.watchScriptRuns آن را به‌صورت زنده جریانی می‌فرستد).

اسکریپت‌ها پوسته‌ای هستند که سرور اجرا می‌کند، پس نوشتنشان محدود به مدیران فضای کاری است و با کلاس اقدام processSpawn محافظت می‌شود — همان تور گاردریلی که دروازه‌بان هر عملیات فرایندساز دیگر است.