−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS
Начать

Песочница для ревью кода и проверки PR: докажите, что патч работает, до апрува

Дифф говорит, что патч обещает. Запуск говорит, правда ли это. Выкачайте пул-реквест в одноразовую микро-VM, воспроизведите баг до и после, прогоните тесты и ревьюйте с доказательствами — примерно за полцента за проход.

Дифф показывает, что патч обещает сделать. Он не показывает, действительно ли бага больше нет, выполняется ли когда-нибудь новая ветка if и не ломает ли обновление зависимости импорт на чистой установке. Ревьюеры это знают, поэтому столько ревью заканчиваются словами «LGTM, если тесты пройдут».

С патчами от ИИ этот разрыв растёт. Модель быстро выдаёт правдоподобный код, а правдоподобный — именно тот, что проскальзывает мимо уставшего ревьюера. Дешёвое решение — запускать изменение до того, как кто-то его одобрит, там, где оно ничему не навредит.

Проверка: base, head, тесты

Самое убедительное доказательство, которое может предъявить патч, — воспроизведение, которое падает на старом коде и проходит на новом. Песочница превращает это в скрипт на 20 строк. Это микро-VM Firecracker с 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, патч исправляет то, что заявляет. Опубликуйте эту строку и сводку тестов комментарием к пул-реквесту, и ревьюер начнёт с фактов.

Набор тестов работает фоновой задачей, потому что одна синхронная команда останавливается на 55 секундах. TTL в 30 минут ограничивает, сколько может стоить зависший прогон.

Ревью-агенты, которые запускают код

Та же идея работает для ИИ-ревьюера. Подключённый через 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. Удалите её, когда пул-реквест смержен.

Лимиты, которые стоит знать

  • Две команды одновременно на аккаунт. Для ревью, которые идут одно за другим, этого достаточно. Если проверять десятки пул-реквестов разом, они встанут в очередь.
  • Нет входящих портов. Открыть приложение в браузере не получится. Запустите его внутри и проверьте через curl localhost из второй команды.
  • Нет Docker внутри. Тесты, которые поднимают контейнеры, место на раннере на VPS.
  • Исходящий интернет открыт. Именно благодаря этому работает pip install. Не кладите в песочницу ничего, что не отдали бы автору патча.

С чего начать

Новые аккаунты получают $1 времени песочниц — этого хватит больше чем на сотню проходов ревью на тарифе standard. На странице песочниц — тарифы, в справочнике SDK — все методы из примера, а Python SDK за 5 минут покажет настройку.

По теме: изолированные прогоны тестов в CI для всего пайплайна и песочница для ИИ-агентов для агентов, которые пишут этот код.

Готовы развернуть? Оплата криптой, без KYC — сервер за минуту.

Развернуть →

Частые вопросы

Чем это отличается от запуска CI на пул-реквесте?

CI отвечает, проходят ли существующие тесты. Проверка для ревью отвечает, делает ли патч то, что заявляет: запускает воспроизведение из баг-репорта на старом и на новом коде, пробует пограничный случай, который беспокоит ревьюера, и держит песочницу, чтобы ревьюер мог в ней покопаться. Вместе они работают хорошо.

Может ли этим пользоваться ИИ-ревьюер?

Да, и именно там это окупается больше всего. Через MCP агент получает инструменты, чтобы создать песочницу, выполнять команды и читать файлы. Вместо догадок, сломает ли изменение что-нибудь, он запускает код и цитирует вывод в ревью.

Безопасно ли выкачивать пул-реквест от незнакомца?

Ради этого песочница и нужна. Код выполняется в отдельной микро-VM со своим ядром, и внутри нет ничего вашего, кроме того, что вы туда положили. Не передавайте токен с правом записи в репозиторий; для приватных репозиториев достаточно токена только на чтение.

Можно ли открыть приложение из пул-реквеста в браузере?

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

Сколько стоит один проход ревью?

Типичный проход — клон, установка, два воспроизведения, тесты — занимает несколько минут на тарифе standard и стоит около $0.005. Оплата посекундная, минимум 60 секунд, с предоплаченного баланса.

Комментарии

Пока нет комментариев. Будьте первым.

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

Комментарии проходят модерацию перед публикацией.