Compilando a partir do código-fonte
Esta página explica como compilar e executar o Antimatter a partir do seu código-fonte, seja para trabalhar nele ou para criar suas próprias compilações. Ela abrange o servidor e as interfaces web, que estão em um único repositório, além da imagem Docker e dos aplicativos.
O que você precisa
- Ir, na versão em
server/go.mod(1.26.7 no momento da redação). - Node.js e npm, nas versões especificadas em
.nvmrcewebapp/package.json(Node 24.11.1 com npm 11.6.2). Com o mise, o arquivomise.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 contêineres.
- make, git e uma máquina com Linux ou macOS.
- Memória: a compilação das interfaces web é a parte mais pesada. Planeje para 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 compartilhados 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 contêineres de desenvolvimento (PostgreSQL, Redis, um captor de e-mails e ferramentas de monitoramento), vincula as compilações do aplicativo web no lugar, inicia o servidor em segundo plano com go run e inicia o observador do aplicativo web, que recompila a interface clássica conforme você edita. Abra http://localhost:8065 e crie uma conta: a primeira conta se torna o administrador do sistema.
Comando (em server/) | O que faz |
|---|---|
make run-server, make run-client | Iniciar apenas o servidor ou apenas o observador do aplicativo web. |
make restart-server | Reiniciar o servidor após alterar o código Go. |
make stop | Parar o servidor, o observador e os contêineres. |
make debug-server | Executar o servidor no depurador Delve. |
make run-cli ARGS="-version" | Executar um comando do servidor. |
make config-reset | Redefinir config/config.json para os valores padrão. |
make clean, make nuke | Remover arquivos de compilação; nuke também exclui os dados de desenvolvimento. |
O banco de dados de desenvolvimento é postgres://mmuser:mostest_password@localhost/mattermost_test, a fonte de dados padrão do servidor. Escolha quais contêineres serão iniciados com ENABLED_DOCKER_SERVICES, em um arquivo server/config.override.mk ou no seu ambiente (veja server/config.mk).
As interfaces web
Em webapp/:
npm install # also builds the shared packages
npm run build # the classic interface, then Fusion
Os builds ficam em webapp/channels/dist (clássico) e webapp/fusion/dist (Fusion). O comando make client em server/ os vincula 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/) monitora e reconstrói a interface clássica. AdicioneWATCH_FUSION=truepara reconstruir 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 | Onde | O que faz |
|---|---|---|
make test-server | server/ | A suíte de testes do servidor, contra os contêineres de desenvolvimento. Demora bastante. |
make test-server-quick | server/ | Apenas os testes curtos. |
go test ./channels/app/... -run TestName | server/ | Um pacote ou teste, com os contêineres em execução (make start-docker). |
make check-style | server/ | go vet, golangci-lint e as outras verificações do Go. |
make test | webapp/ | Os testes unitários do aplicativo 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 arquivos de strings em inglês após adicionar ou alterar strings (veja Traduções). |
Execute make modules-tidy em vez de go mod tidy em server/.
Arquivos de liberação
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 padrão com um README.md sobre como alterar as configurações, ambas as interfaces web, os modelos, as fontes e as traduções. Outras plataformas: make package-osx, make package-windows, make package-freebsd.
Aplicativos incluídos
Um simples make package-linux cria um arquivo sem aplicativos. Para incluí-los, como fazem os lançamentos públicos, baixe primeiro os bundles de aplicativos assinados e passe a pasta correspondente:
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 baixa o lançamento mais recente no GitHub de cada aplicativo listado no plugins.json do antimatter-docker, com sua assinatura, e verifica a assinatura contra a chave de plugins do Antimatter. Por padrão, ele 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. Aplicativos sem lançamento ou sem assinatura são ignorados com um aviso. Os bundles 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 liberação em pacotes .deb e .rpm completos, usando nfpm. O guia do administrador descreve o que eles 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 isso no GitHub: ao marcar uma tag v*, ele compila os arquivos e pacotes para amd64 e arm64, com SHA256SUMS, e os publica como a release do GitHub da tag (uma pré-release para versões com -). Quando executado manualmente, ele numera a compilação como 0.9.0-dev.<run> e mantém os arquivos como artefatos do workflow. Cada repositório de aplicativo tem um workflow release.yml que publica seu bundle assinado da mesma forma.
A imagem Docker
O repositório antimatter-docker compila as imagens publicadas, o servidor com seus aplicativos, 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 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; teste com ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json lista os aplicativos e as versões compiladas, e o README do repositório explica as variantes.
build-all.sh assina os aplicativos incluídos com a chave de assinatura do Antimatter, e a construção da imagem rejeita aplicativos não assinados. Sem essa chave privada, que apenas os mantenedores possuem, execute apenas as primeiras etapas: scripts/fetch-sources.sh, scripts/build-plugins.sh (pacotes de aplicativos em out/plugins/) e scripts/build-server.sh (arquivos do servidor em out/server/).Construção e memória
As interfaces web são grandes compilações webpack, e a falta de memória é a falha de construção mais comum.
- O
npm run buildcompila a interface clássica e a Fusion uma após a outra, não simultaneamente, para manter o pico de uso mais baixo. Não as execute em paralelo. - O minimizador inicia um worker por processador. Em uma máquina com muitos núcleos e pouca memória, limite os processadores que a construção enxerga:
taskset -c 0-5 npm run build. - Se o Node ficar sem memória de heap, aumente seu limite:
NODE_OPTIONS=--max-old-space-size=6144. A construção do Docker usa esse valor (BUILD_NODE_OPTIONSembuild.env). - Evite executar a suíte de testes completa do servidor, uma compilação web e uma construção do Docker ao mesmo tempo em uma máquina pequena.
Os aplicativos
Cada aplicativo (plugin) tem seu próprio repositório e Makefile; make dist compila seu pacote. Consulte Construir, instalar e depurar.
Aplicativo para desktop
O aplicativo para desktop é um aplicativo Electron. Com Node.js 24 ou posterior:
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 configurações de tempo 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 o aplicativo macOS de forma ad hoc, sem notarização: Macs com Apple silicon recusam código não assinado. O workflow release.yml do repositório compila pacotes não assinados para Linux, Windows e macOS em uma tag v*.
Aplicativo para celular
O aplicativo móvel é um aplicativo React Native; seu README lista os comandos (npm run ios, npm run android). Para compilar sua própria cópia, você também precisa de 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 push que armazene essas credenciais. O workflow release.yml do repositório compila o APK e o AAB do Android e um .ipa do iOS não assinado em uma tag v*, sem contas de loja; seu README lista os segredos que assinam a compilação do Android e configuram o Firebase.