−25%

la planurile Windows anuale, până pe 31 oct. Vezi planurile

EQVPS
Începe

Sandbox pentru code review și verificarea PR-urilor: dovedește că un patch merge înainte să-l aprobi

Citind un diff afli ce pretinde un patch. Rulându-l afli dacă e adevărat. Verifică un pull request într-o microVM de unică folosință, reprodu bugul înainte și după, rulează testele și fă review cu dovezi — pentru aproximativ jumătate de cent per trecere.

Un diff arată ce pretinde un patch că face. Nu arată dacă bugul chiar a dispărut, dacă noua ramură a unui if rulează vreodată sau dacă actualizarea unei dependențe strică importul la o instalare curată. Reviewerii știu asta, de aceea atâtea review-uri se termină cu „LGTM, dacă trec testele”.

Golul se lărgește la patchurile scrise de AI. Un model produce repede cod plauzibil, iar plauzibilul e exact genul care scapă unui reviewer obosit. Soluția ieftină e să rulezi schimbarea înainte s-o aprobe cineva — undeva unde nu poate strica nimic.

Verificarea: base, head, teste

Cea mai convingătoare dovadă pe care o poate oferi un patch e o reproducere care pică pe codul vechi și trece pe cel nou. Un sandbox face din asta un script de 20 de rânduri. E o microVM Firecracker cu Python 3.12, Node.js 22, git și curl, pornită în aproximativ o secundă:

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 e fragmentul din raportul de bug. Dacă iese cu cod diferit de zero pe base și cu zero pe head, patchul repară ce spune că repară. Postează rândul ăsta, plus rezumatul testelor, ca un comentariu pe pull request, iar reviewerul pornește de la fapte.

Suita de teste rulează ca sarcină de fundal, pentru că o singură comandă sincronă se oprește la 55 de secunde. TTL-ul de 30 de minute limitează cât te poate costa o rulare blocată.

Agenți de review care rulează cod

Aceeași idee merge pentru un reviewer AI. Conectat prin serverul MCP, un agent are unelte de sandbox: creează un sandbox, rulează o comandă, încarcă și descarcă fișiere. În loc să scrie „asta ar putea strica compatibilitatea cu Python 3.8”, ia branchul, rulează codul și citează tracebackul — sau raportează că e în regulă.

Dă-i unui astfel de agent un plafon de cheltuieli și un token doar de citire și decide ce unelte poate apela fără să întrebe. MCP guardrails listează fiecare unealtă după risc.

Ce tarif

RepositoryTarifTrecere obișnuităCost aproximativ
Bibliotecă mică, Python sau JS pursmall (0,5 vCPU, 1 GB)2 min$0.0011
Aplicație web cu suită de testestandard (1 vCPU, 2 GB)5 min$0.0055
Extensii native, dependențe compilateplus (2 vCPU, 4 GB)15 min$0.033

Sandboxurile efemere se facturează la secundă, minimum 60 de secunde. Dacă un reviewer vrea să revină în același mediu timp de câteva zile, creează-l în schimb ca persistent: își păstrează discul până la 30 de zile și se facturează pe fiecare oră începută, așa că un sandbox standard ținut pentru un review de două zile costă în jur de $3.17. Șterge-l când pull requestul e îmbinat.

Limite bune de știut

  • Două comenzi deodată per cont. Destul pentru review-uri, care rulează una după alta. Dacă verifici zeci de pull requesturi deodată, ele așteaptă la coadă.
  • Fără porturi de intrare. Nu poți deschide aplicația în browser. Pornește-o înăuntru și testeaz-o cu curl localhost dintr-o a doua comandă.
  • Fără Docker înăuntru. Testele care pornesc containere își au locul pe un runner VPS.
  • Internetul spre exterior e deschis. Asta face ca pip install să meargă. Nu pune în sandbox nimic ce n-ai da autorului patchului.

Primii pași

Conturile noi primesc $1 de timp în sandbox, ceea ce acoperă peste o sută de treceri de review pe tariful standard. Pagina sandboxurilor are tarifele, referința SDK — fiecare metodă folosită mai sus, iar Python SDK în 5 minute — configurarea.

Legate: rulări de teste CI izolate pentru pipeline-ul complet și sandbox pentru agenți AI pentru agenții care scriu codul de la bun început.

Gata de deploy? Plătește cu cripto, fără KYC — online în aproximativ un minut.

Pornește acum →

Întrebări frecvente

Prin ce diferă asta de rularea CI pe pull request?

CI răspunde dacă testele existente trec. O verificare de review răspunde dacă patchul face ce spune: rulează reproducerea din raportul de bug pe codul vechi și pe cel nou, încearcă cazul-limită care îl îngrijorează pe reviewer și păstrează un sandbox în care reviewerul să poată scotoci. Merg bine împreună.

Îl poate folosi un agent AI de review?

Da, și acolo se vede cel mai mult câștigul. Prin MCP agentul primește unelte ca să creeze un sandbox, să ruleze comenzi și să citească fișiere, așa că, în loc să ghicească dacă o schimbare strică ceva, rulează codul și citează ieșirea în review.

E sigur să iau un pull request de la un necunoscut?

Tocmai ăsta e rostul sandboxului. Codul rulează într-o microVM separată, cu propriul kernel și fără nimic de-al tău înăuntru în afară de ce pui tu acolo. Nu da un token care poate scrie în repository; pentru repo-uri private ajunge un token doar de citire.

Pot deschide în browser aplicația din pull request?

Nu. Sandboxurile nu au porturi de intrare, deci nimic din exterior nu se poate conecta la ele. Poți porni aplicația înăuntru și s-o testezi cu curl dintr-o altă comandă sau poți face deploy de previzualizări pe un VPS, dacă reviewerii trebuie să dea clic printr-o interfață.

Cât costă o trecere de review?

O trecere obișnuită — clone, instalare, două reproduceri, teste — durează câteva minute pe tariful standard și costă în jur de $0.005. Plătești la secundă, minimum 60 de secunde, dintr-un sold preplătit.

Comentarii

Încă nu există comentarii. Fii primul.

Lasă un comentariu

Comentariile sunt moderate înainte să apară.