suyeonme

[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(Commit전 console.log 제거) 본문

프로그래밍👩🏻‍💻/Git

[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(Commit전 console.log 제거)

suyeonme 2024. 5. 16. 17:12

Commit 대상 파일에 console.log가 포함되어있는 경우, commit 막기

Git flow 전략을 사용해서 브랜치를 관리하는 경우, master 브랜치는 곧 배포 브랜치입니다. 따라서 브랜치에 작업물을 Commit하는 경우, console이 포함되어있다면 Github Hook을 이용하여 commit을 못하도록 막을 수 있습니다.

 

보편적으로 운영환경에서는 console을 제거합니다. 이유는 다음과 같습니다. 

  1. console에는 민감정보를 포함할 수 있습니다.
  2. console로 번들사이즈가 늘어납니다.

스크립트 작성하기

(1) 스크립트 파일 생성 및 작성

저의 경우, script/check-console.sh 파일을 생성했습니다. 해당 스크립트는 husky가 설치된 루트에 위치시킵니다.

아래는 기본적으로 메세지를 띄우는 스크립트입니다.

#!/usr/bin/env sh

# 커밋 대상 파일에 console.log가 포함되어있는지 확인
if git diff --cached --name-only --diff-filter=ACMRT | xargs grep -i 'console\.log' --with-filename --line-number; then
  echo "COMMIT REJECTED!  Please remove console."
  exit 1
fi

 

텍스트에 색상을 입히고 싶은 경우, 다음과 같이 스크립트를 작성합니다.

#!/usr/bin/env sh

red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
no_color='\033[0m'

# 커밋 대상 파일에 console.log가 포함되어있는지 확인
if git diff --cached --name-only | xargs grep -i 'console\.log' --with-filename --line-number;
then
    echo -e "\n${red}COMMIT REJECTED!  Please remove console."
    exit 1;
fi
echo -e "${green}SUCCESS! No console is found."
exit 0;

 

(2) pre-commit 파일에 스크립트 추가

.husky/pre-commit 파일에 작성한 스크립트를 추가합니다.

#!/usr/bin/env sh

# Check console.log is included in staged files
sh scripts/check-console.sh

저의 경우, 모노레포로 구성된 프로젝트라서 아래와 같이 작성해주었습니다.

#!/usr/bin/env sh

# 현재 스크립트 파일이 위치한 디렉토리를 기준으로 .husky.sh 파일을 실행
. "$(dirname -- "$0")/_/husky.sh"

cd packages/backend

# Check console.log is included in staged files
sh scripts/check-console.sh

(3) 테스트

소스코드에 console.log 추가 후, commit을 시도합니다.

  • COMMIT REJECTED! 부분은 소스코드에 console을 추가한 경우입니다.
  • SUCCESS! 부분은 소스코드에 console이 포함되지않은 경우입니다.

Comments