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:

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

  1. Fork repositori dan cawangan dari main.
  2. Hadkan setiap permintaan tarikan kepada satu perubahan. Permintaan tarikan yang kecil akan disemak dengan lebih pantas.
  3. Ikuti gaya kod di sekeliling anda, dan tambah atau kemas kini ujian di mana ia masuk akal.
  4. Huraikan apa yang anda ubah dan mengapa, serta pautkan isu yang diperbaiki: Fixes AntimatterChat/community#123.
  5. 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-style dalam server/ sebelum menolak.
  • Jangan laksanakan go mod tidy secara langsung; laksanakan make modules-tidy.
  • Dalam laluan permintaan, log dengan penganalisis permintaan. Dalam lapisan storan, ambil request.CTX, bukan context.Context.
  • Titik akhir API baharu diletakkan dalam server/channels/api4, dengan jenisnya dalam server/public/model dan, idealnya, satu kaedah dalam model.Client4 dan dalam klien TypeScript.

Antara muka web (TypeScript dan React)

  • Laksanakan make check-style dan make check-types dalam webapp/.
  • 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 dalam webapp/fusion/src/fusion/styles. Mereka membina nama kelas dengan pembantu am() dan menggunakan token reka bentuk Fusion; ikuti fail di sebelah anda.
  • Jangan tambah global window.* baharu untuk aplikasi. Utiliti berhadapan aplikasi baharu diletakkan di bawah window.WebappUtils, seperti yang diterangkan dalam webapp/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

  1. 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 daripada defaultMessage.
  2. Jalankan make i18n-extract dalam webapp/ (atau npm run i18n-extract dalam webapp/fusion atau webapp/channels). Ia akan mengemas kini src/i18n/en.json pakej tersebut.
  3. Isi description bagi entri baharu dalam en.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

  1. Gunakan ID dalam kod, contohnya model.NewAppError(…, "app.community_attributes.invalid.app_error", …) atau i18n.T("…").
  2. Jalankan make i18n-extract dalam server/. Ia akan menambah ID ke server/i18n/en.json dalam susunan yang betul.
  3. Tuliskan translation dalam bahasa Inggeris dan description bagi 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

Jangan sesekali melaporkan masalah keselamatan dalam isu, perbincangan, atau permintaan tarikan (pull request) yang awam.

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/ dan webapp/) adalah di bawah Lesen Apache 2.0. Lihat LICENSE.txt dan NOTICE.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 Dockerfile miliknya, 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.