معاہدہ
باگ رپورٹس، خیالات، تراجم، دستاویزات اور کوڈ — سب خوش آمدید ہیں۔ یہ صفحہ وضاحت کرتا ہے کہ کہاں بات کرنی ہے، تبدیجیے کیسے بھیجیں، کوڈ کن اصولوں پر چلتا ہے، اور سیکیورٹی کے مسائل اور لائسنسز کے لیے کن قواعد کی پابندی کرنی ہے۔
کہاں بات کریں
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 اسے کیسے بنانا اور ٹیسٹ کرنا ہے اس کی وضاحت کرتا ہے۔ سرور اور ویب انٹرفیسز کے لیے دیکھیں سورس سے بنانا؛ ایپس کے لیے بنانا، انسٹال کرنا اور ڈیبگ کرنا۔
پُل ریکوسٹس
- ریپوزٹری کو فورک کریں اور
mainسے ایک برانچ بنائیں۔ - ہر پُل رِکوسٹ میں صرف ایک تبدیلی رکھیں۔ چھوٹی پُل رِکوسٹس کی جلدی سے جائزہ لیا جاتا ہے۔
- اپنے اردگرد موجود کوڈ کے اسٹائل پر عمل کریں اور جہاں مناسب ہو وہاں ٹیسٹس شامل کریں یا اپ ڈیٹ کریں۔
- تبدیلی کی نوعیت اور اس کی وجہ بیان کریں، اور اس مسئلے کے ساتھ لنک کریں جو آپ حل کر رہے ہیں:
Fixes AntimatterChat/community#123۔ - یہ یقینی بنائیں کہ تمام چیکس پاس ہو رہی ہیں۔ ایک مینٹینر پُل رِکوسٹ کا جائزہ لیتا ہے اور تبدیلیوں کی درخواست کر سکتا ہے۔
سرور ریپوزٹری میں پُل رِکوسٹ ٹیمپلیٹ کو پُر کریں: ایک خلاصہ، اور رِلیز نوٹ بلاک، جو ہمیشہ موجود ہونا چاہیے۔ اگر تبدیلی کسی 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 زبانوں میں ترجمہ کیے گئے ہیں۔ کونٹری بیوٹرز انگریزی سٹرنگز شامل کرتے ہیں؛ باقی زبانیں بچوں میں اپڈیٹ کی جاتی ہیں۔
ویب انٹرفیسز میں سٹرنگ شامل کرنا
- اسے ایک ID اور حقیقی انگریزی متن کے ساتھ لکھیں:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})یا<FormattedMessage id='…' defaultMessage='…'/>۔ ایپ میں دکھائی دینے والا انگریزی متنdefaultMessageسے آتا ہے۔ webapp/میںmake i18n-extractچلائیں (یاwebapp/fusionیاwebapp/channelsمیںnpm run i18n-extract)۔ یہ اس پیکج کےsrc/i18n/en.jsonکو اپڈیٹ کرتا ہے۔en.jsonمیں نئے اندراج کےdescriptionکو پُر کریں: سٹرنگ کہاں ظاہر ہوتی ہے اور کیسے استعمال ہوتی ہے۔ یہ وہ سیاق و سباق ہے جس کی بنیاد پر مترجمین، انسانی یا مشینی، کام کرتے ہیں۔
npm run i18n-extract:check اس وقت ناکام ہو جاتا ہے جب en.json کوڈ کے ساتھ اپ ٹو ڈیٹ نہ ہو۔
سرور میں سٹرنگ شامل کرنا
- کوڈ میں ID استعمال کریں، مثال کے طور پر
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)یاi18n.T("…")۔ server/میںmake i18n-extractچلائیں۔ یہ ID کوserver/i18n/en.jsonمیں صحیح ترتیب میں شامل کرتا ہے۔- نئے اندراج کا انگریزی
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 کے طور پر خوش آئند ہیں۔
سیکیورٹی مسائل
اسے 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. سے منسلک یا اس کی تائید نہیں کرتا۔
ہر وہ شخص جو حصہ لیتا ہے کوڈ آف کنڈکٹ کی پیروی کرتا ہے۔