Kontribusi
Laporan bug, ide, terjemahan, dokumentasi, dan kode semuanya diterima. Halaman ini menjelaskan tempat untuk berdiskusi, cara mengirim perubahan, konvensi yang diikuti kode, serta aturan untuk masalah keamanan dan lisensi.
Tempat untuk berdiskusi
Semuanya dimulai di repositori komunitas, apa pun bagian Antimatter yang dibicarakan:
- Bug dan permintaan fitur: buka issue dan pilih Laporan Bug, Permintaan Fitur, atau Permintaan Plugin atau Integrasi. Cari issue yang sudah ada terlebih dahulu; jika issue Anda sudah ada, tambahkan jempol ke atas atau detail Anda.
- Pertanyaan dan ide: Diskusi, di kategori Tanya Jawab atau Ide.
- Sebelum perubahan besar, buka issue atau diskusi untuk menyepakati pendekatan terlebih dahulu. Ini menghemat pull request yang tidak bisa digabungkan apa adanya.
Isu yang diberi label good first issue dan help wanted adalah tempat yang baik untuk memulai. Sebutkan dalam komentar bahwa Anda sedang mengerjakan salah satunya. Isu baru diberi label status/triage, lalu status/accepted, status/planned, atau status/wontfix. Isu tetap berada di repositori komunitas apa pun isinya: repositori kode tidak menerima isu. Pekerjaan yang direncanakan ada di peta jalan Antimatter.
Repositori dan cabang
Kode ada di organisasi AntimatterChat; Di mana kode berada mencantumkan repositori. Di setiap repositori:
mainadalah cabang default dan menyimpan kode Antimatter. Buat cabang darinya dan kirim pull request ke sana.- Repositori yang di-fork dari Mattermost juga memiliki cabang
upstream, cermin kode Mattermost yang digunakan untuk membawa perubahan mereka. Jangan jadikan dasar pekerjaan Anda di sana.
README setiap repositori menjelaskan cara membangun dan mengujinya. Untuk server dan antarmuka web, lihat Membangun dari sumber; untuk aplikasi, Membangun, menginstal, dan debug.
Pull request
- Fork repositori dan buat cabang dari
main. - Bataslah setiap pull request pada satu perubahan. Pull request yang kecil ditinjau lebih cepat.
- Ikuti gaya kode di sekitar Anda, dan tambahkan atau perbarui tes di tempat yang masuk akal.
- Jelaskan apa yang Anda ubah dan mengapa, serta tautkan ke masalah yang diperbaiki:
Fixes AntimatterChat/community#123. - Pastikan semua pemeriksaan lulus. Penanggung jawab (maintainer) akan meninjau pull request dan mungkin meminta perubahan.
Di repositori server, isi templat pull request: sebuah Ringkasan, dan blok Catatan Rilis, yang harus selalu ada. Tulis NONE di dalamnya jika perubahan tidak menyentuh API, konfigurasi, skema database, atau perilaku yang terlihat.
Dengan berkontribusi, Anda menyetujui bahwa kontribusi Anda dilisensikan di bawah lisensi repositori tempat Anda berkontribusi.
Commit dan gaya kode
Commit
Pesan commit dalam riwayat adalah satu kalimat pendek yang menyatakan apa yang berubah, dengan huruf besar di awal kalimat dan tanpa titik di akhir. Perubahan pada satu bagian diberi awalan bagian tersebut, misalnya Fusion: a compact conversation header on phones atau Server: community attributes, and admin-only user attributes. Satu commit per perubahan; jelaskan alasannya di bagian tubuh (body) jika tidak jelas.
Server (Go)
- Jalankan
make check-stylediserver/sebelum push. - Jangan pernah jalankan
go mod tidysecara langsung; jalankanmake modules-tidy. - Di jalur permintaan (request paths), catat log dengan logger permintaan. Di lapisan store, gunakan
request.CTX, bukancontext.Context. - Endpoint API baru ditempatkan di
server/channels/api4, dengan tipe-tipenya diserver/public/modeldan, idealnya, sebuah metode dimodel.Client4dan di klien TypeScript.
Antarmuka web (TypeScript dan React)
- Jalankan
make check-styledanmake check-typesdiwebapp/. - Antarmuka klasik mengikuti
webapp/STYLE_GUIDE.md: komponen fungsional, hooks untuk Redux, variabel tema untuk warna, dan markup yang aksesibel. - Komponen Fusion berada di
webapp/fusion/src/fusion, dengan gaya-gayanya diwebapp/fusion/src/fusion/styles. Mereka membangun nama kelas dengan helperam()dan menggunakan token desain Fusion; ikuti file-file di sebelah file Anda. - Jangan tambahkan global
window.*baru untuk aplikasi. Utilitas baru yang menghadap aplikasi ditempatkan di bawahwindow.WebappUtils, seperti dijelaskan diwebapp/AGENTS.md. - Perubahan pada registri aplikasi (
plugins/registry.ts) biasanya perlu diterapkan pada kedua salinan antarmuka.
Terjemahan
Antimatter dan aplikasi bawaannya diterjemahkan ke dalam 37 bahasa. Kontributor menambahkan string dalam bahasa Inggris; bahasa lainnya diperbarui secara berkala.
Menambahkan string ke antarmuka web
- Tuliskan dengan ID dan teks bahasa Inggris literal:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})atau<FormattedMessage id='…' defaultMessage='…'/>. Teks bahasa Inggris yang ditampilkan di aplikasi berasal daridefaultMessage. - Jalankan
make i18n-extractdiwebapp/(ataunpm run i18n-extractdiwebapp/fusionatauwebapp/channels). Perintah ini memperbaruisrc/i18n/en.jsondari paket tersebut. - Isi
descriptiondari entri baru dien.json: di mana string tersebut muncul dan bagaimana penggunaannya. Ini adalah konteks yang digunakan penerjemah, baik manusia maupun mesin.
npm run i18n-extract:check akan gagal jika en.json tidak sesuai dengan kode.
Menambahkan string ke server
- Gunakan ID di kode, misalnya
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)ataui18n.T("…"). - Jalankan
make i18n-extractdiserver/. Perintah ini menambahkan ID keserver/i18n/en.jsondengan urutan yang benar. - Tuliskan
translationbahasa Inggris dandescriptiondari entri baru.
Bahasa lainnya
Setiap bahasa memiliki file tersendiri di samping en.json (fr.json, pt-BR.json, zh-TW.json…). Untuk melaporkan terjemahan yang salah, buka issue di repositori komunitas dengan menyertakan bahasa, teks, dan lokasi kemunculannya.
Aplikasi bawaan menyimpan string-nya di webapp/i18n/; lihat Terjemahan di halaman aplikasi.
Dokumentasi dan situs web ini
Situs web ini dan dokumentasinya ada di repositori antimatter.chat. Halaman-halaman berupa fragmen HTML di src/pages/; python3 src/build.py membangun situs. Koreksi dan penjelasan yang kurang disambut baik sebagai issue atau pull request.
Masalah keamanan
Laporkan secara privat melalui pelaporan kerentanan privat GitHub: buka tab Keamanan pada repositori yang terpengaruh (misalnya server) dan pilih Laporkan kerentanan. Jika Anda tidak tahu repositori mana yang terpengaruh, laporkan pada repositori komunitas. Sertakan komponen dan versinya, apa yang bisa dilakukan penyerang, cara mereproduksi masalah, dan konfigurasi apa pun yang menjadi andalannya.
Para pemelihara akan menjawab di sana, memberi Anda pembaruan saat mereka memperbaikinya, dan menerbitkan nasihat (advisory) begitu rilis perbaikan tersedia. Silakan beri mereka waktu yang wajar sebelum mengungkapkan masalah tersebut. Perbaikan akan dimasukkan ke dalam rilis terbaru. Kebijakan lengkapnya ada di kebijakan keamanan.
Lisensi
- Server berada di bawah GNU Affero General Public License v3.0 (AGPL v3). Dalam repositori yang sama, alat admin dan file konfigurasi (
server/templates/,server/i18n/,server/public/danwebapp/) berada di bawah Apache License 2.0. LihatLICENSE.txtdanNOTICE.txt. - Aplikasi: Aplikasi milik Antimatter, seperti Jajak Pendapat, berada di bawah AGPL v3; aplikasi yang di-fork dari Mattermost mempertahankan lisensi aslinya. Setiap repositori mencantumkan lisensinya dalam file
LICENSE. - Aplikasi desktop dan seluler berada di bawah Apache License 2.0. Repositori Docker berada di bawah Apache License 2.0, kecuali
Dockerfile-nya, yang berada di bawah AGPL v3.
AGPL berarti bahwa jika Anda menjalankan server Antimatter yang dimodifikasi untuk orang lain melalui jaringan, Anda harus menawarkan kepada mereka kode sumber dari perubahan Anda. Antimatter didasarkan pada Mattermost; tidak berafiliasi atau didukung oleh Mattermost, Inc.
Semua yang berpartisipasi mengikuti kode etik.