현인

Github release tag 자동화 스크립트 본문

개발 일기

Github release tag 자동화 스크립트

현인(Hyeon In) 2024. 11. 28. 16:51

현재 회사에서 Monorepo 구조로 프로젝트를 관리하고 있는데, Release Tag를 수동으로 찍고 있어서 불편하다고 느꼈다.

Release Tag를 찍으려면 package.json 버전을 올리고, 컨벤션에 맞춰서 tag를 생성한 뒤 올려야 하는데 매번 수동으로 작업하면 실수할 수도 있고 귀찮기도 하니 스크립트로 구현했다.

내가 원한 기능은 ‘release <project-name>’ 명령어를 입력하여 release tag를 작성하는 것이었다.

먼저 스크립트는 아래 처럼 구현했다.

#!/bin/bash

# 명령어 입력 확인
if [ $# -eq 0 ]; then
  echo "❌ Usage: release <project-name>"
  exit 1
fi

# 프로젝트 이름
project_name=$1

# 프로젝트 경로 설정, 모노레포라서 apps 디렉토리 하위로 프로젝트들이 나눠져 있다.
project_path="/Users/choehyeon-in/Desktop/Project/frontend-monorepo/apps/$project_name"

# package.json 경로 등록
package_json_path="$project_path/package.json"

echo $package_json_path

# package.json 존재 여부 확인
if [ ! -f "$package_json_path" ]; then
  echo "❌ Error: $package_json_path not found. Ensure the project name is correct."
  exit 1
fi

# 현재 버전 가져오기
current_version=$(jq -r ".version" "$package_json_path")

if [ -z "$current_version" ]; then
  echo "❌ Error: Unable to find 'version' in $package_json_path."
  exit 1
fi

# 버전 자동 증가 (Patch 레벨 증가)
IFS='.' read -r major minor patch <<< "$current_version"
new_version="$major.$minor.$((patch + 1))"

 버전 업데이트
jq ".version = \\"$new_version\\"" "$package_json_path" > "$package_json_path.tmp" && mv "$package_json_path.tmp" "$package_json_path"

echo "📦 Updated version: $current_version -> $new_version"

# Git 커밋
git add .
HUSKY=0 git commit -m "chore($project_name): bump version to $new_version"

# 여기서 브랜치도 push 하고 싶으면 해도 된다.
# branch_name=$(git rev-parse --abbrev-ref HEAD)
# git push origin "$branch_name"

# 태그 생성
tag_name="release-$project_name-$new_version"
git tag "$tag_name"

# 태그 푸시
git push origin "$tag_name"

echo "✅ Release tag '$tag_name' has been created and pushed."

위와 같이 release.sh 스크립트를 작성한 뒤, 실행 권한을 부여한다.

chmod +x release.sh 

이제 해당 스크립트 파일을 전역 명령어로 등록 한다.

sudo mv release /usr/local/bin/release

근데 mv로 옮기면 추후 수정할 때 불편하니 cp로 옮기고 원본 파일로 수정하는게 편할 것이다.

아무튼 위 작업이 다 끝났으니, 실행해보자

release <project-name>

실행 후

✅ Release tag '$tag_name' has been created and pushed.

위 내용이 나오면 성공한 것이다.

반응형