−25%

cho Windows trả theo năm, đến 31/10. Xem các gói

EQVPS
Bắt đầu

Sandbox cho review mã và kiểm tra PR: chứng minh bản vá chạy đúng trước khi duyệt

Đọc diff cho bạn biết bản vá tuyên bố điều gì. Chạy nó cho bạn biết điều đó có đúng không. Lấy pull request về một microVM dùng một lần, tái hiện lỗi trước và sau, chạy test và review bằng bằng chứng — khoảng nửa cent mỗi lượt.

Diff cho thấy bản vá tuyên bố sẽ làm gì. Nó không cho thấy lỗi đã thật sự biến mất chưa, nhánh mới của một câu if có bao giờ được chạy không, hay việc nâng phiên bản thư viện phụ thuộc có làm hỏng import khi cài đặt sạch không. Người review biết điều đó, nên rất nhiều bài review kết thúc bằng "LGTM, miễn là test qua".

Với bản vá do AI viết, khoảng trống này càng rộng. Mô hình tạo ra mã trông hợp lý rất nhanh, và trông hợp lý chính là loại dễ lọt qua mắt một người review mệt mỏi. Cách khắc phục rẻ là chạy thay đổi trước khi ai đó duyệt nó — ở nơi nó không thể làm hại gì.

Phép kiểm tra: base, head, test

Bằng chứng thuyết phục nhất mà một bản vá có thể đưa ra là đoạn tái hiện thất bại trên mã cũ và chạy qua trên mã mới. Sandbox biến việc đó thành một script 20 dòng. Đây là microVM Firecracker có Python 3.12, Node.js 22, git và curl, khởi động trong khoảng một giây:

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 là đoạn mã trong báo cáo lỗi. Nếu nó thoát với mã khác 0 trên base và bằng 0 trên head, bản vá sửa đúng thứ nó tuyên bố. Hãy đăng dòng đó cùng bản tóm tắt test làm bình luận trên pull request, và người review sẽ bắt đầu từ sự thật.

Bộ test chạy dưới dạng tác vụ nền vì một lệnh đồng bộ đơn lẻ dừng ở giây thứ 55. TTL 30 phút giới hạn thời gian một lần chạy bị treo có thể tính phí bạn.

Agent review biết chạy mã

Ý tưởng này cũng áp dụng cho người review là AI. Kết nối qua máy chủ MCP, agent có các công cụ sandbox: tạo sandbox, chạy lệnh, tải tệp lên và xuống. Thay vì viết "điều này có thể làm hỏng khả năng tương thích với Python 3.8", nó lấy branch về, chạy mã và trích dẫn traceback — hoặc báo rằng mọi thứ vẫn ổn.

Hãy cho agent như vậy một hạn mức chi tiêu và một token chỉ đọc, đồng thời quyết định những công cụ nào nó được gọi mà không cần hỏi. Trang biện pháp bảo vệ MCP liệt kê từng công cụ theo mức rủi ro.

Chọn gói nào

Kho mãGóiLượt điển hìnhChi phí ước tính
Thư viện nhỏ, Python hoặc JS thuầnsmall (0.5 vCPU, 1 GB)2 phút$0.0011
Ứng dụng web có bộ teststandard (1 vCPU, 2 GB)5 phút$0.0055
Phần mở rộng native, thư viện cần biên dịchplus (2 vCPU, 4 GB)15 phút$0.033

Sandbox tạm thời được tính phí theo giây với mức tối thiểu 60 giây. Nếu người review muốn quay lại cùng một môi trường trong vài ngày, hãy tạo nó ở chế độ persistent: nó giữ ổ đĩa tối đa 30 ngày và được tính theo mỗi giờ bắt đầu, nên một sandbox standard giữ cho đợt review hai ngày tốn khoảng $3.17. Hãy xóa nó khi pull request đã được merge.

Những giới hạn nên biết

  • Hai lệnh cùng lúc mỗi tài khoản. Thừa đủ cho việc review, vốn diễn ra lần lượt. Nếu bạn kiểm tra hàng chục pull request cùng lúc, chúng sẽ xếp hàng.
  • Không có cổng chiều vào. Bạn không thể mở ứng dụng trên trình duyệt. Hãy khởi chạy nó bên trong và kiểm tra bằng curl localhost từ một lệnh thứ hai.
  • Không có Docker bên trong. Test cần khởi chạy container nên đặt trên runner ở VPS.
  • Internet chiều đi được mở. Đó là điều giúp pip install hoạt động. Đừng đưa vào sandbox bất cứ thứ gì bạn sẽ không giao cho tác giả bản vá.

Bắt đầu

Tài khoản mới nhận $1 thời gian sandbox, đủ cho hơn một trăm lượt review trên gói standard. Trang sandbox có bảng giá, tài liệu tham khảo SDK có mọi phương thức dùng ở trên, và SDK Python trong 5 phút hướng dẫn thiết lập.

Liên quan: chạy test CI cô lập cho toàn bộ pipeline, và sandbox cho AI agent cho những agent viết mã ngay từ đầu.

Sẵn sàng triển khai? Thanh toán bằng crypto, không KYC — trực tuyến trong khoảng một phút.

Triển khai ngay →

FAQ

Điều này khác gì so với chạy CI trên pull request?

CI trả lời liệu các test hiện có có qua hay không. Kiểm tra khi review trả lời liệu bản vá có làm đúng điều nó nói: chạy đoạn tái hiện từ báo cáo lỗi trên mã cũ và mã mới, thử trường hợp biên mà người review lo ngại, và giữ một sandbox để người review vào xem xét. Hai việc này bổ trợ tốt cho nhau.

Agent review dùng AI có dùng được không?

Được, và đó là nơi nó đáng giá nhất. Qua MCP, agent có công cụ để tạo sandbox, chạy lệnh và đọc tệp. Thay vì đoán xem thay đổi có làm hỏng gì không, nó chạy mã và trích dẫn output trong bài review.

Lấy pull request của người lạ về có an toàn không?

Đó chính là mục đích của sandbox. Mã chạy trong một microVM riêng với kernel riêng, và bên trong không có gì của bạn ngoài những thứ bạn đưa vào. Đừng truyền token có quyền ghi vào kho mã; với kho riêng tư, token chỉ đọc là đủ.

Tôi có thể mở ứng dụng từ pull request trên trình duyệt không?

Không. Sandbox không có cổng chiều vào, nên không gì từ bên ngoài kết nối được. Bạn có thể khởi chạy ứng dụng bên trong và kiểm tra bằng curl từ một lệnh khác, hoặc triển khai bản xem trước lên VPS nếu người review cần bấm qua giao diện.

Một lượt review tốn bao nhiêu?

Một lượt điển hình — clone, cài đặt, tái hiện hai lần, chạy test — mất vài phút trên gói standard và tốn khoảng $0.005. Bạn trả theo giây với mức tối thiểu 60 giây, từ số dư trả trước.

Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên.

Để lại bình luận

Bình luận được kiểm duyệt trước khi hiển thị.