Bygg från källkod

På den här sidan förklarar vi hur du bygger och kör Antimatter från dess källkod, antingen för att arbeta med den eller för att göra egna byggen. Sidan behandlar servern och webbgränssnitten, som finns i ett och samma repository, och därefter Docker-bilden och apparna.

Vad du behöver

  • Go, i den version som anges i server/go.mod (1.26.7 vid skrivningstillfället).
  • Node.js och npm, i de versioner som anges i .nvmrc och webapp/package.json (Node 24.11.1 med npm 11.6.2). Med mise installerar repositorys mise.toml rätt Node.
  • Docker med Compose: utvecklingsuppsättningen kör PostgreSQL och några andra tjänster i containrar.
  • make, git och en Linux- eller macOS-maskin.
  • Minne: att bygga webbgränssnitten är den tunga delen. Planera för 16 GB RAM; se Byggen och minne.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Repositoryn innehåller servern i server/, webbgränssnitten i webapp/ (Fusion i webapp/fusion, klassisk i webapp/channels, gemensamma paket i webapp/platform) och end-to-end-test i e2e-tests/.

Kör en utvecklingsserver

cd server
make run

make run startar utvecklingscontainrarna (PostgreSQL, Redis, ett e-postfångstnät och övervakningsverktyg), länkar in webbappens byggen på plats, startar servern i bakgrunden med go run och startar webbappens watcher, som bygger om det klassiska gränssnittet när du redigerar det. Öppna http://localhost:8065 och skapa ett konto: det första blir systemadministratör.

Kommando (i server/)Vad den gör
make run-server, make run-clientStarta endast servern, eller endast webbappens watcher.
make restart-serverStarta om servern efter att ha ändrat Go-kod.
make stopStoppa servern, watchern och containrarna.
make debug-serverKör servern under felsökaren Delve.
make run-cli ARGS="-version"Kör ett serverkommando.
make config-resetÅterställ config/config.json till standardinställningarna.
make clean, make nukeTa bort byggfiler; nuke tar också bort utvecklingsdata.

Utvecklingsdatabasen är postgres://mmuser:mostest_password@localhost/mattermost_test, serverns standard datakälla. Välj vilka containrar som startas med ENABLED_DOCKER_SERVICES, i en server/config.override.mk-fil eller i din miljö (se server/config.mk).

Webbgränssnitten

I webapp/:

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

Byggena hamnar i webapp/channels/dist (klassisk) och webapp/fusion/dist (Fusion). make client i server/ länkar dem som server/client och server/client-fusion, där servern serverar dem: klassisk under /static/, Fusion under /static/fusion/.

  • npm run run (eller make run i webapp/) övervakar och bygger om den klassiska gränssnittet. Lägg till WATCH_FUSION=true för att också bygga om Fusion.
  • npm run dev-server (make dev) kör istället webpacks utvecklingsserver: klassisk på port 9005, Fusion på port 9006.
  • För att se det ena eller det andra gränssnittet i webbläsaren, lägg till ?webui=fusion eller ?webui=classic till adressen för valfri sida.

Test och kontroller

KommandoVarVad den gör
make test-serverserver/Serverns testsvit, mot utvecklingsbehållarna. Det tar lång tid.
make test-server-quickserver/Endast de korta testerna.
go test ./channels/app/... -run TestNameserver/Ett paket eller test, med behållarna igång (make start-docker).
make check-styleserver/go vet, golangci-lint och andra Go-kontroller.
make testwebapp/Webbappens enhetstester (Jest), i varje paket.
npm run test -- <pattern>webapp/fusionVissa av Fusion-testerna.
make check-style, make check-typeswebapp/ESLint och TypeScript.
make i18n-extractserver/ och webapp/Uppdaterar de engelska strängfilerna efter att du har lagt till eller ändrat strängar (se Översättningar).

Kör make modules-tidy istället för go mod tidy i server/.

Utgivningsarkiv

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 bygger webbgränssnitten och Linux-binärfilerna i ett steg. Arkivet innehåller bin/antimatter, bin/amctl, en standard config/config.json med en README.md om hur man ändrar inställningar, båda webbgränssnitten, mallarna, typsnitten och översättningarna. Andra plattformar: make package-osx, make package-windows, make package-freebsd.

Medföljande appar

Ett vanligt make package-linux bygger ett arkiv utan appar. För att samla in dem, som de publicerade utgåvorna gör, hämta först de signerade appbundlerna och ange deras mapp:

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 laddar ner den senaste GitHub-releasen för varje app som listas i antimatter-dockers plugins.json, tillsammans med dess signatur, och verifierar signaturn mot Antimatters plugin-nyckel. Som standard hämtas Whiteboard, Röstkanaler, Samtal, Agenter, Att göra, Omröstningar, Anteckningar, GIF:er och Memes; AM_BUNDLED_APPS (namn på repositoryer, separerade med mellanslag) ändrar listan. Appar utan release, eller utan signatur, hoppas över med en varning. Bundlarna hamnar i arkivets prepackaged_plugins/.

.deb- och .rpm-paket

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> omvandlar ett release-arkiv till allt-i-ett .deb- och .rpm-paket, med nfpm. Adminguiden beskriver vad de installerar: se Installera .deb- eller .rpm-paketet.

Release-arbetsflödet

Serverrepositoryns antimatter-release.yml-arbetsflöde gör allt detta på GitHub: vid en v*-tagg bygger det arkiven och paketen för amd64 och arm64, med SHA256SUMS, och publicerar dem som taggens GitHub-release (en förhandsrelease för en version med -). Vid manuell körning numreras bygget 0.9.0-dev.<run> och filerna sparas som arbetsflödesartefakter. Varje app-repository har ett release.yml-arbetsflöde som publicerar dess signerade bundle på samma sätt.

Docker-bilden

Repositoryt antimatter-docker bygger de publicerade bilderna, servern med dess appar, helt inuti 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

Det krävs Docker med buildx, Python 3, git och gpg, cirka 16 GB RAM och 30 GB diskutrymme. Resultatet laddas in som ghcr.io/antimatterchat/antimatter:dev; testa det med ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json listar apparna och de versioner som byggs, och repositoryets README förklarar varianterna.

build-all.sh signer de medföljande apparna med Antimatters signeringsnyckel, och bildbygget vägrar osignerade appar. Utan den privata nyckeln, som endast underhållarna har, kör de första stegen separat: scripts/fetch-sources.sh, scripts/build-plugins.sh (appbundler i out/plugins/) och scripts/build-server.sh (serverarkiv i out/server/).

Bygg och minne

Webbgränssnitten är stora webpack-byggen, och att löpa tomt på minne är den vanligaste byggfelkällan.

  • npm run build bygger det klassiska gränssnittet och Fusion efter varandra, inte samtidigt, för att hålla toppen lägre. Kör dem inte parallellt själva.
  • Minifieraren startar en worker per processor. På en maskin med många kärnor och lite minne, begränsa de processorer bygget ser: taskset -c 0-5 npm run build.
  • Om Node löper tomt på heap, höj dess gräns: NODE_OPTIONS=--max-old-space-size=6144. Docker-bygget använder detta värde (BUILD_NODE_OPTIONS i build.env).
  • Undvik att köra serverns fullständiga testsvit, ett webbbygg och ett Docker-bygg samtidigt på en liten maskin.

Apparna

Varje app (plugin) har sitt eget repository och sin egen Makefile; make dist bygger dess bundle. Se Bygg, installera och felsök.

Skrivbordsapp

Skrivbordsappen är en Electron-app. Med Node.js 24 eller senare:

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)

Bygginställningar, såsom servrar att förkonfigurera, finns i src/common/config/buildConfig.ts. Utan ett Apple-certifikat, sätt AM_MAC_ADHOC_SIGN=true för att signera macOS-appen ad hoc, utan notarisering: Apple-silikon-Macs vägrar osignerad kod. Repositoryt release.yml-arbetsflöde bygger osignerade paket för Linux, Windows och macOS vid en v*-tagg.

Mobilapp

Den mobila appen är en React Native-app; dess README listar kommandon (npm run ios, npm run android). För att bygga din egen kopia behöver du också egna signeringsskylar, ett Firebase-projekt för Android-aviseringar, en APNs-nyckel för iOS och en push-proxy som innehåller dessa autentiseringsuppgifter. Repositoryns release.yml-arbetsflöde bygger Android APK och AAB samt en osignerad iOS .ipa vid en v*-tag, utan butikskonton; dess README listar de hemligheter som signerar Android-bygget och konfigurerar Firebase.