Forrásból történő fordítás

Ez az oldal azt mutatja be, hogyan fordítható és futtatható az Antimatter a forráskódjából, legyen szó fejlesztésről vagy saját build-ek készítéséről. A szervert és a webes felületeket egy repozitóriumban találjuk, majd a Docker-képeket és az alkalmazásokat is áttekintjük.

Amihez szükséged van

  • Go, a server/go.mod fájlban megadott verzióval (írás idején 1.26.7).
  • Node.js és npm, a .nvmrc és a webapp/package.json fájlokban megadott verziókban (Node 24.11.1, npm 11.6.2). A mise segítségével a repozitórium mise.toml fájlja telepíti a megfelelő Node verziót.
  • Docker Compose-kal: a fejlesztői környezet PostgreSQL-t és néhány más szolgáltatást futtat konténerekben.
  • make, git, valamint Linux vagy macOS gépezet.
  • Memória: a webes felületek fordítása a legköltségesebb rész. 16 GB RAM-mal érdemes számolni; lásd: Fordítás és memória.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

A repozitórium a szervert a server/ mappában, a webes felületeket a webapp/ mappában (a Fusion a webapp/fusion-ban, a klasszikus a webapp/channels-ben, a közös csomagok a webapp/platform-ban), valamint a végpont-teszteket az e2e-tests/ mappában tartalmazza.

Fejlesztői szerver futtatása

cd server
make run

A make run parancs elindítja a fejlesztői konténereket (PostgreSQL, Redis, e-mail fogadó és monitorozási eszközök), behelyezi a webes alkalmazás build-jeit, háttérben elindítja a szervert a go run paranccsal, és elindítja a webes alkalmazás figyelőjét, amely újra fordítja a klasszikus felületet, ahogy szerkeszted. Nyisd meg a http://localhost:8065 címet, és hozz létre egy fiókot: az első fiók rendszergazdává válik.

Parancs (a server/ mappában)Mire szolgál
make run-server, make run-clientCsak a szerver, vagy csak a webes alkalmazás figyelője indítása.
make restart-serverA szerver újraindítása Go kód módosítása után.
make stopA szerver, a figyelő és a konténerek leállítása.
make debug-serverA szerver futtatása a Delve hibakeresővel.
make run-cli ARGS="-version"Szerverparancs futtatása.
make config-resetA config/config.json fájl visszaállítása az alapértékekre.
make clean, make nukeFordítási fájlok törlése; a nuke parancs a fejlesztési adatokat is törli.

A fejlesztési adatbázis: postgres://mmuser:mostest_password@localhost/mattermost_test, a szerver alapértelmezett adatforrása. Az ENABLED_DOCKER_SERVICES változóval választhatod ki, mely konténerek induljanak el, a server/config.override.mk fájlban vagy a környezeti változóiddal (lásd: server/config.mk).

A webes felületek

A webapp/ mappában:

npm install      # also builds the shared packages
npm run build    # the classic interface, then Fusion

A build-ek a webapp/channels/dist (klasszikus) és a webapp/fusion/dist (Fusion) könyvtárakba kerülnek. A server/ könyvtárban futtatott make client parancs ezeket server/client és server/client-fusion néven köti össze, ahonnan a szerver szolgálja ki őket: a klasszikus verziót a /static/ alatt, a Fusiont pedig a /static/fusion/ alatt.

  • A npm run run (vagy a webapp/ könyvtárban a make run) figyel és újraépíti a klasszikus felületet. A Fusion újraépítéséhez adjad hozzá a WATCH_FUSION=true környezeti változót.
  • A npm run dev-server (make dev) a webpack fejlesztői szerverét futtatja: a klasszikus felület a 9005-ös, a Fusion a 9006-os porton érhető el.
  • Ha a böngészőben az egyik vagy a másik felületet szeretnéd látni, add hozzá a ?webui=fusion vagy ?webui=classic paramétert bármelyik oldal címéhez.

Tesztek és ellenőrzések

ParancsHelyMire szolgál
make test-serverserver/A szerver teszt-suite-je, a fejlesztői konténerekkel szemben. Ez sok időt vesz igénybe.
make test-server-quickserver/Csak a rövid tesztek.
go test ./channels/app/... -run TestNameserver/Egy csomag vagy teszt, a konténerek futtatása mellett (make start-docker).
make check-styleserver/go vet, golangci-lint és a többi Go-ellenőrzés.
make testwebapp/A webalkalmazás egységtesztjei (Jest), minden csomagban.
npm run test -- <pattern>webapp/fusionA Fusion néhány tesztje.
make check-style, make check-typeswebapp/ESLint és TypeScript.
make i18n-extractserver/ és webapp/Frissíti az angol szövegfájlokat, miután új szöveget adtál hozzá vagy meglévőket módosítottál (lásd: Fordítások).

A server/ könyvtárban a make modules-tidy parancsot futtasd, ne a go mod tidy-t.

Kiadási archívumok

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

A make build parancs egyszerre fordítja le a webes felületeket és a Linux binárisokat. Az archívum tartalmazza a bin/antimatter, a bin/amctl fájlokat, az alapértelmezett config/config.json beállításfájlt (a beállítások módosításáról szóló README.md fájl kíséretében), mindkét webes felületet, a sablonokat, a betűtípusokat és a fordításokat. Egyéb platformok: make package-osx, make package-windows, make package-freebsd.

Beépített alkalmazások

A sima make package-linux parancs alkalmazások nélkül készíti el az archívumot. Ha az alkalmazásokat is be szeretnéd csomagolni, ahogyan a hivatalos kiadások is teszik, először szerezd be az aláírt alkalmazáscsomagokat, és add meg a mappájukat:

build/package/fetch-apps.sh "$HOME/release-apps"   # needs gh, python3 and gpg
make package-linux PREPACKAGED_PLUGINS_DIR="$HOME/release-apps"

A fetch-apps.sh letölti az antimatter-docker plugins.json fájljában szereplő alkalmazások legújabb GitHub-kiadásait, az aláírásaikkal együtt, és ellenőrzi az aláírást az Antimatter plugin-kulcsa alapján. Alapértelmezetten a Whiteboard, a Voice channels, a Calls, az Agents, a Todo, a Polls, a Notes, a GIFs és a Memes alkalmazásokat veszi fel; a listát az AM_BUNDLED_APPS (szóközzel elválasztott repozitóriumnevek) változóval lehet módosítani. Azok az alkalmazások, amelyeknek nincs kiadása, vagy nincs aláírásuk, figyelmeztetéssel kerülnek kihagyásra. A csomagok az archívum prepackaged_plugins/ mappájába kerülnek.

.deb és .rpm csomagok

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> converts a release archive into all-in-one .deb and .rpm packages, using nfpm. The admin guide describes what they install: see Install the .deb or .rpm package.

A kiadási munkafolyamat

A szervertárhely antimatter-release.yml munkafolyamata a GitHubon végzi el mindezt: egy v* címkénál amd64 és arm64 architektúrákhoz készíti az archívumokat és csomagokat, SHA256SUMS fájlokkal, és ezeket publikálja a címke GitHub kiadásaiként (ha a verziószám tartalmaz - jelet, előzetes kiadás lesz). Kézi futtatás esetén a build sorszáma 0.9.0-dev.<run> lesz, és a fájlokat munkafolyamat-artefaktumként őrzi meg. Minden alkalmazástárhelynek van egy release.yml munkafolyamata, amely ugyanígy publikálja az aláírt csomagot.

A Docker-kép

Az antimatter-docker repozitórium építi fel a közzétett képeket, a szerverrel és annak alkalmazásaival, teljesen a Dockeren belül:

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

Ehhez Docker buildx, Python 3, git és gpg szükséges, valamint kb. 16 GB RAM és 30 GB lemezterület. Az eredményt a ghcr.io/antimatterchat/antimatter:dev néven töltjük be; próbáld ki a ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d paranccsal. A plugins.json fájl felsorolja az alkalmazásokat és a felépített verziókat, a repozitórium README fájlja pedig a változatokat ismerteti.

A build-all.sh script az Antimatter aláírókulccsal aláírja a csomagolt alkalmazásokat, és a képből építés elutasítja az aláíratlan alkalmazásokat. Ha nincs meg a privát kulcs (amelyhez csak a karbantartók férnek hozzá), futtasd külön-külön az első lépéseket: scripts/fetch-sources.sh, scripts/build-plugins.sh (alkalmazáscsomagok a out/plugins/ könyvtárban) és scripts/build-server.sh (szerverarchívumok a out/server/ könyvtárban).

Buildelés és memória

A webes felületek nagy webpack buildjei, és a memória kimerülése a leggyakoribb buildhiba.

  • Az npm run build parancs a klasszikus felületet és a Fusiót egymás után építi, nem párhuzamosan, hogy a csúcsterhelés alacsonyabb maradjon. Ne futtasd párhuzamosan.
  • A minifier minden processzorra egy munkafolyamatot indít. Sokmagos, de kevés memóriájú gépen korlátozd a build által látható processzorok számát: taskset -c 0-5 npm run build.
  • Ha a Node kimeríti a heapet, emeld meg a limitet: NODE_OPTIONS=--max-old-space-size=6144. A Docker build ezt az értéket használja (BUILD_NODE_OPTIONS a build.env fájlban).
  • Kerüld, hogy kis gépen egyszerre fusson a szerver teljes teszt-suite-ja, egy web build és egy Docker build.

Az alkalmazások

Minden alkalmazásnak (pluginnek) van saját repozitórium- és Makefile-ja; a make dist parancs építi a csomagját. Lásd: Buildelés, telepítés és hibakeresés.

Asztali alkalmazás

Az asztali alkalmazás egy Electron app. Node.js 24 vagy újabb verzióval:

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)

A fordítási idejű beállítások, például az előre konfigurálandó szerverek, a src/common/config/buildConfig.ts fájlban találhatók. Ha nincs Apple-tanúsítvány, állítsa be az AM_MAC_ADHOC_SIGN=true értéket, hogy ad hoc módon, notorizálás nélkül aláírja a macOS-alkalmazást: az Apple-siliconos Mac-ek nem fogadják el az aláíratlan kódot. A repository release.yml munkafolyamata v* címkénál aláíratlan csomagokat készít Linux, Windows és macOS rendszerek számára.

Mobilalkalmazás

A mobilalkalmazás egy React Native app; a README fájlban felsorolt parancsok (npm run ios, npm run android) segítségével fordítható. Saját példány készítéséhez saját aláíró kulcsokra, Android-értesítésekhez Firebase-projektre, iOS-hez APNs-kulcsra, valamint egy push proxy szerverre is szükség van, amelyben tárolja ezeket a hitelesítő adatokat. A repository release.yml munkafolyamata v* címkénál Android APK és AAB fájlt, valamint aláíratlan iOS .ipa fájlt készít, áruház-fiókok nélkül; a README fájlban felsorolt titkok az Android build aláírásához és a Firebase beállításához szolgálnak.