Sumbangan
Laporan pepijat, idea, terjemahan, dokumentasi dan kod semuanya dialu-alukan. Halaman ini menerangkan tempat untuk berbincang, cara menghantar perubahan, konvensyen yang diikuti oleh kod, serta peraturan untuk masalah keselamatan dan lesen.
Tempat untuk berbincang
Semuanya bermula di repositori komuniti, apa jua bahagian Antimatter yang dibincangkan:
- Pepijat dan permintaan ciri: buka isu dan pilih Laporan pepijat, Permintaan ciri, atau Permintaan plugin atau integrasi. Cari isu sedia ada dahulu; jika isu anda ada, tambah tanda jempol ke atas atau butiran anda.
- Soalan dan idea: Perbincangan, dalam kategori Soalan & Jawapan atau Idea.
- Sebelum perubahan besar, buka isu atau perbincangan untuk bersetuju dengan pendekatan terlebih dahulu. Ia menjimatkan permintaan tarikan yang tidak boleh digabungkan dalam keadaan semasa.
Isu yang dilabel good first issue dan help wanted adalah tempat yang baik untuk bermula. Nyatakan dalam komen bahawa anda sedang bekerja pada salah satu isu tersebut. Isu baharu dilabel status/triage, kemudian status/accepted, status/planned atau status/wontfix. Isu kekal dalam repositori komuniti tanpa mengira isinya: repositori kod tidak menerima isu. Kerja yang dirancang terdapat dalam peta jalan Antimatter.
Repositori dan cawangan
Kod ada di organisasi AntimatterChat; Lokasi kod menyenaraikan repositori. Dalam setiap repositori:
mainialah cawangan lalai dan memegang kod Antimatter. Cawang daripadanya dan hantar permintaan tarikan kepadanya.- Repositori yang dicabang (fork) daripada Mattermost juga mempunyai cawangan
upstream, iaitu cerminan kod Mattermost yang digunakan untuk membawa masuk perubahan mereka. Jangan jadikan kerja anda berdasarkan cawangan ini.
README setiap repositori menerangkan cara membina dan mengujinya. Untuk pelayan dan antara muka web, lihat Membina daripada sumber; untuk aplikasi, Bina, pasang dan debug.
Permintaan tarikan
- Fork repositori dan cawangan dari
main. - Hadkan setiap permintaan tarikan kepada satu perubahan. Permintaan tarikan yang kecil akan disemak dengan lebih pantas.
- Ikuti gaya kod di sekeliling anda, dan tambah atau kemas kini ujian di mana ia masuk akal.
- Huraikan apa yang anda ubah dan mengapa, serta pautkan isu yang diperbaiki:
Fixes AntimatterChat/community#123. - Pastikan semakan lulus. Seorang penyelenggara akan menyemak permintaan tarikan dan mungkin meminta perubahan.
Dalam repositori pelayan, isi templat permintaan tarikan: Ringkasan, dan blok Catatan Rilis, yang mesti sentiasa ada. Tulis NONE di dalamnya jika perubahan tidak menyentuh API, konfigurasi, skema pangkalan data atau tingkah laku yang kelihatan.
Dengan menyumbang, anda bersetuju bahawa sumbangan anda dilisensikan di bawah lesen repositori yang anda sumbangkan.
Komit dan gaya kod
Komit
Mesej komit dalam sejarah ialah satu ayat pendek yang menyatakan perubahan, dalam kes ayat dan tanpa titik penuh di akhir. Perubahan kepada satu bahagian diawalkan dengan bahagian tersebut, contohnya Fusion: a compact conversation header on phones atau Server: community attributes, and admin-only user attributes. Satu komit untuk setiap perubahan; terangkan sebabnya dalam badan jika tidak jelas.
Pelayan (Go)
- Laksanakan
make check-styledalamserver/sebelum menolak. - Jangan laksanakan
go mod tidysecara langsung; laksanakanmake modules-tidy. - Dalam laluan permintaan, log dengan penganalisis permintaan. Dalam lapisan storan, ambil
request.CTX, bukancontext.Context. - Titik akhir API baharu diletakkan dalam
server/channels/api4, dengan jenisnya dalamserver/public/modeldan, idealnya, satu kaedah dalammodel.Client4dan dalam klien TypeScript.
Antara muka web (TypeScript dan React)
- Laksanakan
make check-styledanmake check-typesdalamwebapp/. - Antara muka klasik mengikuti
webapp/STYLE_GUIDE.md: komponen berfungsi, hook untuk Redux, pemboleh ubah tema untuk warna, penandaan boleh diakses. - Komponen Fusion berada dalam
webapp/fusion/src/fusion, dengan gaya mereka dalamwebapp/fusion/src/fusion/styles. Mereka membina nama kelas dengan pembantuam()dan menggunakan token reka bentuk Fusion; ikuti fail di sebelah anda. - Jangan tambah global
window.*baharu untuk aplikasi. Utiliti berhadapan aplikasi baharu diletakkan di bawahwindow.WebappUtils, seperti yang diterangkan dalamwebapp/AGENTS.md. - Sebarang perubahan pada daftar aplikasi (
plugins/registry.ts) biasanya perlu dibuat pada kedua-dua salinan antara muka.
Terjemahan
Antimatter dan aplikasi terikatnya diterjemahkan ke dalam 37 bahasa. Penyumbang menambah rentetan dalam bahasa Inggeris; bahasa lain dikemas kini secara berperingkat.
Menambah rentetan ke antara muka web
- Tuliskan dengan ID dan teks literal dalam bahasa Inggeris:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})atau<FormattedMessage id='…' defaultMessage='…'/>. Bahasa Inggeris yang dipaparkan dalam aplikasi berasal daripadadefaultMessage. - Jalankan
make i18n-extractdalamwebapp/(ataunpm run i18n-extractdalamwebapp/fusionatauwebapp/channels). Ia akan mengemas kinisrc/i18n/en.jsonpakej tersebut. - Isi
descriptionbagi entri baharu dalamen.json: di mana rentetan itu muncul dan bagaimana ia digunakan. Ia adalah konteks yang digunakan oleh penterjemah, sama ada manusia atau mesin.
npm run i18n-extract:check akan gagal jika en.json tidak sepadan dengan kod.
Menambah rentetan ke pelayan
- Gunakan ID dalam kod, contohnya
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)ataui18n.T("…"). - Jalankan
make i18n-extractdalamserver/. Ia akan menambah ID keserver/i18n/en.jsondalam susunan yang betul. - Tuliskan
translationdalam bahasa Inggeris dandescriptionbagi entri baharu.
Bahasa lain
Setiap bahasa mempunyai failnya sendiri di sebelah en.json (fr.json, pt-BR.json, zh-TW.json…). Untuk melaporkan terjemahan yang salah, buka isu dalam repositori komuniti dengan menyatakan bahasa, teks, dan di mana ia muncul.
Aplikasi terikat menyimpan rentetannya dalam webapp/i18n/; lihat Terjemahan dalam halaman aplikasi.
Dokumentasi dan laman web ini
Laman web ini dan dokumentasinya terdapat dalam repositori antimatter.chat. Halaman adalah fragmen HTML dalam src/pages/; python3 src/build.py membina laman web. Pembetulan dan penjelasan yang hilang dialu-alukan sebagai isu atau permintaan tarikan (pull request).
Masalah keselamatan
Laporkan secara peribadi menggunakan pelaporan kerentanan peribadi GitHub: buka tab Security (Keselamatan) repositori yang terjejas (contohnya pelayan) dan pilih Report a vulnerability (Laporkan kerentanan). Jika anda tidak pasti repositori mana yang terjejas, laporkan pada repositori komuniti. Sertakan komponen dan versinya, apa yang boleh dilakukan oleh penyerang, cara untuk mereplikasinya, dan sebarang tetapan yang bergantung padanya.
Penjaga akan menjawab di sana, memaklumkan kemas kini kepada anda semasa mereka membetulkannya, dan menerbitkan nasihat (advisory) sebaik sahaja keluaran yang dibetulkan dilancarkan. Sila beri mereka masa yang munasabah sebelum mendedahkan masalah tersebut. Pbaikan akan dimasukkan ke dalam keluaran terkini. Dasar keselamatan penuh terdapat dalam dasar keselamatan.
Lesen
- Pelayan adalah di bawah Lesen Am Awam GNU v3.0 (AGPL v3). Dalam repositori yang sama, alat pentadbiran dan fail tetapan (
server/templates/,server/i18n/,server/public/danwebapp/) adalah di bawah Lesen Apache 2.0. LihatLICENSE.txtdanNOTICE.txt. - Aplikasi: Aplikasi milik Antimatter sendiri, seperti Undian, adalah di bawah AGPL v3; aplikasi yang bercabang (fork) dari Mattermost mengekalkan lesen asalnya. Setiap repositori menyatakan lesen yang digunakan dalam fail
LICENSE. - Aplikasi desktop dan mudah alih adalah di bawah Lesen Apache 2.0. Repositori Docker adalah di bawah Lesen Apache 2.0, kecuali
Dockerfilemiliknya, yang berada di bawah AGPL v3.
AGPL bermaksud bahawa jika anda menjalankan pelayan Antimatter yang diubah suai untuk orang lain melalui rangkaian, anda mesti menawarkan kod sumber perubahan anda kepada mereka. Antimatter berasaskan pada Mattermost; ia tidak berafiliasi atau disokong oleh Mattermost, Inc.
Semua yang mengambil bahagian mematuhi kod tingkah laku.