Skip to content

릴리즈 브랜치를 활용한 새로운 배포 워크플로우 구현 #190

@Seungwoo321

Description

@Seungwoo321

🎯 목표

vue3-pivottable 프로젝트의 릴리즈 프로세스를 개선하여 main 브랜치 보호를 유지하면서도 자동화된 릴리즈를 가능하게 합니다.

📋 최종 릴리즈 전략

릴리즈 플로우

feature → develop (Beta 배포) → main → release/vX.X.X (Stable 배포) → PR back to main

브랜치별 역할

  1. develop 브랜치

    • 모든 feature 브랜치가 머지되는 통합 브랜치
    • Changesets 소비 및 버전 업데이트
    • Beta suffix 추가 (timestamp 기반)
    • 품질 검증 (ESLint, TypeScript, Build)
    • npm @beta 태그로 자동 배포
  2. main 브랜치

    • Production-ready 코드만 존재
    • 브랜치 보호 규칙 적용 (직접 push 불가)
    • release 브랜치 자동 생성 트리거
  3. release/vX.X.X 브랜치

    • main 브랜치 보호를 위한 임시 브랜치
    • Beta suffix 제거 (코드 변경 없음)
    • 품질 검증 후 npm @latest 배포
    • main으로 PR 생성하여 동기화

하위 패키지 독립성

각 패키지는 독립적으로 버전 관리 및 배포:

  • vue-pivottable (메인 패키지)
  • @vue-pivottable/plotly-renderer
  • @vue-pivottable/lazy-table-renderer

Changesets 설정 ("linked": [], "fixed": [])으로 독립성 보장

상세 문서

✅ 완료된 작업

1. 기존 정리

  • 불필요한 브랜치 삭제 (release, main-to-release)
  • semantic-release 완전 제거
  • TypeScript 버전 유지 (cb4590c 커밋 기준)

2. Changesets 구현

  • Changesets 설치 및 설정
  • 독립적 패키지 버전 관리 설정
  • 가이드 문서 작성

3. 워크플로우 구현

  • PR 검증 (pr-check.yml)

    • 모든 패키지 lint/typecheck
    • 빌드 검증
    • Changeset 존재 확인
  • Beta 배포 (release-develop.yml)

    • develop push 시 자동 실행
    • Changesets 소비
    • 품질 검증 추가
    • Beta 버전 npm 배포
  • Stable 배포 (release.yml)

    • main push 시 자동 실행
    • Beta suffix 제거만 수행
    • 품질 검증 추가
    • release 브랜치에서 배포
    • main으로 PR 생성

4. 품질 개선

  • 모든 워크스페이스 패키지 검증 추가
  • Husky pre-commit 훅 설정
  • TypeScript 체크 lint-staged 추가

5. 빌드 오류 수정

  • 하위 패키지의 vue-pivottable 참조 문제 해결
  • node_modules에서 참조하도록 vite.config.ts 수정

6. 문서화

  • RELEASE_STRATEGY.md 작성
  • Mermaid 다이어그램으로 플로우 시각화
  • 트러블슈팅 가이드 포함

🎉 기대 효과

  1. 자동화: develop/main push만으로 자동 배포
  2. 품질 보장: 모든 단계에서 lint/typecheck/build 검증
  3. 독립성: 각 패키지가 필요할 때만 배포
  4. 투명성: Beta 테스트 후 동일 코드가 stable로 승격
  5. 보안: main 브랜치 보호 규칙 유지

📝 참고사항

  • GitHub App 불필요 (APP_ID, APP_PRIVATE_KEY 삭제 가능)
  • 각 패키지는 독립적인 changeset으로 관리
  • Beta 버전으로 충분한 테스트 후 stable 배포

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions