Bygging fra kildekode

Denne siden forklarer hvordan du bygger og kjører Antimatter fra kildekoden, enten for å jobbe med den eller for å lage dine egne bygg. Den dekker serveren og webgrensesnittene, som ligger i ett repository, og deretter Docker-bildet og appene.

Det du trenger

  • Gå, i versjonen i server/go.mod (1.26.7 ved skrivetid).
  • Node.js og npm, i versjonene som står i .nvmrc og webapp/package.json (Node 24.11.1 med npm 11.6.2). Med mise installerer repositoryets mise.toml riktig Node.
  • Docker med Compose: utviklingsoppsettet kjører PostgreSQL og noen andre tjenester i containere.
  • make, git og en maskin med Linux eller macOS.
  • Minne: bygging av webgrensesnittene er den tunge delen. Planlegg for 16 GB RAM; se Bygg og minne.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Repositoryet inneholder serveren i server/, webgrensesnittene i webapp/ (Fusion i webapp/fusion, klassisk i webapp/channels, felles pakker i webapp/platform) og end-to-end-tester i e2e-tests/.

Kjør en utviklingsserver

cd server
make run

make run starter utviklingscontainerne (PostgreSQL, Redis, en e-postfangst og overvåkningsverktøy), kobler webapp-byggene på plass, starter serveren i bakgrunnen med go run og starter webappens vakt, som bygger om det klassiske grensesnittet når du redigerer det. Åpne http://localhost:8065 og opprett en konto: den første blir systemadministrator.

Kommando (i server/)Hva det gjør
make run-server, make run-clientStart bare serveren, eller bare webappens vakt.
make restart-serverStart serveren på nytt etter endringer i Go-koden.
make stopStopp serveren, vakten og containerne.
make debug-serverKjør serveren under Delve-feilsøkeren.
make run-cli ARGS="-version"Kjør en serverkommando.
make config-resetTilbakestill config/config.json til standardverdiene.
make clean, make nukeFjern byggfiler; nuke sletter også utviklingsdataene.

Utviklingsdatabasen er postgres://mmuser:mostest_password@localhost/mattermost_test, serverens standard datakilde. Velg hvilke containere som skal startes med ENABLED_DOCKER_SERVICES, i en server/config.override.mk-fil eller i miljøet ditt (se server/config.mk).

Webgrensesnittene

I webapp/:

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

Byggene lagres i webapp/channels/dist (klassisk) og webapp/fusion/dist (Fusion). make client i server/ kobler dem som server/client og server/client-fusion, der serveren leverer dem: klassisk under /static/, Fusion under /static/fusion/.

  • npm run run (eller make run i webapp/) overvåker og bygger om den klassiske grensesnittet. Legg til WATCH_FUSION=true for å bygge om Fusion også.
  • npm run dev-server (make dev) kjører webpacks utviklingsserver i stedet: klassisk på port 9005, Fusion på port 9006.
  • For å se ett av grensesnittene i nettleseren, legg til ?webui=fusion eller ?webui=classic til adressen til en hvilken som helst side.

Tester og sjekker

KommandoHvorHva det gjør
make test-serverserver/Serverens testsuite, mot utviklingscontainerne. Det tar lang tid.
make test-server-quickserver/Kun de korte testene.
go test ./channels/app/... -run TestNameserver/Én pakke eller test, med containerne i gang (make start-docker).
make check-styleserver/go vet, golangci-lint og de andre Go-sjekkene.
make testwebapp/Webappens enhetstester (Jest), i alle pakker.
npm run test -- <pattern>webapp/fusionNoen av Fusion-testene.
make check-style, make check-typeswebapp/ESLint og TypeScript.
make i18n-extractserver/ og webapp/Oppdaterer de engelske strengfilene etter at du har lagt til eller endret strenger (se Oversettelser).

Kjør make modules-tidy i stedet for go mod tidy i server/.

Utgavearkiver

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 webgrensesnittene og Linux-binærfilene i ett steg. Arkivet inneholder bin/antimatter, bin/amctl, en standard config/config.json med en README.md om endring av innstillinger, begge webgrensesnitt, malene, fontene og oversettelsene. Andre plattformer: make package-osx, make package-windows, make package-freebsd.

Bundlete apper

En vanlig make package-linux bygger et arkiv uten apper. For å inkludere dem, slik de offentliggjorte utgavene gjør, henter du først de signerte appbundlene og overfører mappen deres:

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 laster ned den nyeste GitHub-utgaven av hver app som er oppført i plugins.json i antimatter-docker, med signatur, og sjekker signaturen mot Antimatters plugin-nøkkel. Som standard henter den Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs og Memes; AM_BUNDLED_APPS (navn på repositorier, adskilt med mellomrom) endrer listen. Apper uten utgave, eller uten signatur, hoppes over med en advarsel. Bundlene plasseres i prepackaged_plugins/ i arkivet.

.deb- og .rpm-pakker

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> omdanner et utgavearkiv til alle-i-én .deb- og .rpm-pakker, ved hjelp av nfpm. Administratørguiden beskriver hva de installerer: se Installer .deb- eller .rpm-pakken.

Utgavearbeidsflyten

Serverens repositorie antimatter-release.yml arbeidsflyt gjør alt dette på GitHub: ved en v*-merke bygger den arkivene og pakkene for amd64 og arm64, med SHA256SUMS, og publiserer dem som GitHub-utgaven for merket (en forhåndsutgave for en versjon med -). Kjørt manuelt, nummererer den bygget 0.9.0-dev.<run> og beholder filene som arbeidsflyt-artefakter. Hvert app-repositorie har en release.yml-arbeidsflyt som publiserer det signerte bundlet på samme måte.

Docker-bildet

Lageret antimatter-docker bygger de utgitte bildene, serveren med appene sine, helt inne i 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 krever Docker med buildx, Python 3, git og gpg, omtrent 16 GB RAM og 30 GB disk. Resultatet lastes som ghcr.io/antimatterchat/antimatter:dev; prøv det med ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json lister appene og versjonene som er bygget, og lagerets README forklarer variantene.

build-all.sh signer de medfølgende appene med Antimatters signeringsnøkkel, og bildebbygget avviser apper som ikke er signerte. Uten den private nøkkelen, som bare vedlikeholderne har, kjører du de første stegene alene: scripts/fetch-sources.sh, scripts/build-plugins.sh (appbundler i out/plugins/) og scripts/build-server.sh (serverarkiver i out/server/).

Bygging og minne

Webgrensesnittene er store webpack-bygg, og å løpe tom for minne er den vanligste årsaken til at bygget feiler.

  • npm run build bygger det klassiske grensesnittet og Fusion etter hverandre, ikke samtidig, for å holde toppen lavere. Ikke kjør dem parallelt selv.
  • Minifiseren starter én worker per prosessor. På en maskin med mange kjerner og lite minne, begrens prosessorene bygget ser: taskset -c 0-5 npm run build.
  • Hvis Node løper tom for heap, øk grensen: NODE_OPTIONS=--max-old-space-size=6144. Docker-bygget bruker denne verdien (BUILD_NODE_OPTIONS i build.env).
  • Unngå å kjøre serverens komplette testsuite, et webbygg og et Docker-bygg samtidig på en liten maskin.

Appene

Hver app (plugin) har sitt eget repository og Makefile; make dist bygger bundlen. Se Bygg, installer og feilsøk.

Skrivebordsapp

Skrivebordsappen er en Electron-app. Med Node.js 24 eller nyere:

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)

Byggtidsinnstillinger, for eksempel servere som skal forhåndssettes, finnes i src/common/config/buildConfig.ts. Uten et Apple-sertifikat, sett AM_MAC_ADHOC_SIGN=true for å signere macOS-appen ad hoc, uten notariseringsprosess: Macs med Apple-silikon nekter å kjøre usignert kode. Repositoryets release.yml-workflow bygger usignerte pakker for Linux, Windows og macOS ved en v*-tag.

Mobilapp

Mobilappen er en React Native-app; README-en inneholder en liste over kommandoer (npm run ios, npm run android). For å bygge din egen kopi trenger du også dine egne signeringsnøkler, et Firebase-prosjekt for Android-varsler, en APNs-nøkkel for iOS, og en push-proxy som lagrer disse legitimasjonene. Repositoryets release.yml-workflow bygger Android-APK og AAB, samt en usignert iOS-.ipa, ved en v*-tag, uten butikk-kontoer; README-en inneholder en liste over hemmeligheter som signerer Android-bygget og setter opp Firebase.