Ana içeriğe geç

Geliştirici İş Akışı

Bu belge, projeye nasıl katkıda bulunulacağını adım adım anlatır. Tüm değişiklikler PR ile yapılır, tüm testlerden geçmesi zorunludur ve release süreci tamamen otomatiktir.

Genel Bakış

graph LR A[Fikir] --> B[Fork] B --> C[Branch] C --> D[Geliştir] D --> E[Test] E --> F[PR Aç] F --> G[CI Kontrol] G --> H{Testler Geçti?} H -->|Hayır| D H -->|Evet| I[Merge] I --> J[Otomatik Release]

Hiçbir değişiklik doğrudan main branch'e push edilemez. Her şey PR üzerinden geçer.


PR Yaşam Döngüsü

graph TD A[PR Açılır] --> B[Otomatik Kontroller Başlar] B --> C[CI Testleri] B --> D[PR Başlık Kontrolü] B --> E[Conventional Commit Doğrulama] C --> F{Tümü Yeşil?} D --> F E --> F F -->|Hayır| G[Geliştirici Düzeltir] G --> B F -->|Evet| H[Merge Edilebilir] H --> I[Maintainer Merge Eder] I --> J[release-please Analiz Eder] J --> K{feat veya fix var mı?} K -->|Evet| L[Release PR Oluşturur] K -->|Hayır| M[Bekleme] L --> N[Release PR Merge] N --> O[Otomatik Release Yayınlanır] O --> P[v1 Tag Güncellenir]

CI Pipeline Detayı

Her PR açıldığında 4 ayrı test çalışır:

graph TD A[PR / Push] --> B[test] A --> C[test-precommit] A --> D["test-action (Linux)"] A --> E["test-action (macOS)"] B --> B1[clean.md → 0 hata] B --> B2[dirty.md → hatalar bulunmalı] C --> C1[Hook script testi] C --> C2[Pre-commit framework testi] D --> D1[Action Linux'ta çalışıyor] E --> E1[Action macOS'ta çalışıyor] B1 --> F{Tümü Başarılı?} B2 --> F C1 --> F C2 --> F D1 --> F E1 --> F F -->|Evet| G[PR Merge Edilebilir] F -->|Hayır| H[PR Engellenmiş]

Release Pipeline

graph TD A[Main'e Merge] --> B[release-please Çalışır] B --> C[Commit Mesajlarını Analiz Et] C --> D{Release Gerekli mi?} D -->|Hayır| E[Bekleme] D -->|Evet| F[Release PR Oluştur] F --> G[CHANGELOG Güncelle] F --> H[library.json Versiyon Güncelle] F --> I[.release-please-manifest Güncelle] G --> J[Release PR Merge Edilir] H --> J I --> J J --> K[Git Tag Oluştur] K --> L[GitHub Release Yayınla] L --> M[Turkish.zip + library.json Yükle] M --> N[v1 Floating Tag Güncelle] N --> O[Kullanıcılar Güncel Sürümü Alır]

Yeni Kural Ekleme Akışı

graph TD A[Yeni Kural Fikri] --> B[styles/Turkish/ Altına YAML Oluştur] B --> C[fixtures/dirty.md'ye Hatalı Örnek Ekle] C --> D[fixtures/clean.md'ye Doğru Örnek Ekle] D --> E[Test Et] E --> F{clean.md 0 Hata?} F -->|Hayır| G[Kuralı Düzelt] G --> E F -->|Evet| H{dirty.md Hataları Yakalıyor?} H -->|Hayır| G H -->|Evet| I["PR Aç (feat: yeni kural)"] I --> J[CI Testleri Çalışır] J --> K[Merge + Otomatik Release]

Hotfix Akışı

Kritik bir hata bulunduğunda:

graph LR A[Kritik Hata] --> B["fix/ Branch Oluştur"] B --> C[Düzelt] C --> D[Test Et] D --> E["PR Aç (fix: açıklama)"] E --> F[CI Kontrol] F --> G[Acil Merge] G --> H[Otomatik Patch Release]

fix: prefix'i otomatik olarak patch versiyon artışına neden olur (1.2.0 → 1.2.1).


Versiyon Belirleme

Commit mesajlarına göre otomatik belirlenir:

graph TD A[Commit Mesajı] --> B{Prefix Nedir?} B -->|"feat:"| C["Minor Artış (1.2.0 → 1.3.0)"] B -->|"fix:"| D["Patch Artış (1.2.0 → 1.2.1)"] B -->|"feat!:"| E["Major Artış (1.2.0 → 2.0.0)"] B -->|"docs: / chore: / ci:"| F[Release Tetiklenmez]

Conventional Commits Zorunluluğu

Her PR başlığı şu prefix'lerden biriyle başlamalıdır:

Prefix Anlam Release Etkisi
feat: Yeni özellik Minor versiyon
fix: Hata düzeltme Patch versiyon
docs: Dokümantasyon Release yok
chore: Bakım işleri Release yok
refactor: Kod iyileştirme Release yok
test: Test ekleme/düzeltme Release yok
ci: CI/CD değişikliği Release yok
feat!: Kırıcı değişiklik Major versiyon

Prefix Seçim Kuralı (KRİTİK)

Mevcut bir kurala veri eklemek (kelime, terim, swap girişi) yeni bir özellik DEĞİLDİR.

Bu ayrım versiyon numarasını doğrudan etkiler. Yanlış prefix gereksiz versiyon artışına neden olur.

Değişiklik Doğru prefix Neden
Yeni .yml kural dosyası oluşturma feat: Yeni mekanizma ekleniyor
Yeni mekanizma / özellik ekleme feat: Projenin kapsamı genişliyor
Mevcut kurala kelime/terim ekleme fix: Mevcut mekanizmaya veri ekleniyor
accept.txt'ye terim ekleme fix: Mevcut sözlük genişletiliyor
False positive düzeltme fix: Hata gideriliyor
Kural silme / yeniden adlandırma feat!: Kırıcı değişiklik

Örnek:

# ✅ DOĞRU: Mevcut kurala kelime eklemek
git commit -m "fix(plaza): Katman 1 teknik terimlerinin Türkçe karşılıkları eklendi"

# ❌ YANLIŞ: Kelime eklemek feat değildir!
git commit -m "feat(plaza): yeni teknik terimler eklendi"

# ✅ DOĞRU: Yeni kural dosyası oluşturmak
git commit -m "feat(rules): Fabrika jargonu kuralı eklendi"

Güvenlik Katmanları

Kullanıcıların asla hatalı bir sürüm görmemesi için 6 katmanlı koruma:

graph TD A[Geliştirici Kodu Yazar] --> B["1. Branch Protection<br/>Doğrudan push yasak"] B --> C["2. PR Zorunluluğu<br/>Her değişiklik incelenir"] C --> D["3. Conventional Commits<br/>PR başlığı formatı zorunlu"] D --> E["4. CI Testleri<br/>4 job, 2 platform, tümü yeşil"] E --> F["5. release-please<br/>Otomatik versiyon + CHANGELOG"] F --> G["6. Otomatik Release<br/>İnsan müdahalesi yok"] G --> H["Kullanıcı Güvende"]

Katkıda Bulunan Tipleri

Tip İş Akışı PR Kuralı
Dış geliştirici Fork → Branch → PR Conventional commit zorunlu
Denomas ekibi Branch → PR Conventional commit zorunlu
AI ajan Branch → PR Conventional commit zorunlu, test zorunlu
Dependabot Otomatik PR Patch/minor otomatik merge

Hızlı Referans

# 1. Fork ve clone
git clone https://github.com/KULLANICI/Turkce-yazim-denetimi.git
cd Turkce-yazim-denetimi

# 2. Branch oluştur
git checkout -b feat/yeni-ozellik

# 3. Geliştir ve test et
vale --config=.vale.ini fixtures/clean.md   # 0 hata
vale --config=.vale.ini fixtures/dirty.md   # hatalar bulunmalı

# 4. Commit (conventional format)
git commit -m "feat: yeni kural eklendi"

# 5. Push ve PR aç
git push origin feat/yeni-ozellik
# GitHub'da PR oluştur