דלגו לתוכן

סקריפטים למאגר

סקריפטים של מאגר הם סקריפטים של מעטפת שתגדירו לכל מאגר בנפרד (הגדרות → מאגרים → סמל הטרמינל בשורה של המאגר) ושהשרת של Control Center מריץ כנגד עץ העבודה של מרחב של אותו מאגר — ה-checkout המבודד תחת <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ שבו הסוכנים עובדים.

יש שני סוגים:

סקריפט מתי הוא רץ למה הוא משמש
הקמה מיד לאחר שמוקצה עץ עבודה למרחב התקנת תלויות, יצירת קבצים, העתקת .env
ארכוב ממש לפני שעץ עבודה נהרס או נאסף באשפה ניקוי משאבים מחוץ לעץ העבודה (רשתות Docker, מנהרות, מצב חיצוני)

שני הסקריפטים רצים דרך bash -lc (מעטפת התחברות, כך שכלים שהותקנו עם Homebrew/nvm נמצאים ב-PATH), כשעץ העבודה הוא תיקיית העבודה, ועם משתני הסביבה האלה:

משתנה ערך
CC_WORKSPACE_PATH עץ העבודה (ה-cwd של הסקריפט)
CC_ROOT_PATH המאגר המקורי הרשום — ה-checkout שלכם
CC_SPACE_ID המרחב שעץ העבודה שייך אליו
CC_SPACE_NAME שם התצוגה של המרחב
CC_REPO_NAME שם התצוגה של המאגר

לדוגמה, סקריפט הקמה שמתקין תלויות ומביא את ה-.env שנמצא ב-gitignore של המאגר:

חלון מסוף
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • סקריפט הקמה שיוצא עם קוד שונה מאפס (או חורג מהזמן הקצוב של 5 דקות) מכשיל את ההקצאה של המרחב: המרחב מציג את מצב הכשל עם ניסיון חוזר, וזנב הפלט של ההרצה נרשם. ניסיון חוזר מקצה עץ עבודה נקי ומריץ את הסקריפט שוב — כתבו סקריפטי הקמה כך שהרצה חוזרת אחרי התקנה חלקית תעבוד (מנהלי חבילות כבר מתנהגים כך).
  • סקריפט ארכוב פועל במאמץ מיטבי: כשל (או פקיעת הזמן הקצוב של 2 דקות) נרשם, אבל לעולם אינו חוסם מחיקה. הארכוב רץ בנתיבי איסוף אשפה שאין בהם מי שיענה לבקשה (מרחב שנמחק, בקשת משיכה שמוזגה, ניקוי מתוזמן).

ההקמה רצה רק על עץ עבודה חדש: שליחה חוזרת של סוכנים למרחב חם עושה שימוש חוזר ב-checkout הקיים ואינה משלמת שוב על ההתקנה.

כל הרצה נרשמת עם הסטטוס, משך הזמן, קוד היציאה וזנב פלט באורך מוגבל, והכול גלוי באותו דיאלוג הגדרות תחת “הרצות אחרונות” (המנוי repos.watchScriptRuns משדר אותה בזמן אמת).

הסקריפטים הם מעטפת שהשרת מריץ, ולכן כתיבתם שמורה למנהלי סביבת עבודה בלבד ומאובטחת על ידי מחלקת הפעולה processSpawn — אותה רשת מעקות בטיחות שחוסמת כל פעולה אחרת שמפעילה תהליך.