Compilação a partir do código-fonte

Esta página explica como compilar e executar o Antimatter a partir do seu código-fonte, para o desenvolver ou para criar as suas próprias compilações. Abrange o servidor e as interfaces web, que se encontram num único repositório, bem como a imagem Docker e as aplicações.

O que precisa

  • Ir, na versão em server/go.mod (1.26.7 à data de redação).
  • Node.js e npm, nas versões indicadas em .nvmrc e webapp/package.json (Node 24.11.1 com npm 11.6.2). Com o mise, o ficheiro mise.toml do repositório instala a versão correta do Node.
  • Docker com Compose: a configuração de desenvolvimento executa o PostgreSQL e alguns outros serviços em contentores.
  • make, git e um computador com Linux ou macOS.
  • Memória: a compilação das interfaces web é a parte mais exigente. Preveja 16 GB de RAM; consulte Compilações e memória.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

O repositório contém o servidor em server/, as interfaces web em webapp/ (Fusion em webapp/fusion, clássica em webapp/channels, pacotes partilhados em webapp/platform) e testes de ponta a ponta em e2e-tests/.

Executar um servidor de desenvolvimento

cd server
make run

make run inicia os contentores de desenvolvimento (PostgreSQL, Redis, um captor de correio e ferramentas de monitorização), liga as compilações da aplicação web no local adequado, inicia o servidor em segundo plano com go run e inicia o observador da aplicação web, que recompila a interface clássica à medida que a edita. Abra http://localhost:8065 e crie uma conta: a primeira torna-se o administrador do sistema.

Comando (em server/)O que faz
make run-server, make run-clientIniciar apenas o servidor ou apenas o observador da aplicação web.
make restart-serverReiniciar o servidor após alterar o código Go.
make stopParar o servidor, o observador e os contentores.
make debug-serverExecutar o servidor no depurador Delve.
make run-cli ARGS="-version"Executar um comando do servidor.
make config-resetRepor config/config.json aos valores predefinidos.
make clean, make nukeRemover ficheiros de compilação; nuke também elimina os dados de desenvolvimento.

A base de dados de desenvolvimento é postgres://mmuser:mostest_password@localhost/mattermost_test, a fonte de dados predefinida do servidor. Escolha que contentores iniciar com ENABLED_DOCKER_SERVICES, num ficheiro server/config.override.mk ou no seu ambiente (consulte server/config.mk).

As interfaces web

Em webapp/:

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

As compilações ficam em webapp/channels/dist (clássico) e webapp/fusion/dist (Fusion). O comando make client em server/ liga-os como server/client e server/client-fusion, onde o servidor os serve: o clássico em /static/ e o Fusion em /static/fusion/.

  • npm run run (ou make run em webapp/) monitoriza e recompila a interface clássica. Adicione WATCH_FUSION=true para recompilar também o Fusion.
  • npm run dev-server (make dev) executa o servidor de desenvolvimento do webpack: o clássico na porta 9005 e o Fusion na porta 9006.
  • Para ver uma interface ou outra no navegador, adicione ?webui=fusion ou ?webui=classic ao endereço de qualquer página.

Testes e verificações

ComandoLocalO que faz
make test-serverserver/A suite de testes do servidor, contra os contentores de desenvolvimento. Demora bastante tempo.
make test-server-quickserver/Apenas os testes curtos.
go test ./channels/app/... -run TestNameserver/Um pacote ou teste, com os contentores a funcionar (make start-docker).
make check-styleserver/go vet, golangci-lint e as outras verificações Go.
make testwebapp/Os testes unitários da aplicação web (Jest), em todos os pacotes.
npm run test -- <pattern>webapp/fusionAlguns dos testes do Fusion.
make check-style, make check-typeswebapp/ESLint e TypeScript.
make i18n-extractserver/ e webapp/Atualiza os ficheiros de strings em inglês após adicionar ou alterar strings (ver Traduções).

Execute make modules-tidy em vez de go mod tidy em server/.

Arquivos de lançamento

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 as interfaces web e os binários para Linux de uma só vez. O arquivo contém bin/antimatter, bin/amctl, um config/config.json predefinido com um README.md sobre como alterar as definições, ambas as interfaces web, os modelos, as fontes e as traduções. Outras plataformas: make package-osx, make package-windows, make package-freebsd.

Aplicações incluídas

Um simples make package-linux cria um arquivo sem aplicações. Para as incluir, como fazem os lançamentos publicados, obtenha primeiro os pacotes de aplicação assinados e indique a respetiva pasta:

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 o lançamento mais recente no GitHub de cada aplicação listada no plugins.json do antimatter-docker, com a respetiva assinatura, e verifica a assinatura em relação à chave de plugins do Antimatter. Por predefinição, inclui Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs e Memes; AM_BUNDLED_APPS (nomes dos repositórios, separados por espaços) altera a lista. As aplicações sem lançamento, ou sem assinatura, são ignoradas com um aviso. Os pacotes são colocados em prepackaged_plugins/ no arquivo.

Pacotes .deb e .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> converte um arquivo de lançamento em pacotes .deb e .rpm completos, com o nfpm. O guia de administração descreve o que estes pacotes instalam: consulte Instalar o pacote .deb ou .rpm.

O fluxo de trabalho de lançamento

O workflow antimatter-release.yml do repositório do servidor executa tudo isto no GitHub: numa tag v*, compila os arquivos e pacotes para amd64 e arm64, com SHA256SUMS, e publica-os como a libertação do GitHub da tag (uma pré-libertação para uma versão com -). Quando executado manualmente, atribui à compilação o número 0.9.0-dev.<run> e mantém os ficheiros como artefactos do workflow. Cada repositório de aplicação tem um workflow release.yml que publica o respetivo pacote assinado da mesma forma.

A imagem Docker

O repositório antimatter-docker compila as imagens publicadas, o servidor com as suas aplicações, inteiramente dentro do 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

É necessário o Docker com buildx, Python 3, git e gpg, cerca de 16 GB de RAM e 30 GB de disco. O resultado é carregado como ghcr.io/antimatterchat/antimatter:dev; experimente com ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. O plugins.json lista as aplicações e as versões compiladas, e o README do repositório explica as variantes.

O build-all.sh assina as aplicações incluídas com a chave de assinatura do Antimatter, e a compilação da imagem recusa aplicações não assinadas. Sem essa chave privada, que apenas os mantenedores possuem, execute apenas as primeiras etapas: scripts/fetch-sources.sh, scripts/build-plugins.sh (pacotes de aplicações em out/plugins/) e scripts/build-server.sh (arquivos do servidor em out/server/).

Compilação e memória

As interfaces web são compilações webpack grandes, e a falta de memória é a falha de compilação mais comum.

  • O npm run build compila a interface clássica e a Fusion uma após a outra, não em simultâneo, para manter o pico mais baixo. Não as execute em paralelo por sua conta.
  • O minificador inicia um trabalhador por processador. Numa máquina com muitos núcleos e pouca memória, limite os processadores que a compilação deteta: taskset -c 0-5 npm run build.
  • Se o Node ficar sem memória de pilha, aumente o seu limite: NODE_OPTIONS=--max-old-space-size=6144. A compilação Docker utiliza este valor (BUILD_NODE_OPTIONS em build.env).
  • Evite executar a suite de testes completa do servidor, uma compilação web e uma compilação Docker ao mesmo tempo numa máquina pequena.

As aplicações

Cada aplicação (plugin) tem o seu próprio repositório e Makefile; make dist compila o seu pacote. Consulte Compilar, instalar e depurar.

Aplicação de desktop

A aplicação de desktop é uma aplicação Electron. Com Node.js 24 ou 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)

As definições de compilação, como os servidores a pré-configurar, estão em src/common/config/buildConfig.ts. Sem um certificado da Apple, defina AM_MAC_ADHOC_SIGN=true para assinar a aplicação macOS de forma ad hoc, sem notação: os Macs com processador Apple recusam código não assinado. O workflow release.yml do repositório compila pacotes não assinados para Linux, Windows e macOS numa tag v*.

Aplicação móvel

A aplicação móvel é uma aplicação React Native; o seu README lista os comandos (npm run ios, npm run android). Para compilar a sua própria cópia, também necessita das suas próprias chaves de assinatura, de um projeto Firebase para notificações no Android, de uma chave APNs para iOS e de um proxy de notificações push que guarde essas credenciais. O workflow release.yml do repositório compila o APK e o AAB do Android e um .ipa iOS não assinado numa tag v*, sem contas de loja; o seu README lista os segredos que assinam a compilação do Android e configuram o Firebase.