Внесок

Ми раді повідомленням про вади, ідеям, перекладам, документації та коду. На цій сторінці пояснено, де спілкуватися, як надсилати зміни, які конвенції дотримується код, а також правила щодо проблем безпеки та ліцензій.

Де спілкуватися

Усе починається в репозиторії спільноти, незалежно від того, яка частина 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 кожного репозиторію пояснює, як збирати та тестувати його. Для сервера та вебінтерфейсів див. Збирання з джерела; для додатків — Збирання, встановлення та налагодження.

Запитування змін

  1. Зробіть форк репозиторію та створіть гілку від main.
  2. Обмежуйте кожен запит на злиття одним змінним. Невеликі запити на злиття переглядають швидше.
  3. Дотримуйтесь стилю коду, що оточує вас, і додавайте або оновлюйте тести там, де це має сенс.
  4. Опишіть, що ви змінили і чому, та додайте посилання на проблему, яку ви виправляєте: Fixes AntimatterChat/community#123.
  5. Переконайтеся, що перевірки проходять. Утримувач перегляне запит на злиття і може попросити внести зміни.

У репозиторії сервера заповніть шаблон запиту на злиття: Зведення та блок Примітка до випуску, який має бути завжди. Якщо зміна не торкається 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 мов. Учасники додають англійські рядки; інші мови оновлюються партіями.

Додавання рядка до веб-інтерфейсів

  1. Напишіть його з ідентифікатором та літеральним англійським текстом: 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. Використовуйте ідентифікатор у коді, наприклад model.NewAppError(…, "app.community_attributes.invalid.app_error", …) або i18n.T("…").
  2. Виконайте make i18n-extract у server/. Це додасть ідентифікатор до server/i18n/en.json у правильному порядку.
  3. Напишіть англійський 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.

Проблеми безпеки

Ніколи не повідомляйте про проблему безпеки в публічній проблемі, обговоренні або 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. і не має її підтримки.

Усі, хто бере участь, дотримуються коду поведінки.