Changeset Release #35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Changeset Release" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| force_version: | |
| description: "Force a specific version bump (leave empty for auto)" | |
| required: false | |
| type: choice | |
| options: | |
| - "" | |
| - patch | |
| - minor | |
| - major | |
| concurrency: | |
| group: changeset-release | |
| cancel-in-progress: false | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| check-changesets: | |
| name: "Check for Changesets" | |
| runs-on: ubuntu-latest | |
| outputs: | |
| has_changesets: ${{ steps.check.outputs.has_changesets }} | |
| changeset_count: ${{ steps.check.outputs.changeset_count }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for pending changesets | |
| id: check | |
| run: | | |
| HAS_CHANGESETS="false" | |
| CHANGESET_COUNT=0 | |
| if [ -d ".changeset" ]; then | |
| CHANGESET_COUNT=$(find .changeset -name "*.md" -not -name "README.md" -not -name "config.json" 2>/dev/null | wc -l | tr -d ' ') | |
| if [ "$CHANGESET_COUNT" -gt 0 ]; then | |
| HAS_CHANGESETS="true" | |
| echo "✅ Found $CHANGESET_COUNT pending changeset(s)" | |
| echo "" | |
| echo "Pending changesets:" | |
| find .changeset -name "*.md" -not -name "README.md" -not -name "config.json" -exec basename {} \; | |
| else | |
| echo "⚠️ No pending changesets found" | |
| fi | |
| else | |
| echo "❌ .changeset directory not found" | |
| fi | |
| echo "has_changesets=$HAS_CHANGESETS" >> $GITHUB_OUTPUT | |
| echo "changeset_count=$CHANGESET_COUNT" >> $GITHUB_OUTPUT | |
| # Step 2: Create or update version PR | |
| create-version-pr: | |
| name: "Create Version Bump PR" | |
| runs-on: ubuntu-latest | |
| needs: check-changesets | |
| if: needs.check-changesets.outputs.has_changesets == 'true' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: lts/* | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Get current version | |
| id: current_version | |
| run: | | |
| CURRENT_VERSION=$(node -p "require('./package.json').version") | |
| echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
| echo "📦 Current version: $CURRENT_VERSION" | |
| - name: Create Release Pull Request | |
| id: changeset_pr | |
| uses: changesets/action@v1 | |
| with: | |
| version: pnpm run version | |
| title: "chore: release version packages" | |
| commit: "chore: release version packages" | |
| createGithubReleases: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Get new version | |
| id: new_version | |
| run: | | |
| NEW_VERSION=$(node -p "require('./package.json').version") | |
| echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
| echo "✅ New version will be: $NEW_VERSION" | |
| - name: PR Summary | |
| if: steps.changeset_pr.outputs.pullRequestNumber != '' | |
| run: | | |
| PR_NUMBER="${{ steps.changeset_pr.outputs.pullRequestNumber }}" | |
| echo "🎉 Version Bump PR Created!" | |
| echo "" | |
| echo "📋 Details:" | |
| echo " • Current version: ${{ steps.current_version.outputs.version }}" | |
| echo " • New version: ${{ steps.new_version.outputs.version }}" | |
| echo " • Changesets processed: ${{ needs.check-changesets.outputs.changeset_count }}" | |
| echo " • PR: #$PR_NUMBER" | |
| echo "" | |
| echo "🔗 Next steps:" | |
| echo " 1. Review the version bump PR: https://github.com/${{ github.repository }}/pull/$PR_NUMBER" | |
| echo " 2. Merge the PR when ready" | |
| echo " 3. Manually trigger the 'Main Release' workflow to publish" | |
| - name: Update existing PR comment | |
| if: steps.changeset_pr.outputs.pullRequestNumber == '' | |
| run: | | |
| echo "ℹ️ Version bump PR already exists or no version changes needed" | |
| echo "" | |
| echo "Check for existing PR with label 'changeset' or title 'release version packages'" | |
| no-changesets: | |
| name: "No Changesets Found" | |
| runs-on: ubuntu-latest | |
| needs: check-changesets | |
| if: needs.check-changesets.outputs.has_changesets == 'false' | |
| steps: | |
| - name: Display message | |
| run: | | |
| echo "⚠️ No pending changesets found!" | |
| echo "" | |
| echo "To create a changeset:" | |
| echo " 1. Run: pnpm changeset" | |
| echo " 2. Follow the prompts to describe your changes" | |
| echo " 3. Commit the changeset file" | |
| echo " 4. Push to your branch" | |
| echo " 5. Run this workflow again" | |
| echo "" | |
| echo "📚 Learn more: https://github.com/changesets/changesets" | |
| exit 1 |