작성자 : 김다희

  1. 여기 문서 참고해서 husky를 다운로드 합니다.

  2. 다운로드 하고나면 프로젝트 루트 경로 밑에 .husky / node_modules / package-lock.json 이 생긴다.

  3. 루트 경로 밑에 package.json을 만들어준다.

    {
      "scripts": {
        "prepare": "husky install"
      },
      "devDependencies": {
        "husky": "^7.0.0"
      }
    }
    
  4. .husky 하위에 prepare-commit-msg 를 만들어주자.

  5. chmod 777 prepare-commit-msg 로 권한을 바꿔주자. (777까지는 아니여도 된다.)

  6. 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