−25%

Windows کی سالانہ ادائیگی پر، 31 اکتوبر تک۔ پلانز دیکھیں

EQVPS
شروع کریں

CI کے لیے سینڈباکس: ہر رن ایک سینٹ سے کم میں، مکمل طور پر الگ ٹیسٹ

جس کوڈ پر بھروسا نہیں — کسی اجنبی کا pull request، خودکار طور پر بنا پیچ — اس کے ٹیسٹ ایک نئی microVM میں چلائیں جو رن کے بعد حذف ہو جاتی ہے۔ فی سیکنڈ بلنگ، Python اور TS کے لیے SDK، اور بیک وقت چلنے کی حدود کے بارے میں صاف بات۔

CI کے self-hosted runners کی ایک ناگوار عادت ہے: وہ سب کچھ یاد رکھتے ہیں۔ کیشے، ٹوکن، ایک ڈیپلائے کی جو کسی نے پچھلی بہار میں "عارضی طور پر" شامل کی تھی۔ آپ کی اپنی برانچوں کے لیے یہ ٹھیک ہے۔ مسئلہ اس وقت شروع ہوتا ہے جب کسی ایسے شخص کا pull request آتا ہے جس کا نام بھی آپ نے نہیں سنا — یا آپ کے اپنے AI ایجنٹ کا، جس نے ایسا پیچ لکھا ہے جسے ابھی کسی نے پڑھا تک نہیں۔

صاف جواب یہ ہے: ہر رن کے لیے ایک مشین۔ کلون کریں، انسٹال کریں، ٹیسٹ کریں، مشین پھینک دیں۔

ایک رن کیسا دکھتا ہے

سینڈباکس ایک Firecracker microVM ہے جو تقریباً ایک سیکنڈ میں Python 3.12، Node.js 22، git اور curl کے ساتھ شروع ہو جاتی ہے۔ باہر جانے والا انٹرنیٹ کام کرتا ہے، اس لیے git clone اور pip install -r requirements.txt معمول کے مطابق چلتے ہیں۔ اندر آنے والے پورٹ نہیں ہیں — چلتے وقت کوئی بھی چیز ٹیسٹ ماحول سے جڑ نہیں سکتی۔

کسی CI جاب کے نقطۂ نظر سے پورا کام ایک مختصر اسکرپٹ ہے۔ یہ Python SDK والا نسخہ ہے، جسے کسی بھی CI جاب سے بلایا جا سکتا ہے:

import os, sys
from eqvps import Sandbox

repo, ref = os.environ["REPO_URL"], os.environ["PR_SHA"]

with Sandbox.create(tariff="standard", ttl=1800) as sb:
    sb.exec(f"git clone {repo} /root/app && cd /root/app && git checkout {ref}", timeout=55)
    sb.exec("cd /root/app && pip install -r requirements.txt", timeout=55)
    task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
    result = task.wait(on_output=lambda out, err: print(out, end=""))
sys.exit(result.exit_code or 0)

ٹوکن آپ کے CI سیکریٹس میں EQVPS_API_KEY کے نام سے رہتا ہے۔ آپ کے CI کی اور کوئی چیز — نہ ڈیپلائے کیز، نہ کلاؤڈ اسناد — سینڈباکس میں نہیں جاتی۔ جب with بلاک ختم ہوتا ہے تو سینڈباکس حذف کر دیا جاتا ہے، چاہے جاب درمیان میں ہی کریش ہو گئی ہو۔

ٹیسٹ رن خود ایک بیک گراؤنڈ ٹاسک ہے، کیونکہ ایک سنکرونس کمانڈ 55 سیکنڈ پر رک جاتی ہے۔ بیک گراؤنڈ ٹاسک چلتے ہوئے اپنا آؤٹ پٹ بھیجتا رہتا ہے اور سینڈباکس کے TTL تک چل سکتا ہے — یہاں اسے 30 منٹ رکھا گیا ہے تاکہ اٹکا ہوا ٹیسٹ بل نہ بڑھا سکے۔

وہ حدود جن سے آپ واقعی ٹکرائیں گے

ان کے بارے میں صاف بتانے سے آپ کی پوری سہ پہر بچ جاتی ہے۔

بیک وقت چلنا۔ ایک اکاؤنٹ میں 20 سینڈباکس ہو سکتے ہیں، لیکن ایک وقت میں صرف 2 کمانڈز چلتی ہیں۔ CI کے لیے یعنی دو جابز واقعی متوازی۔ ایک ساتھ آنے والے دس PR قطار میں لگیں گے۔ اگر آپ کی پائپ لائن ٹیسٹ کو 16 workers میں بانٹتی ہے تو مرکزی پائپ لائن کے لیے یہ درست اوزار نہیں — اسے VPS پر اپنے runners پر رکھیں اور سینڈباکس کو ناقابلِ اعتماد لین کے لیے استعمال کریں۔

اندر کنٹینر نہیں۔ سینڈباکس کے ساتھ Docker نہیں آتا۔ جن یونٹ اور انٹیگریشن ٹیسٹس کو Postgres کنٹینر چاہیے، وہ جیسے ہیں ویسے نہیں چلیں گے؛ SQLite یا میموری میں نقلی آبجیکٹ پر چلنے والے ٹیسٹ چلیں گے۔

فائلیں۔ API کے ذریعے اپ لوڈ اور ڈاؤن لوڈ ہر فائل کے لیے زیادہ سے زیادہ 5 MB ہے۔ آرکائیو اپ لوڈ کرنے کے بجائے سینڈباکس کے اندر git سے کوڈ لائیں۔

لاگت کتنی ہے

آپ ٹیرف کے vCPU اور RAM کے لیے فی سیکنڈ ادائیگی کرتے ہیں، کم از کم 60 سیکنڈ، پیشگی ادا شدہ بیلنس سے — بغیر سبسکرپشن۔

رنٹیرفتخمینی لاگت
لنٹ + یونٹ ٹیسٹ، 1 منٹsmall (0.5 vCPU, 1 GB)$0.0006
مکمل سویٹ، 3 منٹstandard (1 vCPU, 2 GB)$0.0033
بلڈ + ٹیسٹ، 10 منٹplus (2 vCPU, 4 GB)$0.022

ان قیمتوں پر دلچسپ سوال لاگت کا نہیں بلکہ یہ ہے کہ آپ کے ٹیسٹ مقررہ وقت میں مکمل ہوتے ہیں یا نہیں۔ اپنے سب سے سست کامیاب رن سے کچھ زیادہ TTL رکھیں۔

سمجھ داری والی تقسیم

ہماری تجویز: قابلِ اعتماد برانچوں کو اپنے تیز، کیشے والے runner پر رہنے دیں۔ جو کچھ آپ نے خود نہیں لکھا — forks، بیرونی معاونین، ایجنٹس کے بنائے پیچ — اسے پہلے سینڈباکس سے گزاریں۔ اگر سینڈباکس رن کامیاب ہو اور کسی انسان نے diff دیکھ لیا ہو تو اسے قابلِ اعتماد پائپ لائن میں آگے بڑھائیں۔

اس طرح آپ کے پاس ایک لین ہوتی ہے جہاں رفتار اور کیشے اہم ہیں، اور دوسری جہاں صاف مشین اہم ہے — کسی ایک اوزار کو دونوں بننے پر مجبور کیے بغیر۔

سینڈباکس کے تعارف اور کنکشن گائیڈ سے شروع کریں — نئے اکاؤنٹس کو 1 ڈالر کا سینڈباکس وقت ملتا ہے، جو چند سو مختصر ٹیسٹ رنز کے لیے کافی ہے۔ اوپر استعمال ہونے والا ہر طریقہ SDK حوالہ میں ہے، اور بلنگ کے درست قواعد سینڈباکس کی حدود اور بلنگ میں۔

متعلقہ: کوڈ ریویو اور PR جانچ کے لیے سینڈباکس اور AI ایجنٹس کے لیے سینڈباکس۔

تعینات کے لیے تیار؟ کرپٹو میں ادائیگی کریں، بغیر KYC — تقریباً ایک منٹ میں لائیو۔

ابھی ڈیپلائے کریں →

عمومی سوالات

ناقابلِ اعتماد pull requests کو اپنے self-hosted runner پر کیوں نہ چلاؤں؟

ایک self-hosted runner ایک جاب سے دوسری جاب تک حالت برقرار رکھتا ہے اور عموماً اس میں ڈیپلائے کیز یا کلاؤڈ اسناد ہوتی ہیں۔ کسی ناواقف شخص کا pull request انہیں ایک ہی قدم میں پڑھ سکتا ہے۔ سینڈباکس ہر بار صاف حالت میں شروع ہوتا ہے اور اس میں زیرِ ٹیسٹ کوڈ کے سوا کچھ نہیں ہوتا۔

کیا کوئی ٹیسٹ 55 سیکنڈ سے زیادہ چل سکتا ہے؟

جی ہاں۔ 55 سیکنڈ کی حد ہر ایک سنکرونس کمانڈ پر لاگو ہوتی ہے۔ ٹیسٹ سویٹ کو بیک گراؤنڈ ٹاسک کے طور پر شروع کریں، اس کا آؤٹ پٹ وقتاً فوقتاً دیکھیں، اور وہ سینڈباکس کی عمر ختم ہونے تک چل سکتا ہے — عارضی سینڈباکس کے لیے زیادہ سے زیادہ 24 گھنٹے۔

کتنے ٹیسٹ رن ایک ساتھ چل سکتے ہیں؟

ہر اکاؤنٹ میں 20 سینڈباکس تک، لیکن ہر اکاؤنٹ میں ایک وقت میں صرف 2 کمانڈز چلتی ہیں۔ CI کے لیے اس کا مطلب ہے کہ دو جابز واقعی ایک ساتھ چلتی ہیں؛ باقی قطار میں رہتی ہیں۔ اگر آپ کو بڑے پیمانے پر متوازی تقسیم چاہیے تو VPS پر runners کا ایک گروپ بہتر رہے گا۔

کیا سینڈباکس کے اندر Docker موجود ہے؟

سینڈباکس میں Python 3.12، Node.js 22، bash، git اور curl ملتے ہیں، اور ڈیپنڈنسیز آپ pip یا npm سے انسٹال کرتے ہیں۔ Docker اس میں شامل نہیں — اگر آپ کے ٹیسٹ کنٹینر چلاتے ہیں تو انہیں VPS پر runner میں چلائیں۔

ایک رن کی لاگت کتنی ہے؟

فی سیکنڈ، کم از کم 60 سیکنڈ، ٹیرف کے vCPU اور RAM کے لیے۔ standard ٹیرف (1 vCPU، 2 GB) پر تین منٹ کا رن تقریباً 0.0033 ڈالر کا پڑتا ہے۔

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔