Otomatik Changelog Sistemi

Commit mesajlarından otomatik olarak versiyon yükseltme, changelog oluşturma ve git tag atma işlemlerini yapan sistem.

Araçlar: release-it · commitlint · husky · lint-staged


Proje Yapisi

app/
├── assets/style/index.css   ← stiller
├── layouts/default.vue      ← layout
└── pages/index.vue          ← sayfa
content/
└── index.md                 ← bu döküman
.husky/                      ← git hook'ları
commitlint.config.js         ← commit kuralları
.release-it.json             ← release konfigürasyonu

Sistem Nasil Calisir

Üç katmandan oluşur:

  1. Commit aşamasıhusky + commitlint her commit'i kurala göre doğrular
  2. Lint aşamasılint-staged sadece değişen dosyaları lint eder
  3. Release aşamasırelease-it commit geçmişini okuyarak versiyon ve changelog üretir

Adim 1 Commit Formati

Her commit şu formata uymak zorunda (commitlint.config.js ile zorunlu kılındı):

<type>: <açıklama>

header-max-length kuralı gereği başlık en fazla 100 karakter olabilir, nokta ile bitemez.

Commit Turleri

TürBölüm (CHANGELOG)Ne Zaman
featFeaturesYeni özellik
fixBug FixesHata düzeltmesi
docsDocumentationDöküman değişikliği
styleStylesBiçim, boşluk (mantık yok)
refactorRefactoringYeniden yazım
perfPerformanceHız iyileştirmesi
testTestsTest ekleme/güncelleme
buildBuild SystemBuild sistemi
ciContinuous IntegrationCI/CD değişikliği
choreChoresGenel bakım
revertRevertsGeri alma

Gecerli Commitler

git commit -m "feat: dark mode eklendi"
git commit -m "fix: mobil menü taşma sorunu düzeltildi"
git commit -m "docs: kurulum adımları güncellendi"
git commit -m "chore: pnpm lockfile güncellendi"

Gecersiz Commitler

git commit -m "update stuff"  type yok
git commit -m "Feat: bir şey"  büyük harf type
git commit -m "fix: düzeltildi."  nokta ile bitiyor
git commit -m ""  boş mesaj

Adim 2 Husky Git Hooklari

prepare scripti (pnpm prepare) Husky'yi kurar. İki hook çalışır:

Pre Commit

Commit öncesi lint-staged çalıştırır:

# .husky/pre-commit
pnpm lint-staged

lint-staged sadece stage edilmiş dosyalara bakar (package.json'dan):

{
  "*.{js,ts,vue}": ["eslint --fix", "prettier --write"],
  "*.{css,scss,json,md}": ["prettier --write"]
}

Lint hatası varsa commit durur.

Commit Msg

Commit mesajını commitlint ile doğrular:

# .husky/commit-msg
pnpm commitlint --edit $1

Format yanlışsa commit durur ve hata gösterir.


Adim 3 Release

Dry Run

Önce ne olacağını gör, hiçbir şey değişmez:

pnpm release:dry

Çıktı şuna benzer:

» Changelog:
## v0.2.0

### Features
- dark mode eklendi

### Bug Fixes
- mobil menü taşma sorunu düzeltildi

» package.json: 0.1.0 → 0.2.0
» Commit: chore(release): v0.2.0
» Tag: v0.2.0

Gercek Release

pnpm release otomatik versiyon (commit'lere göre)
pnpm release:patch    ← zorla patch  0.1.0 → 0.1.1
pnpm release:minor    ← zorla minor  0.1.0 → 0.2.0
pnpm release:major    ← zorla major  0.1.0 → 1.0.0

requireCleanWorkingDir: true olduğu için working tree temiz olmalı.

Release Siralama

release-it şunları sırayla yapar:

  1. CHANGELOG.md dosyasını günceller
  2. package.json içindeki version'ı yükseltir
  3. Git commit atar: chore(release): v0.2.0
  4. Git tag koyar: v0.2.0

Adim 4 Versiyonlama Kurali

release-it commit türlerine göre versiyonu otomatik belirler:

Commit TürüVersiyon DeğişimiÖrnek
fix, docs, style...patch0.1.0 → 0.1.1
featminor0.1.0 → 0.2.0
BREAKING CHANGEmajor0.1.0 → 1.0.0

Breaking change için commit footer'ına eklenir:

git commit -m "feat!: API tamamen yeniden yazıldı

BREAKING CHANGE: eski endpoint'ler kaldırıldı"

Tam Workflow

# 1. Değişiklik yap
git add .

# 2. Commit at (husky otomatik lint + format çalıştırır)
git commit -m "feat: yeni özellik eklendi"

# 3. Önizle
pnpm release:dry

# 4. Release al
pnpm release

Ornek Changelog Ciktisi

CHANGELOG.md otomatik oluşturulur (.release-it.jsoninfile: CHANGELOG.md):

## v0.2.0 (2025-01-15)

### Features

- yeni özellik eklendi

### Bug Fixes

- mobil menü sorunu düzeltildi

### Documentation

- kurulum adımları güncellendi

Versiyonlama

VersiyonAçıklama
0.0.xErken geliştirme, kararsız
0.1.xKullanılabilir, geliştiriliyor
1.0.0Stabil, production-ready

Şu an: v0.1.0


Notlar

  • requireCleanWorkingDir: true — release öncesi git status temiz olmalı
  • pnpm@10.28.2 — workspace destekli, lockfile commit'lenmeli
  • GitHub release kapalı (.release-it.json"github": { "release": false })
  • packageManager alanı pnpm versiyonunu kilitler, farklı versiyonla kurulum hata verir