Збирання з початкового коду

На цій сторінці описано, як зібрати та запустити Antimatter з початкового коду — для роботи над ним або для створення власних збірок. Сторінка охоплює сервер і вебінтерфейси, які зберігаються в одному репозиторії, а також образ Docker і застосунки.

Що потрібно

  • Go версії, зазначеної у server/go.mod (1.26.7 на момент написання).
  • Node.js і npm версій, зазначених у .nvmrc та webapp/package.json (Node 24.11.1 з npm 11.6.2). За допомогою mise файл mise.toml у репозиторії встановлює потрібну версію Node.
  • Docker з Compose: для налаштування середовища розробки PostgreSQL та кілька інших служб запускаються в контейнерах.
  • make, git та комп’ютер з Linux або macOS.
  • Оперативна пам’ять: збирання вебінтерфейсів — найважча частина. Передбачте 16 ГБ RAM; див. Збірки та пам’ять.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

У репозиторії сервер зберігається в server/, вебінтерфейси — в webapp/ (Fusion у webapp/fusion, класичний — у webapp/channels, спільні пакети — у webapp/platform), а кінцеві тести — у e2e-tests/.

Запуск сервера для розробки

cd server
make run

make run запускає контейнери для розробки (PostgreSQL, Redis, перехватувач пошти та інструменти моніторингу), підключає збірки вебзастосунку на місце, запускає сервер у фоновому режимі за допомогою go run та запускає спостерігача вебзастосунку, який повторно збирає класичний інтерфейс під час редагування. Відкрийте http://localhost:8065 та створіть акаунт: перший акаунт стане системним адміністратором.

Команда (у server/)Призначення
make run-server, make run-clientЗапустити лише сервер або лише спостерігача вебзастосунку.
make restart-serverПерезапустити сервер після змін у коді Go.
make stopЗупинити сервер, спостерігача та контейнери.
make debug-serverЗапустити сервер у відладчику Delve.
make run-cli ARGS="-version"Виконати команду сервера.
make config-resetСкинути config/config.json до значень за замовчуванням.
make clean, make nukeВидалити файли збірки; nuke також видаляє дані для розробки.

База даних для розробки — postgres://mmuser:mostest_password@localhost/mattermost_test, джерело даних за замовчуванням для сервера. Оберіть, які контейнери запускати, за допомогою ENABLED_DOCKER_SERVICES у файлі server/config.override.mk або у вашому середовищі (див. server/config.mk).

Вебінтерфейси

У webapp/:

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

Збірки з'являються в webapp/channels/dist (класичний) та webapp/fusion/dist (Fusion). Команда make client у server/ пов'язує їх як server/client та server/client-fusion, де сервер їх надає: класичний під /static/, Fusion під /static/fusion/.

  • npm run run (або make run у webapp/) стежить за змінами та повторно збирає класичний інтерфейс. Додайте WATCH_FUSION=true, щоб також повторно збирати Fusion.
  • npm run dev-server (make dev) запускає сервер розробки webpack замість цього: класичний на порту 9005, Fusion на порту 9006.
  • Щоб переглянути один із інтерфейсів у браузері, додайте ?webui=fusion або ?webui=classic до адреси будь-якої сторінки.

Тести та перевірки

КомандаДеПризначення
make test-serverserver/Набір тестів сервера, що виконується проти контейнерів для розробки. Це тривалий процес.
make test-server-quickserver/Тільки короткі тести.
go test ./channels/app/... -run TestNameserver/Один пакет або тест, з контейнерами, що працюють (make start-docker).
make check-styleserver/go vet, golangci-lint та інші перевірки Go.
make testwebapp/Модульні тести веб-додатку (Jest) у кожному пакеті.
npm run test -- <pattern>webapp/fusionДеякі тести Fusion.
make check-style, make check-typeswebapp/ESLint та TypeScript.
make i18n-extractserver/ та webapp/Оновлює файли англійських рядків після додавання або зміни рядків (див. Переклади).

Виконуйте make modules-tidy замість go mod tidy у server/.

Архіви релізів

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 збирає вебінтерфейси та бінарні файли для Linux одним кроком. Архів містить bin/antimatter, bin/amctl, типовий config/config.json з README.md щодо зміни налаштувань, обидва вебінтерфейси, шаблони, шрифти та переклади. Інші платформи: make package-osx, make package-windows, make package-freebsd.

Вбудовані додатки

Звичайний make package-linux збирає архів без застосунків. Щоб додати їх, як у публічних випусках, спочатку отримайте підписані пакети застосунків і вкажіть їхню папку:

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 завантажує останній випуск GitHub для кожного застосунка зі списку в plugins.json репозиторію antimatter-docker, разом із підписом, і перевіряє підпис за ключем плагінів Antimatter. Типово включаються Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs і Memes; AM_BUNDLED_APPS (назви репозиторіїв, розділені пробілами) змінює цей список. Застосунки без випуску або без підпису пропускаються з попередженням. Пакети потрапляють у prepackaged_plugins/ архіву.

Пакети .deb і .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> перетворює архів випуску на універсальні пакети .deb та .rpm за допомогою nfpm. Адміністративний посібник описує, що саме вони встановлюють: див. Встановлення пакета .deb або .rpm.

Процес випуску

Процес antimatter-release.yml у репозиторії сервера виконує все це на GitHub: за тегом v* він збирає архіви та пакети для amd64 і arm64, з SHA256SUMS, і публікує їх як випуск GitHub для цього тега (превипуск для версії з -). Якщо запустити вручну, він нумерує збірку як 0.9.0-dev.<run> і зберігає файли як артефакти процесу. Кожен репозиторій застосунка має процес release.yml, який публікує його підписаний пакет аналогічним чином.

Docker-образ

Репозиторій antimatter-docker збирає опубліковані образи, сервер із його додатками, повністю всередині 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

Потрібен Docker із buildx, Python 3, git та gpg, приблизно 16 ГБ RAM та 30 ГБ на диску. Результат завантажується як ghcr.io/antimatterchat/antimatter:dev; спробуйте його за допомогою ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json перелічує додатки та зібрані версії, а README репозиторію пояснює варіанти.

build-all.sh підписує вбудовані додатки ключем підпису Antimatter, а збірка образу відхиляє непідписані додатки. Без цього приватного ключа, який є лише у супровідників, виконайте перші кроки окремо: scripts/fetch-sources.sh, scripts/build-plugins.sh (збірки додатків у out/plugins/) та scripts/build-server.sh (архіви сервера в out/server/).

Збірка та пам’ять

Вебінтерфейси — це великі збірки webpack, а нестача пам’яті — найпоширеніша причина збою під час збірки.

  • npm run build збирає класичний інтерфейс і Fusion послідовно, а не одночасно, щоб зменшити пікове навантаження. Не запускайте їх паралельно самостійно.
  • Мініфікатор запускає по одному робочому процесору на процесор. На машині з багатьма ядрами, але малою пам’яттю, обмежте кількість процесорів, які бачить збірка: taskset -c 0-5 npm run build.
  • Якщо Node вичерпує обсяг пам’яті, збільште його ліміт: NODE_OPTIONS=--max-old-space-size=6144. Збірка Docker використовує саме це значення (BUILD_NODE_OPTIONS у build.env).
  • Уникайте одночасного запуску повного набору тестів сервера, збірки вебінтерфейсу та збірки Docker на невеликій машині.

Додатки

Кожен додаток (плагін) має власний репозиторій і Makefile; make dist збирає його пакет. Див. Збірка, встановлення та налагодження.

Десктопний додаток

Десктопний додаток — це застосунок Electron. З Node.js 24 або новішою версією:

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)

Налаштування часу збірки, наприклад сервери для попередньої конфігурації, містяться у файлі src/common/config/buildConfig.ts. Якщо немає сертифіката Apple, встановіть AM_MAC_ADHOC_SIGN=true, щоб підписати застосунок для macOS ad hoc без нотаризації: Mac на процесорах Apple відмовляються запускати непідписаний код. Робочий процес release.yml у репозиторії збирає непідписані пакети для Linux, Windows та macOS за тегом v*.

Мобільний додаток

Мобільний застосунок — це застосунок на React Native; у його файлі README наведено команди (npm run ios, npm run android). Для збірки власної копії також потрібні власні ключі підпису, проєкт Firebase для сповіщень на Android, ключ APNs для iOS та проксі-сервер для push-сповіщень, що зберігає ці облікові дані. Робочий процес release.yml у репозиторії збирає Android APK та AAB, а також непідписаний iOS .ipa за тегом v*, без акаунтів магазинів; у його файлі README наведено секрети для підпису збірки Android та налаштування Firebase.