작성자 : 김다희
여기 문서 참고해서 husky를 다운로드 합니다.
다운로드 하고나면 프로젝트 루트 경로 밑에 .husky / node_modules / package-lock.json 이 생긴다.
루트 경로 밑에 package.json을 만들어준다.
{
"scripts": {
"prepare": "husky install"
},
"devDependencies": {
"husky": "^7.0.0"
}
}
.husky 하위에 prepare-commit-msg 를 만들어주자.
chmod 777 prepare-commit-msg 로 권한을 바꿔주자. (777까지는 아니여도 된다.)
prepare-commit-msg 는 아래랑 같은데 이건 커밋 규칙에 따라 바꿔주면 된다.
#!/bin/bash
Font_RED='\\\\033[91m'
Font_CLEAR='\\\\033[0m' # No Color
PREFIX_LIST=(
feat
fix
refactor
chore
)
if [ -z "$BRANCHES_TO_SKIP" ]; then
BRANCHES_TO_SKIP=("main" "develop" "release" "hotfix")
fi
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_NAME="${BRANCH_NAME##*/}"
JIRA_ID=`echo $BRANCH_NAME | egrep -o '^\\\\w.-[0-9]+'`
JIRA_ID=`echo $JIRA_ID | tr '[:lower:]' '[:upper:]'`
COMMIT_MESSAGE="$(cat $1)"
PREFIX=`echo $COMMIT_MESSAGE | cut -d ':' -f1 | sed 's/ *$//g'`
MESSAGE=`echo $COMMIT_MESSAGE | cut -d ':' -f2`
BRANCH_EXCLUDED=$(printf "%s\\\\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "$JIRA_ID" $1)
TICKET=[$(git rev-parse --abbrev-ref HEAD | grep -Eo '^(\\\\w+/)?(\\\\w+[-_ ])?[0-9]+' | grep -Eo '(\\\\w+[-])?[0-9]+' | tr "[:lower:]" "[:upper:]")]
if [[ $BRANCH_EXCLUDED -eq 1 || "$COMMIT_MESSAGE" == "$TICKET"* ]];then
exit 0;
fi
if ! [[ "$COMMIT_MESSAGE" =~ ":" ]];then
printf "${Font_RED}Prefix 구분을 위해 : (세미콜론)이 필요합니다.${Font_CLEAR}\\\\n"
exit 1
fi
if !(printf '%s\\\\n' "${PREFIX_LIST[@]}" | grep -xq $PREFIX); then
printf "${Font_RED}[${PREFIX}] 는 존재 하지 않는 Prefix 입니다.${Font_CLEAR}\\\\n"
echo "사용가능한 Prefix 목록"
printf '%s\\\\n' "${PREFIX_LIST[@]}"
exit 1
fi
if [ -n $JIRA_ID ] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
echo "[$JIRA_ID] $PREFIX: $MESSAGE" > $1
fi