π€ μλνλ κ·μ½ κ²μ¬ νκ²½
μ΄ νλ‘μ νΈλ huskyβλ₯Ό μ¬μ©νμ¬ Git Hookμ μ€μ νκ³ , μ»€λ° μ μ μ½λ νμ§μ μλμΌλ‘ κ²μ¬νλ νκ²½μ ꡬμ±νκ³ μμ΅λλ€. μ΄ νκ²½μ μ½λ μμ± μ λ°μν μ μλ μ€λ₯λ₯Ό μ¬μ μ λ°©μ§νκ³ , μΌκ΄λ μ½λ μ€νμΌμ μ μ§νλ λ° λμμ μ€λλ€.
β¬οΈ μ€μΉ λ° μ€μ
λ£¨νΈ package.json
νμΌμ μ μλ prepare
μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ huskyλ₯Ό μ€μΉνκ³ μ΄κΈ°ννλλ‘ μ€μ λμ΄ μμ΅λλ€.
μ¦, λ‘컬 νκ²½μμ pnpm install
λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ μλμΌλ‘ huskyκ° μ€μΉλκ³ , Git Hookμ΄ μ€μ λ©λλ€.
{
"scripts": {
"prepare": "husky install"
}
}
βοΈ Git Hook
λ£¨νΈ λλ ν 리μ .husky
ν΄λμ Git Hook μ€ν¬λ¦½νΈλ€μ΄ μμΉνκ³ μμ΅λλ€.
pre-commit
pre-commit
ν
μ μ»€λ° μ μ μ€νλλ©°, λ€μ μμ
μ μνν©λλ€:
- Linting:
eslint
λ₯Ό μ¬μ©νμ¬ μ½λ μ€νμΌκ³Ό νμ§μ κ²μ¬ν©λλ€. - Formatting:
prettier
λ₯Ό μ¬μ©νμ¬ μ½λ ν¬λ§·ν μ μ μ©ν©λλ€. - Type Checking:
tsc --noEmit
λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ TypeScript νμ κ²μ¬λ₯Ό μνν©λλ€.
pre-commit
ν
μμ μ€ννλ λͺ
λ Ήμ΄λ€μ λͺ¨λ Turbo task λ‘ μ μλμ΄ μμ΅λλ€.
μ¦, μ΄ ν
μ Turboμ μΊμ± λ° λ³λ ¬ μ€ν κΈ°λ₯μ νμ©νμ¬ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μμ
μ μνν©λλ€.
echo "π commit μ΄μ μ lint κ·μΉμ μ μ©ν©λλ€..."
if (
pnpm run lint &&
pnpm run format:check &&
pnpm run check-types
); then
echo "β
λͺ¨λ lint κ·μΉμ΄ μ±κ³΅μ μΌλ‘ μ μ©λμμ΅λλ€."
exit 0
else
echo "β lint κ·μΉ κ²μ¬μμ μ€λ₯κ° λ°μνμ΅λλ€."
exit 1
fi
commit-msg
commit-msg
ν
μ commitlint
CLI λ₯Ό μ¬μ©νμ¬ μ»€λ° λ©μμ§κ° κ·μ½μ λ§λμ§ κ²μ¬ν©λλ€.
κ²μ¬ κ²°κ³Ό κ·μ½μ λ§μ§ μλ κ²½μ°, 컀λ°μ΄ κ±°λΆλ©λλ€.
COMMIT_MESSAGE_FILE=$1
COMMIT_MESSAGE=$(cat "$COMMIT_MESSAGE_FILE")
echo "β€οΈβπ©Ή Commit Message: $COMMIT_MESSAGE"
npx commitlint --edit $1
if [ $? -eq 0 ]; then
echo "π Commit message meets the convention π"
exit 0
else
echo "β Commit message does not meet the convention β"
exit 1
fi