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:

  • main adalah 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

  1. Fork repositori dan buat cabang dari main.
  2. Bataslah setiap pull request pada satu perubahan. Pull request yang kecil ditinjau lebih cepat.
  3. Ikuti gaya kode di sekitar Anda, dan tambahkan atau perbarui tes di tempat yang masuk akal.
  4. Jelaskan apa yang Anda ubah dan mengapa, serta tautkan ke masalah yang diperbaiki: Fixes AntimatterChat/community#123.
  5. 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-style di server/ sebelum push.
  • Jangan pernah jalankan go mod tidy secara langsung; jalankan make modules-tidy.
  • Di jalur permintaan (request paths), catat log dengan logger permintaan. Di lapisan store, gunakan request.CTX, bukan context.Context.
  • Endpoint API baru ditempatkan di server/channels/api4, dengan tipe-tipenya di server/public/model dan, idealnya, sebuah metode di model.Client4 dan di klien TypeScript.

Antarmuka web (TypeScript dan React)

  • Jalankan make check-style dan make check-types di webapp/.
  • 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 di webapp/fusion/src/fusion/styles. Mereka membangun nama kelas dengan helper am() 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 bawah window.WebappUtils, seperti dijelaskan di webapp/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

  1. 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 dari defaultMessage.
  2. Jalankan make i18n-extract di webapp/ (atau npm run i18n-extract di webapp/fusion atau webapp/channels). Perintah ini memperbarui src/i18n/en.json dari paket tersebut.
  3. Isi description dari entri baru di en.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

  1. Gunakan ID di kode, misalnya model.NewAppError(…, "app.community_attributes.invalid.app_error", …) atau i18n.T("…").
  2. Jalankan make i18n-extract di server/. Perintah ini menambahkan ID ke server/i18n/en.json dengan urutan yang benar.
  3. Tuliskan translation bahasa Inggris dan description dari 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

Jangan pernah melaporkan masalah keamanan melalui issue, diskusi, atau pull request yang bersifat publik.

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/ dan webapp/) berada di bawah Apache License 2.0. Lihat LICENSE.txt dan NOTICE.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.