سورس کوڈ سے بلڈنگ
یہ صفحہ یہ وضاحت کرتا ہے کہ Antimatter کو اس کے سورس کوڈ سے کیسے بلڈ اور چلایا جائے، چاہے آپ اس پر کام کر رہے ہوں یا اپنی اپنی بلڈز بنانے کی نیت رکھتے ہوں۔ یہ سرور اور ویب انٹرفیسز کو کور کرتا ہے، جو ایک ہی ریپوزٹری میں موجود ہیں، پھر Docker امیج اور ایپس کو۔
آپ کی کیا ضرورت ہے
- جائیں،
server/go.modمیں موجود ورژن پر (لکھتے وقت 1.26.7)۔ - Node.js اور npm،
.nvmrcاورwebapp/package.jsonمیں دی گئی ورژنز پر (Node 24.11.1 اور npm 11.6.2 کے ساتھ)۔ mise کے ساتھ، ریپوزٹری کاmise.tomlدرست Node انسٹال کرتا ہے۔ - Docker Compose کے ساتھ: ڈویلپمنٹ سیٹ اپ PostgreSQL اور کچھ دیگر سروسز کو کنٹینرز میں چلاتا ہے۔
- make، git، اور Linux یا macOS مشین۔
- میموری: ویب انٹرفیسز کی بلڈنگ سب سے بھاری حصہ ہے۔ 16 GB RAM کا منصوبہ بنائیں؛ دیکھیں بلڈز اور میموری۔
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter
ریپوزٹری میں سرور server/ میں، ویب انٹرفیسز webapp/ میں (Fusion webapp/fusion میں، کلاسیک webapp/channels میں، اور مشترکہ پیکجز webapp/platform میں)، اور اینڈ ٹو اینڈ ٹیسٹس e2e-tests/ میں موجود ہیں۔
ڈویلپمنٹ سرور چلائیں
cd server
make run
make run ڈویلپمنٹ کنٹینرز (PostgreSQL، Redis، میل کچر اور مانیٹرنگ ٹولز) کو شروع کرتا ہے، ویب ایپ کی بلڈز کو جگہ پر لنک کرتا ہے، سرور کو go run کے ذریعے بیک گراؤنڈ میں شروع کرتا ہے، اور ویب ایپ کے واچر کو شروع کرتا ہے، جو آپ کے ایڈٹ کرنے پر کلاسیک انٹرفیس کو دوبارہ بلڈ کرتا ہے۔ http://localhost:8065 کھولیں اور اکاؤنٹ بنائیں: پہلا اکاؤنٹ سسٹم ایڈمن بن جاتا ہے۔
کمانڈ (server/ میں) | یہ کیا کرتا ہے |
|---|---|
make run-server, make run-client | صرف سرور، یا صرف ویب ایپ واچر شروع کریں۔ |
make restart-server | Go کوڈ تبدیل کرنے کے بعد سرور کو دوبارہ شروع کریں۔ |
make stop | سرور، واچر اور کنٹینرز کو روکیں۔ |
make debug-server | Delve ڈیبیگر کے تحت سرور چلائیں۔ |
make run-cli ARGS="-version" | سرور کمانڈ چلائیں۔ |
make config-reset | config/config.json کو ڈیفالٹس پر ری سیٹ کریں۔ |
make clean, make nuke | بلڈ فائلز ہٹائیں؛ nuke ڈویلپمنٹ ڈیٹا کو بھی حذف کرتا ہے۔ |
ڈویلپمنٹ ڈیٹابیس postgres://mmuser:mostest_password@localhost/mattermost_test ہے، جو سرور کی ڈیفالٹ ڈیٹا سورس ہے۔ ENABLED_DOCKER_SERVICES کے ذریعے منتخب کریں کہ کون سے کنٹینرز شروع ہوں، server/config.override.mk فائل میں یا اپنے ماحول میں (دیکھیں server/config.mk)۔
ویب انٹرفیسز
webapp/ میں:
npm install # also builds the shared packages
npm run build # the classic interface, then Fusion
بلڈز webapp/channels/dist (کلاسیک) اور webapp/fusion/dist (Fusion) میں آتے ہیں۔ server/ میں make client انہیں server/client اور server/client-fusion کے طور پر لنک کرتا ہے، جہاں سرور انہیں سروس کرتا ہے: کلاسیک /static/ کے تحت اور Fusion /static/fusion/ کے تحت۔
npm run run(یاwebapp/میںmake run) کلاسیک انٹرفیس کو واچ اور دوبارہ بلڈ کرتا ہے۔ Fusion کو بھی دوبارہ بلڈ کرنے کے لیےWATCH_FUSION=trueشامل کریں۔npm run dev-server(make dev) webpack کے ڈویلپمنٹ سرور کو چلاتا ہے: کلاسیک پورٹ 9005 پر اور Fusion پورٹ 9006 پر۔- اگر آپ براؤزر میں ایک انٹرفیس یا دوسرے کو دیکھنا چاہتے ہیں، تو کسی بھی صفحے کے ایڈریس میں
?webui=fusionیا?webui=classicشامل کریں۔
ٹیسٹس اور چیکس
| کمانڈ | کہاں | یہ کیا کرتا ہے |
|---|---|---|
make test-server | server/ | سرور کا ٹیسٹ سوت، ڈویلپمنٹ کنٹینرز کے خلاف۔ یہ کافی وقت لیتا ہے۔ |
make test-server-quick | server/ | صرف مختصر ٹیسٹس۔ |
go test ./channels/app/... -run TestName | server/ | ایک پیکج یا ٹیسٹ، جب کنٹینرز چل رہے ہوں (make start-docker)۔ |
make check-style | server/ | go vet، golangci-lint اور دیگر Go چیکس۔ |
make test | webapp/ | ویب ایپ کے یونٹ ٹیسٹس (Jest)، ہر پیکج میں۔ |
npm run test -- <pattern> | webapp/fusion | Fusion کے کچھ ٹیسٹس۔ |
make check-style, make check-types | webapp/ | ESLint اور TypeScript۔ |
make i18n-extract | server/ اور webapp/ | جب آپ اسٹرنگز شامل یا تبدیل کرتے ہیں، انگریزی اسٹرنگ فائلز کو اپڈیٹ کرتا ہے (دیکھیں ترجمے)۔ |
server/ میں go mod tidy کے بجائے make modules-tidy چلائیں۔
ریلیس آرکائیوز
cd webapp && npm run build && cd ..
cd server
make build-linux # the antimatter and amctl binaries
make package-linux # dist/antimatter-linux-amd64.tar.gz and -arm64
make build ویب انٹرفیسز اور Linux باینریز کو ایک ہی وقت میں بناتا ہے۔ آرکائیو میں bin/antimatter، bin/amctl، ترتیبات تبدیل کرنے کے لیے README.md کے ساتھ ایک ڈیفالٹ config/config.json، دونوں ویب انٹرفیسز، ٹیمپلیٹس، فونٹس اور تراجم شامل ہیں۔ دیگر پلیٹ فارمز کے لیے: make package-osx، make package-windows، make package-freebsd۔
باندل شدہ ایپس
سادہ make package-linux ایپس کے بغیر آرکائیو بناتا ہے۔ انہیں شامل کرنے کے لیے، جیسا کہ پبلش شدہ ریلیز کرتی ہیں، پہلے سائن شدہ ایپ بंडلز حاصل کریں اور ان کا فولڈر پاس کریں:
build/package/fetch-apps.sh "$HOME/release-apps" # needs gh, python3 and gpg
make package-linux PREPACKAGED_PLUGINS_DIR="$HOME/release-apps"
fetch-apps.sh antimatter-docker کے plugins.json میں درج ہر ایپ کی تازہ ترین GitHub ریلیس، اس کے ساتھ اس کی سائنچر، ڈاؤن لوڈ کرتا ہے، اور سائنچر کو Antimatter کے پلگ ان کی کے مقابلے میں چیک کرتا ہے۔ ڈیفالٹ طور پر یہ Whiteboard، Voice channels، Calls، Agents، Todo، Polls، Notes، GIFs اور Memes لیتا ہے؛ AM_BUNDLED_APPS (جس میں اسپیس سے الگ ریپوزٹری کے نام ہوتے ہیں) فہرست تبدیل کرتا ہے۔ ایسی ایپس جن کی کوئی ریلیس یا سائنچر نہ ہو، انہیں ایک وارننگ کے ساتھ نظرانداز کر دیا جاتا ہے۔ بंडلز آرکائیو کے prepackaged_plugins/ میں آتے ہیں۔
.deb اور .rpm پیکیجز
build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> ایک ریلیس آرکائیو کو all-in-one .deb اور .rpm پیکیجز میں تبدیل کرتا ہے، nfpm کے ذریعے۔ ایڈمن گائیڈ میں بیان کیا گیا ہے کہ یہ کیا انسٹال کرتے ہیں: دیکھیں .deb یا .rpm پیکیج انسٹال کریں۔
ریلیس ورک فلو
سرور ریپوزٹری کا antimatter-release.yml ورک فلو GitHub پر سب کچھ خود بخود کرتا ہے: v* ٹیگ پر یہ amd64 اور arm64 کے لیے آرکائیوز اور پیکیجز بناتا ہے، SHA256SUMS کے ساتھ، اور انہیں ٹیگ کی GitHub ریلیز کے طور پر پبلش کرتا ہے (اگر ورژن میں - ہو تو یہ pre-release ہوتی ہے)۔ دستی طور پر چلانے پر، یہ بیلڈ کو نمبر 0.9.0-dev.<run> دیتا ہے اور فائلز کو ورک فلو آرٹیفیکٹس کے طور پر محفوظ رکھتا ہے۔ ہر ایپ ریپوزٹری کا ایک release.yml ورک فلو ہوتا ہے جو اسی طرح اس کی سائن شدہ بंडل پبلش کرتا ہے۔
Docker امیج
antimatter-docker ریپوزٹری پبلش شدہ امیجز کو بلڈ کرتی ہے، سرور اور اس کی ایپس کو مکمل طور پر Docker کے اندر:
git clone https://github.com/AntimatterChat/antimatter-docker.git
cd antimatter-docker
scripts/build-all.sh # from the main branches on GitHub
SOURCES=local scripts/build-all.sh # from your checkouts next to this folder
VARIANT=next scripts/build-all.sh # the "next" image, with every Antimatter app
اس کے لیے Docker with buildx، Python 3، git اور gpg، تقریباً 16 GB RAM اور 30 GB ڈسک کی ضرورت ہے۔ نتیجہ ghcr.io/antimatterchat/antimatter:dev کے طور پر لوڈ ہوتا ہے؛ اسے ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d کے ساتھ آزمائیں۔ plugins.json میں ایپس اور بلڈ شدہ ورژنز کی فہرست ہے، اور ریپوزٹری کا README ویریئنٹس کی وضاحت کرتا ہے۔
build-all.sh Antimatter signing key کے ذریعے شامل ایپس کو سائن کرتا ہے، اور امیج بلڈنگ غیر سائن شدہ ایپس کو مسترد کر دیتی ہے۔ اس پرائیویٹ کی کے بغیر، جو صرف مینٹینرز کے پاس ہے، صرف پہلے مراحل کو الگ الگ چلائیں: scripts/fetch-sources.sh، scripts/build-plugins.sh (ایپ باندلز out/plugins/ میں) اور scripts/build-server.sh (سرور آرکائیوز out/server/ میں)۔بلڈنگ اور میموری
ویب انٹرفیس بڑے webpack بلڈز ہیں، اور میموری ختم ہو جانا سب سے عام بلڈنگ ناکامی ہے۔
npm run buildکلاسک انٹرفیس اور Fusion کو ایک کے بعد دوسرا بلڈ کرتا ہے، ساتھ نہیں، تاکہ پیک (peak) کم رہے۔ خود انہیں متوازی (parallel) طور پر نہ چلائیں۔- مینیفائر ہر پروسیسر کے لیے ایک ورکر شروع کرتا ہے۔ اگر مشین میں کئی کورز ہیں لیکن کم میموری ہے، تو بلڈنگ کے لیے دستیاب پروسیسرز کی تعداد محدود کریں:
taskset -c 0-5 npm run build۔ - اگر Node کو heap ختم ہو جائے، تو اس کی حد بڑھائیں:
NODE_OPTIONS=--max-old-space-size=6144۔ Docker بلڈنگ یہی قدر استعمال کرتی ہے (build.envمیںBUILD_NODE_OPTIONS)۔ - چھوٹی مشین پر سرور کا مکمل ٹیسٹ سوت، ویب بلڈنگ اور Docker بلڈنگ کو ایک ساتھ چلانے سے گریز کریں۔
ایپس
ہر ایپ (پلگ ان) کا اپنا ریپوزٹری اور Makefile ہے؛ make dist اس کا باندل بناتا ہے۔ دیکھیں بلڈ، انسٹال اور ڈیبگ۔
ڈیسک ٹاپ ایپ
ڈیسک ٹاپ ایپ ایک Electron ایپ ہے۔ Node.js 24 یا اس کے بعد کے ساتھ:
npm install --allow-git=all
npm run build # development build, into dist/
npm start # run it
npm run package:linux # packages into release/ (also package:windows, package:mac)
بلڈ ٹائم سیٹنگز، جیسے کہ پہلے سے ترتیب دینے والے سرورز، src/common/config/buildConfig.ts میں موجود ہیں۔ اگر آپ کے پاس Apple سرٹیفکیٹ نہ ہو تو macOS ایپ کو ad hoc سائن کرنے کے لیے AM_MAC_ADHOC_SIGN=true سیٹ کریں، بغیر notarisation کے: Apple silicon Macs بغیر سائن شدہ کوڈ کو مسترد کر دیتے ہیں۔ ریپوزٹری کا release.yml ورک فلو v* ٹیگ پر Linux، Windows اور macOS کے لیے بغیر سائن شدہ پیکجز بناتا ہے۔
موبائل ایپ
موبائل ایپ ایک React Native ایپ ہے؛ اس کے README میں کمانڈز (npm run ios، npm run android) درج ہیں۔ اپنی کاپی بنانے کے لیے آپ کو اپنی سائننگ کیز، Android اطلاعات کے لیے Firebase پروجیکٹ، iOS کے لیے APNs کی، اور ان کیڈینشلز کو رکھنے والا push proxy بھی درکار ہوگا۔ ریپوزٹری کا release.yml ورک فلو v* ٹیگ پر Android APK اور AAB، اور بغیر سائن شدہ iOS .ipa بناتا ہے، بغیر اسٹور اکاؤنٹس کے؛ اس کے README میں وہ سیکرٹس درج ہیں جو Android بلڈ کو سائن کرتے ہیں اور Firebase کو ترتیب دیتے ہیں۔