Compilació des del codi font

Aquesta pàgina explica com compilar i executar Antimatter des del seu codi font, per treballar-hi o per crear les vostres pròpies compilacions. Aborda el servidor i les interfícies web, que es troben en un sol repositori, i després la imatge Docker i les aplicacions.

Què necessiteu

  • Vés, a la versió de server/go.mod (1.26.7 en el moment d'escriure-ho).
  • Node.js i npm, a les versions indicades a .nvmrc i webapp/package.json (Node 24.11.1 amb npm 11.6.2). Amb mise, el mise.toml del repositori instal·la la versió adequada de Node.
  • Docker amb Compose: la configuració de desenvolupament executa PostgreSQL i alguns altres serveis en contenidors.
  • make, git i un ordinador amb Linux o macOS.
  • Memòria: la compilació de les interfícies web és la part més pesada. Reserveu 16 GB de RAM; vegeu Compilacions i memòria.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

El repositori conté el servidor a server/, les interfícies web a webapp/ (Fusion a webapp/fusion, la clàssica a webapp/channels i els paquets compartits a webapp/platform), i les proves d'extrem a extrem a e2e-tests/.

Executar un servidor de desenvolupament

cd server
make run

make run inicia els contenidors de desenvolupament (PostgreSQL, Redis, un captor de correus i eines de monitorització), enllaça les compilacions de l'aplicació web al seu lloc, inicia el servidor en segon pla amb go run i inicia l'observador de l'aplicació web, que recompila la interfície clàssica a mesura que la modifiqueu. Obriu http://localhost:8065 i creeu un compte: el primer es converteix en administrador del sistema.

Comanda (a server/)Què fa
make run-server, make run-clientInicia només el servidor o només l'observador de l'aplicació web.
make restart-serverReinicia el servidor després de canviar el codi Go.
make stopAtura el servidor, l'observador i els contenidors.
make debug-serverExecuta el servidor sota el depurador Delve.
make run-cli ARGS="-version"Executa una comanda del servidor.
make config-resetRestableix config/config.json als valors per defecte.
make clean, make nukeElimina els fitxers de compilació; nuke també elimina les dades de desenvolupament.

La base de dades de desenvolupament és postgres://mmuser:mostest_password@localhost/mattermost_test, la font de dades per defecte del servidor. Trieu quins contenidors s'han d'iniciar amb ENABLED_DOCKER_SERVICES, en un fitxer server/config.override.mk o al vostre entorn (vegeu server/config.mk).

Les interfícies web

A webapp/:

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

Les compilacions es generen a webapp/channels/dist (clàssic) i webapp/fusion/dist (Fusion). make client a server/ els enllaça com a server/client i server/client-fusion, on el servidor els serveix: el clàssic sota /static/ i Fusion sota /static/fusion/.

  • npm run run (o make run a webapp/) vigila i recompila la interfície clàssica. Afegeix WATCH_FUSION=true per recompilar també Fusion.
  • npm run dev-server (make dev) executa el servidor de desenvolupament de webpack: el clàssic al port 9005 i Fusion al port 9006.
  • Per veure una interfície o l'altra al navegador, afegeix ?webui=fusion o ?webui=classic a l'adreça de qualsevol pàgina.

Proves i comprovacions

OrdreOnQuè fa
make test-serverserver/El conjunt de proves del servidor, contra els contenidors de desenvolupament. Triga molt de temps.
make test-server-quickserver/Només les proves curtes.
go test ./channels/app/... -run TestNameserver/Un paquet o prova, amb els contenidors en marxa (make start-docker).
make check-styleserver/go vet, golangci-lint i les altres comprovacions de Go.
make testwebapp/Les proves unitàries de l'aplicació web (Jest), en tots els paquets.
npm run test -- <pattern>webapp/fusionAlgunes de les proves de Fusion.
make check-style, make check-typeswebapp/ESLint i TypeScript.
make i18n-extractserver/ i webapp/Actualitza els fitxers de cadenes en anglès després d'afegir o modificar cadenes (vegeu Traduccions).

Executa make modules-tidy en lloc de go mod tidy a server/.

Arxius de publicació

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 compila les interfícies web i els binaris per a Linux en una sola passada. L'arxiu conté bin/antimatter, bin/amctl, un config/config.json per defecte amb un README.md sobre com canviar la configuració, les dues interfícies web, les plantilles, les tipografies i les traduccions. Per a altres plataformes: make package-osx, make package-windows, make package-freebsd.

Aplicacions integrades

Un make package-linux senzill crea un arxiu sense aplicacions. Per incloure-les, tal com fan els llançaments publicats, descarregueu primer els paquets d'aplicacions signats i passeu-ne la carpeta:

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 descarrega l'últim llançament de GitHub de cada aplicació llistada al plugins.json de antimatter-docker, juntament amb la seva signatura, i verifica aquesta signatura amb la clau de plugins d'Antimatter. Per defecte, inclou Pissarra, Canals de veu, Trucades, Xat d'IA (Agents), Tasques pendents, Enquestes, Notes, GIFs i Memes; AM_BUNDLED_APPS (noms de repositoris, separats per espais) canvia la llista. Les aplicacions sense llançament o sense signatura s'ometen amb un avís. Els paquets es col·loquen a prepackaged_plugins/ de l'arxiu.

Paquets .deb i .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> converteix un arxiu de llançament en paquets .deb i .rpm tot-en-un, amb nfpm. La guia d'administració descriu què instal·len: vegeu Instal·lar el paquet .deb o .rpm.

El flux de treball de llançament

El flux de treball antimatter-release.yml del repositori del servidor fa tot això a GitHub: en una etiqueta v*, compila els arxius i paquets per a amd64 i arm64, amb SHA256SUMS, i els publica com a llançament de GitHub de l'etiqueta (un llançament previ per a una versió amb -). Si s'executa manualment, numera la compilació com a 0.9.0-dev.<run> i manté els fitxers com a artefactes del flux de treball. Cada repositori d'aplicacions té un flux de treball release.yml que publica el seu paquet signat de la mateixa manera.

La imatge de Docker

El repositori antimatter-docker compila les imatges publicades, el servidor amb les seves aplicacions, completament dins de 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

Cal Docker amb buildx, Python 3, git i gpg, uns 16 GB de RAM i 30 GB de disc. El resultat es carrega com a ghcr.io/antimatterchat/antimatter:dev; prova-ho amb ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json llista les aplicacions i les versions compilades, i el README del repositori explica les variants.

build-all.sh signa les aplicacions empaquetades amb la clau de signatura d'Antimatter, i la compilació de la imatge rebutja les aplicacions no signades. Sense aquesta clau privada, que només tenen els mantenidors, executa els primers passos per separat: scripts/fetch-sources.sh, scripts/build-plugins.sh (paquets d'aplicacions a out/plugins/) i scripts/build-server.sh (arxius del servidor a out/server/).

Compilació i memòria

Les interfícies web són compilacions webpack grans, i l'agotament de la memòria és el fallit de compilació més comú.

  • npm run build compila la interfície clàssica i la de Fusion una darrere l'altra, no alhora, per mantenir el pic més baix. No les executis en paral·lel tu mateix.
  • El minificador inicia un treballador per processador. En un equip amb molts nuclis i poca memòria, limita els processadors que veu la compilació: taskset -c 0-5 npm run build.
  • Si Node s'agota de memòria de pila, augmenta el seu límit: NODE_OPTIONS=--max-old-space-size=6144. La compilació de Docker utilitza aquest valor (BUILD_NODE_OPTIONS a build.env).
  • Evita executar el conjunt complet de proves del servidor, una compilació web i una compilació de Docker alhora en un equip petit.

Les aplicacions

Cada aplicació (connector) té el seu propi repositori i Makefile; make dist compila el seu paquet. Consulta Compila, instal·la i depura.

Aplicació d'escriptori

L'aplicació d'escriptori és una aplicació Electron. Amb Node.js 24 o superior:

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)

La configuració en temps de compilació, com ara els servidors a preconfigurar, es troba a src/common/config/buildConfig.ts. Sense un certificat d'Apple, defineix AM_MAC_ADHOC_SIGN=true per signar l'aplicació de macOS ad hoc, sense notarització: els Mac amb Apple Silicon rebutgen el codi no signat. El flux de treball release.yml del repositori compila paquets no signats per a Linux, Windows i macOS en una etiqueta v*.

Aplicació mòbil

L'aplicació mòbil és una aplicació React Native; el seu README enumera les ordres (npm run ios, npm run android). Per compilar la teva pròpia còpia, també necessites les teves pròpies claus de signatura, un projecte de Firebase per a les notificacions d'Android, una clau APNs per a iOS i un proxy de notificacions push que contingui aquestes credencials. El flux de treball release.yml del repositori compila l'APK i l'AAB d'Android i un .ipa d'iOS no signat en una etiqueta v*, sense comptes de botiga; el seu README enumera els secrets que signen la compilació d'Android i configuren Firebase.