Внесок
Ми раді повідомленням про вади, ідеям, перекладам, документації та коду. На цій сторінці пояснено, де спілкуватися, як надсилати зміни, які конвенції дотримується код, а також правила щодо проблем безпеки та ліцензій.
Де спілкуватися
Усе починається в репозиторії спільноти, незалежно від того, яка частина Antimatter є предметом обговорення:
- Вади та запити на функції: створіть проблему та оберіть Bug report, Feature request або Plugin or integration request. Спочатку пошукайте серед наявних проблем; якщо ваша вже є, додайте «палець угору» або свої деталі.
- Питання та ідеї: Обговорення, у категоріях Q&A або Ideas.
- Перед великою зміною створіть проблему або обговорення, щоб узгодити підхід. Це уникне запиту змін, який неможливо буде об’єднати у поточному вигляді.
Почати варто з проблем, позначених мітками good first issue та help wanted. Напишіть у коментарі, що працюєте над однією з них. Нові проблеми отримують мітку status/triage, а потім status/accepted, status/planned або status/wontfix. Усі проблеми зберігаються в репозиторії спільноти, незалежно від їхнього змісту: репозиторії коду не приймають проблеми. Заплановані роботи відображено на дорожній карті Antimatter.
Репозиторії та гілки
Код зберігається в організації AntimatterChat; список репозиторіїв наведено в розділі Де зберігається код. У кожному репозиторії:
main— гілка за замовчуванням, що містить код Antimatter. Створюйте гілки від неї та надсилайте запитування змін до неї.- Репозиторії, розгалужені від Mattermost, також мають гілку
upstream— дзеркало коду Mattermost, яке використовується для впровадження його змін. Не базуйте на ній свою роботу.
README кожного репозиторію пояснює, як збирати та тестувати його. Для сервера та вебінтерфейсів див. Збирання з джерела; для додатків — Збирання, встановлення та налагодження.
Запитування змін
- Зробіть форк репозиторію та створіть гілку від
main. - Обмежуйте кожен запит на злиття одним змінним. Невеликі запити на злиття переглядають швидше.
- Дотримуйтесь стилю коду, що оточує вас, і додавайте або оновлюйте тести там, де це має сенс.
- Опишіть, що ви змінили і чому, та додайте посилання на проблему, яку ви виправляєте:
Fixes AntimatterChat/community#123. - Переконайтеся, що перевірки проходять. Утримувач перегляне запит на злиття і може попросити внести зміни.
У репозиторії сервера заповніть шаблон запиту на злиття: Зведення та блок Примітка до випуску, який має бути завжди. Якщо зміна не торкається API, конфігурації, схеми бази даних або видимого поведінки, напишіть у ньому NONE.
Внесучи внесок, ви погоджуєтеся, що ваш внесок ліцензується за ліцензією репозиторію, до якого ви вносите внесок.
Коміти та стиль коду
Коміти
Повідомлення про коміти в історії — це одне коротке речення, що описує зміни, у форматі речення (перша літера велика) і без крапки в кінці. Зміни в окремій частині починаються з її назви, наприклад Fusion: a compact conversation header on phones або Server: community attributes, and admin-only user attributes. Один коміт на кожну зміну; якщо причини неочевидні, поясніть їх у тексті коміта.
Сервер (Go)
- Виконайте
make check-styleуserver/перед відправкою. - Ніколи не виконуйте
go mod tidyбезпосередньо; виконуйтеmake modules-tidy. - У шляхах запитів ведіть журнал за допомогою логера запиту. У шарі сховища приймайте
request.CTX, а неcontext.Context. - Нові точки кінця API розміщуються у
server/channels/api4, з їхніми типами уserver/public/modelта, бажано, методом уmodel.Client4та в клієнті TypeScript.
Вебінтерфейси (TypeScript і React)
- Виконайте
make check-styleтаmake check-typesуwebapp/. - Класичний інтерфейс дотримується
webapp/STYLE_GUIDE.md: функціональні компоненти, хуки для Redux, змінні теми для кольорів, доступний розмітка. - Компоненти Fusion розміщуються у
webapp/fusion/src/fusion, з їхніми стилями уwebapp/fusion/src/fusion/styles. Вони будують імена класів за допомогою допоміжного засобуam()та використовують дизайн-токени Fusion; дотримуйтесь файлів поруч із вашими. - Не додавайте нові глобальні змінні
window.*для додатків. Нові утиліти для додатків розміщуються підwindow.WebappUtils, як пояснюється уwebapp/AGENTS.md. - Зміни в реєстрі додатків (
plugins/registry.ts) зазвичай належать до копій обох інтерфейсів.
Переклади
Antimatter та його вбудовані додатки перекладені на 37 мов. Учасники додають англійські рядки; інші мови оновлюються партіями.
Додавання рядка до веб-інтерфейсів
- Напишіть його з ідентифікатором та літеральним англійським текстом:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})або<FormattedMessage id='…' defaultMessage='…'/>. Англійська, що відображається в додатку, походить зdefaultMessage. - Виконайте
make i18n-extractуwebapp/(абоnpm run i18n-extractуwebapp/fusionабоwebapp/channels). Це оновитьsrc/i18n/en.jsonвідповідного пакета. - Заповніть
descriptionнового запису вen.json: де з’являється рядок і як він використовується. Це контекст, від якого працюють перекладачі, будь то люди чи машини.
npm run i18n-extract:check завершується з помилкою, якщо en.json не відповідає коду.
Додавання рядка на сервері
- Використовуйте ідентифікатор у коді, наприклад
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)абоi18n.T("…"). - Виконайте
make i18n-extractуserver/. Це додасть ідентифікатор доserver/i18n/en.jsonу правильному порядку. - Напишіть англійський
translationтаdescriptionнового запису.
Інші мови
Кожна мова має власний файл поруч з en.json (fr.json, pt-BR.json, zh-TW.json…). Щоб повідомити про неправильний переклад, відкрийте проблему в репозиторії спільноти з мовою, текстом і місцем, де він з’являється.
Вбудовані додатки зберігають свої рядки в webapp/i18n/; див. Переклади на сторінці додатків.
Документація та цей вебсайт
Цей вебсайт та його документація знаходяться в репозиторії antimatter.chat. Сторінки — це HTML-фрагменти в src/pages/; python3 src/build.py будує сайт. Виправлення та відсутні пояснення вітаються як проблеми або pull request.
Проблеми безпеки
Повідомте про це конфіденційно за допомогою функції GitHub для приватного звітування про вразливості: відкрийте вкладку Безпека у відповідному репозиторії (наприклад, сервері) та оберіть Report a vulnerability. Якщо не знаєте, який саме репозиторій уражено, надішліть звіт у репозиторій спільноти. Вкажіть компонент і його версію, що може зробити нападник, як відтворити проблему, а також будь-які налаштування, від яких вона залежить.
Розробники відповідають там, тримають вас в курсі справ, поки виправляють проблему, і публікують бюлетень, щойно вийде виправлений реліз. Будь ласка, дайте їм достатньо часу, перш ніж розкривати проблему. Виправлення вносяться в найновіший реліз. Повну політику безпеки дивіться у політиці безпеки.
Ліцензії
- Сервер поширюється під ліцензією 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, такі як Polls, поширюються під AGPL v3; додатки, розгалужені від Mattermost, зберігають свою початкову ліцензію. Про це написано у файлі
LICENSEкожного репозиторію. - Десктопні та мобільні додатки поширюються під Apache License 2.0. Репозиторій Docker поширюється під Apache License 2.0, за винятком
Dockerfile, який поширюється під AGPL v3.
AGPL означає, що якщо ви запускаєте модифікований сервер Antimatter для інших людей через мережу, ви зобов’язані надати їм вихідний код ваших змін. Antimatter базується на Mattermost; він не афілійований з Mattermost, Inc. і не має її підтримки.
Усі, хто бере участь, дотримуються коду поведінки.