معاہدہ

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

کہاں بات کریں

Antimatter کے کسی بھی حصے کے بارے میں ہر چیز community repository سے شروع ہوتی ہے:

  • باگ اور فیچر ریکوسٹس: ایک مسئلہ کھولیں اور Bug report، Feature request، یا Plugin or integration request منتخب کریں۔ پہلے موجودہ مسائل میں تلاش کریں؛ اگر آپ کا مسئلہ وہاں موجود ہے تو ٹھمbs-up دیں یا اپنے تفصیلات شامل کریں۔
  • سوالات اور خیالات: Discussions میں، Q&A یا Ideas کیٹیگریز میں۔
  • کسی بڑی تبدیلی سے پہلے، پہلے طریقہ کار پر اتفاق کے لیے ایک مسئلہ یا بحث کھولیں۔ اس سے ایسا پُل ریکوسٹ بچتا ہے جسے جیسا ہے ایسے ہی ضم نہیں کیا جا سکتا۔

good first issue اور help wanted لیبل والے مسائل شروع کرنے کے لیے اچھے مقامات ہیں۔ تبصرے میں بتائیں کہ آپ اس پر کام کر رہے ہیں۔ نئے مسائل کو پہلے status/triage لیبل دیا جاتا ہے، پھر status/accepted، status/planned یا status/wontfix۔ مسائل کی نوعیت سے قطع نظر، وہ کمیونٹی ریپوزٹری میں ہی رہتے ہیں: کوڈ ریپوزٹریاں مسائل قبول نہیں کرتیں۔ منصوبہ بند کام Antimatter روڈ میپ پر موجود ہے۔

ریپوزٹریز اور برانچز

کوڈ AntimatterChat آرگنائزیشن میں ہے؛ کوڈ کہاں موجود ہے میں ریپوزٹریز کی فہرست دی گئی ہے۔ ہر ریپوزٹری میں:

  • main ڈیفالٹ برانچ ہے اور Antimatter کا کوڈ اس میں ہے۔ اس سے برانچ بنائیں اور اس کے لیے پُل ریکوسٹس بھیجیں۔
  • Mattermost سے فورک کی گئی ریپوزٹریز میں upstream برانچ بھی ہوتی ہے، جو Mattermost کے کوڈ کا ایک آئینہ ہے اور اس کے تبدیلیاں لانے کے لیے استعمال ہوتی ہے۔ اس پر کام کی بنیاد نہ رکھیں۔

ہر ریپوزٹری کا README اسے کیسے بنانا اور ٹیسٹ کرنا ہے اس کی وضاحت کرتا ہے۔ سرور اور ویب انٹرفیسز کے لیے دیکھیں سورس سے بنانا؛ ایپس کے لیے بنانا، انسٹال کرنا اور ڈیبگ کرنا۔

پُل ریکوسٹس

  1. ریپوزٹری کو فورک کریں اور main سے ایک برانچ بنائیں۔
  2. ہر پُل رِکوسٹ میں صرف ایک تبدیلی رکھیں۔ چھوٹی پُل رِکوسٹس کی جلدی سے جائزہ لیا جاتا ہے۔
  3. اپنے اردگرد موجود کوڈ کے اسٹائل پر عمل کریں اور جہاں مناسب ہو وہاں ٹیسٹس شامل کریں یا اپ ڈیٹ کریں۔
  4. تبدیلی کی نوعیت اور اس کی وجہ بیان کریں، اور اس مسئلے کے ساتھ لنک کریں جو آپ حل کر رہے ہیں: Fixes AntimatterChat/community#123۔
  5. یہ یقینی بنائیں کہ تمام چیکس پاس ہو رہی ہیں۔ ایک مینٹینر پُل رِکوسٹ کا جائزہ لیتا ہے اور تبدیلیوں کی درخواست کر سکتا ہے۔

سرور ریپوزٹری میں پُل رِکوسٹ ٹیمپلیٹ کو پُر کریں: ایک خلاصہ، اور رِلیز نوٹ بلاک، جو ہمیشہ موجود ہونا چاہیے۔ اگر تبدیلی کسی API، ترتیبات، ڈیٹا بیس اسکیمہ یا ظاہری رویے کو متاثر نہیں کرتی، تو اس میں NONE لکھیں۔

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

کمیٹس اور کوڈ اسٹائل

کمیٹس

ہسٹری میں کمیٹ میسجز ایک مختصر جملہ ہوتے ہیں جو تبدیلی کی نوعیت بیان کرتے ہیں، سینٹنس کیس میں اور آخر میں پُرہ (full stop) کے بغیر۔ کسی ایک حصے کی تبدیلیاں اس کے نام سے شروع ہوتی ہیں، مثال کے طور پر Fusion: a compact conversation header on phones یا Server: community attributes, and admin-only user attributes۔ ہر تبدیلی کے لیے ایک کمیٹ؛ اگر وجوہ واضح نہ ہوں تو انہیں باڈی میں بیان کریں۔

سرور (Go)

  • پوش کرنے سے پہلے server/ میں make check-style چلائیں۔
  • کبھی بھی براہِ راست go mod tidy نہ چلائیں؛ make modules-tidy چلائیں۔
  • ریکوئسٹ پاتھز میں، ریکوئسٹ کے لاگر کے ساتھ لاگ کریں۔ اسٹور لیئر میں، request.CTX لیں، context.Context نہیں۔
  • نئے API اینڈ پوائنٹس server/channels/api4 میں جاتے ہیں، ان کے ٹائپس server/public/model میں، اور آئیڈیالی model.Client4 اور TypeScript کلائنٹ میں ایک میٹھوڈ کے ساتھ۔

ویب انٹرفیسز (TypeScript اور React)

  • webapp/ میں make check-style اور make check-types چلائیں۔
  • کلاسیکی انٹرفیس webapp/STYLE_GUIDE.md پر عمل کرتا ہے: فنکشنل کمپوننٹس، Redux کے لیے ہکس، رنگوں کے لیے تھیم ویری ایبلز، اور قابل رسائی والی مارک اپ۔
  • Fusion کے کمپوننٹس webapp/fusion/src/fusion میں موجود ہیں، اور ان کے اسٹائلز webapp/fusion/src/fusion/styles میں۔ یہ am() ہیلپر کے ساتھ کلاس نامز بناتے ہیں اور Fusion کے ڈیزائن ٹوکنز استعمال کرتے ہیں؛ اپنے قریبی فائلوں کے اسٹائل پر عمل کریں۔
  • ایپس کے لیے نئے window.* گلوبلز شامل نہ کریں۔ نئے ایپ فیسنگ یوٹیلیٹیز window.WebappUtils کے تحت جاتی ہیں، جیسا کہ webapp/AGENTS.md میں بیان کیا گیا ہے۔
  • ایپ رجسٹری (plugins/registry.ts) میں تبدیلی عموماً دونوں انٹرفیسز کی کاپیوں میں شامل ہونی چاہیے۔

ترجمے

Antimatter اور اس کے ساتھ شامل ایپس 37 زبانوں میں ترجمہ کیے گئے ہیں۔ کونٹری بیوٹرز انگریزی سٹرنگز شامل کرتے ہیں؛ باقی زبانیں بچوں میں اپڈیٹ کی جاتی ہیں۔

ویب انٹرفیسز میں سٹرنگ شامل کرنا

  1. اسے ایک ID اور حقیقی انگریزی متن کے ساتھ لکھیں: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) یا <FormattedMessage id='…' defaultMessage='…'/>۔ ایپ میں دکھائی دینے والا انگریزی متن defaultMessage سے آتا ہے۔
  2. webapp/ میں make i18n-extract چلائیں (یا webapp/fusion یا webapp/channels میں npm run i18n-extract)۔ یہ اس پیکج کے src/i18n/en.json کو اپڈیٹ کرتا ہے۔
  3. en.json میں نئے اندراج کے description کو پُر کریں: سٹرنگ کہاں ظاہر ہوتی ہے اور کیسے استعمال ہوتی ہے۔ یہ وہ سیاق و سباق ہے جس کی بنیاد پر مترجمین، انسانی یا مشینی، کام کرتے ہیں۔

npm run i18n-extract:check اس وقت ناکام ہو جاتا ہے جب en.json کوڈ کے ساتھ اپ ٹو ڈیٹ نہ ہو۔

سرور میں سٹرنگ شامل کرنا

  1. کوڈ میں ID استعمال کریں، مثال کے طور پر model.NewAppError(…, "app.community_attributes.invalid.app_error", …) یا i18n.T("…")۔
  2. server/ میں make i18n-extract چلائیں۔ یہ ID کو server/i18n/en.json میں صحیح ترتیب میں شامل کرتا ہے۔
  3. نئے اندراج کا انگریزی translation اور description لکھیں۔

دیگر زبانیں

ہر زبان کا اپنا فائل en.json کے ساتھ موجود ہے (fr.json, pt-BR.json, zh-TW.json…)۔ غلط ترجمے کی رپورٹ کرنے کے لیے کمیونٹی ریپوزٹری میں ایک issue کھولیں جس میں زبان، متن اور اس کی جگہ درج ہو۔

بندل شدہ ایپس اپنے سٹرنگز webapp/i18n/ میں رکھتی ہیں؛ ایپس کی پیج پر ترجمے دیکھیں۔

دستاویزات اور یہ ویب سائٹ

یہ ویب سائٹ اور اس کی دستاویزات antimatter.chat ریپوزٹری میں ہیں۔ صفحات src/pages/ میں HTML fragments ہیں؛ python3 src/build.py سائٹ بناتا ہے۔ اصلاحات اور غائب وضاحتیں issues یا pull requests کے طور پر خوش آئند ہیں۔

سیکیورٹی مسائل

کبھی بھی سیکیورٹی کا مسئلہ عوامی issue، discussion یا pull request میں رپورٹ نہ کریں۔

اسے GitHub کے پرائیویٹ وولنریبلٹی رپورٹنگ کے ذریعے رپورٹ کریں: متاثرہ ریپوزٹری (مثلاً سرور) کا سیکیورٹی ٹیب کھولیں اور وولنریبلٹی رپورٹ کریں منتخب کریں۔ اگر آپ کو معلوم نہیں کہ کون سی ریپوزٹری متاثرہ ہے، تو اسے کمیونٹی ریپوزٹری پر رپورٹ کریں۔ اس میں کمپوننٹ اور اس کی ورژن، حملہ آور کیا کر سکتا ہے، اسے کیسے دوبارہ پیدا کیا جا سکتا ہے، اور اس پر منحصر کوئی بھی کنفیگریشن شامل کریں۔

مینٹینرز وہاں جواب دیتے ہیں، اسے ٹھیک کرنے کے دوران آپ کو اپ ڈیٹ رکھتے ہیں، اور ایک بار جب ٹھیک شدہ ریلیز آ جائے تو ایک ایڈوائزری شائع کرتے ہیں۔ براہ کرم مسئلے کی افشا کرنے سے پہلے انہیں معقول وقت دیں۔ ٹھیک شدہ چیزیں تازہ ترین ریلیز میں شامل ہوتی ہیں۔ مکمل پالیسی سیکیورٹی پالیسی میں موجود ہے۔

لائسنسز

  • سرور GNU Affero General Public License v3.0 (AGPL v3) کے تحت ہے۔ اسی ریپوزٹری میں، ایڈمن ٹولز اور کنفیگریشن فائلز (server/templates/، server/i18n/، server/public/ اور webapp/) Apache License 2.0 کے تحت ہیں۔ LICENSE.txt اور NOTICE.txt دیکھیں۔
  • ایپس: Antimatter کی اپنی ایپس، جیسے کہ پولز، AGPL v3 کے تحت ہیں؛ Mattermost سے فوڑک کی گئی ایپس اپنا اصل لائسنس برقرار رکھتی ہیں۔ ہر ریپوزٹری اپنے LICENSE فائل میں بتاتی ہے کہ کون سا لائسنس ہے۔
  • ڈیسک ٹاپ اور موبائل ایپس Apache License 2.0 کے تحت ہیں۔ Docker ریپوزٹری Apache License 2.0 کے تحت ہے، اس کے Dockerfile کے علاوہ جو AGPL v3 کے تحت ہے۔

AGPL کا مطلب یہ ہے کہ اگر آپ نیٹ ورک کے ذریعے دوسروں کے لیے Antimatter سرور کو تبدیل کر کے چلاتے ہیں، تو آپ کو اپنے تبدیلیوں کا سورس کوڈ انہیں پیش کرنا ہوگا۔ Antimatter Mattermost پر مبنی ہے؛ یہ Mattermost, Inc. سے منسلک یا اس کی تائید نہیں کرتا۔

ہر وہ شخص جو حصہ لیتا ہے کوڈ آف کنڈکٹ کی پیروی کرتا ہے۔