رفتن به محتوا

گفتگو با Control Center از یک pull request در GitHub

این راهنما نشان می‌دهد چگونه بدون ترک GitHub با Control Center کار کنید: از صفحهٔ PR یک بازبینی هوش مصنوعی بخواهید، در یک نظر از ربات پرسشی بپرسید و گفتگو را در رشته‌های بازبینی آن ادامه دهید.

ربات، GitHub App خودِ سرور شماست — همان که از پیش افراد را وارد می‌کند و کارهای پس‌زمینه را اجرا می‌کند. چیز تازه‌ای ثبت نمی‌شود و هیچ‌چیز لازم نیست از اینترنت قابل‌دسترس باشد: سرور با پولینگ کشف می‌کند روی GitHub چه گفته شده است، پس یک لپ‌تاپ پشت NAT دقیقاً مثل یک استقرار عمومی رفتار می‌کند.

  • سرور، GitHub App خود را ثبت و نصب کرده است، با Pull requests: read and write (برای نظرها، رشته‌ها و واکنش‌ها) و Issues: read (برای جست‌وجوی نظرها). هر دو از پیش در فهرست مجوزهای همان راهنما آمده‌اند
  • مخزن به یک فضای کاری در Control Center پیوند خورده است
  • نه URL وب‌هوک، نه تونل، نه callback — در سمت شبکه چیزی برای پیکربندی وجود ندارد

نام کاربری ربات <appslug>[bot] است، که در آن appslug همان نامی است که هنگام ثبت به برنامه داده‌اید.

  1. به تنظیمات → سرور → ورود یکپارچه بروید و تا کارت برنامه‌های ارائه‌دهنده پایین بیایید
  2. بلوک GitHub را باز کنید و آزمایش را کلیک کنید
  3. وقتی ورود ربات پر شد آن را کپی کنید. اگر هنوز راهنمای خالی را نشان می‌دهد، نام کاربری همیشه <appslug>[bot] است — همان را تایپ کنید، یا شکل کوتاه @appslug را

GitHub حساب‌های برنامه را در تکمیل خودکار @ خود ارائه نمی‌دهد، پس نام کاربری باید تایپ شود — به همین دلیل کارت تنظیمات کپی‌کردن آن را یک‌کلیکی می‌کند. پسوند [bot] اختیاری است: @myapp و @myapp[bot] هر دو ربات را خطاب قرار می‌دهند.

دو راه، که هر دو همان پایپ‌لاین از پیش تعریف‌شدهٔ pr_review را شروع می‌کنند که دکمهٔ پرسش از AI شروع می‌کند:

  • روی PR برچسب ai-review را اضافه کنید. این نزدیک‌ترین چیزی است که GitHub برای گماشتن ربات به‌عنوان بازبین ارائه می‌دهد — حساب‌های برنامه نمی‌توانند جایگاه بومی بازبین درخواست‌شده را بگیرند. نظری برای واکنش نشان دادن وجود ندارد، پس چیزی روی GitHub منتشر نمی‌شود؛ بازبینی در Control Center آغاز می‌شود
  • روی گفتگوی PR @myapp review را کامنت کنید (یا فقط @myapp). ربات با 👀 واکنش نشان می‌دهد و سپس وقتی بازبینی آغاز شد پاسخ می‌دهد (یا می‌گوید یکی از قبل در حال اجراست)

بازبین‌ها در فضای بازبینی PR کار می‌کنند؛ یافته‌ها را همان‌طور که در استفاده از بازبینی مبتنی بر هوش مصنوعی آمده بخوانید و منتشر کنید. انتشار دوباره در GitHub همچنان تصمیمی است که در Control Center می‌گیرید — آغاز یک بازبینی از GitHub به‌خودی‌خود چیزی روی GitHub منتشر نمی‌کند.

برچسب یک‌بار به‌ازای هر PR فعال می‌شود: افزودن آن همان درخواست است و با برداشتن و افزودن دوباره از نو مسلح نمی‌شود. برای اجرای دوبارهٔ یک بازبینی — مثلاً پس از یک push — ربات را منشن کنید.

روی گفتگوی PR نظر بگذارید:

@myapp why does the flaky test in runner_test.dart fail on CI but not locally?

چه اتفاقی می‌افتد، به ترتیب:

  1. ربات با 👀 واکنش نشان می‌دهد تا بدانید نظر دیده شده است
  2. پرسش به‌عنوان شما در فضای بازبینی PR فرستاده می‌شود — همان انتسابی که اگر خودتان آن را در Control Center تایپ کرده بودید
  3. یک عامل در فضا پاسخ می‌دهد و پاسخ به‌شکل نظری که شما را با @ منشن می‌کند روی PR بازگردانده می‌شود

پرسشی روی PRی که هنوز بازبینی‌ای ندارد، عامل CEO فضای کاری را بیدار می‌کند؛ پس از آنکه یک بازبینی اجرا شد، عاملی که آخر از همه سخن گفته پاسخ می‌دهد، پس پیگیری‌ها به دست کسی می‌رسد که بافت را دارد.

داخل یک رشتهٔ بازبینی درون‌خطی که ربات عضوی از آن است پاسخ دهید — نظری روی diff که ربات گذاشته، یا پاسخی که در همان رشته نوشته است. نیازی به منشن نیست؛ خودِ رشته همان خطاب قرار دادن است:

> @myapp the retry loop looks O(n²) to me
what would the complexity be with the bounded queue instead?

چندنوبتی هم همین‌طور کار می‌کند: هر پاسخ پرسش دیگری در همان گفتگو است، با فضای بازبینی به‌عنوان بافت، و پاسخ در همان رشته بازمی‌گردد.

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

یک نظر GitHub چیزی بیش از یک نام کاربری با خود نمی‌آورد، پس ربات پیش از انجام هر کاری نویسنده را حل می‌کند:

  • حساب GitHub شما باید به هویت شما پیوند شده باشد در Control Center — ورود با GitHub، یا جای‌گذاری یک توکن، از تنظیمات → فضای کاری → نمایه و هویت → میزبانی کد
  • شما باید عضوی با نقش نوشتن باشید (member، admin یا owner) در فضای کاری‌ای که مخزن را پیوند می‌دهد

هر کس دیگری یک پاسخ مؤدبانه می‌گیرد که توضیح می‌دهد چه چیزی کم است — نام کاربری ناشناس (پیوندنشده، یا پیوندشده اما عضو اینجا نباشد) و نقش فقط‌خواندنی دو حالت‌اند — و سخنانشان هرگز وارد فضای کاری نمی‌شود. برچسب ai-review این‌گونه دروازه‌بانی نمی‌شود: نویسنده‌ای ندارد، پس بازبینی را در همان فضای کاری‌ای آغاز می‌کند که از پیش مخزن را پیوند داده است.

مورد رفتار
تأیید 👀 روی یک نظر، ظرف حدود یک دقیقه — همان بازهٔ جاروب. برچسب ai-review نظری برای واکنش نشان دادن ندارد
پاسخ‌ها به‌عنوان ربات (همان برنامه)، در همان خطی که پرسش در آن مطرح شد، فرستاده می‌شوند
انتساب در فضا پرسش مال شماست؛ عامل به نمایندگی شما و تحت تنظیمات خودمختاری فضا اجرا می‌شود
بازبینی‌ها یافته‌ها در فضای بازبینی می‌نشینند؛ انتشار در GitHub دستی است

تأخیر حدوداً یک‌دقیقه‌ای، بهای رفع نیاز به هرگونه دسترسی شبکهٔ ورودی است. هیچ‌چیز در جاروب فوری نیست و تا وقتی سرور آفلاین است چیزی از دست نمی‌رود — نظری که در زمان خاموشی می‌رسد، در جاروب بعدی گرفته می‌شود.

برای نظری که ربات را منشن می‌کند، هیچ اتفاقی نمی‌افتد.

  • آیا برنامه روی حسابی که مالک مخزن است نصب شده و مخزن به یک فضای کاری پیوند خورده است؟ مخزن پیوندنشده پیش از ثبت هر چیزی نادیده گرفته می‌شود، پس اگر بعداً آن را پیوند بزنید، باز هم تحویل می‌شود
  • آیا حساب GitHub شما پیوند شده و عضوی با نقش نوشتن هستید؟ روی PR پاسخ رد ربات را بگردید — می‌گوید کدام مورد است
  • هنوز هیچ؟ وقتی چیزی شکست می‌خورد، لاگ سرور نام جاروب و PR را می‌آورد؛ دنبال pr_conversation: (پولر) و github_pr_conversation: (پل) بگردید

برچسب یک بازبینی را آغاز نمی‌کند.

یک‌بار به‌ازای هر PR فعال می‌شود. اگر بازبینی‌ای از قبل اجرا شده، یا برچسب پیش از آنکه سرور هرگز PR را دیده باشد اضافه شده است (نخستین جاروب کارهای معوق را بی‌صدا ثبت می‌کند، نه اینکه یک‌جا راهشان بیندازد)، به‌جایش ربات را منشن کنید — @myapp review همیشه یکی را آغاز می‌کند، مگر آنکه بازبینی‌ای از قبل در جریان باشد.

پاسخ ربات هرگز روی GitHub نرسید.

خودِ پاسخ هرگز گم نمی‌شود — در فضای بازبینی PR در Control Center است. شکست در فرستادن (از کار افتادن GitHub، تغییر مجوزها) ثبت می‌شود و پاسخ دوباره تلاش نمی‌شود؛ اگر مهم است در همان رشته دوباره بپرسید.