בנייה מקוד המקור

עמוד זה מסביר כיצד לבנות ולהריץ את 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), ובדיקות 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הרצת השרת בלבד, או מנהל השינויים של אפליקציית האתר בלבד.
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). הפקודה make client ב־server/ מקשרת אותם כ־server/client ו־server/client-fusion, ומשמש אותם: הקלאסי תחת /static/, ו־Fusion תחת /static/fusion/.

  • npm run run (או make run ב־webapp/) עוקב ומבנה מחדש את הממשק הקלאסי. הוספת WATCH_FUSION=true תבנה מחדש גם את Fusion.
  • 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/בדיקות יחידה של אפליקציית ה־web (Jest), בכל חבילה.
npm run test -- <pattern>webapp/fusionחלק מבדיקות Fusion.
make check-style, make check-typeswebapp/ESLint ו־TypeScript.
make i18n-extractserver/ ו־webapp/מעדכן את קבצי המחרוזות באנגלית אחרי שמוסיפים או משנים מחרוזות (ראו תרגומים).

הריצו make modules-tidy במקום go mod tidy ב־server/.

ארכיוני שחרור

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, קובץ 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, ערוצי קול, שיחות, סוכנים, משימות, סקרים, פתקים, GIFs ומימים; 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> ושומרת את הקבצים כמאמרי זרימת עבודה. לכל מאגר אפליקציה יש זרימת עבודה 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, כ־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, לא יחד, כדי להפחית את השיא. אל תריץ אותם במקביל בעצמך.
  • הממעיך (minifier) פותח עובד אחד לכל מעבד. במכונה עם הרבה ליבות וזיכרון מוגבל, יש להגביל את המעבדים שרואה הבנייה: taskset -c 0-5 npm run build.
  • אם Node נגמר לו זיכרון, יש להעלות את הגבול: NODE_OPTIONS=--max-old-space-size=6144. בניית Docker משתמשת בערך זה (BUILD_NODE_OPTIONS ב-build.env).
  • יש להימנע מלהריץ בו-זמנית את סוּיט הבדיקות המלא של השרת, בניית ווב ובניית 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, יש להגדיר AM_MAC_ADHOC_SIGN=true כדי לחתום על אפליקציית macOS באופן זמני (ad hoc), ללא אימות (notarisation): מחשבי Mac עם שבב Apple silicon דוחים קוד ללא חתימה. זרימת העבודה release.yml במאגר בונה חבילות ללא חתימה עבור Linux, Windows ו-macOS על תג v*.

אפליקציית נייד

האפליקציה ניידת היא אפליקציית React Native; קובץ ה-README שלה מפרט את הפקודות (npm run ios, npm run android). כדי לבנות עותק משלך, נדרשות גם מפתחות חתימה משלך, פרויקט Firebase להתראות ב-Android, מפתח APNs ל-iOS, ו-פרוקסי push שמאחסן את האישורים הללו. זרימת העבודה release.yml במאגר בונה את ה-APK וה-AAB של Android ואת ה-.ipa של iOS ללא חתימה על תג v*, ללא חשבונות חנויות; קובץ ה-README שלה מפרט את הסודות לחתימת בניית Android והגדרת Firebase.