−25%

за Windows при годишно плащане, до 31.10. Към плановете

EQVPS
Започни

Пясъчник за преглед на код и проверки на PR: докажете, че пачът работи, преди да го одобрите

Четенето на diff ви казва какво твърди пачът. Пускането му ви казва дали е вярно. Изтеглете pull request в еднократна microVM, възпроизведете бъга преди и след, пуснете тестовете и правете преглед с доказателства — за около половин цент на минаване.

Diff-ът показва какво твърди, че прави пачът. Не показва дали бъгът наистина е изчезнал, дали новият клон на if изобщо се изпълнява, нито дали обновяването на зависимост не чупи импорта при чиста инсталация. Рецензентите го знаят и затова толкова много прегледи завършват с „LGTM, ако тестовете минат“.

При пачовете, написани от AI, пропастта расте. Моделът бързо произвежда правдоподобен код, а правдоподобният е точно онзи, който се изплъзва покрай уморен рецензент. Евтиното решение е да пуснете промяната, преди някой да я одобри — там, където не може да навреди на нищо.

Проверката: 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 от 30 минути ограничава колко може да ви струва увиснало пускане.

Агенти за преглед, които пускат код

Същата идея работи за AI рецензент. Свързан чрез MCP сървъра, агентът има инструменти за пясъчници: създаване на пясъчник, изпълнение на команда, качване и изтегляне на файлове. Вместо да пише „това може да счупи съвместимостта с 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

Временните пясъчници се таксуват на секунда с минимум 60 секунди. Ако рецензент иска да се връща към същата среда няколко дни, създайте я като persistent: пази диска си до 30 дни и се таксува за всеки започнат час, така че пясъчник standard, държан за двудневен преглед, струва около $3.17. Изтрийте го, когато pull request бъде слят.

Ограничения, които си струва да знаете

  • Две команди едновременно на акаунт. Напълно достатъчно за прегледи, които вървят един след друг. Ако проверявате десетки pull requests наведнъж, те се нареждат на опашка.
  • Без входящи портове. Не можете да отворите приложението в браузър. Стартирайте го вътре и го тествайте с curl localhost от втора команда.
  • Без Docker вътре. Тестовете, които вдигат контейнери, са за runner на VPS.
  • Изходящият интернет е отворен. Именно това кара pip install да работи. Не слагайте в пясъчника нищо, което не бихте дали на автора на пача.

Как да започнете

Новите акаунти получават $1 време в пясъчник, което покрива над сто минавания на преглед на тариф standard. На страницата на пясъчниците са тарифите, в справочника на SDK — всеки използван по-горе метод, а Python SDK за 5 минути описва настройката.

Свързано: изолирани CI тестове за целия pipeline и пясъчник за AI агенти за агентите, които пишат кода по принцип.

Готов за deploy? Плати в crypto, без KYC — онлайн за около минута.

Deploy-ни сега →

Въпроси

С какво се различава това от пускането на CI върху pull request?

CI отговаря дали съществуващите тестове минават. Проверката при преглед отговаря дали пачът прави това, което казва: пуска възпроизвеждането от доклада за бъг върху стария и новия код, пробва граничния случай, който тревожи рецензента, и държи пясъчник, в който рецензентът да рови. Двете работят добре заедно.

Може ли AI агент за преглед да го използва?

Да, и точно там се отплаща най-много. Чрез MCP агентът получава инструменти да създаде пясъчник, да изпълнява команди и да чете файлове. Вместо да гадае дали промяната чупи нещо, той пуска кода и цитира изхода в прегледа си.

Безопасно ли е да изтегля pull request от непознат?

Точно затова е пясъчникът. Кодът работи в отделна microVM със собствено ядро и вътре няма нищо ваше освен това, което сложите. Не подавайте токен, който може да пише в хранилището ви; за частни хранилища стига токен само за четене.

Мога ли да отворя приложението от pull request в браузъра си?

Не. Пясъчниците нямат входящи портове, така че нищо отвън не може да се свърже с тях. Можете да стартирате приложението вътре и да го тествате с curl от друга команда или да качвате прегледи на VPS, ако рецензентите трябва да минат през интерфейс.

Колко струва едно минаване на преглед?

Типичното минаване — клониране, инсталиране, две възпроизвеждания, тестове — отнема няколко минути на тариф standard и струва около $0.005. Плащате на секунда с минимум 60 секунди, от предплатен баланс.

Коментари

Още няма коментари. Бъди първият.

Остави коментар

Коментарите се модерират преди да се появят.