Katkıda Bulunma

Hata bildirimleri, fikirler, çeviriler, belgeler ve kod hepsi memnuniyetle karşılanır. Bu sayfa, nerede konuşulacağı, bir değişikliğin nasıl gönderileceği, kodun izlediği kurallar ile güvenlik sorunları ve lisanslara ilişkin kurallar hakkında bilgi verir.

Nerede Konuşulur

Antimatter'in hangi bölümüyle ilgili olursa olsun, her şey topluluk deposunda başlar:

  • Hatalar ve özellik istekleri: bir sorun açın ve Hata bildirimi, Özellik isteği veya Eklenti veya entegrasyon isteği seçeneklerinden birini seçin. Önce mevcut sorunları arayın; sorununuz zaten varsa, başparmak yukarı tepkisi ekleyin veya detaylarınızı paylaşın.
  • Sorular ve fikirler: Tartışmalar bölümü, S&C veya Fikirler kategorilerinde.
  • Büyük bir değişiklikten önce, yaklaşımı önceden belirlemek için bir sorun veya tartışma açın. Bu, birleştirilemeyecek bir çekme isteğinin önüne geçer.

good first issue ve help wanted etiketli sorunlar, başlamak için iyi yerlerdir. Bir sorunu ele aldığınızı bir yorumda belirtin. Yeni sorunlar önce status/triage, ardından status/accepted, status/planned veya status/wontfix etiketlerini alır. Sorunlar ne hakkında olursa olsun topluluk deposunda kalır: kod depoları sorunları kabul etmez. Planlanan çalışmalar Antimatter yol haritasında yer alır.

Depolar ve dallar

Kod, AntimatterChat organizasyonundadır; Kodun nerede olduğu bölümünde depolar listelenir. Her depoda:

  • main varsayılan daldır ve Antimatter'in kodunu içerir. Bu daldan dallar oluşturun ve çekme isteklerini bu dala gönderin.
  • Mattermost'tan çatallanan depolar, Mattermost'un kodunun aynası olan ve değişikliklerini almak için kullanılan bir upstream dalına da sahiptir. Çalışmalarınızı bu dala dayandırmayın.

Her depoyun README dosyası, nasıl derleneceğini ve test edileceğini açıklar. Sunucu ve web arayüzleri için Kaynaktan Derleme; uygulamalar için Derleme, kurulum ve hata ayıklama bölümüne bakın.

Çekme istekleri

  1. Depoyu çatallayın (fork) ve main dalından yeni bir dal oluşturun.
  2. Her bir çekme isteğini (pull request) tek bir değişiklikle sınırlayın. Küçük çekme istekleri daha hızlı incelenir.
  3. Çevrenizdeki kodun stilini izleyin ve anlamlı görünen yerlerde test ekleyin veya güncelleyin.
  4. Ne değiştirdiğinizi ve neden değiştirdiğinizi açıklayın; düzelttiğiniz sorunu (issue) bağlantılayın: Fixes AntimatterChat/community#123.
  5. Kontrollerin (checks) geçtiğinden emin olun. Bir yönetici (maintainer) çekme isteğini inceler ve değişiklik isteyebilir.

Sunucu deposunda çekme isteği şablonunu doldurun: bir Özet ve her zaman bulunması gereken Sürüm Notu bloğu. Değişiklik API, yapılandırma, veritabanı şeması veya görünür davranışa dokunmuyorsa bu bloğa NONE yazın.

Katkıda bulunarak, katkınızın katkıda bulunduğunuz depoyu lisansı altında lisanslandığına onay vermiş olursunuz.

Commit'ler ve kod stili

Commit'ler

Geçmişteki commit mesajları, ne değiştiğini belirten, cümle başı büyük harf (sentence case) kullanan ve son noktasız tek bir kısa cümledir. Bir bölüme ait değişiklikler bu bölümün adıyla başlar; örneğin Fusion: a compact conversation header on phones veya Server: community attributes, and admin-only user attributes. Her değişiklik için tek commit; nedenleri açık değilse bunları commit gövdesinde (body) açıklayın.

Sunucu (Go)

  • İtmeyen (push) öncesinde server/ dizininde make check-style komutunu çalıştırın.
  • go mod tidy komutunu asla doğrudan çalıştırmayın; make modules-tidy komutunu çalıştırın.
  • İstek yollarında (request paths), isteğin kayıt tutucusunu (logger) kullanın. Depo katmanında (store layer), context.Context yerine request.CTX kullanın.
  • Yeni API uçları (endpoints) server/channels/api4 altında bulunur; tipleri server/public/model altında, ideal olarak model.Client4 ve TypeScript istemcisinde bir yöntem olarak yer alır.

Web arayüzleri (TypeScript ve React)

  • webapp/ dizininde make check-style ve make check-types komutlarını çalıştırın.
  • Klasik arayüz webapp/STYLE_GUIDE.md dosyasını izler: fonksiyonel bileşenler, Redux için hook'lar, renkler için tema değişkenleri, erişilebilir (accessible) işaretleme (markup).
  • Fusion bileşenleri webapp/fusion/src/fusion altında bulunur; stilleri ise webapp/fusion/src/fusion/styles altındadır. Sınıf adlarını am() yardımcısı ile oluşturur ve Fusion tasarım belirteçlerini (design tokens) kullanır; yanınızdaki dosyaları izleyin.
  • Uygulamalar için yeni window.* küresel değişkenleri (globals) eklemeyin. Uygulamalara yönelik yeni yardımcılar window.WebappUtils altında bulunur; webapp/AGENTS.md dosyası bunu açıklar.
  • Uygulama kaydı (plugins/registry.ts)ndaki bir değişiklik genellikle her iki arayüzün kopyasına da aittir.

Çeviriler

Antimatter ve birlikte gelen uygulamaları 37 dile çevrilmiştir. Katkıda bulunanlar İngilizce metinleri ekler; diğer diller toplu olarak güncellenir.

Web arayüzlerine bir metin eklemek

  1. Bir kimlik (ID) ve İngilizce metinle yazın: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) veya <FormattedMessage id='…' defaultMessage='…'/>. Uygulamada görünen İngilizce metin defaultMessage alanından gelir.
  2. webapp/ dizininde make i18n-extract (veya webapp/fusion ya da webapp/channels dizinlerinde npm run i18n-extract) çalıştırın. Bu, ilgili paketin src/i18n/en.json dosyasını günceller.
  3. en.json dosyasındaki yeni kaydın description alanını doldurun: metin nerede görünüyor ve nasıl kullanılıyor. Çevirmenlerin (insan veya makine) çalıştığı bağlam budur.

en.json dosyası kodla uyumlu değilse npm run i18n-extract:check komutu başarısız olur.

Sunucuya bir metin eklemek

  1. Kodda bir kimlik (ID) kullanın, örneğin model.NewAppError(…, "app.community_attributes.invalid.app_error", …) veya i18n.T("…").
  2. server/ dizininde make i18n-extract komutunu çalıştırın. Bu komut, kimliği server/i18n/en.json dosyasına doğru sırayla ekler.
  3. Yeni kaydın İngilizce translation ve description alanlarını yazın.

Diğer diller

Her dilin, en.json dosyasının yanında kendi dosyası vardır (fr.json, pt-BR.json, zh-TW.json…). Yanlış bir çeviriyi bildirmek için topluluk deposunda dil, metin ve göründüğü yer bilgisiyle bir sorun (issue) açın.

Birlikte gelen uygulamalar metinlerini webapp/i18n/ dizininde saklar; uygulamalar sayfasındaki Çeviriler bölümüne bakın.

Belgeler ve bu web sitesi

Bu web sitesi ve belgeleri antimatter.chat deposundadır. Sayfalar src/pages/ dizinindeki HTML parçalarıdır; python3 src/build.py komutu siteyi oluşturur. Düzeltmeler ve eksik açıklamalar sorun (issue) veya çekme isteği (pull request) olarak memnuniyetle karşılanır.

Güvenlik sorunları

Bir güvenlik sorununu asla herkese açık bir sorun (issue), tartışma veya çekme isteğinde (pull request) bildirmeyin.

GitHub'ın özel güvenlik açığı bildirim sistemiyle gizlice bildirin: Etkilenen depoyun (örneğin sunucu) Güvenlik sekmesini açın ve Güvenlik açığı bildir seçeneğini seçin. Hangi depoyu etkilediğini bilmiyorsanız, topluluk deposu üzerinden bildirin. Bileşen ve sürümünü, bir saldırganın neler yapabileceğini, sorunu nasıl yeniden üretebileceğini ve hangi yapılandırmaya bağlı olduğunu belirtin.

Bakımcılar oradan yanıt verir, düzeltme sırasında sizi bilgilendirir ve düzeltilmiş bir sürüm yayınlandığında bir güvenlik bildirimi (advisory) yayımlar. Sorunu kamuya açıklamadan önce onlara makul bir süre tanıyın. Düzeltmeler en son sürüme eklenir. Tam politika güvenlik politikasında yer alır.

Lisanslar

  • Sunucu, GNU Affero Genel Kamu Lisansı v3.0 (AGPL v3) altındadır. Aynı depoda, yönetim araçları ve yapılandırma dosyaları (server/templates/, server/i18n/, server/public/ ve webapp/) Apache Lisansı 2.0 altındadır. LICENSE.txt ve NOTICE.txt dosyalarına bakın.
  • Uygulamalar: Anketler gibi Antimatter'ın kendi uygulamaları AGPL v3 altındadır; Mattermost'tan türetilen uygulamalar ise orijinal lisanslarını korur. Her depo, LICENSE dosyasında hangi lisansı kullandığını belirtir.
  • Masaüstü ve mobil uygulamalar Apache Lisansı 2.0 altındadır. Docker deposu Apache Lisansı 2.0 altındadır; ancak Dockerfile AGPL v3 altındadır.

AGPL, değiştirilmiş bir Antimatter sunucusunu ağ üzerinden diğer insanlar için çalıştırırsanız, yaptığınız değişikliklerin kaynak kodunu onlara sunmanız gerektiği anlamına gelir. Antimatter, Mattermost üzerine inşa edilmiştir; Mattermost, Inc. ile bağlantılı değildir ve onaylamamıştır.

Katılan herkes davranış kurallarına uyar.