diff --git a/.github/workflows/release-branch.yml b/.github/workflows/release-branch.yml new file mode 100644 index 0000000..4152fa8 --- /dev/null +++ b/.github/workflows/release-branch.yml @@ -0,0 +1,160 @@ +name: Release Branch Deploy + +on: + push: + branches: + - 'release/v*' + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + deploy-and-sync: + name: Deploy and Sync + 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 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Node.js + uses: actions/setup-node@v4 + 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 packages + run: | + echo "Building all packages..." + pnpm build:all + + - name: Publish to npm + run: | + # Publish with latest tag + node scripts/release-packages.cjs + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN_SUMIN: ${{ secrets.NPM_TOKEN_SUMIN }} + + - name: Create GitHub Releases + 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" + + # Delete existing beta release if it exists + gh release delete "${PKG_NAME}@${PKG_VERSION}" --yes 2>/dev/null || true + + 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 }} + } + + # Get version info from current branch + CURRENT_BRANCH="${{ github.ref_name }}" + VERSION="${CURRENT_BRANCH#release/v}" + + # Check main package + MAIN_VERSION=$(node -p "require('./package.json').version") + if [ "$MAIN_VERSION" = "$VERSION" ]; 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 + FULL_PKG_NAME=$(cd "$pkg" && node -p "require('./package.json').name") + PKG_VERSION=$(cd "$pkg" && node -p "require('./package.json').version") + + # Only create release if version doesn't contain beta + if [[ $PKG_VERSION != *"-beta"* ]]; then + create_release "$FULL_PKG_NAME" "$PKG_VERSION" "$FULL_PKG_NAME" + fi + fi + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Sync with develop + run: | + # Configure git + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + # Create a temporary branch for merging + TEMP_BRANCH="temp-sync-$(date +%s)" + git checkout -b $TEMP_BRANCH + + # Merge into develop + git checkout develop + git pull origin develop + git merge $TEMP_BRANCH --no-edit -m "chore: sync release ${{ github.ref_name }} to develop" + git push origin develop + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create PR to main + run: | + VERSION="${{ github.ref_name }}" + + gh pr create \ + --base main \ + --head "${{ github.ref_name }}" \ + --title "chore: update main with $VERSION" \ + --body "## πŸ“¦ Release Update + + This PR updates main branch with: + - βœ… Stable version numbers (beta suffix removed) + - βœ… Updated package.json files + - βœ… npm packages published + - βœ… GitHub releases created + + ### Published Packages + $(node -p " + const main = require('./package.json'); + let packages = \`- vue-pivottable@\${main.version}\`; + const fs = require('fs'); + const path = require('path'); + const packagesDir = './packages'; + if (fs.existsSync(packagesDir)) { + fs.readdirSync(packagesDir).forEach(dir => { + const pkgPath = path.join(packagesDir, dir, 'package.json'); + if (fs.existsSync(pkgPath)) { + const pkg = require(pkgPath); + packages += \`\\n- \${pkg.name}@\${pkg.version}\`; + } + }); + } + packages + ") + + **Note**: This release has been automatically synced with develop branch." \ + || echo "PR to main already exists or creation failed" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f612f9d..64423d7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -134,97 +134,12 @@ jobs: echo "release_branch=$RELEASE_BRANCH" >> $GITHUB_OUTPUT echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Checkout release branch and publish + - name: Trigger release branch workflow if: steps.check-versions.outputs.has_beta == 'true' run: | - # Checkout to release branch for publishing - git checkout ${{ steps.create-release.outputs.release_branch }} - - # Publish with latest tag (overwrites beta) - node scripts/release-packages.cjs - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_TOKEN_SUMIN: ${{ secrets.NPM_TOKEN_SUMIN }} - - - name: Create GitHub Releases - if: steps.check-versions.outputs.has_beta == 'true' - 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" - - # Delete existing release if it exists (likely a beta version) - gh release delete "${PKG_NAME}@${PKG_VERSION}" --yes 2>/dev/null || true - - 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 }} - } - - # Only create releases for packages that had beta versions - BETA_PACKAGES="${{ steps.check-versions.outputs.beta_packages }}" - - # Check if main package had beta - if [[ " $BETA_PACKAGES " == *" vue-pivottable "* ]]; then - MAIN_VERSION=$(node -p "require('./package.json').version") - 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=$(basename "$pkg") - # Only process if this package had beta version - if [[ " $BETA_PACKAGES " == *" $PKG_NAME "* ]]; then - FULL_PKG_NAME=$(cd "$pkg" && node -p "require('./package.json').name") - PKG_VERSION=$(cd "$pkg" && node -p "require('./package.json').version") - create_release "$FULL_PKG_NAME" "$PKG_VERSION" "$FULL_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' - run: | - # Create PR from release branch back to main - gh pr create \ - --base main \ - --head ${{ steps.create-release.outputs.release_branch }} \ - --title "chore: update main with release v${{ steps.create-release.outputs.version }}" \ - --body "## πŸ“¦ Release Update - - This PR updates main branch with: - - βœ… Stable version numbers (beta suffix removed) - - βœ… Updated package.json files - - βœ… Release commit - - **Note**: Changesets were already consumed in develop branch." \ - || echo "PR creation failed" - - # Also create PR to sync with develop - gh pr create \ - --base develop \ - --head ${{ steps.create-release.outputs.release_branch }} \ - --title "chore: sync release v${{ steps.create-release.outputs.version }} to develop" \ - --body "## πŸ”„ Release Sync - - This PR syncs the stable release back to develop: - - βœ… Version alignment - - βœ… Ensures develop has latest stable version - - **Important**: Review carefully for any conflicts with ongoing development." \ - || echo "Sync PR creation failed" \ No newline at end of file + echo "Release branch created: ${{ steps.create-release.outputs.release_branch }}" + echo "The release branch workflow will handle:" + echo "- Publishing to npm" + echo "- Creating GitHub releases" + echo "- Syncing with develop (auto-merge)" + echo "- Creating PR to main" \ No newline at end of file diff --git a/packages/lazy-table-renderer/CHANGELOG.md b/packages/lazy-table-renderer/CHANGELOG.md index a6f15cf..f842b7e 100644 --- a/packages/lazy-table-renderer/CHANGELOG.md +++ b/packages/lazy-table-renderer/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## 1.1.4 + +### Patch Changes + +- dfb072a: test: 릴리슀 μ›Œν¬ν”Œλ‘œμš° κ°œμ„  ν…ŒμŠ€νŠΈ + - vue-pivottable@1.1.4 + +## 1.1.4 + +### Patch Changes + +- fe3926e: test: ν•˜μœ„ νŒ¨ν‚€μ§€λ§Œ μ—…λ°μ΄νŠΈ μ‹œ release 브랜치 동기화 μ›Œν¬ν”Œλ‘œμš° ν…ŒμŠ€νŠΈ + - vue-pivottable@1.1.4 + +## 1.1.3 + +### Patch Changes + +- 94f0f23: test: ν•˜μœ„ νŒ¨ν‚€μ§€λ§Œ μ—…λ°μ΄νŠΈν•˜λŠ” 경우 릴리즈 브랜치 동기화 ν…ŒμŠ€νŠΈ + - vue-pivottable@1.1.4 + ## 1.1.3 ### Patch Changes diff --git a/packages/lazy-table-renderer/package.json b/packages/lazy-table-renderer/package.json index 9009b89..c5f6160 100644 --- a/packages/lazy-table-renderer/package.json +++ b/packages/lazy-table-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue-pivottable/lazy-table-renderer", - "version": "1.1.3-beta.1750342216", + "version": "1.1.4", "type": "module", "description": "", "exports": { @@ -43,7 +43,7 @@ "license": "MIT", "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s --scope lazy-table-renderer", - "clean": "rimraf lib", + "clean": "rimraf dist", "build": "vite build", "lint": "eslint ." }, diff --git a/packages/plotly-renderer/package.json b/packages/plotly-renderer/package.json index 9b2b8bd..1c61224 100644 --- a/packages/plotly-renderer/package.json +++ b/packages/plotly-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue-pivottable/plotly-renderer", - "version": "2.0.1-beta.1750342216", + "version": "2.0.1-beta.1750342216-beta.1750371270-beta.1750372222-beta.1750374587", "type": "module", "exports": { ".": { @@ -37,6 +37,7 @@ "author": "Sumin, Lee ", "license": "MIT", "scripts": { + "clean": "rimraf dist", "build": "vite build" }, "dependencies": { diff --git a/scripts/release-packages.cjs b/scripts/release-packages.cjs index dea6313..86dd48c 100755 --- a/scripts/release-packages.cjs +++ b/scripts/release-packages.cjs @@ -25,20 +25,20 @@ const packages = [ { name: 'vue3-pivottable', path: '.', - buildCmd: 'pnpm build', + buildCmd: 'pnpm clean && pnpm build', publishCmd: 'pnpm changeset publish' }, { name: '@vue-pivottable/plotly-renderer', path: './packages/plotly-renderer', - buildCmd: 'pnpm --filter @vue-pivottable/plotly-renderer build', + buildCmd: 'pnpm --filter @vue-pivottable/plotly-renderer clean && pnpm --filter @vue-pivottable/plotly-renderer build', publishCmd: 'pnpm changeset publish --filter @vue-pivottable/plotly-renderer', tokenEnv: 'NPM_TOKEN_SUMIN' }, { name: '@vue-pivottable/lazy-table-renderer', path: './packages/lazy-table-renderer', - buildCmd: 'pnpm --filter @vue-pivottable/lazy-table-renderer build', + buildCmd: 'pnpm --filter @vue-pivottable/lazy-table-renderer clean && pnpm --filter @vue-pivottable/lazy-table-renderer build', publishCmd: 'pnpm changeset publish --filter @vue-pivottable/lazy-table-renderer', tokenEnv: 'NPM_TOKEN_SUMIN' } @@ -62,6 +62,17 @@ async function releasePackages() { throw new Error(`Package directory not found: ${pkg.path}`); } + // Get package version + const packageJsonPath = `${pkg.path}/package.json`; + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); + const currentVersion = packageJson.version; + + // Skip if not a beta version (no changeset) + if (!currentVersion.includes('-beta')) { + log.info(`Skipping ${pkg.name} - no beta version (${currentVersion})`); + continue; + } + // Build package log.info(`Building ${pkg.name}...`); execSync(pkg.buildCmd, {