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
.nvmrcewebapp/package.json(Node 24.11.1 com npm 11.6.2). Com o mise, o ficheiromise.tomldo 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-client | Iniciar apenas o servidor ou apenas o observador da aplicação web. |
make restart-server | Reiniciar o servidor após alterar o código Go. |
make stop | Parar o servidor, o observador e os contentores. |
make debug-server | Executar o servidor no depurador Delve. |
make run-cli ARGS="-version" | Executar um comando do servidor. |
make config-reset | Repor config/config.json aos valores predefinidos. |
make clean, make nuke | Remover 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(oumake runemwebapp/) monitoriza e recompila a interface clássica. AdicioneWATCH_FUSION=truepara 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=fusionou?webui=classicao endereço de qualquer página.
Testes e verificações
| Comando | Local | O que faz |
|---|---|---|
make test-server | server/ | A suite de testes do servidor, contra os contentores de desenvolvimento. Demora bastante tempo. |
make test-server-quick | server/ | Apenas os testes curtos. |
go test ./channels/app/... -run TestName | server/ | Um pacote ou teste, com os contentores a funcionar (make start-docker). |
make check-style | server/ | go vet, golangci-lint e as outras verificações Go. |
make test | webapp/ | Os testes unitários da aplicação web (Jest), em todos os pacotes. |
npm run test -- <pattern> | webapp/fusion | Alguns dos testes do Fusion. |
make check-style, make check-types | webapp/ | ESLint e TypeScript. |
make i18n-extract | server/ 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.
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 buildcompila 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_OPTIONSembuild.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.