Git Hooks로 린트 자동화 하기

alsdl0629·2024년 3월 15일
0

기술 적용

목록 보기
5/6
post-thumbnail

이번 글에서는 Git Hooks를 통해 반복적인 작업을 자동화 하는 방법에 대해 정리해 보려고 합니다.

Git Hooks란?

Git에서 특정 이벤트 발생 시 자동으로 특정 스크립트를 실행할 수 있도록 해줍니다.
push, commit, merge 전/후에 원하는 기능을 실행할 수 있습니다.
이외에도 다양한 훅이 있습니다.(링크)

Git Hooks를 적용한 이유

프로젝트에서 코드 일관성 유지를 위해 Detekt를 사용하고 있습니다.
Detekt 덕분에 코드 관리를 쉽게할 수 있지만 매번 코드 작업 후 직접 린트를 실행해야되기 때문에 번거롭다고 생각했습니다.

그리고 수동 작업이기 때문에 작업하는 사람이 린트를 실행하지 않으면
매번 코멘트를 남기기도 했습니다.

그래서 위와 같은 불편함을 없애기 위해 Git Hooks를 사용해서
린트를 자동으로 실행할 수 있도록 만들었습니다.

Git Push 시 린트 자동 실행

먼저 project_root경로/.githooks에 실행할 스크립트 파일을 생성했습니다.
저는 git push하기 전에 린트를 자동 실행할 수 있도록 pre-push 훅을 사용했습니다.

# pre-push
#!/bin/bash

ROOT=$(git rev-parse --show-toplevel)
cd $ROOT

./gradlew detekt

그리고 프로젝트 루트 경로에서 git config core.hooksPath .githooks 명령어를 실행하면 스크립트 파일 내용이 적용됩니다.

이후 git push를 해보면 Detekt가 자동으로 작동하는 것을 확인할 수 있습니다.

Gradle Task 만들기

위에서 git config core.hooksPath .githooks 명령어를 실행해야
pre-push 훅을 적용할 수 있다고 언급했습니다.

이 방식은 작업하는 사람이 각자 명령어를 실행시켜야 되기 때문에
좀 더 간편하게 적용할 수 있도록 Gradle Task를 만들었습니다.

tasks.register<Copy>("installGitHooks") {
    from(file("$rootDir/.githooks")) // 복사
    into(file("$rootDir/.git/hooks")) // 붙이기
    fileMode = "0775".toInt() // 실행 권한 부여
}

이제 작업하는 사람은 명령어 또는 Gradle Task로 Git Hooks를 쉽게 적용할 수 있습니다.

느낀점

Git Hooks린트 실행 자동화를 통해 개발하면서 신경 써야할 요소를 하나 줄였고,
리뷰어 입장에서도 기능 관련 코드를 집중적으로 리뷰할 수 있어서
코드를 전보다 효율적으로 관리할 수 있게 되었습니다.

그리고 지난번 Flyway 적용에 이어 또 다시 자동화할 수 있는 요소를 추가해서 더 뿌듯한 것 같습니다.

이 글을 읽고 계신 분들 중 린트를 사용하신다면 Git Hooks와 함께 사용해보시면 좋을 것 같습니다! 🎉🎉🎉


참고 자료 🙇🙇🙇

https://git-scm.com/book/ko/v2/Git%EB%A7%9E%EC%B6%A4-Git-Hooks
https://fobidlim.medium.com/git-hooks-lint%EB%A1%9C-%EC%BD%94%EB%93%9C%EC%8A%A4%ED%83%80%EC%9D%BC-%ED%86%B5%EC%9D%BC-a2577f609cfb

profile
인풋보다 아웃풋

0개의 댓글