رفتن به محتوا

ایجاد قالب پایپ‌لاین

قالب‌های پایپ‌لاین در تنظیمات فضای کاری ساخته می‌شوند. ورودی پایپ‌لاین‌ها در نوار کناری فضای کاری همان صف اجرا است، نه فهرست قالب‌ها — هیچ کنشی برای «ایجاد قالب» ندارد.

برای اینکه هر نوع گام، هر کلید بدنه و هر فیلد پیکربندی چه معنایی دارد، به مرجع گام‌های پایپ‌لاین نگاه کنید.

  1. به تنظیمات → فضای کاری → قالب‌های پایپ‌لاین بروید (/workspaces/<workspace-id>/settings/pipelines).
  2. قالب جدید را بزنید.

دیالوگی برای شناسه وجود ندارد. ویرایشگر بی‌درنگ روی یک اسکلت اولیه به نام پایپ‌لاین جدید باز می‌شود، با شناسه‌ای که خودکار تخصیص می‌یابد (pipeline_1، سپس pipeline_2، …). روی عنوان در سرصفحه کلیک کنید تا نامش را عوض کنید.

بوم خالی نیست: یک گرهٔ ورودی Trigger، یک گرهٔ عامل پرامپت با برچسب Step و یک نشانگر پایانی که اجرا را تمام می‌کند. این نشانگر رسم نمی‌شود. ویرایشگر آن پایانهٔ پنهان را به هر مقصد قابل‌دسترس دوباره سیم‌کشی می‌کند، پس کاری که بعد از Step وصل می‌کنید هم اجرا می‌شود.

نوار کناری کتابخانهٔ گره همیشه سمت چپ ویرایشگر می‌نشیند. آن را با جعبهٔ جستجوی گره‌ها فیلتر کنید و یک مورد را روی بوم بکشید — گره همان‌جا که رهایش کنید می‌نشیند، بدون اتصال ورودی.

گرهٔ پالت نوع گام کارش
اسکریپت Bash listen یک اسکریپت پوسته با جای‌گذاری {{state}} اجرا می‌کند؛ هیچ عاملی اعزام نمی‌شود
باز کردن گفتگو listen تنها فضای دیدنی اجرا و checkout آن را باز می‌کند؛ گره‌های عامل به این اتاق می‌پیوندند
کلون شاخهٔ PR listen شاخهٔ سر PR را با gh pr view پیدا می‌کند و آن را در پوشهٔ اجرا کلون می‌کند
ارسال دیدگاه روی PR listen یافته‌های تجمیع‌شده را به‌صورت یک دیدگاه بازبینی GitHub روی PR می‌گذارد
بازبین (پرامپت) listen یک عامل بازبین متخصص اعزام می‌کند؛ تا تحویل نتیجه توسط عامل معلق می‌ماند
تجمیع (join) join منتظر چند شاخهٔ بالادست می‌ماند، سپس از یک عامل می‌خواهد خروجی‌هایشان را تجمیع کند
پرامپت سفارشی listen گرهٔ عمومی پرامپت‌محور که از بدنهٔ promptAgent عبور می‌کند
ارسال به فضا listen پیامی به یک فضای پیام‌رسانی می‌فرستد
شرط / سوییچ (router) router جریان را بر پایهٔ یک مقدار حالت شاخه‌شاخه می‌کند
اگر فایل وجود دارد (router) router وقتی مسیری زیر کلون وجود دارد "true" و در غیر این صورت "false" را مسیر می‌دهد
وجود هر فایل (router با OR) router وقتی هر یک از مسیرهای فهرست‌شده وجود دارد "true" را مسیر می‌دهد
همهٔ شرط‌ها (router با AND) router فقط وقتی همهٔ مسیرهای فهرست‌شده وجود دارند "true" را مسیر می‌دهد
اعزام تیم listen یک تیم کامل اعزام می‌کند و تا پایان کارش معلق می‌ماند
دروازهٔ تأیید listen برای گرفتن تصمیم تأیید مکث می‌کند
برای هر (map) forEach برای هر آیتم یک پرامپت می‌سازد، سپس عامل را یک‌بار با این پرامپت‌های به‌هم‌پیوسته اعزام می‌کند
فراخوانی پایپ‌لاین فرعی listen قالب دیگری را به‌عنوان یک گام تودرتو اجرا می‌کند
پاک‌سازی worktreeها listen worktreeهای ایزولهٔ قدیمی را پاک می‌کند؛ قطعی، بدون اعزام هیچ عاملی

کتابخانه این‌ها را زیر جریان و منطق، بازبینی PR، عامل‌ها، پیام‌رسانی و کد دسته‌بندی می‌کند. گروهی به نام Demo وجود ندارد.

هر گره کار روی لبهٔ راستش یک درگاه خروجی دایره‌ای دارد. از آن درگاه به گرهٔ دیگری بکشید تا به هم وصل شوند. تریگرهای شروع هم همین‌طور هستند: هر کدام درگاه خودش را دارد، پس سیمی که از زمان‌بندی بیرون می‌آید از اجرای دستی هم بیرون نمی‌آید. برای درج یک نوع بعد از یک گره، افزودن گام (+) را کمی بعد از آن بزنید. نشانگر را روی نقطهٔ میانی یک یال موجود نگه دارید و × را بزنید تا اتصال قطع شود.

اتصال‌ها از گره‌ای هم که آن‌ها را دریافت می‌کند ویرایش می‌شوند:

  1. گره پایین‌دست را انتخاب کنید. پنل پیکربندی‌اش در سمت راست باز می‌شود.
  2. تا تریگرها از پایین بروید و برای هر گره بالادستی که این گره باید به آن گوش بدهد، تراشه‌اش را بزنید. زدن یک تراشهٔ انتخاب‌شده اتصال را برمی‌دارد.
  3. اگر گره بالادست یک مسیریاب باشد، زیر تراشه‌ها بلوکی به نام کلیدهای مسیر پیدا می‌شود، با یک فیلد کلید مسیر از <node> برای هر یال مسیریاب. کلیدی را که آن یال با آن فعال می‌شود وارد کنید — برای مسیریاب‌های «فایل وجود دارد» مقدار true یا false، یا نام حالت برای یک سوییچ.

هر گره تریگر یک نقطهٔ ورود است. یک گره می‌تواند به چند بالادست گوش بدهد (fan-in) و چند پایین‌دست را تغذیه کند (fan-out)، و گراف باید بدون حلقه بماند — هیچ چیز در ویرایشگر جلوی سیم‌کشی یک حلقه را نمی‌گیرد، پس کارتان را بررسی کنید.

نشانگر پایانی از بوم فیلتر شده است، پس نمی‌توان انتخابش کرد. ویرایشگر هر بار که گراف تغییر می‌کند آن را به هر مقصد قابل‌دسترس دوباره سیم‌کشی می‌کند، پس کاری که بعد از Step اولیه وصل می‌کنید هم اجرا می‌شود. یک گراف خالی (تریگری بدون جانشین کاری) خود تریگر را فهرست می‌کند تا اجرا بی‌درنگ کامل شود.

یک گره را انتخاب کنید تا پنل پیکربندی‌اش باز شود. اینکه چه فیلدهایی ظاهر شوند به بدنهٔ گره بستگی دارد.

هر گره برچسب، کلیدهای ورودی (جدا با ویرگول) (کلیدهای حالتی که هنگام اجرا خوانده می‌شوند) دارد و زیر پیشرفته: کاهنده، مهلت (ms)، تعداد تلاش مجدد، ادامه اگر این گام ناموفق شد و شِمای خروجی (JSON). گره‌های listen و join هم می‌توانند نوع خود را بین این دو عوض کنند.

یک گزینندهٔ مخزن‌ها برای کلون اضافه می‌کند (کدام مخزن‌های فضای کاری checkout شوند؛ خالی یعنی هیچ‌کدام)، یک نام فضا و یک کادر انتخاب باز کردن گفتگو در آن. وقتی این کادر روشن باشد، فیلد نام گفتگو نام جریانی را می‌دهد که اتاق با آن باز می‌شود. گره‌های عامل به این اتاق می‌پیوندند — خودشان اتاقی باز نمی‌کنند.

عامل را اضافه می‌کند (کدام عامل اعزام شود)، قالب پرامپت را (با {{key}} به ورودی‌ها یا خروجی‌های بالادست ارجاع دهید) و کلید خروجی را.

مهلت (ms) بر حسب میلی‌ثانیه است، نه ثانیه — 900000 یعنی 15 دقیقه. اگر 900 وارد کنید، گام 0.9 ثانیه فرصت دارد.

حالت گفتگویی که یک گرهٔ عامل پرامپت زیر آن اجرا می‌شود، فیلدی در ویرایشگر روی گرهٔ عامل ندارد. این حالت روی گرهٔ باز کردن گفتگو که اتاق را ساخته، در extras['mode'] (chat، plan یا review) می‌نشیند (پیش‌فرض review). تنظیم آن روی یک گام عامل نادیده گرفته می‌شود. این کلید دقیقاً مطابقت داده می‌شود: هر املای دیگری بی‌صدا نادیده گرفته می‌شود.

اسکریپت Bash را اضافه می‌کند. هیچ فیلدی برای پوشهٔ کاری یا محیط وجود ندارد، چون هیچ‌کدام قابل پیکربندی نیستند:

  • هر گام bash در یک اجرا همان cwd یعنی <cc_root>/pipelines/<runId>/ را به اشتراک می‌گذارد.
  • GITHUB_TOKEN از مخزن اعتبارنامه‌ها تزریق می‌شود، پس gh و git clone https://x-access-token:$GITHUB_TOKEN@… بدون هیچ تنظیمی کار می‌کنند.
  • اسکریپت به‌عنوان فایل اجرایی حرفی bash اجرا می‌شود، پس bash باید روی PATH میزبان سرور باشد. این نکته‌ای است که در Windows باید در نظر بگیرید.

یک مسیریاب شرطی را ارزیابی می‌کند و یک کلید مسیر برمی‌گرداند؛ موتور فقط یال پایین‌دستی را فعال می‌کند که کلید مسیرش مطابقت دارد و بقیهٔ شاخه‌ها را ردشده علامت می‌زند.

انتخاب یک مسیریاب، فیلد کلید خروجی را با ویرایشگر شرط جایگزین می‌کند. یکی از چهار حالتش را انتخاب کنید:

  • فایل(ها) وجود دارند — هر کدام — وقتی هر یک از مسیرهای فهرست‌شده وجود دارد "true" را مسیر می‌دهد.
  • فایل‌ها وجود دارند — همه — فقط وقتی همهٔ مسیرهای فهرست‌شده وجود دارند "true" را مسیر می‌دهد.
  • مقایسه — یک مقدار حالت را با یک مقدار ثابت مقایسه می‌کند.
  • سوییچ — بر پایهٔ مقدار یک کلید حالت مسیر می‌دهد، با یک حالت پیش‌فرض.

سپس کلیدهای مسیر متناظر را روی یال‌های خروجی تنظیم کنید (به اتصال گره‌ها به هم نگاه کنید).

گروه‌های منطقی and / or / not را بدنه پشتیبانی می‌کند، اما از این فرم نمی‌توان ساختشان — به یک درخت محمول دست‌نویس زیر extras.predicate نیاز دارند. واژگان کامل محمول‌ها و عملگرها در مرجع گام‌های پایپ‌لاین آمده است.

پیکربندی خودش را ندارد: منتظر همهٔ گام‌های بالادستش می‌ماند.

دروازه، عامل تأییدکننده را با پرامپت دروازه به یک گفتگوی پنهان اعزام می‌کند و معلق می‌ماند. تأییدکننده در همان گفتگو تصمیم شما را می‌پرسد و آن را با submit_output به شکل { "decision": "approved" | "rejected", "reason": "..." } تحویل می‌دهد. تصمیم زیر کلید خروجی می‌نشیند (پیش‌فرض approval_decision)، پس یک مسیریاب سوییچ در پایین‌دست می‌تواند بر پایهٔ آن شاخه بزند.

عامل را روی تأییدکننده و قالب پرامپت را روی پرسش دروازه بگذارید. دروازه از طریق submit_output به شکل { "decision": "approved" | "rejected", "reason": "..." } حل می‌شود. گره‌های بازبین (پرامپت) هم همین‌طور تحویل می‌دهند.

شناسهٔ تیم و حالت اعزام را اضافه می‌کند. گزیننده دقیقاً دو حالت پیش می‌گذارد:

  • allParallel — یک وظیفه برای هر عضو، تا کامل شدن همه معلق می‌ماند.
  • manager — رهبر را اعزام می‌کند و او کارها را واگذار می‌کند.

هر مقدار ذخیره‌شدهٔ دیگری مثل allParallel رفتار می‌کند. کاهنده را روی append بگذارید تا نتیجهٔ هر عضو به‌صورت فهرستی زیر کلید خروجی جمع شود.

برای هر و فراخوانی پایپ‌لاین فرعی

بخش با عنوان “برای هر و فراخوانی پایپ‌لاین فرعی”

برای هر به‌صورت پیش‌فرض روی کلید حالت items نگاشت می‌کند (extras.iterableKey / extras.itemKey روی گره). پرامپتش را یک‌بار برای هر آیتم می‌سازد ({{item}} به‌صورت پیش‌فرض) و عامل را یک‌بار با این پرامپت‌های به‌هم‌پیوسته اعزام می‌کند. یک مجموعهٔ خالی بی‌درنگ با فهرستی خالی کامل می‌شود. این یک اعزام موازی برای هر آیتم نیست.

فراخوانی پایپ‌لاین فرعی تا رسیدن اجرای فرزند به یک وضعیت پایانی معلق می‌ماند، سپس حالت نهایی فرزند را زیر کلید خروجی ادغام می‌کند (پیش‌فرض subflow_result). با extras.templateId آن را به یک فرزند اشاره بدهید. یک قالب نمی‌تواند خودش را صدا بزند؛ فرزند ناموفق یا لغوشده، گام والد را ناموفق می‌کند و آن گام هم به سیاست تلاش مجدد و ادامه در صورت شکست خودش سپرده می‌شود.

اعلام ورودی‌ها و اجازهٔ اجرای دستی

بخش با عنوان “اعلام ورودی‌ها و اجازهٔ اجرای دستی”

هر دو پشت اجرای دستی در سرصفحهٔ ویرایشگر قرار دارند.

  1. اجرای دستی را بزنید.
  2. اجازهٔ اجرای دستی را روشن کنید. این کلید بی‌درنگ ذخیره می‌شود — ردیف تریگر manual را می‌سازد (یا حذف می‌کند) که قالب را در صفحهٔ اجرا نشان می‌دهد.
  3. اگر سقف می‌خواهید حداکثر اجراهای موازی را تنظیم کنید (برای نامحدود خالی بگذارید). شروع‌های اضافه در وضعیت queued می‌مانند تا جایی آزاد شود.
  4. برای هر فیلدی که یک اجرای دستی باید جمع کند، افزودن ورودی را بزنید:
فیلد توضیح
کلید کلید حالتی که مقدار زیر آن ذخیره می‌شود؛ با {{key}} به آن ارجاع دهید
برچسب برچسب نمایشی (پیش‌فرض همان کلید)
نوع متن، متن چندخطی، عدد، کلید، انتخاب، مخزن
گزینه‌ها گزینه‌های جداشده با ویرگول، فقط برای انتخاب
مقدار پیش‌فرض مقدار پیش‌پرشده
نگه‌دار متن متن راهنمای داخل فیلد خالی
متن راهنما متن کمکی زیر فیلد
الزامی اینکه فرم اجرا با مقدار خالی متوقف شود یا نه

یک ورودی مخزن گزیننده‌ای روی مخزن‌های فضای کاری نمایش می‌دهد و repo_id، repo_local_path، repo_full_name و — وقتی مخزن یک ریموت GitHub دارد — repo_owner و repo_name را در بار دادهٔ اجرا می‌گذارد.

  1. در دیالوگ ذخیره را بزنید. ویرایش‌های ورودی در پیش‌نویس ادغام می‌شوند و وقتی قالب را ذخیره کنید ماندگار می‌مانند.
  1. در سرصفحهٔ ویرایشگر ذخیره را بزنید. تا آن موقع سرصفحه «تغییرات ذخیره‌نشده» را نشان می‌دهد.
  2. به تنظیمات → فضای کاری → قالب‌های پایپ‌لاین برگردید و بررسی کنید که کلید ردیف قالب روشن باشد. موتور از شروع یک قالب غیرفعال سر باز می‌زند و یک قالب غیرفعال هرگز در صفحهٔ اجرا ظاهر نمی‌شود.
  3. برای شروع خودکار آن، یک تریگر را از کتابخانهٔ گره روی بوم بکشید — به راه‌اندازی تریگرهای پایپ‌لاین نگاه کنید.