Pag-ambag

Malugod ang mga bug report, ideya, pagsasalin, dokumentasyon, at code. Inilalarawan ng pahinang ito kung saan makikipag-usap, paano magpadala ng pagbabago, ang mga konbensyon na sinusunod ng code, at ang mga patakaran para sa mga problema sa seguridad at lisensya.

Saan makikipag-usap

Nagsisimula ang lahat sa community repository, anu-ano ang bahagi ng Antimatter na tinutukoy:

  • Mga bug at hinihinging feature: magbukas ng isang issue at piliin ang Bug report, Feature request, o Plugin or integration request. Hanapin muna ang mga umiiral na issue; kung nandoon ang iyong, magdagdag ng thumbs-up o ang mga detalye mo.
  • Mga tanong at ideya: ang Discussions, sa mga kategorya ng Q&A o Ideas.
  • Bago ang isang mas malaking pagbabago, magbukas ng isang issue o diskusyon upang makapagkasundo muna sa abot ng pagbabago. Nakakatipid ito ng pull request na hindi maaaring i-merge nang ganito.

Ang mga issue na may label na good first issue at help wanted ay magandang punto upang magsimula. Sabihin sa isang comment na ikaw ang nagtatrabaho dito. Ang mga bagong issue ay may label na status/triage, tapos status/accepted, status/planned o status/wontfix. Mananatili sa community repository ang mga issue, anuman ang paksa: hindi tinatanggap ng mga code repository ang mga issue. Ang mga planong gawain ay nasa Antimatter roadmap.

Mga repository at branch

Nasa AntimatterChat organisation ang code; ang Saan nasa code ang naglilista ng mga repository. Sa bawat repository:

  • Ang main ang default branch at naglalaman ng code ng Antimatter. Mag-branch mula dito at magpadala ng pull request dito.
  • Ang mga repository na fork mula sa Mattermost ay may upstream branch din, isang mirror ng code ng Mattermost na ginagamit upang dalhin ang mga pagbabago nito. Huwag ito gamitin bilang batayan ng trabaho.

Ang README ng bawat repository ay nagpapaliwanag kung paano ito ibuild at i-test. Para sa server at mga web interface, tingnan ang Pagbuo mula sa source; para sa mga app, Pagbuo, pag-install, at pag-debug.

Mga pull request

  1. I-fork ang repository at gumawa ng branch mula sa main.
  2. Limitahan ang bawat pull request sa isang pagbabago. Mas mabilis ma-review ang maliliit na pull request.
  3. Sundan ang estilo ng code sa paligid mo, at magdagdag o i-update ang mga test kung angkop.
  4. Ikuwento kung ano ang binago mo at bakit, at i-link ang issue na inayos nito: Fixes AntimatterChat/community#123.
  5. Siguraduhing pumasa ang mga check. Ma-review ng isang maintainer ang pull request at maaaring humingi ng mga pagbabago.

Sa repository ng server, punan ang template ng pull request: ang Buod, at ang bloke ng Release Note, na dapat palaging nandoon. Isulat ang NONE kung ang pagbabago ay hindi nakakaapekto sa API, configuration, database schema, o makikita na pag-uugali.

Sa pamamagitan ng pag-contribute, sumasang-ayon ka na ang iyong kontribusyon ay lisensyado alinsagad sa lisensya ng repository na binibigyan mo ng tulong.

Mga Commit at Estilo ng Code

Mga Commit

Ang mga commit message sa history ay isang maikling pangungusap na nagsasabi ng pagbabago, sa sentence case at walang tuldok sa dulo. Ang mga pagbabago sa isang bahagi ay may prefix nito, halimbawa Fusion: a compact conversation header on phones o Server: community attributes, and admin-only user attributes. Isang commit bawat pagbabago; ipaliwanag ang mga dahilan sa body kung hindi malinaw.

Server (Go)

  • Patakbuhin ang make check-style sa server/ bago i-push.
  • Huwag patakbuhin ang go mod tidy nang direkta; patakbuhin ang make modules-tidy.
  • Sa mga request path, mag-log gamit ang logger ng request. Sa store layer, kunin ang request.CTX, hindi ang context.Context.
  • Ang mga bagong API endpoint ay nasa server/channels/api4, kasama ang kanilang types sa server/public/model at, sa ideal, isang method sa model.Client4 at sa TypeScript client.

Mga Web Interface (TypeScript at React)

  • Patakbuhin ang make check-style at make check-types sa webapp/.
  • Ang classic interface ay sumusunod sa webapp/STYLE_GUIDE.md: functional components, hooks para sa Redux, theme variables para sa mga kulay, at accessible markup.
  • Ang mga component ng Fusion ay nasa webapp/fusion/src/fusion, kasama ang kanilang styles sa webapp/fusion/src/fusion/styles. Nagbu-build sila ng class names gamit ang am() helper at gumagamit ng design tokens ng Fusion; sundan ang mga file na nasa tabi mo.
  • Huwag magdagdag ng bagong window.* globals para sa mga app. Ang mga bagong utility para sa app ay nasa ilalim ng window.WebappUtils, ayon sa paliwanag sa webapp/AGENTS.md.
  • Ang pagbabago sa app registry (plugins/registry.ts) ay karaniwang kailangan sa mga kopya ng parehong interface.

Mga Pagsasalin

Ang Antimatter at ang mga kasamang app nito ay ipinagpatuloy sa 37 wika. Ang mga tagapag-ambag ang nagdadagdag ng mga English string; ang ibang mga wika ay inu-update sa mga batch.

Pagdaragdag ng string sa mga web interface

  1. Isulat ito gamit ang ID at literal na English text: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) o <FormattedMessage id='…' defaultMessage='…'/>. Ang English na ipapakita sa app ay galing sa defaultMessage.
  2. Patakbuhin ang make i18n-extract sa webapp/ (o npm run i18n-extract sa webapp/fusion o webapp/channels). Ito ay inu-update ang src/i18n/en.json ng package na iyon.
  3. Punan ang description ng bagong entry sa en.json: saan lumalabas ang string at paano ito ginagamit. Ito ang konteksto na ginagamit ng mga translator, tao o makina.

Ang npm run i18n-extract:check ay mababigo kapag ang en.json ay hindi na up-to-date sa code.

Pagdaragdag ng string sa server

  1. Gumamit ng ID sa code, halimbawa model.NewAppError(…, "app.community_attributes.invalid.app_error", …) o i18n.T("…").
  2. Patakbuhin ang make i18n-extract sa server/. Idadagdag nito ang ID sa server/i18n/en.json sa tamang pagkakasunod.
  3. Isulat ang English translation at description ng bagong entry.

Ibang mga wika

Bawat wika ay may sariling file katabi ng en.json (fr.json, pt-BR.json, zh-TW.json…). Para mag-report ng maling pagsasalin, buksan ang isang issue sa community repository na may wika, text, at kung saan ito lumalabas.

Ang mga kasamang app ay nagpapanatili ng kanilang mga string sa webapp/i18n/; tingnan ang Translations sa pahina ng apps.

Dokumentasyon at website na ito

Ang website na ito at ang dokumentasyon nito ay nasa antimatter.chat repository. Ang mga pahina ay mga HTML fragment sa src/pages/; ang python3 src/build.py ang nagbu-build ng site. Ang mga pagtutayo at kulang na paliwanag ay malugod na tinatanggap bilang mga issue o pull request.

Mga problema sa seguridad

Huwag mag-report ng problema sa seguridad sa pampublikong issue, diskusyon, o pull request.

Iulat ito nang pribado gamit ang private vulnerability reporting ng GitHub: buksan ang Seguridad tab ng affected repository (halimbawa, ang server) at piliin ang Report a vulnerability. Kung hindi alam kung alin ang affected repository, iulat ito sa community repository. Isama ang component at version nito, ang maaaring gawin ng attacker, kung paano ito ma-reproduce, at ang anumang configuration na nakadepende dito.

Sasagutin ito ng mga maintainer, mananatili kang na-update habang nilalutas ito, at ilalabas ang advisory kapag lumabas na ang fixed release. Paki-bigyan sila ng makatwirang oras bago ilahad ang problema. Ang mga solusyon ay idadagdag sa pinakabagong release. Ang buong policy ay nasa security policy.

Mga Lisensya

  • Ang server ay nasa ilalim ng GNU Affero General Public License v3.0 (AGPL v3). Sa parehong repository, ang mga admin tools at configuration files (server/templates/, server/i18n/, server/public/ at webapp/) ay nasa ilalim ng Apache License 2.0. Tingnan ang LICENSE.txt at NOTICE.txt.
  • Mga App: Ang mga sariling app ng Antimatter, tulad ng Polls, ay nasa ilalim ng AGPL v3; ang mga app na fork mula sa Mattermost ay panatilihin ang orihinal na lisensya. Bawat repository ay sinasabi kung alin sa LICENSE file nito.
  • Ang desktop at mobile apps ay nasa ilalim ng Apache License 2.0. Ang Docker repository ay nasa ilalim ng Apache License 2.0, maliban sa Dockerfile, na nasa ilalim ng AGPL v3.

Ang ibig sabihin ng AGPL ay kung gagawin mong tumakbo ang modified na Antimatter server para sa iba sa pamamagitan ng network, dapat mong ibigay sa kanila ang source code ng iyong mga pagbabago. Ang Antimatter ay batay sa Mattermost; hindi ito may kaugnayan o pinapansin ng Mattermost, Inc.

Ang lahat ng nakikilahok ay sumusunod sa code of conduct.