Conventional commitlint Setup

ဘာကြောင့် conventional git commit ကိုသုံးသင့်တာလည်း?

ကျွန်တော့်တို့အနေနဲ့ project တွေကို github ပေါ်မာတင်တဲ့ အခါ git commit တွေကို ပေါက်ကရမဖြစ်ဖို့လိုပါတယ်။ ကျွန်တော်တို့အနေနဲ့ git commit တွေကို စနစ်တကျရေးသားဖို့လိုပါမယ်။ ဒါမှသာ ဘယ် commit မှာတော့ ဘာတွေ လုပ်ခဲ့လည်း ဆိုတာကို သိရမာ ဖြစ်ပါတယ်။

ကျွန်တော်တို့ အနေနဲ့ ကိုယ့် project မှာ commit lint cli နဲ့ conventional commit message ကို အသုံးပြုဖို့ setup လုပ်ပါမယ်။ ကျွန်တော်ကတော့ Next.js project မာ setup လုပ်ပြမာ ဖြစ်ပါတယ်။

ပထမဆုံးအနေနဲ့ husky ကို install လုပ်ပါမယ်။

Husky ဆိုတာက project တခုရဲ့ commit message တွေ, code တွေ, testing တွေကို commit လုပ်တာတွေ, pushing လုပ်တာတွေပေါ်မာမူတည်ပီး အလုပ်လုပ်ပေးတဲ့ကြားခံဖြစ်ပါတယ်။

npm install --save-dev husky

husky ကို project မာ initialize လုပ်ပါမယ်

npx husky init

Initialize လုပ်ပီးရင် package.json က script မာ "prepare": "husky" ဆိုတာထည့်ပါမယ်။ ပီးတဲ့အခါမှာ git initialize ကို တဆင့်ချင်းလုပ်သွား ပါမယ်....

git init
 
git branch -M main
 
git remote add origin https://your-host-url

ပိးရင်တော့ commit-lint cli နဲ့ conventional commit package ကို install လုပ်ပါမယ်။

npm install --save-dev @commitlint/config-conventional @commitlint/cli

Install လုပ်ပီးရင်တော့ conventional configuration file တည်ဆောက်ပါမယ််။ ကိုယ်ဘာသာ ကြိုက်ရာနည်းနဲ့ဆောက်လို့ရပါတယ်။ ကျတော်ကတော့ command line ကနေ ဆောက်ပါမယ်။

echo "export default {extends: ['@commitlint/config-conventional']};" > .commitlintrc.ts

Script run ပီးရင် .commitlintrc.ts ဆိုတဲ့ file တစ်ခု project ထဲမာ ရောက်နေပါလိမ့်မယ်။ ထိုဖိုင်ထဲ မာ rule တွေသက်မှတ်ထားလို့ရပါတယ်။ ဒီပို့စ်မာတော့ rule တွေ ကို အသုံးပြုပြမှာမဟုတ်ပါဘူး။

Rule တွေအကြောင်းကို ဒီလင့်ကနေ သွားကြည့်လို့ရပါတယ်။ Commit message တွေအကြောင်းကိုလည်း ဒီလင့်ကနေသွားကြည့်လို့ရပါတယ်

ပီးရင်တော့ husky နဲ့ချိတ်ပါမယ် commitlint-cli ကို

echo "npx --no -- commitlint --edit $1" > .husky/commit-msg

Husky မှာ configure လုပ်ပီးပီးဆိုတော့ စမ်းကြည့်လိုက်ရအောင်

git add .
 
git commit -m 'init: setup commitlint with husky'
 
git push origin -u main

တကယ်လို့ commit message က ပေါက်ကရဖြစ်ခဲ့မယ်ဆို အောက်က error တက်ပါလိမ့်မယ်။

   input: not conventional commit
   subject may not be empty [subject-empty]
   type may not be empty [type-empty]
 
   found 2 problems, 0 warnings
   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
 
husky - commit-msg script failed (code 1)

Enjoyed the article? 😍