(Git) Pre commit hook
π μμ± λ°°κ²½
ν νλ‘μ νΈμμ μ½λ νμ§μ λμ΄κΈ° μν λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ΅λλ€. λμ€μ μΌλ‘ CI μμ μ½λ νμ§μ λμ΄κΈ° μν λμμ νκ² λλλ° CI λ¨κ³μμ lint λ ν
μ€νΈμ μ€ν¨νμ¬ μμ
μ΄ μ€λ¨λλ κ²½μ°κ° μ’
μ’
λ°μν©λλ€. νμ§λ§ μ΄λ¬ν λ°©μμ μμ
μκ° μΈ‘λ©΄μ΄λ ν¨μ¨μ± λ©΄μμ μμ¬μ΄ μ μ΄ μμ΅λλ€. μ΄μ CI μ΄μ λ¨κ³μμ κ°λ°μκ° λ λΉ λ₯΄κ² νΌλλ°±μ λ°κ³ , ν¨μ¨μ μΌλ‘ μμ λ° μμ
ν μ μλλ‘ λμμ£Όλ λκ΅¬μΈ pre commit hook μ μκ°ν΄λ³΄λ € ν©λλ€.
νκ²½
κΈμ μμ±λ λ΄μ©μ κΈ°λ³Έμ μΌλ‘ mac νκ²½μ λν μ€λͺ
μ
λλ€.
π μ 3μ€ μμ½
- A
- B
- C
β Pre commit
pre commit hook μ git commit μ μ μλμΌλ‘ νΉμ λμμ μ€ν μν¬ μ μλλ‘ μ€μ νκ³ κ΄λ¦¬ν μ μκ² ν΄μ£Όλ λꡬ μ
λλ€. commit μ μ λμμ νλ©°, μ£Όλ‘ μ½λλ₯Ό ν¬λ§·ν
νκ±°λ λ¦°νΈ κ²μ¬, ν
μ€νΈ μν, νμΌ κ΅¬μ‘° νμΈ, 보μ κ²μ¬ λ±μ μννλ©° μ½λ νμ§μ λμ΄κ±°λ μ μ§ν μ μκ² λμμ€λλ€. λ¨, pre commit hook λ§μΌλ‘λ μμ λμ΄λμ΄ μλ λμμ νλ건 μλλ©°, ν¨κ» μ¬μ©ν ν΄μ΄ νμν©λλ€.
μλ₯Ό λ€μ΄
Python:blackJS:eslint,prettierKotlin:ktlinterTerraform:tfsecλ±μ΄ μμ΅λλ€.
βοΈ Setting
pre commit hook μ μ€μ νλ λ°©λ²μλ μ¬λ¬κ°μ§κ° μμ΅λλ€.
- μλ μ€μ λ°©μ μ¬μ©
pre-commit λꡬ μ¬μ©linterλλ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ λ°©μ μ¬μ©
1. μλ μ€μ λ°©μ μ¬μ©
.git/hooks/pre-commit νμΌ μμ± ν commit μ μ λμνκΈΈ μνλ λμλ€μ μ€ν¬λ¦½νΈλ‘ μμ±νλ©΄ μ½κ² μ€μ μ΄ κ°λ₯νλ€. μλ₯Ό λ€μ΄ kotlin νλ‘μ νΈλ₯Ό ꡬμ±νλλ°, commit μ μ ktlinter κ° λμνκ² νκ³ μΆλ€λ©΄ μλμ κ°μ΄ μμ±ν μ μλ€.
1
2
3
#!/bin/sh
set -e
./gradlew lintKotlin
λ¬Όλ‘ ν΄λΉ νλ‘μ νΈμ ktlinter λΌμ΄λΈλ¬λ¦¬μ λν μ€μ μ΄ μμ΄μΌ νλ€.