본문 바로가기

개발

git hooks, husky를 활용한 초기 세팅 + Jira

 

지난글들 통합+수정+추가 버전

👉https://millersplanet.tistory.com/98

👉https://millersplanet.tistory.com/114

 

 

🔎 참고: git hooks

https://git-scm.com/book/ko/v2/Git%EB%A7%9E%EC%B6%A4-Git-Hooks

 

Git - Git Hooks

여기서 한가지 알아둘 점은 저장소를 Clone 해도 클라이언트 훅은 복사되지 않는다는 점이다. 만든 정책이 반드시 적용되도록 하려면 서버 훅을 이용해야만 하며 작성은 정책 구현하기 부분을 참

git-scm.com

 

 

 

prepare-commit-msg : 커밋 메시지 컨벤션

.git/hooks 폴더

#!/bin/bash

MESSAGE=$(cat $1)

COMMITFORMAT="(Feat|Fix|Docs|Style|Refactor|Design|Comment|Rename|Remove|Teest|!HOTFIX|!BREAKING CHANGE): (.*)"


if ! [[ "$MESSAGE" =~ $COMMITFORMAT ]]; then
  echo ""
  echo " Commit Message 포맷을 아래 예시와 같이 지켜주세요."
  echo " 사용가능한 commit의 Prefix는 아래와 같습니다."
  echo ""
  echo "======================= 반드시 콜론(:) 을 붙여야 합니다. ========================="
  echo ""
  echo "  Feat:             새로운 기능을 추가"
  echo "  Fix:              버그 수정"
  echo "  Design:           CSS 등 사용자 UI 디자인 변경"
  echo "  !BREAKING CHANGE: 커다란 API 변경의 경우"
  echo "  !HOTFIX:          급하게 치명적인 버그를 고쳐야하는 경우"
  echo "  Style:            코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우"
  echo "  Refactor:         코드 리팩토링"
  echo "  Comment:          필요한 주석 추가 및 변경"
  echo "  Docs:             문서 수정"
  echo "  Test:             빌드 업무 수정, 패키지 매니저 수정, 패키지 관리자 구성 등 업데이트, Production Code 변경 없음"
  echo "  Rename:           파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우"
  echo "  Remove:           파일을 삭제하는 작업만 수행한 경우"
  echo ""
  echo "=================================================================================="
  echo ""
  echo -e " 아래 EXAMPLE과 같이 첫째 줄에 Prefix와 함께 요약을 남기고 한 줄 개행 후 상세 내용을 작성해주세요. \n Merge Request 시 Overview에 자동으로 Title, Description 작성이 완료됩니다."
  echo ""
  echo "================================== E X A M P L E ================================="
  echo ""
  echo -e " git commit -m \"Feat: 기능 A 추가\n\n  1. 000파일 추가 \n  2. 2222파일추가\n  3. 00 관련 비즈니스 로직 추가\""
  echo ""
  echo "=================================================================================="
  echo ""
  exit 1
fi

 

더 알아보니 commitlint 쓰는게 나을 것 같다.

https://theodorusclarence.com/shorts/husky-commitlint-prettier

 

Husky, Commitlint, and Prettier Configuration | theodorusclarence.com

Configuration to check commit message, and run prettier pre-commit

theodorusclarence.com

 

 

lint-staged (husky) : Lint 관련

husky, lint-staged 설치

npm install --save-dev husky
npm install --save-dev lint-staged

 

.package.json 수정

{
  ...
  "scripts": {
    ...
  },
  "lint-staged": {
    "src/**/*.{ts,tsx}": [
      "eslint --ext .tsx --ext .ts ./src --fix"
    ],
    "./src/**": [
      "prettier --write ."
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  ...
}

 

post-merge (husky) : git pull 후 npm install 자동화

.husky 폴더

#!/bin/zsh
. "$(dirname "$0")/_/husky.sh"

IFS=$'\n'
# regex supports mono-repos with a package.json at root-level and at package-level
PACKAGE_LOCK_REGEX="(^packages\/.*\/package-lock\.json)|(^package-lock\.json)"
# extract all paths to package-lock.json files 
PACKAGES=("$(git diff --name-only HEAD@{1} HEAD | grep -E "$PACKAGE_LOCK_REGEX")")

if [[ ${PACKAGES[@]} ]]; then
  for package in $PACKAGES; do
    echo "📦 $package was changed. Running npm install to update your dependencies..."
    DIR=$(dirname package)
    cd "$DIR" && npm install
  done
fi

 

 

🚨 bash, zsh 등과 관련해 문제가 생길 경우

스택오버플로우: https://stackoverflow.com/questions/63731706/bash-git-hook-runs-correctly-on-linux-but-fails-on-mac

Write you script like that with the sh shebang and check it with https://www.shellcheck.net/

 

✔️ webhooks로 디스코드 연결하기로 했는데, 채널 설정이 필요해서 매니저님께 문의드리기로 함.

간단하니까 걱정 안해도 될듯.

 

✔️ github actions는 배포 자동화에는 확실히 필요할 것 같고, 수업 들으면서 더 고민해보는 걸로.

 

 

 

💜 Jira 연동

 

일단 Jira > 앱 > 더 많은 앱 살펴보기 > Github for Jira > Get Started 해서 Repository 지정

Jira에서 이슈 생성 👉 브랜치 생성

브랜치 생성된 것 확인, checkout해서 작업

commit 시 Jira 이슈의 티켓 번호를 커밋 메시지 앞에 작성해주면 연동된다.

 

🚨 브랜치 이름이 티켓 번호여야 한다.

pnpm add husky jira-prepare-commit-msg -D
pnpm husky install

 

jira-prepare-commit-msg는 일종의 플러그인

 

.husky/prepare-commit-msg

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

pnpm jira-prepare-commit-msg $1

 

package.json

{
  "jira-prepare-commit-msg": {
    "messagePattern": "[$J] $M",
    "allowEmptyCommitMessage": false,
    "ignoredBranchesPattern": "^(master|main|dev|develop|development|release)$"
  }
}

 

이렇게 연동해두면 Jira에서 커밋 추적이 가능하다.

 

✔️ key, 프로젝트 로고, URL 설정 가능

✔️ 알림은 이메일이 기본으로 설정되어 있는데 슬랙이나 디스코드로도 설정 가능

 

 

Jira 넘 좋다... 사랑에 빠짐...

 

 

➕ 그냥 갑자기... 일기...

이 업계 사람들이랑 사고방식이 다른 것 같아서 좀 당황했는데

사고방식이라기보단 공부방식이 다른 것 같다

어릴때부터 답지 보면서 풀지 말라는 말 제일 싫어했던 사람임을

요즘 다시 체감하고 있다...ㅋㅋㅋㅋㅋ

보면서 천번 하면 시험때 풀린다고~

 

 

➕ 그냥 참고용 gitmoji

https://gitmoji.dev/

 

gitmoji

:truck: Move or rename resources (e.g.: files, paths, routes).

gitmoji.dev

 

 

'개발' 카테고리의 다른 글

github actions  (0) 2024.07.17
vercel 배포 시 주의사항 (vite)  (0) 2024.07.16
yarn berry, zero install  (0) 2024.07.16
New friends  (0) 2024.07.16
Zustand  (0) 2024.07.15