Bouwen vanuit broncode
Deze pagina legt uit hoe je Antimatter bouwt en uitvoert vanuit de broncode, om er aan te werken of om eigen builds te maken. Het dekt de server en de webinterfaces, die in één repository staan, en daarna het Docker-image en de apps.
Wat je nodig hebt
- Ga, op de versie in
server/go.mod(1.26.7 op het moment van schrijven). - Node.js en npm, in de versies die staan in
.nvmrcenwebapp/package.json(Node 24.11.1 met npm 11.6.2). Met mise installeert demise.tomlvan de repository de juiste Node. - Docker met Compose: de ontwikkelomgeving draait PostgreSQL en een paar andere services in containers.
- make, git en een Linux- of macOS-machine.
- Geheugen: het bouwen van de webinterfaces is het zwaarste deel. Plan op 16 GB RAM; zie Builds en geheugen.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter
De repository bevat de server in server/, de webinterfaces in webapp/ (Fusion in webapp/fusion, klassiek in webapp/channels, gedeelde pakketten in webapp/platform) en eind-tot-eind-tests in e2e-tests/.
Een ontwikkelserver starten
cd server
make run
make run start de ontwikkelcontainers (PostgreSQL, Redis, een mail catcher en monitoringtools), koppelt de webapp-builds op de juiste plek, start de server in de achtergrond met go run en start de watcher van de webapp, die het klassieke interface herbouwt terwijl je het bewerkt. Open http://localhost:8065 en maak een account aan: de eerste wordt de systeembeheerder.
Opdracht (in server/) | Wat het doet |
|---|---|
make run-server, make run-client | Start alleen de server, of alleen de webapp-watcher. |
make restart-server | Herstart de server na het wijzigen van Go-code. |
make stop | Stop de server, de watcher en de containers. |
make debug-server | Voer de server uit onder de Delve-debugger. |
make run-cli ARGS="-version" | Voer een serveropdracht uit. |
make config-reset | Zet config/config.json terug naar de standaardwaarden. |
make clean, make nuke | Verwijder buildbestanden; nuke verwijdert ook de ontwikkeldata. |
De ontwikkeldatabase is postgres://mmuser:mostest_password@localhost/mattermost_test, de standaard databron van de server. Kies welke containers starten met ENABLED_DOCKER_SERVICES, in een server/config.override.mk-bestand of in je omgeving (zie server/config.mk).
De webinterfaces
In webapp/:
npm install # also builds the shared packages
npm run build # the classic interface, then Fusion
De builds worden opgeslagen in webapp/channels/dist (classic) en webapp/fusion/dist (Fusion). make client in server/ koppelt deze als server/client en server/client-fusion, waar de server ze serveert: classic onder /static/, Fusion onder /static/fusion/.
npm run run(ofmake runinwebapp/) bewaakt en herbouwt de classic-interface. VoegWATCH_FUSION=truetoe om ook Fusion te herbouwen.npm run dev-server(make dev) start in plaats daarvan de webpack-ontwikkelserver: classic op poort 9005, Fusion op poort 9006.- Om in de browser de ene of de andere interface te zien, voeg
?webui=fusionof?webui=classictoe aan het adres van een willekeurige pagina.
Tests en controles
| Opdracht | Waar | Wat het doet |
|---|---|---|
make test-server | server/ | De testsuite van de server, tegen de ontwikkelcontainers. Dit duurt lang. |
make test-server-quick | server/ | Alleen de korte tests. |
go test ./channels/app/... -run TestName | server/ | Eén pakket of test, met de containers draaiend (make start-docker). |
make check-style | server/ | go vet, golangci-lint en de andere Go-controles. |
make test | webapp/ | De unit tests (Jest) van de webapp, in elk pakket. |
npm run test -- <pattern> | webapp/fusion | Enkele tests van Fusion. |
make check-style, make check-types | webapp/ | ESLint en TypeScript. |
make i18n-extract | server/ en webapp/ | Werkst de Engelse stringbestanden bij nadat u strings hebt toegevoegd of gewijzigd (zie Vertalingen). |
Voer make modules-tidy uit in plaats van go mod tidy in server/.
Release-archieven
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 bouwt de webinterfaces en de Linux-binaire bestanden in één keer. Het archief bevat bin/antimatter, bin/amctl, een standaard config/config.json met een README.md over het wijzigen van instellingen, beide webinterfaces, de sjablonen, de lettertypen en de vertalingen. Andere platforms: make package-osx, make package-windows, make package-freebsd.
Inbegrepen apps
Een gewone make package-linux bouwt een archief zonder apps. Om ze mee te bundelen, zoals bij de gepubliceerde releases, haal je eerst de ondertekende app-bundels op en geef je hun map door:
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 downloadt de laatste GitHub-release van elke app die in plugins.json van antimatter-docker staat, met de bijbehorende handtekening, en controleert de handtekening tegen de plugin-sleutel van Antimatter. Standaard worden Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs en Memes meegenomen; AM_BUNDLED_APPS (naam van de repository, gescheiden door spaties) wijzigt de lijst. Apps zonder release, of zonder handtekening, worden overgeslagen met een waarschuwing. De bundels komen terecht in prepackaged_plugins/ van het archief.
.deb- en .rpm-pakketten
build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> zet een release-archief om in alles-in-één .deb- en .rpm-pakketten, met nfpm. De beheerdersgids beschrijft wat er wordt geïnstalleerd: zie Het .deb- of .rpm-pakket installeren.
De release-workflow
De workflow antimatter-release.yml in de server-repository doet al dit werk op GitHub: bij een v*-tag bouwt hij de archieven en pakketten voor amd64 en arm64, met SHA256SUMS, en publiceert ze als de GitHub-release van die tag (een pre-release voor een versie met een -). Handmatig uitgevoerd, nummer hij de build als 0.9.0-dev.<run> en bewaart de bestanden als workflow-artefacten. Elke app-repository heeft een release.yml-workflow die op dezelfde manier de ondertekende bundel publiceert.
Het Docker-image
De antimatter-docker-repository bouwt de gepubliceerde images, de server met zijn apps, volledig binnen 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
Hiervoor is Docker met buildx, Python 3, git en gpg nodig, plus ongeveer 16 GB RAM en 30 GB schijfruimte. Het resultaat wordt geladen als ghcr.io/antimatterchat/antimatter:dev; probeer het met ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json bevat de lijst met apps en de gebouwde versies, en de README van de repository legt de varianten uit.
build-all.sh ondertekent de gebundelde apps met de Antimatter-ondersteuningskey en de image-build weigert apps zonder handtekening. Zonder die private key, die alleen de maintainers hebben, voer je de eerste stappen afzonderlijk uit: scripts/fetch-sources.sh, scripts/build-plugins.sh (app-bundles in out/plugins/) en scripts/build-server.sh (server-archieven in out/server/).Builds en geheugen
De webinterfaces zijn grote webpack-builds en het raken van het geheugen is de meest voorkomende oorzaak van build-fouten.
npm run buildbouwt het klassieke interface en Fusion na elkaar, niet tegelijk, om het piekgebruik laag te houden. Voer ze niet zelf parallel uit.- De minifier start één worker per processor. Op een machine met veel cores en weinig geheugen, beperk je de processors die de build ziet:
taskset -c 0-5 npm run build. - Als Node het heap-geheugen raakt, verhoog je de limiet:
NODE_OPTIONS=--max-old-space-size=6144. De Docker-build gebruikt deze waarde (BUILD_NODE_OPTIONSinbuild.env). - Voer de volledige test-suite van de server, een web-build en een Docker-build niet tegelijk uit op een kleine machine.
De apps
Elke app (plugin) heeft zijn eigen repository en Makefile; make dist bouwt de bundle. Zie Builden, installeren en debuggen.
Desktop-app
De desktop-app is een Electron-app. Met Node.js 24 of hoger:
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)
Instellingen voor de build, zoals servers die vooraf geconfigureerd moeten worden, staan in src/common/config/buildConfig.ts. Zonder Apple-certificaat, stel AM_MAC_ADHOC_SIGN=true in om de macOS-app ad hoc te ondertekenen, zonder notarisation: Macs met Apple-silicon weigeren ongetekende code. De workflow release.yml in de repository bouwt ongetekende pakketten voor Linux, Windows en macOS bij een v*-tag.
Mobiele app
De mobiele app is een React Native-app; de README vermeldt de opdrachten (npm run ios, npm run android). Om een eigen kopie te bouwen heb je ook je eigen ondertekeningskeys nodig, een Firebase-project voor Android-meldingen, een APNs-key voor iOS en een push-proxy die deze gegevens bewaart. De workflow release.yml in de repository bouwt de Android APK en AAB en een ongetekende iOS .ipa bij een v*-tag, zonder winkelaccounts; de README vermeldt de secrets die de Android-build ondertekenen en Firebase instellen.