Semua commit WAJIB mengikuti Conventional Commits. Validasi otomatis dengan commitlint via lefthook.
Format
<type>(<scope>): <description>
<body>
<footer>
Commit Types
| Type | Kegunaan |
|---|---|
feat | Fitur baru |
fix | Perbaikan bug |
chore | Tugas maintenance, dependencies, tooling |
docs | Perubahan dokumentasi |
refactor | Refaktor kode (bukan fitur/fix) |
style | Perubahan format (spasi, prettier, dll) |
test | Nambah atau perbaiki test |
perf | Optimasi performa |
ci | Perubahan CI config |
build | Build system atau dependency |
revert | Revert commit sebelumnya |
Scope
Scope opsional, gunakan untuk konteks tambahan:
feat(auth): add OAuth2 Google login
fix(api): handle empty request body
chore(deps): upgrade eslint to v10
Contoh Baik
feat: add student registration endpoint
Implement POST /api/v1/students dengan validasi NIM.
Integrasi dengan queue service untuk sending email.
fix(parser): handle null input in date formatter
Closes #42
chore: setup lefthook and commitlint
- Add lefthook for pre-commit hooks
- Add commitlint with conventional config
- Configure parallel lint + format jobs
Aturan
- Pakai bahasa Inggris untuk konsistensi
- Imperative mood: “add” bukan “added”/“adds”
- Deskripsi singkat (maks 72 karakter)
- Jangan titik di akhir description
- Body untuk menjelaskan kenapa, bukan apa
Config
commitlint.config.mjs:
export default {
extends: ["@commitlint/config-conventional"],
};