Compilare din sursă

Această pagină explică cum să compilați și rulați Antimatter din codul sursă, fie pentru a lucra la el, fie pentru a crea propriile versiuni. Acoperă serverul și interfețele web, care se află într-un singur depozit, apoi imaginea Docker și aplicațiile.

Ce aveți nevoie

  • Mergi, la versiunea din server/go.mod (1.26.7 la momentul redactării).
  • Node.js și npm, la versiunile din .nvmrc și webapp/package.json (Node 24.11.1 cu npm 11.6.2). Cu mise, fișierul mise.toml al depozitului instalează versiunea corectă de Node.
  • Docker cu Compose: configurația de dezvoltare rulează PostgreSQL și câteva alte servicii în containere.
  • make, git și un computer cu Linux sau macOS.
  • Memorie: compilarea interfețelor web este partea cea mai intensă. Păstrați 16 GB de RAM; consultați Compilare și memorie.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Depozitul conține serverul în server/, interfețele web în webapp/ (Fusion în webapp/fusion, clasică în webapp/channels, pachete partajate în webapp/platform) și testele end-to-end în e2e-tests/.

Rulare a unui server de dezvoltare

cd server
make run

make run pornește containerele de dezvoltare (PostgreSQL, Redis, un captor de e-mail și instrumente de monitorizare), leagă compilările aplicației web la locul lor, pornește serverul în fundal cu go run și pornește monitorul aplicației web, care recompilă interfața clasică pe măsură ce o modificați. Deschideți http://localhost:8065 și creați un cont: primul devine administratorul de sistem.

Comandă (în server/)Ce face
make run-server, make run-clientPornește doar serverul sau doar monitorul aplicației web.
make restart-serverRepornire a serverului după modificarea codului Go.
make stopOprire a serverului, a monitorului și a containerelor.
make debug-serverRulare a serverului sub debuggerul Delve.
make run-cli ARGS="-version"Rulare a unei comenzi a serverului.
make config-resetResetează config/config.json la valorile implicite.
make clean, make nukeȘterge fișierele de compilare; nuke șterge și datele de dezvoltare.

Baza de date de dezvoltare este postgres://mmuser:mostest_password@localhost/mattermost_test, sursa de date implicită a serverului. Alegeți ce containere se pornesc cu ENABLED_DOCKER_SERVICES, într-un fișier server/config.override.mk sau în mediul dumneavoastră (consultați server/config.mk).

Interfețele web

În webapp/:

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

Buildurile se salvează în webapp/channels/dist (clasic) și webapp/fusion/dist (Fusion). Comanda make client din server/ le leagă ca server/client și server/client-fusion, unde serverul le servește: clasic sub /static/, Fusion sub /static/fusion/.

  • npm run run (sau make run în webapp/) monitorizează și reconstruiește interfața clasică. Adăugați WATCH_FUSION=true pentru a reconstrui și Fusion.
  • npm run dev-server (make dev) rulează serverul de dezvoltare webpack în schimb: clasic pe portul 9005, Fusion pe portul 9006.
  • Pentru a vedea una dintre interfețe în browser, adăugați ?webui=fusion sau ?webui=classic la adresa oricărei pagini.

Teste și verificări

ComandăUndeCe face
make test-serverserver/Suita de teste a serverului, împotriva containerelor de dezvoltare. Necesită mult timp.
make test-server-quickserver/Doar testele scurte.
go test ./channels/app/... -run TestNameserver/Un pachet sau un test, cu containerele pornite (make start-docker).
make check-styleserver/go vet, golangci-lint și celelalte verificări Go.
make testwebapp/Testele unitare ale aplicației web (Jest), în fiecare pachet.
npm run test -- <pattern>webapp/fusionUnele dintre testele Fusion.
make check-style, make check-typeswebapp/ESLint și TypeScript.
make i18n-extractserver/ și webapp/Actualizează fișierele de șiruri în limba engleză după ce adăugați sau modificați șiruri (a se vedea Traduceri).

Rulați make modules-tidy în loc de go mod tidy în server/.

Arhivele de lansare

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 construiește interfețele web și binarele Linux într-o singură operație. Arhiva conține bin/antimatter, bin/amctl, un config/config.json implicit cu un README.md despre modificarea setărilor, ambele interfețe web, șabloanele, fonturile și traducerile. Alte platforme: make package-osx, make package-windows, make package-freebsd.

Aplicații incluse

Un simplu make package-linux construiește o arhivă fără aplicații. Pentru a le include, așa cum fac lansările publicate, descărcați mai întâi pachetele semnate ale aplicațiilor și transmiteți folderul lor:

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 descarcă cea mai recentă lansare GitHub a fiecărei aplicații listate în plugins.json din antimatter-docker, împreună cu semnătura, și verifică semnătura în raport cu cheia de plugin a Antimatter. În mod implicit, preia Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs și Memes; AM_BUNDLED_APPS (numele de depozite, separate prin spații) modifică lista. Aplicațiile fără o lansare sau fără o semnătură sunt omise cu un avertisment. Pachetele ajung în prepackaged_plugins/ al arhivei.

Pachete .deb și .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> transformă o arhivă de lansare în pachete .deb și .rpm all-in-one, cu nfpm. Ghidul administratorului descrie ce instalează: consultați Instalarea pachetului .deb sau .rpm.

Fluxul de lucru pentru lansare

Fluxul de lucru antimatter-release.yml din depozitul serverului face toate acestea pe GitHub: la o etichetă v* construiește arhivele și pachetele pentru amd64 și arm64, cu SHA256SUMS, și le publică ca lansare GitHub a etichetei (o pre-lansare pentru o versiune cu -). Rulat manual, numără construcția 0.9.0-dev.<run> și păstrează fișierele ca artefacte ale fluxului de lucru. Fiecare depozit de aplicații are un flux de lucru release.yml care publică pachetul său semnat în același mod.

Imaginea Docker

Depozitul antimatter-docker construiește imaginile publicate, serverul cu aplicațiile sale, integral în 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

Necesită Docker cu buildx, Python 3, git și gpg, aproximativ 16 GB de RAM și 30 GB de disc. Rezultatul este încărcat ca ghcr.io/antimatterchat/antimatter:dev; încercați-l cu ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json listează aplicațiile și versiunile construite, iar README-ul depozitului explică variantele.

build-all.sh semnează aplicațiile incluse cu cheia de semnare Antimatter, iar construcția imaginii refuză aplicațiile nesemnate. Fără această cheie privată, de care dispun doar mentorii, rulați doar primii pași: scripts/fetch-sources.sh, scripts/build-plugins.sh (pachetele de aplicații în out/plugins/) și scripts/build-server.sh (arhivele serverului în out/server/).

Construcție și memorie

Interfețele web sunt construcții webpack mari, iar epuizarea memoriei este cea mai frecventă eroare de construcție.

  • npm run build construiește interfața clasică și apoi Fusion, în mod secvențial, nu simultan, pentru a menține consumul de vârf mai scăzut. Nu le rulați în paralel voi înșivă.
  • Minimizerul pornește un worker per procesor. Pe o mașină cu multe nuclee și puțină memorie, limitați procesoarele vizibile pentru construcție: taskset -c 0-5 npm run build.
  • Dacă Node epuizează memoria heap, creșteți limita acesteia: NODE_OPTIONS=--max-old-space-size=6144. Construcția Docker utilizează această valoare (BUILD_NODE_OPTIONS în build.env).
  • Evitați rularea simultană a suitei complete de teste a serverului, a unei construcții web și a unei construcții Docker pe o mașină mică.

Aplicațiile

Fiecare aplicație (plugin) are propriul depozit și propriul Makefile; make dist construiește pachetul acesteia. Consultați Construcție, instalare și depanare.

Aplicația desktop

Aplicația desktop este o aplicație Electron. Cu Node.js 24 sau o versiune ulterioară:

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)

Configurațiile de compilare, cum ar fi serverele de preconfigurat, se află în src/common/config/buildConfig.ts. Fără un certificat Apple, setați AM_MAC_ADHOC_SIGN=true pentru a semna aplicația macOS ad hoc, fără notarizare: Mac-urile cu procesoare Apple refuză codul nesemnat. Workflow-ul release.yml din depozit construiește pachete nesemnate pentru Linux, Windows și macOS la o etichetă v*.

Aplicația mobilă

Aplicația mobile este o aplicație React Native; README-ul acesteia listează comenzile (npm run ios, npm run android). Pentru a vă construi propria copie, aveți nevoie și de cheile de semnare proprii, de un proiect Firebase pentru notificările Android, de o cheie APNs pentru iOS și de un push proxy care deține aceste credențiale. Workflow-ul release.yml din depozit construiește APK-ul și AAB-ul Android și un .ipa iOS nesemnat la o etichetă v*, fără conturi de magazin; README-ul acestuia listează secretele care semnează compilarea Android și configurează Firebase.