সোর্স থেকে বিল্ড করা

এই পেজে ব্যাখ্যা করা হয়েছে কীভাবে Antimatter-কে এর সোর্স কোড থেকে বিল্ড এবং রান করবেন, যাতে আপনি এতে কাজ করতে পারেন বা নিজের বিল্ড তৈরি করতে পারেন। এতে সার্ভার এবং ওয়েব ইন্টারফেসের বিষয়বস্তু রয়েছে, যা একটি রিপোজিটরিতে থাকে, এরপর Docker ইমেজ এবং অ্যাপসের বিষয়বস্তু রয়েছে।

আপনার যা দরকার

  • Go, 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-serverGo কোড পরিবর্তনের পর সার্ভার পুনরায় শুরু করুন।
make stopসার্ভার, ওয়াচার এবং কন্টেইনারগুলি বন্ধ করুন।
make debug-serverDelve ডিবাগারের নিচে সার্ভার রান করুন।
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)-এ জমা হয়। 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-serverserver/ডেভেলপমেন্ট কন্টেইনারগুলোর বিরুদ্ধে সার্ভারের টেস্ট স্যুট। এতে বেশি সময় লাগে।
make test-server-quickserver/শুধু ছোট টেস্টগুলো।
go test ./channels/app/... -run TestNameserver/কন্টেইনারগুলো চালু থাকাকালীন (make start-docker) একটি প্যাকেজ বা টেস্ট।
make check-styleserver/go vet, golangci-lint এবং অন্যান্য Go চেক।
make testwebapp/ওয়েব অ্যাপের ইউনিট টেস্ট (Jest), প্রতিটি প্যাকেজে।
npm run test -- <pattern>webapp/fusionFusion-এর কিছু টেস্ট।
make check-style, make check-typeswebapp/ESLint এবং TypeScript।
make i18n-extractserver/ এবং 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, AI chat (Agents), Todo, Polls, Notes, GIFs এবং Memes সংগ্রহ করে; AM_BUNDLED_APPS (স্পেস দিয়ে আলাদা করা রিপোজিটরি নামসমূহ) এই তালিকা পরিবর্তন করে। যেসব অ্যাপের রিলিজ নেই বা স্বাক্ষর নেই, সেগুলো একটি সতর্কবার্তা সহ এড়িয়ে যাওয়া হয়। বান্ডলসমূহ আর্কাইভের prepackaged_plugins/ ফোল্ডারে সংরক্ষিত হয়।

.deb এবং .rpm প্যাকেজ

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> একটি রিলিজ আর্কাইভকে nfpm ব্যবহার করে all-in-one .deb এবং .rpm প্যাকেজে রূপান্তর করে। অ্যাডমিন গাইডে বর্ণনা করা হয়েছে যে এগুলি কী ইনস্টল করে: দেখুন .deb বা .rpm প্যাকেজ ইনস্টল করুন।

রিলিজ ওয়ার্কফ্লো

সার্ভার রিপোজিটরির antimatter-release.yml ওয়ার্কফ্লো GitHub-এ এই সবকিছু করে: একটি v* ট্যাগে এটি amd64 এবং arm64-এর জন্য আর্কাইভ এবং প্যাকেজ তৈরি করে, SHA256SUMS সহ, এবং সেগুলোকে ট্যাগটির GitHub রিলিজ হিসেবে প্রকাশ করে (যদি ভার্সনে - থাকে তবে এটি একটি প্রি-রিলিজ)। ম্যানুয়ালি চালানো হলে, এটি বিল্ডের নম্বর 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

এর জন্য buildx সহ Docker, 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-এর সাইনিং কী দিয়ে বান্ডল করা অ্যাপগুলো সাইন করে, আর ইমেজ বিল্ডে অসাইনড অ্যাপ গ্রহণ করা হয় না। যেহেতু এই প্রাইভেট কীটি শুধুমাত্র মেইটেইনারদের কাছে আছে, তাই প্রথম ধাপগুলো আলাদাভাবে চালাতে হবে: scripts/fetch-sources.sh, scripts/build-plugins.sh (অ্যাপ বান্ডেল out/plugins/-এ) এবং scripts/build-server.sh (সার্ভার আর্কাইভ out/server/-এ)।

বিল্ড এবং মেমরি

ওয়েব ইন্টারফেসগুলো বড় webpack বিল্ড, আর মেমরি শেষ হয়ে যাওয়াই সবচেয়ে সাধারণ বিল্ড ব্যর্থতা।

  • npm run build ক্লাসিক ইন্টারফেস এবং Fusion-কে একটার পর অন্যটা বিল্ড করে, একসাথে নয়, যাতে পিক লোড কম থাকে। নিজে এগুলো প্যারালাল রানে চালাবেন না।
  • মিনিফায়ার প্রতিটি প্রসেসরের জন্য একটি করে ওয়ার্কার শুরু করে। বেশি কোর কিন্তু কম মেমরিওয়ালা মেশিনে বিল্ডের জন্য প্রসেসরের সংখ্যা সীমাবদ্ধ করুন: taskset -c 0-5 npm run build।
  • যদি Node-এর হিপ মেমরি শেষ হয়ে যায়, তবে তার সীমা বাড়ান: 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 অ্যাপটি অ্যাড হক সাইন করতে AM_MAC_ADHOC_SIGN=true সেট করুন: Apple silicon Mac-এর অসাইনড কোড রিজেক্ট করে। রিপোজিটরির release.yml ওয়ার্কফ্লো v* ট্যাগে Linux, Windows এবং macOS-এর জন্য অসাইনড প্যাকেজ বিল্ড করে।

মোবাইল অ্যাপ

মোবাইল অ্যাপটি একটি React Native অ্যাপ; এর README-তে কমান্ডগুলো (npm run ios, npm run android) তালিকাভুক্ত। নিজের কপি বিল্ড করতে আপনার নিজের সাইনিং কী, Android নোটিফিকেশনের জন্য একটি Firebase প্রজেক্ট, iOS-এর জন্য একটি APNs কী এবং সেই ক্রেডেনশিয়ালসহ একটি পুশ প্রক্সি প্রয়োজন। রিপোজিটরির release.yml ওয়ার্কফ্লো v* ট্যাগে Android APK এবং AAB, এবং অসাইনড iOS .ipa বিল্ড করে, স্টোর অ্যাকাউন্ট ছাড়া; এর README-তে Android বিল্ড সাইন করার এবং Firebase সেটআপ করার জন্য প্রয়োজনীয় সিক্রেটগুলো তালিকাভুক্ত।