−25%

روی پرداخت سالانه Windows، تا ۳۱ اکتبر. مشاهده پلن‌ها

EQVPS
شروع کنید

سندباکس برای بازبینی کد و بررسی PR: پیش از تأیید، ثابت کنید وصله کار می‌کند

خواندن diff به شما می‌گوید وصله چه ادعایی دارد. اجرای آن می‌گوید آیا درست است. یک pull request را در microVM یک‌بارمصرف دریافت کنید، باگ را پیش و پس از تغییر بازتولید کنید، تست‌ها را اجرا کنید و با شواهد بازبینی کنید — با حدود نیم سنت برای هر دور.

یک diff نشان می‌دهد وصله ادعا می‌کند چه کاری انجام می‌دهد. نشان نمی‌دهد که آیا باگ واقعاً از بین رفته، آیا شاخه جدید یک if اصلاً اجرا می‌شود، یا آیا ارتقای یک وابستگی import را در نصب تمیز خراب می‌کند. بازبین‌ها این را می‌دانند و برای همین بسیاری از بازبینی‌ها با «LGTM، به شرطی که تست‌ها قبول شوند» تمام می‌شود.

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

بررسی: base، head، تست‌ها

قانع‌کننده‌ترین شاهدی که یک وصله می‌تواند ارائه دهد، بازتولیدی است که روی کد قدیم شکست می‌خورد و روی کد جدید قبول می‌شود. سندباکس این را به یک اسکریپت 20 خطی تبدیل می‌کند. سندباکس یک Firecracker microVM با Python 3.12، Node.js 22، git و curl است که در حدود یک ثانیه بالا می‌آید:

import os
from eqvps import Sandbox

REPO, BASE, HEAD = os.environ["REPO_URL"], os.environ["BASE_SHA"], os.environ["HEAD_SHA"]

def repro(sb, ref):
    sb.exec(f"cd /root/app && git checkout -q {ref}", timeout=55)
    return sb.exec("cd /root/app && python3 /root/repro.py", timeout=55).exit_code

with Sandbox.create(tariff="standard", ttl=1800) as sb:
    sb.exec(f"git clone -q {REPO} /root/app", timeout=55)
    sb.exec("cd /root/app && pip install -q -r requirements.txt", timeout=55)
    sb.upload("/root/repro.py", open("repro.py").read())
    before, after = repro(sb, BASE), repro(sb, HEAD)
    tests = sb.exec("cd /root/app && python3 -m pytest -q", background=True).wait()
    print(f"repro on base: {before}, on head: {after}; tests: {tests.state}, exit {tests.exit_code}")

فایل repro.py همان تکه کدِ گزارش باگ است. اگر روی base با کدی غیر از صفر و روی head با صفر تمام شود، وصله همان چیزی را درست می‌کند که ادعا دارد. این خط را همراه خلاصه تست‌ها به‌عنوان نظر روی pull request بگذارید تا بازبین از واقعیت‌ها شروع کند.

مجموعه تست به‌صورت کار پس‌زمینه اجرا می‌شود، چون یک فرمان هم‌زمان در ثانیه 55 متوقف می‌شود. TTL سی‌دقیقه‌ای سقف مدتی را تعیین می‌کند که یک اجرای گیرکرده می‌تواند هزینه بسازد.

عامل‌های بازبینی که کد اجرا می‌کنند

همین ایده برای بازبین هوش مصنوعی هم کار می‌کند. عاملی که از طریق سرور MCP وصل شده ابزارهای سندباکس دارد: ساخت سندباکس، اجرای فرمان، بارگذاری و دریافت فایل. به جای اینکه بنویسد «این ممکن است سازگاری با Python 3.8 را خراب کند»، شاخه را دریافت می‌کند، کد را اجرا می‌کند و traceback را نقل می‌کند — یا گزارش می‌دهد که همه‌چیز درست است.

به چنین عاملی یک سقف هزینه و توکن فقط‌خواندنی بدهید و تعیین کنید کدام ابزارها را می‌تواند بدون پرسیدن فراخوانی کند. محافظ‌های MCP همه ابزارها را بر اساس میزان ریسک فهرست کرده است.

کدام تعرفه

مخزنتعرفهدور معمولهزینه تقریبی
کتابخانه کوچک، پایتون یا JS خالصsmall (0.5 vCPU, 1 GB)2 دقیقه$0.0011
برنامه وب با مجموعه تستstandard (1 vCPU, 2 GB)5 دقیقه$0.0055
افزونه‌های بومی، وابستگی‌هایی که کامپایل می‌شوندplus (2 vCPU, 4 GB)15 دقیقه$0.033

سندباکس‌های موقت ثانیه‌ای با حداقل 60 ثانیه محاسبه می‌شوند. اگر بازبین می‌خواهد طی چند روز به همان محیط برگردد، آن را به‌صورت persistent بسازید: دیسکش را تا 30 روز نگه می‌دارد و برای هر ساعتِ شروع‌شده محاسبه می‌شود، پس یک سندباکس standard که برای بازبینی دوروزه نگه داشته شود حدود 3.17 دلار هزینه دارد. وقتی pull request ادغام شد، آن را حذف کنید.

محدودیت‌هایی که باید بدانید

  • دو فرمان هم‌زمان برای هر حساب. برای بازبینی‌هایی که پشت سر هم انجام می‌شوند کاملاً کافی است. اگر ده‌ها pull request را یک‌جا بررسی کنید، در صف می‌مانند.
  • بدون پورت ورودی. نمی‌توانید برنامه را در مرورگر باز کنید. آن را داخل اجرا کنید و از فرمان دوم با curl localhost تستش کنید.
  • بدون Docker در داخل. تست‌هایی که کانتینر راه می‌اندازند جایشان روی runner در VPS است.
  • اینترنت خروجی باز است. همین است که pip install را به کار می‌اندازد. چیزی را که به نویسنده وصله نمی‌دادید در سندباکس نگذارید.

شروع کار

حساب‌های جدید 1 دلار زمان سندباکس می‌گیرند که روی تعرفه standard برای بیش از صد دور بازبینی کافی است. صفحه سندباکس‌ها تعرفه‌ها را دارد، مرجع SDK همه متدهای به‌کاررفته در بالا را، و SDK پایتون در 5 دقیقه راه‌اندازی را.

مرتبط: اجرای ایزوله تست‌های CI برای کل خط لوله، و سندباکس برای عامل‌های هوش مصنوعی برای عامل‌هایی که اصلاً کد را می‌نویسند.

آماده استقرار؟ با رمزارز بپرداز، بدون KYC — در حدود یک دقیقه فعال می‌شود.

← همین حالا مستقر کن

سؤالات متداول

این با اجرای CI روی pull request چه فرقی دارد؟

سیستم CI پاسخ می‌دهد که آیا تست‌های موجود قبول می‌شوند. بررسی بازبینی پاسخ می‌دهد که آیا وصله همان کاری را می‌کند که می‌گوید: مراحل بازتولید گزارش باگ را روی کد قدیم و جدید اجرا می‌کند، حالت مرزی‌ای را که بازبین نگرانش است امتحان می‌کند و سندباکسی را نگه می‌دارد تا بازبین خودش آن را بکاود. این دو به‌خوبی مکمل هم‌اند.

آیا یک عامل بازبینی هوش مصنوعی می‌تواند از آن استفاده کند؟

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

آیا دریافت pull request یک غریبه امن است؟

هدف سندباکس دقیقاً همین است. کد در یک microVM جداگانه با هسته مخصوص خودش اجرا می‌شود و جز آنچه خودتان می‌گذارید، هیچ چیزِ شما داخلش نیست. توکنی که بتواند در مخزن شما بنویسد ندهید؛ برای مخزن‌های خصوصی توکن فقط‌خواندنی کافی است.

آیا می‌توانم برنامه pull request را در مرورگرم باز کنم؟

نه. سندباکس‌ها پورت ورودی ندارند، پس هیچ چیزی از بیرون نمی‌تواند به آن‌ها وصل شود. می‌توانید برنامه را داخل اجرا کنید و از فرمانی دیگر با curl تستش کنید، یا اگر بازبین‌ها باید در رابط کاربری بگردند، نسخه پیش‌نمایش را روی VPS مستقر کنید.

هزینه یک دور بازبینی چقدر است؟

یک دور معمول — کلون، نصب، دو بار بازتولید، اجرای تست — روی تعرفه standard چند دقیقه طول می‌کشد و حدود 0.005 دلار هزینه دارد. ثانیه‌ای با حداقل 60 ثانیه از موجودی پیش‌پرداخت پرداخت می‌کنید.

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.