← تمام مضامین پر واپس

لانچ ویک: CandyRush کو Steam پر پہنچانا

شائع کردہ:
candyrushci-cdevidenceperformance

CandyRush، ایک ڈیٹرمنسٹک ٹاپ ڈاؤن سروائیور roguelite، 31 اکتوبر 2026 کو Steam پر لائیو ہوئی۔ یہ تحریر اس تاریخ کے پیچھے کی ریلیز انجینئرنگ کے بارے میں ہے: بلڈ Steam تک کیسے پہنچا، لانچ ویک اینڈ کے ڈیپلائے کیسے دکھتے تھے، میں نے کیا چھوڑنے کا انتخاب کیا، اور آگے کیا ہے۔

یہاں فروخت، وِش لسٹ یا کھلاڑیوں کی تعداد کے کوئی اعداد نہیں ہیں؛ میرے پاس بتانے کو کوئی نہیں۔

کیا شپ ہوا

لکھنے کے دن Steam اسٹور API سے:

تاریخِ اجرا31 اکتوبر 2026
قیمت$7.99، لانچ پر 15% رعایت کے ساتھ $6.79
پلیٹ فارمزWindows، macOS، Linux
زبانیںانگریزی، سادہ چینی
Steam فیچرزAchievements، Stats، مکمل کنٹرولر سپورٹ، Steam Input، Family Sharing

تینوں پلیٹ فارمز ایک ہی پائپ لائن سے نکلتے ہیں، جس پر میں نے پچھلی ایک تحریر میں لکھا تھا۔

لانچ ویک اینڈ اعداد میں

اگست میں پائپ لائن کی تنظیمِ نو کے بعد سے ریلیز (main) ڈیپلائے: 8 میں سے 8 کامیاب۔ ان میں سے دو لانچ ویک اینڈ پر تھے۔ نیچے کے تمام اوقات UTC میں ہیں، GitHub Actions API سے لیے گئے۔

رنلینآغازدورانیہنتیجہ
qa #383dev سے qa (PR #1087، 48 کمٹس)1 نومبر، 01:0126 منٹکامیاب
main #384qa سے main (PR #1088، 630 کمٹس)1 نومبر، 01:3135 منٹکامیاب
qa #387نقشے کی اصلاح (PR #1089)2 نومبر، 03:4832 منٹکامیاب
main #388نقشے کی اصلاح (PR #1090)2 نومبر، 03:5056 منٹکامیاب

رن #388 نے اپنے 56 میں سے 31 منٹ ایک job میں گزارے جس کا نام "Wait for in-flight CD on the other trunk" ہے۔ تینوں لینیں تین Unity ہوسٹس کے ایک ہی پول پر بلڈ کرتی ہیں، اس لیے ہر رن کسی دوسری برانچ کے پہلے سے شروع شدہ رن کا انتظار کرتا ہے۔ رن نمبر کے حساب سے ترتیب ڈیڈلاک سے بچاتی ہے: پہلے والا رن ہمیشہ پہلے چلتا ہے۔ main رن qa #387 کے پیچھے قطار میں لگا، پھر اس کے اپنے بلڈز اور Steam اپلوڈ میں تقریباً 24 منٹ لگے۔

بلڈ Steam تک کیسے پہنچتا ہے

پائپ لائن کی تین لینیں ہیں، ہر طویل مدتی git برانچ کے لیے ایک:

git dev  -> Steam "development"       automatic
git qa   -> Steam "qualityassurance"  automatic; the merge into qa is the gate
git main -> uploads to Steam          setting the build live is a human click

push کیا گیا کمٹ خودکار طور پر ٹیسٹر تک پہنچ سکتا ہے۔ لیکن جب تک کوئی شخص Steamworks میں بلڈ کو پروموٹ نہ کرے، کچھ بھی کھلاڑیوں تک نہیں پہنچتا۔ Steam بلڈز حذف نہیں کیے جا سکتے، اس لیے آخری قدم جان بوجھ کر دستی رکھا گیا ہے۔

اسی اصول نے پوری ریلیز کی شکل بنائی۔ ستمبر میں میں نے Valve کے بلڈ ریویو کے لیے qa کو main میں پروموٹ کیا (PR #924، 18 ستمبر)۔ ریویو Steam کی ڈیفالٹ برانچ سے پڑھتا ہے، اور میں چاہتا تھا کہ وہ بلڈ main سے آئے، کسی ضمنی لین سے نہیں۔ یہ اکتوبر 2025 کے بعد ٹرنک کی پہلی پروموشن تھی۔ ستمبر کی آخری پروموشن (PR #945، 22 ستمبر) کے بعد main تقریباً چھ ہفتے نہیں ہلی۔ روزمرہ کا کام dev اور qa سے گزرتا رہا۔

لانچ کی رات PR #1088 نے ایک ہی مرج میں main کو تازہ کر دیا: 630 کمٹس (مرج کمٹس کے بغیر 508)، جن میں 22 ستمبر سے اب تک کا سب کچھ شامل تھا۔ یہ خطرناک لگتا ہے۔ ایسا نہیں تھا، کیونکہ مرج کیا گیا کمٹ پہلے ہی پوری qa لین سے کامیابی سے گزر چکا تھا: Windows، Linux اور macOS بلڈز اور Steam کی qualityassurance برانچ پر اپلوڈ۔ main رن نے اسی کمٹ کو دوبارہ بلڈ کر کے اپلوڈ کیا۔ اس پروموشن میں کچھ بھی ایسا نہیں تھا جو qa کے لیے نیا ہو۔

اکتوبر: لانچ سے پہلے کیا سچ ہونا ضروری تھا

اکتوبر کا زیادہ تر حصہ بلڈ کو پروموشن کے لائق بنانے میں گیا۔ بہت سا کوڈ AI کوڈنگ ایجنٹس نے لکھا؛ میں نے سمت طے کی، issues لکھے، اور ہر تبدیلی کا جائزہ لے کر اسے منظور یا روکا۔ اس کام کے چار حصے سب سے اہم تھے۔

بدترین صورت میں کارکردگی

لانچ سے ایک ہفتہ پہلے، تیسرے آرک کی سب سے گنجان لڑائی گیم کا سب سے سست منظر تھی۔ اصلاح (PR #1079، 26 اکتوبر کو مرج) کو پہلے اور بعد میں ایک نئے ریئل ٹائم کیپچر ٹیسٹ سے ناپا گیا، جو اس سیگمنٹ کو 500 دشمنوں کی حد پر چلاتا ہے:

پہلےبعد میں
Arc 3 Horde، گہرائی 5، Burst آنتقریباً 27 FPSتقریباً 43 FPS
مزید Box2D اور animator کی بچت (انجن A/B)تقریباً 60 FPS
500 دشمنوں پر ایریا پراپ اسکین1.80 ms0.57 ms

یہ فریم ریٹس Unity ایڈیٹر میں ناپے گئے۔ میرے تجربے میں ڈیپلائے کیے گئے پلیئر بلڈز عموماً ایڈیٹر سے 2-3 گنا تیز چلتے ہیں، لیکن میں نے اس منظر کے لیے یہ نہیں ناپا۔

مشکل حصہ کام کو ڈیٹرمنسٹک رکھنا تھا۔ دشمنوں کی علیحدگی ایک Burst job بن گئی جو ہر پڑوسی کو tick کے آغاز پر لیے گئے اسنیپ شاٹ سے پڑھتی ہے، کبھی ایسی پوزیشن سے نہیں جو کسی دوسرے دشمن نے ابھی بدلی ہو۔ اسنیپ شاٹ کسی بھی سمیولیٹڈ آبجیکٹ کے چلنے سے پہلے بنتا ہے، اس لیے اپڈیٹ کی ترتیب نتیجہ نہیں بدل سکتی۔ اسٹیٹ ڈائجسٹس کو 1 اور 23 job workers کے ساتھ، اور Burst آن اور آف دونوں صورتوں میں یکساں ثابت کیا گیا، پھر ری پلے بیس لائنز دوبارہ منظور کی گئیں۔ ایک آڈٹ سے پتا چلا کہ لائیو گیم میں کوئی چیز دشمنوں کو فزکس کے ذریعے نہیں پڑھتی، اس کے بعد دشمنوں کو Box2D سے سمیولیٹ کرنا بھی بند کر دیا گیا۔

ایسا ریلیز گیٹ جسے لیول ڈیزائن نہ توڑ سکے

اکتوبر کے وسط میں dev ڈیپلائے لین بار بار سرخ ہوتی رہی، ایسی وجہ سے جس کا بگز سے کوئی تعلق نہیں تھا: کچھ ٹیسٹ ایسے تیار کردہ مواد کو جانچتے تھے، جیسے پراپ لے آؤٹس اور اسپان کے امکانات، جو لیول ڈیزائن کے ساتھ تقریباً روز بدلتا ہے۔ ان ٹیسٹس کو سب کے سب نظر انداز کر دینا آسان اور غلط ہوتا۔ اس کے بجائے ٹیسٹ رومز کو مواد کی منجمد کاپیوں پر منتقل کیا گیا (11 اکتوبر)، تاکہ کسی شپ شدہ آرک میں ترمیم سے ڈیٹرمنزم بیس لائنز نہ بدلیں۔ ایک ٹیسٹ فکسچر، جس کے تین ٹیسٹ اسی دن عارضی طور پر نظر انداز کیے گئے تھے، اب پورا چلتا ہے اور منجمد رومز پر 4 میں سے 4 پاس کرتا ہے۔

ایک ہفتے بعد PR #1073 نے 34 PlayMode ٹیسٹس کو 32 EditMode ٹیسٹس میں بدل دیا؛ پرانا ہر ٹیسٹ صرف یہ دیکھنے کے لیے ایک سین بوٹ کرتا تھا کہ کوئی کمپوننٹ موجود ہے یا نہیں۔ ان میں سے تیس تقریباً 0.4 سیکنڈ میں چلتے ہیں۔ اس نے 5 ایسے ٹیسٹ بھی حذف کیے جو کبھی فیل ہو ہی نہیں سکتے تھے۔

کریش رپورٹ سرور جو چلتا رہے

اکتوبر کے وسط میں سیلف ہوسٹڈ کریش رپورٹ سرور کی ڈسک بھر گئی۔ ہر dev بلڈ تقریباً 2 GB نیٹو ڈیبگ سمبلز اپلوڈ کرتا تھا، اور dev بلڈز اکثر شپ ہوتے ہیں۔ اصلاح کے دو حصے تھے: سرور پر ایک آپریشنل صفائی، اور ایک کوڈ تبدیلی (13 اکتوبر)۔ سمبل اپلوڈ اب ہر چینل (dev، qa، prod) کے لیے ایک الگ سوئچ ہے، dev کے لیے بند اور ان بلڈز کے لیے آن جو کھلاڑی اور ٹیسٹرز چلاتے ہیں۔ بند چینل CI میں ناکامی کے بجائے ایک نوٹس کے طور پر دکھتا ہے، اس لیے یہ سیٹنگ شور مچائے بغیر نظر آتی رہتی ہے۔

ایک مشین کم ہو تب بھی شپ کرنا

macOS بلڈز کے لیے ایک Mac کا آن لائن ہونا ضروری ہے۔ 18 اکتوبر سے پہلے، اگر کوئی Mac جواب نہ دیتا تو qa لین پورا Steam ڈیپلائے چھوڑ دیتی تھی۔ PR #1073 نے یہ بدل دیا: جب Mac پروب کو کوئی مشین نہ ملے تو qa، Windows اور Linux شپ کرتی ہے اور macOS depot کو اس کے پچھلے بلڈ پر رہنے دیتی ہے۔ Mac بلڈ ناکام ہو تو اب بھی کچھ شپ نہیں ہوتا۔ اعلان اب بتاتا ہے کہ اصل میں کون سے depots گئے۔

لانچ ویک کی اصلاح

لانچ کے بعد پہلی تبدیلی ایک نقشہ بگ تھی، جو لانچ ویک اینڈ پر ہی پکڑی اور ٹھیک کی گئی۔ run composer ہر رن کے لیے ایک شاخ دار نقشہ بناتا ہے، اور آرک کے اصول کہتے ہیں کہ ایک ہی قسم کے دو مقابلے لگاتار نہیں آ سکتے۔ composer کے نقشے کے کنارے اس اصول کو نظر انداز کرتے تھے۔ بعد کا ایک پریزنٹیشن مرحلہ چپکے سے رکھا گیا مقابلہ بدل دیتا تھا، اس لیے منی میپ ایک چیز دکھاتا اور گیٹ دوسری۔

اصلاح کنارے بننے کے بعد ایک ڈیٹرمنسٹک مرمتی مرحلہ چلاتی ہے۔ یہ اگلی قطار کو کم سے کم حرکتوں سے دوبارہ ترتیب دیتی ہے، ضرورت پڑے تو موجودہ قطار پر جاتی ہے، اور آخری حربے کے طور پر ایسا کنارہ ہٹا دیتی ہے جس سے کوئی نوڈ تنہا نہ رہے۔ ٹیسٹ ہر شپ شدہ آرک پر سیڈز 1 سے 1000 تک چلاتا ہے:

before the fix: 34-59% of maps on Arc0001-0005 had a barred repeat edge
after the fix:  none

یہ 2 نومبر کو dev سے qa اور پھر main تک گئی۔ وہاں سے یہ کھلاڑیوں تک تب پہنچتی ہے جب Steamworks میں بلڈ کو لائیو کیا جائے۔

میں نے جان بوجھ کر کیا چھوڑا

لانچ کا مطلب تھا یہ چننا کہ کیا مکمل نہیں کرنا۔ قابلِ ذکر انتخاب یہ ہیں:

  • qa اور main لینوں پر ٹیسٹ گیٹس بند ہیں۔ ویری ایبلز SKIP_TEST_GATES_QA (27 اکتوبر کو سیٹ) اور SKIP_TEST_GATES_MAIN (31 اکتوبر کو سیٹ) دونوں true ہیں، اور SKIP_TEST_GATES_DEV، false ہے۔ مکمل EditMode اور PlayMode سویٹس اب بھی dev لین پر چلتے ہیں، اور ہر پروموشن PR اس کامیاب رن کا نام لیتا ہے جسے وہ پروموٹ کر رہا ہے۔ یہ چھوٹ ایسے کمٹ پر مکمل سویٹس دوبارہ چلانے سے بچاتی ہے جو انہیں پہلے ہی پاس کر چکا ہو۔ یہ لانچ ویک کا ایک سوچا سمجھا سودا ہے، ہر PR کی تفصیل میں لکھا ہوا، اور ایک ویری ایبل بدل کر واپس لیا جا سکتا ہے۔
  • dev لین شور والی ہے۔ 1 اکتوبر سے 2 نومبر تک اس کے مکمل ہونے والے رنز میں 14 کامیاب، 14 ناکام اور 5 منسوخ ہوئے۔ منسوخیاں ڈیزائن کے مطابق ہیں (نیا push پرانے رن کی جگہ لے لیتا ہے)۔ ناکام رنز اس لین کو ایسی جگہ رکھنے کی قیمت ہیں جہاں ٹوٹنا سستا ہے، لیکن یہ اب بھی بہت زیادہ ہیں۔
  • Steam Cloud سیوز آن نہیں ہیں۔ Auto-Cloud کنفیگریشن اور اس کی لائیو جانچ ایک کھلا issue ہے جو میرے جائزے کا منتظر ہے۔ جب تک اس کی مکمل تصدیق نہ ہو، سیوز مقامی رہیں گی۔
  • کوئی نیا کنٹینٹ سسٹم نہیں۔ لامتناہی میدانوں کے لیے دوبارہ قابلِ استعمال، گھمائے جا سکنے والے پراپ لے آؤٹس کا issue درج ہے، لیکن وہ ڈیٹرمنسٹک ری پلے کے راستے کو چھوتے ہیں، اس لیے انہیں لانچ کے بعد کے لیے چھوڑ دیا گیا۔

لانچ کے بعد: لیڈر بورڈز اور کارکردگی

لانچ کے بعد دو عوامی صفحات گیم کا احاطہ کرتے ہیں:

  • ہفتہ وار لیڈر بورڈز۔ جمع کرایا گیا اسکور قابلِ اعتماد نہیں مانا جاتا۔ تصدیقی سروس ایک headless براؤزر میں شپ شدہ پروڈکشن بلڈ پر رن کے ریکارڈ شدہ ان پٹس کو دوبارہ چلاتی ہے، اسٹیٹ ڈائجسٹس کا موازنہ کرتی ہے، اور صرف تب وہ اسکور لکھتی ہے جو اس نے خود اخذ کیا ہو۔ تفصیل The Verified Score میں ہے۔
  • کارکردگی۔ گمنام گیم سیشنز سے ناپے گئے فریم ریٹس، جو ڈیولپمنٹ، ریلیز کینڈیڈیٹ اور ریلیز شدہ بلڈز کے لیے الگ الگ شائع ہوتے ہیں۔

آگے کیا ہے

  • جب dev لین قابلِ اعتماد طور پر سبز رہنے لگے تو qa اور main کے ٹیسٹ گیٹس دوبارہ آن کرنا۔
  • dev لین کی ناکامی کی شرح کم کرنا۔
  • Steam Cloud سیوز کی مکمل تصدیق کرنا، پھر انہیں آن کرنا۔
  • کنٹینٹ اپڈیٹس انہی تین لینوں سے شپ کرنا جن سے لانچ گزرا۔

جو بات عام ہے

ناقابلِ واپسی قدم کو دستی رکھیں۔ Steam اپلوڈ تک سب کچھ خودکار ہے۔ بلڈ کو لائیو کرنا ایک کلک ہے، کیونکہ Steam بلڈ حذف نہیں کیا جا سکتا۔

بڑی پروموشن تب محفوظ ہے جب اس میں کچھ بھی نیا نہ ہو۔ 630 کمٹس کا مرج بے حادثہ رہا کیونکہ بالکل وہی کمٹ پہلے ہی qa پر بلڈ اور اپلوڈ ہو چکا تھا۔

جو نہیں کیا اسے لکھ لیں۔ چھوڑے گئے ٹیسٹ گیٹس، شور والی لین اور غائب کلاؤڈ سیوز ویری ایبلز، PR تفصیلات اور کھلے issues میں درج ہیں، جہاں وہ بھولے نہیں جا سکتے۔