diff --git a/.changeset/lazy-release-test.md b/.changeset/lazy-release-test.md new file mode 100644 index 0000000..74e0006 --- /dev/null +++ b/.changeset/lazy-release-test.md @@ -0,0 +1,5 @@ +--- +"@vue-pivottable/lazy-table-renderer": patch +--- + +test: 릴리즈 워크플로우 테스트 \ No newline at end of file diff --git a/.changeset/lazy-test-again.md b/.changeset/lazy-test-again.md new file mode 100644 index 0000000..b76b9d9 --- /dev/null +++ b/.changeset/lazy-test-again.md @@ -0,0 +1,5 @@ +--- +"@vue-pivottable/lazy-table-renderer": patch +--- + +test: main 워크플로우 수정 확인 \ No newline at end of file diff --git a/.github/workflows/backup/create-release-pr.yml b/.github/workflows/backup/create-release-pr.yml new file mode 100644 index 0000000..b87d21b --- /dev/null +++ b/.github/workflows/backup/create-release-pr.yml @@ -0,0 +1,34 @@ +name: Create Release PR + +on: + push: + branches: + - main + +jobs: + create-release-pr: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + with: + ref: release + + - name: Reset main branch + run: | + git fetch origin main:main + git reset --hard main + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + branch: main-to-release + commit-message: 'chore: sync main to release [skip ci]' + title: 'chore: sync main to release' + body: | + 이 PR은 main 브랜치의 변경사항을 release 브랜치로 동기화합니다. + + 이 PR이 머지되면 release 워크플로우가 자동으로 트리거됩니다. diff --git a/.github/workflows/backup/release-lazy-table-renderer.yml b/.github/workflows/backup/release-lazy-table-renderer.yml new file mode 100644 index 0000000..8666278 --- /dev/null +++ b/.github/workflows/backup/release-lazy-table-renderer.yml @@ -0,0 +1,77 @@ +# name: Release lazy-table-renderer + +# on: +# push: +# branches: +# - release +# paths: +# - 'packages/lazy-table-renderer/**' + +# jobs: +# release: +# name: Release +# runs-on: ubuntu-latest +# permissions: +# contents: write +# issues: write +# pull-requests: write +# id-token: write +# steps: +# - name: Checkout +# uses: actions/checkout@v4 +# with: +# fetch-depth: 0 + +# - name: Setup Node.js +# uses: actions/setup-node@v3 +# with: +# node-version: '22.10.0' +# registry-url: 'https://registry.npmjs.org/' + +# - name: Setup pnpm +# uses: pnpm/action-setup@v2 +# with: +# version: latest + +# - name: Install dependencies +# run: pnpm install + +# - name: Build +# run: pnpm -F @vue-pivottable/lazy-table-renderer build +# - name: Generate GitHub App Token +# id: generate-token +# uses: tibdex/github-app-token@v1 +# with: +# app_id: ${{ secrets.APP_ID }} +# private_key: ${{ secrets.APP_PRIVATE_KEY }} +# installation_id: ${{ secrets.APP_INSTALLATION_ID }} +# - name: Release +# env: +# GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} +# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} +# NPM_TOKEN: ${{ secrets.NPM_TOKEN }} +# run: | +# cd packages/lazy-table-renderer +# pnpm dlx semantic-release + +# - uses: actions/checkout@v4 +# with: +# ref: main +# - name: Reset release branch +# run: | +# git fetch origin release:release +# git reset --hard release +# - name: Create Pull Request +# if: success() +# uses: peter-evans/create-pull-request@v5 +# with: +# branch: release-to-main +# commit-message: 'chore: update version to latest release [skip ci]' +# title: 'chore: update version to latest release [skip ci]' +# body: | +# 이 PR은 release 브랜치의 최신 버전 정보로 main 브랜치를 업데이트합니다. + +# - package.json 버전 업데이트 +# - CHANGELOG.md 업데이트 + +# 이 PR은 release 워크플로우에 의해 자동으로 생성되었습니다. diff --git a/.github/workflows/backup/release-plotly-renderer.yml b/.github/workflows/backup/release-plotly-renderer.yml new file mode 100644 index 0000000..7aaa887 --- /dev/null +++ b/.github/workflows/backup/release-plotly-renderer.yml @@ -0,0 +1,49 @@ +# name: Release plotly-renderer + +# on: +# push: +# branches: +# - main +# paths: +# - 'packages/plotly-renderer/**' + +# jobs: +# release: +# name: Release +# runs-on: ubuntu-latest +# permissions: +# contents: write +# issues: write +# pull-requests: write +# id-token: write +# steps: +# - name: Checkout +# uses: actions/checkout@v3 +# with: +# fetch-depth: 0 + +# - name: Setup Node.js +# uses: actions/setup-node@v3 +# with: +# node-version: '22.10.0' +# registry-url: 'https://registry.npmjs.org/' + +# - name: Setup pnpm +# uses: pnpm/action-setup@v2 +# with: +# version: latest + +# - name: Install dependencies +# run: pnpm install + +# - name: Build +# run: pnpm -F @vue-pivottable/plotly-renderer build + +# - name: Release +# env: +# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN_SUMIN }} +# NPM_TOKEN: ${{ secrets.NPM_TOKEN_SUMIN }} +# run: | +# cd packages/plotly-renderer +# pnpm dlx semantic-release diff --git a/.github/workflows/backup/release-vue-pivottable.yml b/.github/workflows/backup/release-vue-pivottable.yml new file mode 100644 index 0000000..c9c9347 --- /dev/null +++ b/.github/workflows/backup/release-vue-pivottable.yml @@ -0,0 +1,73 @@ +name: Release vue-pivottable + +on: + push: + branches: + - release +jobs: + release: + name: Release + runs-on: ubuntu-latest + permissions: + contents: write + issues: write + pull-requests: write + id-token: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '22.10.0' + registry-url: 'https://registry.npmjs.org/' + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: latest + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm build + - name: Generate GitHub App Token + id: generate-token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + installation_id: ${{ secrets.APP_INSTALLATION_ID }} + - name: Release + env: + GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + pnpm dlx semantic-release + + - uses: actions/checkout@v4 + with: + ref: main + + - name: Reset release branch + run: | + git fetch origin release:release + git reset --hard release + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 + with: + branch: release-to-main + commit-message: 'chore: update version to latest release [skip ci]' + title: 'chore: update version to latest release [skip ci]' + body: | + 이 PR은 release 브랜치의 최신 버전 정보로 main 브랜치를 업데이트합니다. + + - package.json 버전 업데이트 + - CHANGELOG.md 업데이트 + + 이 PR은 release 워크플로우에 의해 자동으로 생성되었습니다. diff --git a/.github/workflows/release-develop.yml b/.github/workflows/release-develop.yml index 604bd42..265d835 100644 --- a/.github/workflows/release-develop.yml +++ b/.github/workflows/release-develop.yml @@ -125,28 +125,51 @@ jobs: echo "Building sub-packages..." pnpm -r --filter './packages/*' build # Build sub-packages after main - - name: Create GitHub Pre-release + - name: Create GitHub Pre-releases if: steps.changesets-check.outputs.has_changesets == 'true' - id: create-release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: vue-pivottable@${{ steps.version.outputs.version }} - release_name: vue-pivottable@${{ steps.version.outputs.version }} - draft: false - prerelease: true - body: | - ## 🚧 Pre-release (Beta) - - This is a pre-release version. It may contain bugs and breaking changes. + run: | + # Create release for each package with beta version + create_release() { + local PKG_NAME=$1 + local PKG_VERSION=$2 + local NPM_NAME=$3 - Install with: `npm install vue-pivottable@beta` + echo "Creating release for $PKG_NAME@$PKG_VERSION" - ### Version: ${{ steps.version.outputs.version }} + gh release create "${PKG_NAME}@${PKG_VERSION}" \ + --title "${PKG_NAME}@${PKG_VERSION}" \ + --notes "## 🚧 Pre-release (Beta) + + This is a pre-release version. It may contain bugs and breaking changes. + + Install with: \`npm install ${NPM_NAME}@beta\` + + ### Version: ${PKG_VERSION}" \ + --prerelease \ + --target ${{ github.sha }} + } + + # Check main package + MAIN_VERSION=$(node -p "require('./package.json').version") + if [[ $MAIN_VERSION == *"-beta"* ]]; then + create_release "vue-pivottable" "$MAIN_VERSION" "vue-pivottable" + fi + + # Check sub-packages + for pkg in packages/*/; do + if [ -d "$pkg" ] && [ -f "$pkg/package.json" ]; then + PKG_NAME=$(cd "$pkg" && node -p "require('./package.json').name") + PKG_VERSION=$(cd "$pkg" && node -p "require('./package.json').version") + if [[ $PKG_VERSION == *"-beta"* ]]; then + create_release "$PKG_NAME" "$PKG_VERSION" "$PKG_NAME" + fi + fi + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Publish pre-release to npm - if: steps.changesets-check.outputs.has_changesets == 'true' && steps.create-release.outcome == 'success' + if: steps.changesets-check.outputs.has_changesets == 'true' run: | # Publish with beta tag only after GitHub release is created RELEASE_TAG=beta node scripts/release-packages.cjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0898eee..f77fd45 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -95,8 +95,11 @@ jobs: - name: Update versions to stable if: steps.check-versions.outputs.has_beta == 'true' run: | - # Update main package - npm version ${{ steps.check-versions.outputs.base_version }} --no-git-tag-version + # Update main package only if it has beta + MAIN_VERSION=$(node -p "require('./package.json').version") + if [[ $MAIN_VERSION == *"-beta"* ]]; then + npm version ${{ steps.check-versions.outputs.base_version }} --no-git-tag-version + fi # Update sub-packages for pkg in packages/*/; do @@ -144,22 +147,49 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TOKEN_SUMIN: ${{ secrets.NPM_TOKEN_SUMIN }} - - name: Create GitHub Release + - name: Create GitHub Releases if: steps.check-versions.outputs.has_beta == 'true' - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: v${{ steps.create-release.outputs.version }} - release_name: Release v${{ steps.create-release.outputs.version }} - draft: false - prerelease: false - body: | - ## 🚀 Stable Release + run: | + # Create release for each package with stable version + create_release() { + local PKG_NAME=$1 + local PKG_VERSION=$2 + local NPM_NAME=$3 + + echo "Creating release for $PKG_NAME@$PKG_VERSION" - This release promotes the beta version to stable. + # Delete existing release if it exists (likely a beta version) + gh release delete "${PKG_NAME}@${PKG_VERSION}" --yes 2>/dev/null || true - Install with: `npm install vue-pivottable@latest` + gh release create "${PKG_NAME}@${PKG_VERSION}" \ + --title "${PKG_NAME}@${PKG_VERSION}" \ + --notes "## 🚀 Stable Release + + This release promotes the beta version to stable. + + Install with: \`npm install ${NPM_NAME}@latest\` + + ### Version: ${PKG_VERSION}" \ + --target ${{ github.sha }} + } + + # Check main package + MAIN_VERSION=$(node -p "require('./package.json').version") + create_release "vue-pivottable" "$MAIN_VERSION" "vue-pivottable" + + # Check sub-packages + for pkg in packages/*/; do + if [ -d "$pkg" ] && [ -f "$pkg/package.json" ]; then + PKG_NAME=$(cd "$pkg" && node -p "require('./package.json').name") + PKG_VERSION=$(cd "$pkg" && node -p "require('./package.json').version") + # Create release for all packages that were released + if [ "$PKG_NAME" != "" ] && [ "$PKG_VERSION" != "" ]; then + create_release "$PKG_NAME" "$PKG_VERSION" "$PKG_NAME" + fi + fi + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create PR to update main if: steps.check-versions.outputs.has_beta == 'true' diff --git a/AI_USAGE_GUIDELINES.md b/AI_USAGE_GUIDELINES.md index 73a47ed..ef4907f 100644 --- a/AI_USAGE_GUIDELINES.md +++ b/AI_USAGE_GUIDELINES.md @@ -250,6 +250,30 @@ pnpm typecheck # TypeScript 타입 체크 pnpm build:all # 전체 빌드 ``` +### 8. Git 작업 원칙 +#### 브랜치 전략 +- 모든 작업은 develop 브랜치에서 시작 +- feature/*, fix/*, chore/* 등 목적에 맞는 브랜치명 사용 +- PR은 항상 develop 브랜치로 생성 +- main 브랜치로 직접 PR 금지 (자동화된 워크플로우 사용) + +#### 커밋 규칙 +```markdown +# 커밋 전 확인사항 +1. 변경사항 설명 +2. 커밋 메시지 제안 +3. 사용자 승인 대기 +4. 승인 후 커밋 실행 +``` + +#### 예시 +```markdown +다음과 같이 커밋하려고 합니다: +- 변경사항: GitHub Release 중복 태그 오류 수정 +- 커밋 메시지: "fix: GitHub Release 생성 시 기존 릴리즈 삭제 후 재생성" +커밋해도 될까요? +``` + ## 금지 사항 1. **무단 코드 변경** @@ -264,6 +288,12 @@ pnpm build:all # 전체 빌드 - 사용처 확인 없이 "아마도", "보통은" 등으로 변경 금지 - 명확한 근거 기반으로만 수정 +4. **무단 Git 작업** + - Git 커밋 전 반드시 승인 받기 + - `git push --force` 사용 금지 + - `git commit --amend`는 신중하게 사용하고 사전 고지 + - 커밋 메시지 작성 후 승인 받기 + ## 커뮤니케이션 원칙 1. **간결하고 명확하게**