Membangun dari sumber

Halaman ini menjelaskan cara membangun dan menjalankan Antimatter dari kode sumbernya, baik untuk keperluan pengembangan maupun untuk membuat build Anda sendiri. Halaman ini mencakup server dan antarmuka web yang berada dalam satu repositori, kemudian image Docker dan aplikasi.

Yang Anda butuhkan

  • Go, pada versi yang tercantum di server/go.mod (1.26.7 saat ini ditulis).
  • Node.js dan npm, pada versi yang tertera di .nvmrc dan webapp/package.json (Node 24.11.1 dengan npm 11.6.2). Dengan mise, file mise.toml di repositori akan menginstal versi Node yang tepat.
  • Docker dengan Compose: pengaturan pengembangan menjalankan PostgreSQL dan beberapa layanan lain dalam kontainer.
  • make, git, dan mesin Linux atau macOS.
  • Memori: membangun antarmuka web adalah bagian yang paling berat. Siapkan 16 GB RAM; lihat Build dan memori.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Repositori menyimpan server di server/, antarmuka web di webapp/ (Fusion di webapp/fusion, klasik di webapp/channels, paket bersama di webapp/platform), dan pengujian end-to-end di e2e-tests/.

Menjalankan server pengembangan

cd server
make run

make run memulai kontainer pengembangan (PostgreSQL, Redis, penangkap email, dan alat pemantauan), menautkan build aplikasi web ke tempatnya, memulai server di latar belakang dengan go run, dan memulai watcher aplikasi web yang membangun ulang antarmuka klasik saat Anda mengeditnya. Buka http://localhost:8065 dan buat akun: akun pertama akan menjadi admin sistem.

Perintah (di server/)Fungsinya
make run-server, make run-clientMulai hanya server, atau hanya watcher aplikasi web.
make restart-serverMulai ulang server setelah mengubah kode Go.
make stopHentikan server, watcher, dan kontainer.
make debug-serverJalankan server di bawah debugger Delve.
make run-cli ARGS="-version"Jalankan perintah server.
make config-resetAtur ulang config/config.json ke nilai bawaan.
make clean, make nukeHapus file build; nuke juga menghapus data pengembangan.

Basis data pengembangan adalah postgres://mmuser:mostest_password@localhost/mattermost_test, sumber data bawaan server. Pilih kontainer yang akan dimulai dengan ENABLED_DOCKER_SERVICES, di file server/config.override.mk atau di lingkungan Anda (lihat server/config.mk).

Antarmuka web

Di webapp/:

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

Hasil build disimpan di webapp/channels/dist (klasik) dan webapp/fusion/dist (Fusion). Perintah make client di server/ menautkan keduanya sebagai server/client dan server/client-fusion, yang kemudian disajikan oleh server: versi klasik di bawah /static/, dan Fusion di bawah /static/fusion/.

  • npm run run (atau make run di webapp/) memantau dan membangun ulang antarmuka klasik. Tambahkan WATCH_FUSION=true untuk juga membangun ulang Fusion.
  • npm run dev-server (make dev) menjalankan server pengembangan webpack: versi klasik di port 9005, dan Fusion di port 9006.
  • Untuk melihat salah satu antarmuka di browser, tambahkan ?webui=fusion atau ?webui=classic ke alamat halaman mana pun.

Uji dan pemeriksaan

PerintahDi manaFungsinya
make test-serverserver/Kumpulan uji server, terhadap kontainer pengembangan. Proses ini memakan waktu lama.
make test-server-quickserver/Hanya uji singkat.
go test ./channels/app/... -run TestNameserver/Satu paket atau uji, dengan kontainer berjalan (make start-docker).
make check-styleserver/go vet, golangci-lint, dan pemeriksaan Go lainnya.
make testwebapp/Uji unit aplikasi web (Jest), di setiap paket.
npm run test -- <pattern>webapp/fusionBeberapa uji Fusion.
make check-style, make check-typeswebapp/ESLint dan TypeScript.
make i18n-extractserver/ dan webapp/Memperbarui file string bahasa Inggris setelah Anda menambahkan atau mengubah string (lihat Terjemahan).

Jalankan make modules-tidy alih-alih go mod tidy di server/.

Arsip rilis

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 membangun antarmuka web dan biner Linux sekaligus. Arsip berisi bin/antimatter, bin/amctl, config/config.json bawaan dengan README.md tentang cara mengubah pengaturan, kedua antarmuka web, template, font, dan terjemahan. Platform lain: make package-osx, make package-windows, make package-freebsd.

Aplikasi bawaan

make package-linux biasa membangun arsip tanpa aplikasi. Untuk membundelnya, seperti yang dilakukan rilis publik, unduh bundel aplikasi yang ditandatangani terlebih dahulu lalu lewati foldernya:

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 mengunduh rilis GitHub terbaru dari setiap aplikasi yang tercantum di plugins.json antimatter-docker, beserta tanda tangannya, dan memverifikasi tanda tangan tersebut terhadap kunci plugin Antimatter. Secara bawaan, skrip ini mengambil Whiteboard, Kanal Suara, Panggilan, Agen, To-do, Jajak Pendapat, Catatan, GIF, dan Meme; AM_BUNDLED_APPS (nama repositori, dipisahkan oleh spasi) mengubah daftar tersebut. Aplikasi tanpa rilis, atau tanpa tanda tangan, akan dilewati dengan peringatan. Bundel tersebut ditempatkan di prepackaged_plugins/ dalam arsip.

Paket .deb dan .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> mengubah arsip rilis menjadi paket .deb dan .rpm all-in-one, menggunakan nfpm. Panduan admin menjelaskan apa yang dipasang: lihat Pemasangan paket .deb atau .rpm.

Alur kerja rilis

Alur kerja antimatter-release.yml di repositori server melakukan semua ini di GitHub: pada tag v*, alur kerja ini membangun arsip dan paket untuk amd64 dan arm64, dengan SHA256SUMS, dan menerbitkannya sebagai rilis GitHub untuk tag tersebut (rilis praproduksi untuk versi dengan -). Jika dijalankan secara manual, alur kerja ini memberi nomor build 0.9.0-dev.<run> dan menyimpan file sebagai artefak alur kerja. Setiap repositori aplikasi memiliki alur kerja release.yml yang menerbitkan bundel yang ditandatanganinya dengan cara yang sama.

Gambar Docker

Repositori antimatter-docker membangun gambar yang dipublikasikan, yaitu server beserta aplikasinya, sepenuhnya di dalam 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

Diperlukan Docker dengan buildx, Python 3, git, dan gpg, sekitar 16 GB RAM dan 30 GB ruang disk. Hasilnya dimuat sebagai ghcr.io/antimatterchat/antimatter:dev; cobalah dengan ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json mencantumkan aplikasi dan versi yang dibangun, dan README repositori menjelaskan variannya.

build-all.sh menandatangani aplikasi bawaan dengan kunci penandatanganan Antimatter, dan proses pembuatan image menolak aplikasi yang tidak ditandatangani. Tanpa kunci privat tersebut, yang hanya dimiliki oleh pemelihara, jalankan langkah-langkah awal secara terpisah: scripts/fetch-sources.sh, scripts/build-plugins.sh (bundle aplikasi di out/plugins/) dan scripts/build-server.sh (arsip server di out/server/).

Pembangunan dan memori

Antarmuka web adalah build webpack yang besar, dan kehabisan memori adalah kegagalan build yang paling umum.

  • npm run build membangun antarmuka klasik dan Fusion satu per satu, bukan bersamaan, untuk menjaga puncak penggunaan tetap rendah. Jangan jalankan keduanya secara paralel sendiri.
  • Minifier memulai satu worker per prosesor. Pada mesin dengan banyak inti tetapi sedikit memori, batasi prosesor yang dilihat oleh build: taskset -c 0-5 npm run build.
  • Jika Node kehabisan heap, naikkan batasnya: NODE_OPTIONS=--max-old-space-size=6144. Build Docker menggunakan nilai ini (BUILD_NODE_OPTIONS di build.env).
  • Hindari menjalankan suite pengujian server lengkap, build web, dan build Docker secara bersamaan di mesin kecil.

Aplikasi

Setiap aplikasi (plugin) memiliki repositori dan Makefile-nya sendiri; make dist membangun bundlenya. Lihat Membangun, menginstal, dan men-debug.

Aplikasi desktop

Aplikasi desktop adalah aplikasi Electron. Dengan Node.js 24 atau lebih baru:

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)

Pengaturan saat kompilasi, seperti server yang dikonfigurasi sebelumnya, ada di src/common/config/buildConfig.ts. Tanpa sertifikat Apple, setel AM_MAC_ADHOC_SIGN=true untuk menandatangani aplikasi macOS secara ad hoc, tanpa notarisasi: Mac dengan Apple silicon menolak kode yang tidak ditandatangani. Alur kerja release.yml di repositori membangun paket tanpa tanda tangan untuk Linux, Windows, dan macOS pada tag v*.

Aplikasi seluler

Aplikasi seluler adalah aplikasi React Native; README-nya mencantumkan perintah (npm run ios, npm run android). Untuk membangun salinan Anda sendiri, Anda juga membutuhkan kunci penandatanganan Anda sendiri, proyek Firebase untuk notifikasi Android, kunci APNs untuk iOS, dan proxy push yang menyimpan kredensial tersebut. Alur kerja release.yml di repositori membangun APK dan AAB Android serta .ipa iOS tanpa tanda tangan pada tag v*, tanpa akun toko; README-nya mencantumkan rahasia yang menandatangani build Android dan mengatur Firebase.