Contribució

Són benvinguts els informes d'errors, les idees, les traduccions, la documentació i el codi. Aquesta pàgina explica on parlar, com enviar un canvi, les convencions que segueix el codi i les regles per als problemes de seguretat i les llicències.

On parlar

Tot comença al repositori de la comunitat, sigui quina sigui la part d'Antimatter de la qual es tracti:

  • Errors i sol·licituds de funcions: obre un problema i tria Informe d'error, Sol·licitud de funció o Sol·licitud de plugin o integració. Cerca primer els problemes existents; si el teu hi és, afegeix-hi un polze amunt o els teus detalls.
  • Preguntes i idees: les discussions, a les categories de Preguntes i respostes o Idees.
  • Abans d'un canvi important, obre un problema o una discussió per acordar primer l'enfocament. Això estalvia una sol·licitud de canvi que no es pot fusionar tal com és.

Els problemes amb les etiquetes good first issue i help wanted són un bon punt de partida. Indica en un comentari que hi estàs treballant. Els problemes nous reben l'etiqueta status/triage i, a continuació, status/accepted, status/planned o status/wontfix. Els problemes es mantenen al repositori de la comunitat, independentment del seu contingut: els repositoris de codi no accepten problemes. El treball previst es troba a la roadmap d'Antimatter.

Repositoris i branques

El codi és a l'organització AntimatterChat; On viu el codi llista els repositoris. En cada repositori:

  • main és la branca per defecte i conté el codi d'Antimatter. Crea branques a partir d'aquesta i envia sol·licituds de canvi cap a ella.
  • Els repositoris bifurcats de Mattermost també tenen una branca upstream, un mirall del codi de Mattermost utilitzat per incorporar-ne els canvis. No baseïs-hi la feina.

El README de cada repositori explica com compilar-lo i provar-lo. Per al servidor i les interfícies web, consulta Compilació des del codi font; per a les aplicacions, Compilació, instal·lació i depuració.

Sol·licituds de canvi

  1. Fes una bifurcació del repositori i crea una branca a partir de main.
  2. Limita cada sol·licitud de canvis (pull request) a un sol canvi. Les sol·licituds de canvis petites es revisen més ràpid.
  3. Segueix l'estil del codi que t'envolta i afegeix o actualitza les proves quan tingui sentit.
  4. Descriu què has canviat i per què, i enllaça el problema que resol: Fixes AntimatterChat/community#123.
  5. Assegura't que les comprovacions superin. Un mantenidor revisarà la sol·licitud de canvis i pot demanar modificacions.

Al repositori del servidor, omple la plantilla de la sol·licitud de canvis: un Resum i el bloc Nota de la versió, que sempre hi ha de ser. Escriu-hi NONE quan el canvi no afecti la interfície de programació (API), la configuració, l'esquema de la base de dades o el comportament visible.

En contribuir, acceptes que la teva contribució estigui sota la llicència del repositori al qual contribueixes.

Missatges de commit i estil del codi

Missatges de commit

Els missatges de commit de l'historial són una frase curta que indica què canvia, en majúscula inicial i sense punt final. Els canvis d'una part concreta s'encapçalen amb el seu nom, per exemple Fusion: a compact conversation header on phones o Server: community attributes, and admin-only user attributes. Un commit per canvi; explica'n les raons al cos del missatge quan no són evidents.

Servidor (Go)

  • Executa make check-style a server/ abans de fer el push.
  • No executis mai go mod tidy directament; executa make modules-tidy.
  • Als camins de petició, registra amb el registrador de la petició. A la capa d'emmagatzematge, pren un request.CTX, no un context.Context.
  • Els nous punts d'entrada de la interfície de programació (API) van a server/channels/api4, amb els seus tipus a server/public/model i, idealment, un mètode a model.Client4 i al client de TypeScript.

Interfícies web (TypeScript i React)

  • Executa make check-style i make check-types a webapp/.
  • La interfície clàssica segueix webapp/STYLE_GUIDE.md: components funcionals, hooks per a Redux, variables de tema per als colors i marques accessibles.
  • Els components de Fusion estan a webapp/fusion/src/fusion, amb els seus estils a webapp/fusion/src/fusion/styles. Construeixen noms de classes amb l'auxiliar am() i utilitzen els tokens de disseny de Fusion; segueix els fitxers que hi ha al costat dels teus.
  • No afegeixis nous globals window.* per a les aplicacions. Les noves utilitats orientades a les aplicacions van sota window.WebappUtils, com explica webapp/AGENTS.md.
  • Un canvi al registre de l'aplicació (plugins/registry.ts) sol pertànyer a les còpies de les dues interfícies.

Traduccions

Antimatter i les seves aplicacions integrades es tradueixen a 37 idiomes. Els col·laboradors afegeixen les cadenes en anglès; els altres idiomes s'actualitzen per lots.

Afegir una cadena a les interfícies web

  1. Escriviu-la amb un ID i un text anglès literal: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) o <FormattedMessage id='…' defaultMessage='…'/>. L'anglès que es mostra a l'aplicació prové de defaultMessage.
  2. Executeu make i18n-extract a webapp/ (o npm run i18n-extract a webapp/fusion o webapp/channels). Actualitza el src/i18n/en.json d'aquest paquet.
  3. Ompliu el description de la nova entrada a en.json: on apareix la cadena i com s'utilitza. És el context amb el qual treballen els traductors, humans o màquines.

npm run i18n-extract:check falla quan en.json no està actualitzat respecte al codi.

Afegir una cadena al servidor

  1. Utilitzeu un ID al codi, per exemple model.NewAppError(…, "app.community_attributes.invalid.app_error", …) o i18n.T("…").
  2. Executeu make i18n-extract a server/. Afegeix l'ID a server/i18n/en.json en l'ordre correcta.
  3. Escriviu la translation en anglès i la description de la nova entrada.

Altres idiomes

Cada idioma té el seu propi fitxer al costat de en.json (fr.json, pt-BR.json, zh-TW.json…). Per informar d'una traducció incorrecta, obriu una incidència al repositori de la comunitat amb l'idioma, el text i on apareix.

Les aplicacions integrades mantenen les seves cadenes a webapp/i18n/; consulteu Traduccions a la pàgina d'aplicacions.

Documentació i aquest lloc web

Aquest lloc web i la seva documentació es troben al repositori antimatter.chat. Les pàgines són fragments HTML a src/pages/; python3 src/build.py construeix el lloc. S'acullen correccions i explicacions que falten com a incidències o sol·licituds de canvis (pull requests).

Problemes de seguretat

Mai informeu d'un problema de seguretat en una incidència, discussió o sol·licitud de canvis pública.

Informe-ho de manera privada mitjançant el sistema de informació de vulnerabilitats privades de GitHub: obri la pestanya Seguretat del repositori afectat (per exemple, el servidor) i seleccioneu Informe una vulnerabilitat. Si no sabeu quin repositori està afectat, feu la informació al repositori de la comunitat. Incloeu el component i la seva versió, el que un atacant podria fer, com reproduir-ho i qualsevol configuració de la qual depengui.

Els mantenedors hi responen, us mantenen informats mentre ho corregeixen i publiquen un consell de seguretat quan es publica una versió corregida. Si us plau, doneu-los un temps raonable abans de divulgar el problema. Les correccions s'inclouen a l'última versió. La política completa es troba a la política de seguretat.

Llicències

  • El servidor està sota la llicència GNU Affero General Public License v3.0 (AGPL v3). Al mateix repositori, les eines d'administració i els fitxers de configuració (server/templates/, server/i18n/, server/public/ i webapp/) estan sota la llicència Apache License 2.0. Vegeu LICENSE.txt i NOTICE.txt.
  • Aplicacions: les aplicacions pròpies d'Antimatter, com ara Enquestes, estan sota l'AGPL v3; les aplicacions bifurcades de Mattermost mantenen la seva llicència original. Cada repositori indica quina al seu fitxer LICENSE.
  • Les aplicacions d'escriptori i mòbil estan sota la llicència Apache License 2.0. El repositori de Docker està sota la llicència Apache License 2.0, excepte el seu Dockerfile, que està sota l'AGPL v3.

L'AGPL significa que si executeu un servidor d'Antimatter modificat per a altres persones a través d'una xarxa, heu d'oferir-los el codi font dels vostres canvis. Antimatter es basa en Mattermost; no està afiliat ni aprovat per Mattermost, Inc.

Tots els participants segueixen el codi de conducta.