Συνεισφορά

Bug reports, ιδέες, μεταφράσεις, τεκμηρίωση και κώδικας είναι όλοι καλωσορισμένοι. Αυτή η σελίδα εξηγεί πού να συζητήσετε, πώς να στείλετε μια αλλαγή, τις συμβάσεις που ακολουθεί ο κώδικας και τους κανόνες για προβλήματα ασφαλείας και άδειες.

Πού να συζητήσετε

Όλα ξεκινούν στο community repository, ανεξάρτητα από το ποιο μέρος του Antimatter αφορά:

  • Bugs and feature requests: ανοίξτε ένα issue και επιλέξτε Bug report, Feature request ή Plugin or integration request. Ψάξτε πρώτα τα υπάρχοντα issues. Αν το δικό σας υπάρχει ήδη, προσθέστε ένα thumbs-up ή τις λεπτομέρειές σας.
  • Questions and ideas: οι Discussions, στις κατηγορίες Q&A ή Ideas.
  • Πριν από μια μεγαλύτερη αλλαγή, ανοίξτε ένα issue ή μια συζήτηση για να συμφωνήσετε πρώτα στην προσέγγιση. Αυτό αποτρέπει ένα pull request που δεν μπορεί να ενσωματωθεί ως έχει.

Τα ζητήματα με την ετικέτα good first issue και help wanted είναι καλό σημείο εκκίνησης. Γράψτε σε ένα σχόλιο ότι εργάζεστε σε κάποιο από αυτά. Τα νέα ζητήματα φέρουν την ετικέτα status/triage, στη συνέχεια status/accepted, status/planned ή status/wontfix. Τα ζητήματα παραμένουν στο αποθετήριο της κοινότητας ανεξάρτητα από το θέμα τους: τα αποθετήρια κώδικα δεν δέχονται ζητήματα. Το προγραμματισμένο έργο βρίσκεται στον οδικό χάρτη του Antimatter.

Repositories και branches

Ο κώδικας βρίσκεται στην οργάνωση AntimatterChat. Το Where the code lives καταγράφει τα repos. Σε κάθε repository:

  • Το main είναι το προεπιλεγμένο branch και περιέχει τον κώδικα του Antimatter. Δημιουργήστε branch από αυτό και στείλτε pull requests προς αυτό.
  • Τα repos που έχουν fork από το Mattermost έχουν επίσης ένα branch upstream, ένα mirror του κώδικα του Mattermost που χρησιμοποιείται για να ενσωματωθούν οι αλλαγές του. Μην βασίζετε την εργασία σας σε αυτό.

Το README κάθε repository εξηγεί πώς να το build και να το test. Για τον server και τις web interfaces, δείτε Building from source. Για τις apps, Build, install and debug.

Pull requests

  1. Δημιουργήστε ένα fork του αποθετηρίου και ένα κλάδο από το main.
  2. Περιέχεται μία αλλαγή σε κάθε pull request. Τα μικρά pull request εξετάζονται γρηγορότερα.
  3. Ακολουθήστε το στυλ του κώδικα γύρω σας και προσθέστε ή ενημερώστε δοκιμές όπου έχει νόημα.
  4. Περιγράψτε τι αλλάξατε και γιατί, και συνδέστε το πρόβλημα που διορθώνεται: Fixes AntimatterChat/community#123.
  5. Βεβαιωθείτε ότι τα ελέγχματα περνούν. Ένας συντηρητής εξετάζει το pull request και μπορεί να ζητήσει αλλαγές.

Στο αποθετήριο του server, συμπληρώστε την προτυποποίηση του pull request: μια Σύνοψη και το μπλοκ Release Note, το οποίο πρέπει πάντα να υπάρχει. Γράψτε NONE σε αυτό όταν η αλλαγή δεν αγγίζει API, ρυθμίσεις, σχήμα βάσης δεδομένων ή ορατή συμπεριφορά.

Συμβάλλοντας, συμφωνείτε ότι η συνεισφορά σας άδειασεται υπό την άδεια του αποθετηρίου στο οποίο συμβάλλετε.

Commits και στυλ κώδικα

Commits

Τα μηνύματα commit στην ιστορία είναι μία σύντομη πρόταση που λέει τι αλλάζει, σε sentence case και χωρίς τελικό τελικό σημείο. Οι αλλαγές σε ένα μέρος προηγούνται από αυτό, για παράδειγμα Fusion: a compact conversation header on phones ή Server: community attributes, and admin-only user attributes. Ένα commit ανά αλλαγή· εξηγήστε τους λόγους στο σώμα όταν δεν είναι προφανείς.

Server (Go)

  • Εκτελέστε make check-style στο server/ πριν από το push.
  • Μην εκτελείτε ποτέ go mod tidy απευθείας· εκτελέστε make modules-tidy.
  • Στις διαδρομές αιτήματος, καταγράψτε με το logger του αιτήματος. Στο στρώμα αποθήκευσης, λάβετε ένα request.CTX, όχι ένα context.Context.
  • Τα νέα API endpoints μπαίνουν στο server/channels/api4, με τους τύπους τους στο server/public/model και, ιδανικά, μια μέθοδο στο model.Client4 και στον TypeScript client.

Web interfaces (TypeScript και React)

  • Εκτελέστε make check-style και make check-types στο webapp/.
  • Η κλασική διεπαφή ακολουθεί το webapp/STYLE_GUIDE.md: συναρτησιακά components, hooks για Redux, μεταβλητές θέματος για χρώματα, προσβάσιμη разметка.
  • Τα components του Fusion βρίσκονται στο webapp/fusion/src/fusion, με τα στυλ τους στο webapp/fusion/src/fusion/styles. Δημιουργούν ονόματα κλάσεων με το βοηθητικό am() και χρησιμοποιούν τα design tokens του Fusion· ακολουθήστε τα αρχεία δίπλα στα δικά σας.
  • Μην προσθέτετε νέα window.* globals για apps. Τα νέα utilities για apps μπαίνουν κάτω από window.WebappUtils, όπως εξηγεί το webapp/AGENTS.md.
  • Μια αλλαγή στο μητρώο της εφαρμογής (plugins/registry.ts) συνήθως ανήκει και στις δύο αντιγραφές των διεπαφών.

Μεταφράσεις

Το Antimatter και οι ενσωματωμένες του εφαρμογές μεταφράζονται σε 37 γλώσσες. Οι συνεισφέροντες προσθέτουν τις αγγλικές συμβολοσειρές· οι υπόλοιπες γλώσσες ενημερώνονται σε παρτίδες.

Προσθήκη συμβολοσειράς στις διαδικτυακές διεπαφές

  1. Γράψτε τη με ένα ID και ένα κυριολεκτικό αγγλικό κείμενο: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) ή <FormattedMessage id='…' defaultMessage='…'/>. Το αγγλικό κείμενο που εμφανίζεται στην εφαρμογή προέρχεται από το defaultMessage.
  2. Εκτελέστε make i18n-extract στο webapp/ (ή npm run i18n-extract στο webapp/fusion ή webapp/channels). Ενημερώνει το src/i18n/en.json του πακέτου.
  3. Συμπληρώστε το description της νέας εγγραφής στο en.json: πού εμφανίζεται η συμβολοσειρά και πώς χρησιμοποιείται. Αυτή είναι η βάση που χρησιμοποιούν οι μεταφραστές, είτε άνθρωποι είτε μηχανές.

Η εντολή npm run i18n-extract:check αποτυγχάνει όταν το en.json δεν είναι σύγχρονο με τον κώδικα.

Προσθήκη συμβολοσειράς στον διακομιστή

  1. Χρησιμοποιήστε ένα ID στον κώδικα, για παράδειγμα model.NewAppError(…, "app.community_attributes.invalid.app_error", …) ή i18n.T("…").
  2. Εκτελέστε make i18n-extract στο server/. Προσθέτει το ID στο server/i18n/en.json στη σωστή σειρά.
  3. Γράψτε την αγγλική translation και το description της νέας εγγραφής.

Άλλες γλώσσες

Κάθε γλώσσα έχει το δικό της αρχείο δίπλα στο en.json (fr.json, pt-BR.json, zh-TW.json…). Για να αναφέρετε λάθος μετάφραση, ανοίξτε ένα issue στο κοινωτικό αποθετήριο με τη γλώσσα, το κείμενο και τη θέση εμφάνισής του.

Οι ενσωματωμένες εφαρμογές διατηρούν τις συμβολοσειρές τους στο webapp/i18n/· δείτε Μεταφράσεις στη σελίδα των εφαρμογών.

Τεκμηρίωση και αυτός ο ιστότοπος

Αυτός ο ιστότοπος και η τεκμηρίωσή του βρίσκονται στο αποθετήριο antimatter.chat. Οι σελίδες είναι HTML θραύσματα στο src/pages/· η εντολή python3 src/build.py δημιουργεί τον ιστότοπο. Διόρθωση και λείπουσες εξηγήσεις είναι ευπρόσδεκτες ως issues ή pull requests.

Προβλήματα ασφαλείας

Ποτέ μην αναφέρετε πρόβλημα ασφαλείας σε δημόσιο issue, συζήτηση ή pull request.

Αναφέρετε το ιδιωτικά μέσω της ιδιωτικής αναφοράς ευρωστίας του GitHub: ανοίξτε την καρτέλα Ασφάλεια του επηρεαζόμενου αποθετηρίου (για παράδειγμα του server) και επιλέξτε Αναφορά ευρωστίας. Αν δεν ξέρετε ποιο αποθετήριο επηρεάζεται, αναφέρετε το στο κοινοτικό αποθετήριο. Συμπεριλάβετε το στοιχείο και την έκδοσή του, τι θα μπορούσε να κάνει ένας επιτιθέμενος, πώς να το αναπαράξετε και σε ποια ρυθμίσεις εξαρτάται.

Οι συντηρητές απαντούν εκεί, σας ενημερώνουν κατά τη διάρκεια της διόρθωσης και δημοσιεύουν μια ανακοίνωση μόλις κυκλοφορήσει μια διόρθωση. Παρακαλούμε, δώστε τους εύλογη προθεσμία πριν αποκαλύψετε το πρόβλημα. Οι διορθώσεις ενσωματώνονται στην τελευταία έκδοση. Η πλήρης πολιτική βρίσκεται στην πολιτική ασφαλείας.

Άδειες

  • Ο server καλύπτεται από την GNU Affero General Public License v3.0 (AGPL v3). Στο ίδιο αποθετήριο, τα εργαλεία διαχείρισης και τα αρχεία ρυθμίσεων (server/templates/, server/i18n/, server/public/ και webapp/) καλύπτονται από την Apache License 2.0. Δείτε τα LICENSE.txt και NOTICE.txt.
  • Εφαρμογές: Οι δικές εφαρμογές του Antimatter, όπως οι Ψηφοφορίες, καλύπτονται από την AGPL v3. Οι εφαρμογές που προέρχονται από το Mattermost διατηρούν την αρχική τους άδεια. Κάθε αποθετήριο δηλώνει ποια στην αρχή LICENSE.
  • Οι εφαρμογές για υπολογιστή και κινητό καλύπτονται από την Apache License 2.0. Το αποθετήριο Docker καλύπτεται από την Apache License 2.0, εκτός από το Dockerfile, που καλύπτεται από την AGPL v3.

Η AGPL σημαίνει ότι αν εκτελείτε έναν τροποποιημένο server Antimatter για άλλους μέσω δικτύου, πρέπει να τους προσφέρετε τον πηγαίο κώδικα των αλλαγών σας. Το Antimatter βασίζεται στο Mattermost. Δεν έχει σχέση με την Mattermost, Inc. ούτε έχει την έγκρισή της.

Όλοι οι συμμετέχοντες τηρούν τον κόδικα συμπεριφοράς.