우테코나 프로젝트를 하면서 ktlint 나 Unit Test 명령어를 기입한 후 PR을 올리는 것을 자주 까먹었다..
./gradlew ktlintCheck ---- .editorConfig 를 기반으로 lint check
./gradlew clean test --- Unit test
만약, Github Action 과 같은 CI/CD tool을 PR을 열 때 설정해 두었다면 이를 추후 확인할 수 있다.
그러나, 내 컴퓨터에서 명령어를 돌리는 것은 30초도 안걸리는데
Github Action 의 경우에는 상대적으로 엄청 오래 걸린다..
🤔 push 하기 전에 자동으로 lint check 해주는 방법이 없을까??
Git Hook
란 Git과 관련된 이벤트가 발생했을 때 특정한 스크립트를 실행하는 기능이다.
이 아티클에서는 테스트, 린트 check 자동화하는 방법만 공유할 것이기에
자세한 내용은 공식문서를 참고하길 바란다! 😸
나는 push 를 하기 전에 아래 명령어를 자동으로 실행시키고 싶다.
./gradlew ktlintCheck
./gradlew clean test
이 때, 사용할 수 있는 후크가 클라이언트 후크중 하나인 pre-push
후크이다.
pre-push
후크는 git push
가 실행할 때 미리 설정해둔 스크립트를 동작시킨다.
이때, 만약 설정해둔 스크립트가 실패하면 push
를 중단시킨다!
그럼 어떻게 pre-push
후크를 설정할 수 있는지 확인해보자 💪
현재 path 를 안스 프로젝트 root 로 가정하겠다.
1) 아래 명령어를 cmd 창에 입력하여 hook 폴더로 이동한다.
cd .git/hook
2)pre-commit.sample
파일을 pre-commit.txt
로 확장자를 바꿔준다.
mv pre-commit pre-commit.sample
open .
3) pre-push.txt 폴더를 연 후 아래 내용 넣고 저장해준다.
#!/bin/sh
set -e
######## RUN UNIT TEST HOOK START ########
git stash -q --keep-index <=== 빼도 됨
./gradlew ktFormat
./gradlew test
RESULT=$?
git stash pop -q <=== 빼도 됨
exit $RESULT
######## RUN UNIT TEST HOOK END ########
vim 을 활용하면 2,3 번 과정을 한 번에 할 수 있다~
4) 이제 다시 터미널로 돌아와 아래 명령어를 기입해준다
mv pre-commit.txt pre-commit
chmod +x .git/hooks/pre-commit
끝! 이제 pre-push hook를 설정했다 !
실제로 push를 해보니 잘 동작한다~
앞으로 lint check, test
git hook 를 활용해서 자동화 시켜 놓자!
진짜 편하다 😄
commit 하기 전에 스크립트를 실행시키고 싶다면
pre-commit.sample
파일을 위 방법대로 수정해주면 된다 ㅎㅎ