현인
Github release tag 자동화 스크립트 본문
현재 회사에서 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.
위 내용이 나오면 성공한 것이다.
반응형
'개발 일기' 카테고리의 다른 글
echarts yAxis Label width 설정 (0) | 2024.11.27 |
---|---|
npm error code EUNSUPPORTEDPROTOCOL; npm error Unsupported URL Type "link:": link:dummy.js (1) | 2024.11.15 |
[React] 텍스트 개행 처리 (0) | 2023.10.27 |
[TypeScript] 동적 키 타입 정의 (1) | 2023.10.25 |
[Javascript] Date.getHours 시간 안 맞는 문제 (1) | 2023.08.23 |