−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

Sandbox კოდის რევიუსა და PR შემოწმებისთვის: აჩვენეთ, რომ პაჩი მუშაობს, სანამ მას დაამტკიცებთ

diff-ის წაკითხვა გეუბნებათ, რას ამტკიცებს პაჩი. მისი გაშვება გეუბნებათ, მართალია თუ არა. ჩამოიტანეთ pull request ერთჯერად microVM-ში, გაიმეორეთ შეცდომა ცვლილებამდე და მის შემდეგ, გაუშვით ტესტები და გააკეთეთ რევიუ მტკიცებულებებით — დაახლოებით ნახევარ ცენტად თითო ციკლზე.

diff აჩვენებს, რის გაკეთებას ამტკიცებს პაჩი. ის არ აჩვენებს, მართლა გაქრა თუ არა შეცდომა, სრულდება თუ არა ოდესმე if-ის ახალი შტო, ან ტეხს თუ არა დამოკიდებულების განახლება import-ს სუფთა ინსტალაციისას. რევიუერებმა ეს იციან, ამიტომ ამდენი რევიუ სრულდება სიტყვებით „LGTM, თუ ტესტები გავა“.

AI-ის დაწერილ პაჩებთან ეს ხარვეზი იზრდება. მოდელი სწრაფად ქმნის დამაჯერებლად გამოყურებულ კოდს, დამაჯერებელი კი ზუსტად ის არის, რაც დაღლილ რევიუერს გამოეპარება. იაფი გამოსავალია ცვლილების გაშვება მანამ, სანამ ვინმე დაამტკიცებს — ისეთ ადგილას, სადაც ვერაფერს დააზიანებს.

შემოწმება: base, head, ტესტები

ყველაზე დამაჯერებელი მტკიცებულება, რისი წარმოდგენაც პაჩს შეუძლია, არის გამეორება, რომელიც ძველ კოდზე ვარდება და ახალზე გადის. sandbox ამას 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 წამზე ჩერდება. 30-წუთიანი TTL ზღუდავს, რამდენ ხანს შეუძლია გაჭედილ გაშვებას ხარჯის დაგროვება.

რევიუს აგენტები, რომლებიც კოდს უშვებენ

იგივე იდეა მუშაობს AI რევიუერისთვისაც. MCP სერვერით დაკავშირებულ აგენტს აქვს sandbox-ის ინსტრუმენტები: sandbox-ის შექმნა, ბრძანების გაშვება, ფაილების ატვირთვა და ჩამოტვირთვა. ნაცვლად იმისა, რომ დაწეროს „ამან შეიძლება Python 3.8-თან თავსებადობა გატეხოს“, ის ბრენჩს ჩამოიტანს, კოდს გაუშვებს და traceback-ს ციტირებს — ან იტყობინება, რომ ყველაფერი რიგზეა.

ასეთ აგენტს მიეცით ხარჯების ლიმიტი და მხოლოდ წაკითხვის ტოკენი, და გადაწყვიტეთ, რომელი ინსტრუმენტების გამოძახება შეუძლია კითხვის გარეშე. MCP-ის დამცავი ზომები ყველა ინსტრუმენტს რისკის დონის მიხედვით ჩამოთვლის.

რომელი ტარიფი

რეპოზიტორიატარიფიტიპური ციკლისავარაუდო ღირებულება
პატარა ბიბლიოთეკა, სუფთა Python ან JSsmall (0.5 vCPU, 1 GB)2 წთ$0.0011
ვებ-აპლიკაცია ტესტების ნაკრებითstandard (1 vCPU, 2 GB)5 წთ$0.0055
ნეიტივ გაფართოებები, კომპილირებადი დამოკიდებულებებიplus (2 vCPU, 4 GB)15 წთ$0.033

დროებითი sandbox-ები წამობრივად ითვლება, მინიმუმ 60 წამი. თუ რევიუერს სურს რამდენიმე დღის განმავლობაში იმავე გარემოში დაბრუნება, შექმენით ის როგორც persistent: ის დისკს 30 დღემდე ინახავს და ყოველ დაწყებულ საათზე ითვლება, ამიტომ ორდღიანი რევიუსთვის შენახული standard sandbox დაახლოებით $3.17 ღირს. წაშალეთ ის, როცა pull request შეერწყმება.

ლიმიტები, რომელთა ცოდნაც ღირს

  • ორი ბრძანება ერთდროულად თითო ანგარიშზე. სრულიად საკმარისია რევიუებისთვის, რომლებიც ერთმანეთის მიყოლებით მიდის. თუ ათობით pull request-ს ერთად შეამოწმებთ, ისინი რიგში დადგებიან.
  • შემომავალი პორტები არ არის. აპლიკაციას ბრაუზერში ვერ გახსნით. გაუშვით ის შიგნით და მეორე ბრძანებიდან curl localhost-ით გატესტეთ.
  • შიგნით Docker არ არის. ტესტები, რომლებიც კონტეინერებს რთავს, VPS-ზე არსებულ runner-ს ეკუთვნის.
  • გამავალი ინტერნეტი ღიაა. სწორედ ეს ამუშავებს pip install-ს. sandbox-ში ნუ ჩადებთ ისეთს, რასაც პაჩის ავტორს არ მისცემდით.

როგორ დავიწყოთ

ახალი ანგარიშები იღებს $1-ის sandbox-დროს, რაც standard ტარიფზე ასზე მეტ რევიუს ციკლს ფარავს. sandbox-ების გვერდზე ტარიფებია, SDK-ის ცნობარში ზემოთ გამოყენებული ყველა მეთოდი, Python SDK 5 წუთში კი დაყენებას აღწერს.

დაკავშირებული: იზოლირებული CI ტესტები მთელი pipeline-ისთვის და Sandbox AI აგენტებისთვის იმ აგენტებისთვის, რომლებიც კოდს თავიდანვე წერენ.

მზად ხართ განთავსებისთვის? გადაიხადეთ კრიპტოთი, KYC-ის გარეშე — ჩართული დაახლოებით წუთში.

განათავსეთ ახლა →

ხდკ

რით განსხვავდება ეს pull request-ზე CI-ის გაშვებისგან?

CI პასუხობს, გადის თუ არა არსებული ტესტები. რევიუს შემოწმება პასუხობს, აკეთებს თუ არა პაჩი იმას, რასაც ამბობს: უშვებს შეცდომის ანგარიშიდან აღებულ გამეორებას ძველ და ახალ კოდზე, ცდის სასაზღვრო შემთხვევას, რომელიც რევიუერს აწუხებს, და ინახავს sandbox-ს, რომ რევიუერმა თავად ჩაიხედოს. ორივე კარგად ავსებს ერთმანეთს.

შეუძლია AI რევიუს აგენტს ამის გამოყენება?

დიახ, და სწორედ იქ არის ყველაზე დიდი სარგებელი. MCP-ის მეშვეობით აგენტი იღებს ინსტრუმენტებს sandbox-ის შესაქმნელად, ბრძანებების გასაშვებად და ფაილების წასაკითხად. იმის გამოცნობის ნაცვლად, ცვლილება რამეს ტეხს თუ არა, ის კოდს უშვებს და გამონატანს რევიუში ციტირებს.

უსაფრთხოა უცნობის pull request-ის ჩამოტანა?

სწორედ ამისთვის არის sandbox. კოდი საკუთარი ბირთვის მქონე ცალკე microVM-ში მუშაობს და შიგნით თქვენი არაფერია, გარდა იმისა, რასაც თავად ჩადებთ. ნუ გადასცემთ ტოკენს, რომელსაც თქვენს რეპოზიტორიაში ჩაწერა შეუძლია; პირადი რეპოზიტორიებისთვის მხოლოდ წაკითხვის ტოკენი საკმარისია.

შემიძლია pull request-ის აპლიკაცია ბრაუზერში გავხსნა?

არა. sandbox-ებს შემომავალი პორტები არ აქვთ, ამიტომ გარედან ვერაფერი დაუკავშირდება. შეგიძლიათ აპლიკაცია შიგნით გაუშვათ და სხვა ბრძანებიდან curl-ით გატესტოთ, ან წინასწარი ხედები VPS-ზე განათავსოთ, თუ რევიუერებს ინტერფეისში დაჭერა სჭირდებათ.

რა ღირს რევიუს ერთი ციკლი?

ტიპური ციკლი — კლონი, ინსტალაცია, ორჯერ გამეორება, ტესტების გაშვება — standard ტარიფზე რამდენიმე წუთს იკავებს და დაახლოებით $0.005 ღირს. იხდით წამობრივად, მინიმუმ 60 წამი, წინასწარ გადახდილი ბალანსიდან.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.