ساخت از سورس

این صفحه توضیح می‌دهد که چگونه Antimatter را از کد منبع آن بسازید و اجرا کنید، چه برای کار روی آن و چه برای ساخت بیلدهای اختصاصی. این صفحه سرور و رابط‌های وب را پوشش می‌دهد که در یک مخزن قرار دارند، و سپس تصویر Docker و اپلیکیشن‌ها را.

چه چیزهایی نیاز دارید

  • برو، در نسخه‌ای که در server/go.mod آمده (۱.۲۶.۷ در زمان نگارش).
  • 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 گیگابایت RAM برنامه‌ریزی کنید؛ به بیلدها و حافظه مراجعه کنید.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

مخزن سرور را در server/، رابط‌های وب را در webapp/ (Fusion در webapp/fusion، کلاسیک در webapp/channels، و بسته‌های مشترک در webapp/platform) و تست‌های end-to-end را در e2e-tests/ نگه می‌دارد.

اجرای سرور توسعه

cd server
make run

make run کانتینرهای توسعه (PostgreSQL، Redis، یک گیرنده ایمیل و ابزارهای پایش) را راه‌اندازی می‌کند، بیلدهای اپلیکیشن وب را در جای خود قرار می‌دهد، سرور را در پس‌زمینه با go run شروع می‌کند و watcher اپلیکیشن وب را راه‌اندازی می‌کند که رابط کلاسیک را هنگام ویرایش مجدد می‌سازد. http://localhost:8065 را باز کنید و یک حساب کاربری بسازید: اولین حساب کاربری مدیر سیستم می‌شود.

دستور (در server/)عملکرد
make run-server, make run-clientفقط سرور را شروع کنید، یا فقط watcher اپلیکیشن وب را.
make restart-serverسرور را پس از تغییر کد Go مجدداً راه‌اندازی کنید.
make stopسرور، watcher و کانتینرها را متوقف کنید.
make debug-serverسرور را زیر دیباگر Delve اجرا کنید.
make run-cli ARGS="-version"یک دستور سرور را اجرا کنید.
make config-resetconfig/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) قرار می‌گیرند. اجرای make client در server/ آن‌ها را به‌ترتیب به‌عنوان server/client و server/client-fusion پیوند می‌دهد تا سرور بتواند آن‌ها را ارائه دهد: نسخه کلاسیک زیر مسیر /static/ و Fusion زیر مسیر /static/fusion/.

  • دستور npm run run (یا make run در webapp/) رابط کاربری کلاسیک را زیر نظر می‌گیرد و پس از هر تغییر، دوباره آن را می‌سازد. برای اینکه Fusion هم به‌طور خودکار بازسازی شود، متغیر WATCH_FUSION=true را اضافه کنید.
  • دستور npm run dev-server (یا make dev) سرور توسعه webpack را به‌جای روش قبلی اجرا می‌کند: رابط کلاسیک روی پورت 9005 و Fusion روی پورت 9006.
  • برای مشاهده یکی از این دو رابط کاربری در مرورگر، ?webui=fusion یا ?webui=classic را به آدرس هر صفحه‌ای اضافه کنید.

تست‌ها و بررسی‌ها

دستورمحل اجراعملکرد
make test-serverserver/مجموعه تست‌های سرور، در برابر کانتینرهای توسعه. این فرآیند زمان‌بر است.
make test-server-quickserver/فقط تست‌های کوتاه.
go test ./channels/app/... -run TestNameserver/یک بسته یا یک تست خاص، با فرض اجرای کانتینرها (make start-docker).
make check-styleserver/بررسی‌های Go شامل go vet، golangci-lint و موارد دیگر.
make testwebapp/تست‌های واحد اپلیکیشن وب (Jest) در تمام بسته‌ها.
npm run test -- <pattern>webapp/fusionبرخی از تست‌های Fusion.
make check-style, make check-typeswebapp/بررسی‌های ESLint و TypeScript.
make i18n-extractserver/ و webapp/به‌روزرسانی فایل‌های رشته‌های انگلیسی پس از افزودن یا تغییر متن‌ها (به بخش ترجمه‌ها مراجعه کنید).

به‌جای اجرای go mod tidy در server/، از دستور 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 رابط‌های وب و باینری‌های لینوکس را در یک مرحله می‌سازد. آرشیو شامل bin/antimatter، bin/amctl، یک config/config.json پیش‌فرض با README.md برای تغییر تنظیمات، هر دو رابط وب، قالب‌ها، فونت‌ها و ترجمه‌ها است. برای سایر پلتفرم‌ها: 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 آخرین نسخه منتشرشده در GitHub برای هر اپلیکیشن لیست‌شده در plugins.json پروژه antimatter-docker را به همراه امضای آن دانلود می‌کند و امضا را با کلید افزونه Antimatter بررسی می‌کند. به طور پیش‌فرض، Whiteboard، کانال‌های صوتی، مکالمات، چت هوش مصنوعی (عامل‌ها)، کارهای در انتظار، نظرسنجی‌ها، یادداشت‌ها، GIF و میم‌ها را دریافت می‌کند؛ متغیر AM_BUNDLED_APPS (نام مخازن، جدا شده با فاصله) این لیست را تغییر می‌دهد. اپلیکیشن‌هایی که نسخه منتشرشده یا امضا ندارند، با یک هشدار نادیده گرفته می‌شوند. بسته‌ها در prepackaged_plugins/ آرشیو قرار می‌گیرند.

بسته‌های .deb و .rpm

اسکریپت build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> یک آرشیو انتشار را به بسته‌های یکپارچه .deb و .rpm با استفاده از nfpm تبدیل می‌کند. راهنمای مدیر توضیح می‌دهد که این بسته‌ها چه چیزی را نصب می‌کنند: به نصب بسته .deb یا .rpm مراجعه کنید.

گردش کار انتشار

گردش کار antimatter-release.yml در مخزن سرور، تمام این کارها را روی GitHub انجام می‌دهد: در صورت وجود تگ v*، آرشیوها و بسته‌ها را برای amd64 و arm64 به همراه SHA256SUMS می‌سازد و آن‌ها را به عنوان انتشار GitHub آن تگ منتشر می‌کند (به عنوان پیش‌انتشار برای نسخه‌هایی که شامل - هستند). در صورت اجرای دستی، شماره ساخت به صورت 0.9.0-dev.<run> تعیین می‌شود و فایل‌ها به عنوان آثار گردش کار (Artifacts) حفظ می‌شوند. هر مخزن اپلیکیشن دارای گردش کار 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 با buildx، Python 3، git و gpg، حدود ۱۶ گیگابایت RAM و ۳۰ گیگابایت فضای دیسک نیاز دارید. نتیجه به صورت 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 امضا می‌کند و ساخت تصویر از برنامه‌های بدون امضا خودداری می‌کند. بدون این کلید خصوصی که فقط نگهدارندگان آن را دارند، مراحل اول را به تنهایی اجرا کنید: scripts/fetch-sources.sh، scripts/build-plugins.sh (باندل‌های برنامه در out/plugins/) و scripts/build-server.sh (آرشیوهای سرور در out/server/).

ساخت و حافظه

رابط‌های وب، ساخت‌های webpack بزرگ هستند و تمام شدن حافظه، رایج‌ترین خطای ساخت است.

  • npm run build رابط کلاسیک و Fusion را یکی پس از دیگری، نه همزمان، می‌سازد تا اوج مصرف حافظه پایین‌تر بماند. خودتان آن‌ها را موازی اجرا نکنید.
  • مینی‌فایر برای هر پردازنده یک worker شروع می‌کند. روی دستگاهی با هسته‌های زیاد و حافظه کم، پردازنده‌هایی که ساخت می‌بیند را محدود کنید: taskset -c 0-5 npm run build.
  • اگر Node از نظر heap به پایان برسد، حد آن را افزایش دهید: NODE_OPTIONS=--max-old-space-size=6144. ساخت Docker از این مقدار استفاده می‌کند (BUILD_NODE_OPTIONS در build.env).
  • اجرای همزمان مجموعه کامل تست‌های سرور، یک ساخت وب و یک ساخت Docker را روی دستگاه کوچک اجتناب کنید.

برنامه‌ها

هر برنامه (plugin) مخزن و 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 قرار دارند. بدون گواهی اپل، مقدار AM_MAC_ADHOC_SIGN=true را تنظیم کنید تا اپلیکیشن macOS به صورت ad hoc و بدون تأییدیه (notarisation) امضا شود؛ مک‌های مبتنی بر Apple Silicon کد امضانشده را رد می‌کنند. گردش کار release.yml در مخزن، بسته‌های امضانشده برای لینوکس، ویندوز و macOS را در تگ v* می‌سازد.

برنامه موبایل

اپلیکیشن موبایل یک اپلیکیشن React Native است؛ فایل README آن دستورات (npm run ios، npm run android) را فهرست کرده است. برای ساخت نسخه شخصی خود، به کلیدهای امضای اختصاصی، یک پروژه Firebase برای اعلان‌های اندروید، یک کلید APNs برای iOS و یک پراکسی پوش که این اعتبارنامه‌ها را نگهداری می‌کند، نیاز دارید. گردش کار release.yml در مخزن، فایل‌های APK و AAB اندروید و فایل .ipa امضانشده iOS را در تگ v* بدون حساب‌های فروشگاه می‌سازد؛ فایل README آن اسرار (secrets) مورد نیاز برای امضای نسخه اندروید و راه‌اندازی Firebase را فهرست می‌کند.