Contribuție
Raporturile de erori, ideile, traducerile, documentația și codul sunt toate binevenite. Această pagină explică unde să discuți, cum să trimiți o modificare, convențiile pe care le urmează codul și regulile pentru problemele de securitate și licențe.
Unde să discuți
Totul pornește din depozitul comunității, indiferent de ce parte a Antimatter este vorba:
- Erori și cereri de funcționalități: deschide o problemă și alege Raport de eroare, Cerere de funcționalitate sau Cerere de plugin sau integrare. Caută mai întâi problemele existente; dacă a ta se află acolo, adaugă un „deget mare în sus” sau detaliile tale.
- Întrebări și idei: Discuțiile, în categoriile Întrebări și răspunsuri sau Idei.
- Înainte de o modificare mai mare, deschide o problemă sau o discuție pentru a fi de acord cu abordarea. Astfel eviți o cerere de preluare care nu poate fi integrată în forma în care se află.
Problemele etichetate cu good first issue și help wanted sunt un punct de plecare bun. Menționează într-un comentariu că lucrezi la una dintre ele. Problemele noi primesc eticheta status/triage, apoi status/accepted, status/planned sau status/wontfix. Problemele rămân în depozitul comunității, indiferent de subiect: depozitele de cod nu acceptă probleme. Lucrările planificate se află în Antimatter roadmap.
Depozite și ramuri
Codul se află în organizația AntimatterChat; Unde se află codul listează depozitele. În fiecare depozit:
maineste ramura implicită și conține codul Antimatter. Creează ramuri din ea și trimite cereri de preluare către ea.- Depozitele bifurcate (forked) din Mattermost au și o ramură
upstream, o oglindă a codului Mattermost, folosită pentru a prelua modificările acestuia. Nu bazați-vă lucrările pe ea.
README-ul fiecărui depozit explică cum să îl construiți și să îl testați. Pentru server și interfețele web, consultați Construire din sursă; pentru aplicații, Construire, instalare și depanare.
Cereri de preluare
- Fork repository-ul și creează o ramură din
main. - Limitează fiecare pull request la o singură modificare. Pull request-urile mici sunt verificate mai rapid.
- Respectă stilul codului din jurul tău și adaugă sau actualizează testele acolo unde este relevant.
- Descrie ce ai modificat și de ce, și adaugă un link către problema pe care o rezolvi:
Fixes AntimatterChat/community#123. - Asigură-te că verificările trec. Un menținător va verifica pull request-ul și poate solicita modificări.
În repository-ul serverului, completează șablonul pull request-ului: un Rezumat și blocul Notă de versiune, care trebuie să fie întotdeauna prezent. Scrie NONE în acesta dacă modificarea nu afectează API-ul, configurația, schema bazei de date sau comportamentul vizibil.
Prin contribuție, ești de acord că contribuția ta este licențiată sub licența repository-ului la care contribuie.
Commits și stilul codului
Commits
Mesajele de commit din istoric sunt o frază scurtă care spune ce se modifică, cu prima literă mare și fără punct final. Modificările la o anumită parte sunt prefixate cu numele acesteia, de exemplu Fusion: a compact conversation header on phones sau Server: community attributes, and admin-only user attributes. Un commit per modificare; explică motivele în corpul mesajului dacă nu sunt evidente.
Server (Go)
- Rulează
make check-styleînserver/înainte de a face push. - Nu rula niciodată
go mod tidydirect; ruleazămake modules-tidy. - În căile de cerere, înregistrează în jurnal (log) folosind logger-ul cererii. În stratul de stocare, primește un
request.CTX, nu uncontext.Context. - Endpoint-urile API noi se adaugă în
server/channels/api4, cu tipurile lor înserver/public/modelși, ideal, o metodă înmodel.Client4și în clientul TypeScript.
Interfețele web (TypeScript și React)
- Rulează
make check-styleșimake check-typesînwebapp/. - Interfața clasică urmează
webapp/STYLE_GUIDE.md: componente funcționale, hooks pentru Redux, variabile de temă pentru culori, markup accesibil. - Componentele Fusion se află în
webapp/fusion/src/fusion, cu stilurile lor înwebapp/fusion/src/fusion/styles. Construiesc nume de clase cu helper-ulam()și folosesc tokenii de design ai Fusion; urmează fișierele din vecinătatea ta. - Nu adăuga noi globale
window.*pentru aplicații. Utilitățile noi destinate aplicațiilor se adaugă subwindow.WebappUtils, așa cum explicăwebapp/AGENTS.md. - O modificare în registrul aplicațiilor (
plugins/registry.ts) aparține de obicei copiilor ambelor interfețe.
Traduceri
Antimatter și aplicațiile incluse sunt traduse în 37 de limbi. Contribuitorii adaugă șirurile în engleză; celelalte limbi sunt actualizate în loturi.
Adăugarea unui șir în interfețele web
- Scrie-l cu un ID și un text literal în engleză:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})sau<FormattedMessage id='…' defaultMessage='…'/>. Textul în engleză afișat în aplicație provine dindefaultMessage. - Rulează
make i18n-extractînwebapp/(saunpm run i18n-extractînwebapp/fusionsauwebapp/channels). Actualizeazăsrc/i18n/en.jsonal acelui pachet. - Completează
descriptional noii intrări înen.json: unde apare șirul și cum este folosit. Este contextul de lucru pentru traducători, fie ei umani sau mașini.
npm run i18n-extract:check eșuează dacă en.json nu este actualizat în raport cu codul.
Adăugarea unui șir în server
- Folosește un ID în cod, de exemplu
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)saui18n.T("…"). - Rulează
make i18n-extractînserver/. Adaugă ID-ul înserver/i18n/en.jsonîn ordinea corectă. - Scrie
translationîn engleză șidescriptionpentru noua intrare.
Alte limbi
Fiecare limbă are propriul fișier lângă en.json (fr.json, pt-BR.json, zh-TW.json…). Pentru a semnala o traducere incorectă, deschide o problemă în depozitul comunității, specificând limba, textul și locul unde apare.
Aplicațiile incluse își păstrează șirurile în webapp/i18n/; vezi Traduceri în pagina aplicațiilor.
Documentație și acest site
Acest site și documentația sa se află în depozitul antimatter.chat. Paginile sunt fragmente HTML în src/pages/; python3 src/build.py construiește site-ul. Corecțiile și explicațiile lipsă sunt binevenite ca probleme sau cereri de preluare (pull requests).
Probleme de securitate
Raportează-l în mod privat prin sistemul de raportare a vulnerabilităților private de la GitHub: deschideți fila Securitate a depozitului afectat (de exemplu serverul) și alegeți Report a vulnerability. Dacă nu știți ce depozit este afectat, raportați-l în depozitul comunității. Includeți componenta și versiunea acesteia, ce ar putea face un atacator, cum se poate reproduce problema și de ce configurație depinde.
Mentorii răspund acolo, vă țin la curent în timp ce o repară și publică un comunicat de securitate odată ce este disponibilă o versiune corectată. Vă rugăm să le acordați un timp rezonabil înainte de a divulga problema. Corecțiile intră în cea mai recentă versiune. Politica completă se găsește în politica de securitate.
Licențe
- Serverul este sub licența GNU Affero General Public License v3.0 (AGPL v3). În același depozit, instrumentele de administrare și fișierele de configurare (
server/templates/,server/i18n/,server/public/șiwebapp/) sunt sub licența Apache License 2.0. ConsultațiLICENSE.txtșiNOTICE.txt. - Aplicațiile: aplicațiile proprii Antimatter, cum ar fi Sondaje, sunt sub AGPL v3; aplicațiile derivate din Mattermost își păstrează licența originală. Fiecare depozit specifică acest lucru în fișierul
LICENSE. - Aplicațiile desktop și mobile sunt sub licența Apache License 2.0. Depozitul Docker este sub licența Apache License 2.0, cu excepția
Dockerfile, care este sub AGPL v3.
AGPL înseamnă că, dacă rulați un server Antimatter modificat pentru alte persoane prin rețea, trebuie să le oferiți codul sursă al modificărilor dumneavoastră. Antimatter se bazează pe Mattermost; nu este afiliată sau susținută de Mattermost, Inc.
Toți participanții respectă codul de conduită.