Skip to content

[Release] Version packages #1231

[Release] Version packages

[Release] Version packages #1231

name: Claude Changeset
on:
issue_comment:
types: [created]
pull_request:
types: [opened]
paths:
- 'packages/**'
- 'apps/www/src/registry/**'
jobs:
create-changeset:
# Only respond to /changeset mentions from authorized users in PRs
# OR when packages/registry are modified without changesets/changelog updates
if: |
(
(
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '/changeset') && github.event.issue.pull_request)
) && (
github.actor == 'zbeyens' ||
github.actor == 'felixfeng33'
)
) || (
github.event_name == 'pull_request' &&
(github.actor == 'zbeyens' || github.actor == 'felixfeng33')
)
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for package/registry changes without updates
id: check-changes
if: github.event_name == 'pull_request'
run: |
# Get list of modified files (using || true to prevent grep from failing the script)
PACKAGE_CHANGES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | grep '^packages/' || true)
REGISTRY_CHANGES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | grep '^apps/www/src/registry/' || true)
NEEDS_CHANGESET="false"
NEEDS_CHANGELOG="false"
# Check package changes
if [ -n "$PACKAGE_CHANGES" ]; then
# Check if any changeset files were created
CHANGESET_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | grep '^.changeset/' || true)
if [ -z "$CHANGESET_FILES" ]; then
NEEDS_CHANGESET="true"
echo "Found package changes without corresponding changeset files"
fi
fi
# Check registry changes
if [ -n "$REGISTRY_CHANGES" ]; then
# Check if changelog was updated
CHANGELOG_CHANGES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | grep '^docs/components/changelog.mdx' || true)
if [ -z "$CHANGELOG_CHANGES" ]; then
NEEDS_CHANGELOG="true"
echo "Found registry changes without changelog update"
fi
fi
# Set outputs using modern GitHub Actions syntax
echo "needs_changeset=$NEEDS_CHANGESET" >> $GITHUB_OUTPUT
echo "needs_changelog=$NEEDS_CHANGELOG" >> $GITHUB_OUTPUT
- name: Create Changeset/Update Changelog
if: |
github.event_name != 'pull_request' ||
(github.event_name == 'pull_request' && (steps.check-changes.outputs.needs_changeset == 'true' || steps.check-changes.outputs.needs_changelog == 'true'))
uses: grll/claude-code-action@beta
with:
use_oauth: true
claude_access_token: ${{ secrets.CLAUDE_ACCESS_TOKEN }}
claude_refresh_token: ${{ secrets.CLAUDE_REFRESH_TOKEN }}
claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}
secrets_admin_pat: ${{ secrets.SECRETS_ADMIN_PAT }}
timeout_minutes: '60'
allowed_tools: |
Bash
Edit
mcp__plate__*
mcp_browser-tools_*
mcp_memory_*
mcp_github_*
mcp_filesystem_*
direct_prompt: |
You are tasked with creating changesets and updating the changelog for the Plate project. Please follow these guidelines:
**Primary Reference:**
- Follow the Changeset Guide (.claude/commands/changeset.md) for structure, naming, and writing style
- For registry changes, update docs/components/changelog.mdx
**Critical Requirement: Separate Changesets**
- You MUST create a separate changeset file for EACH package AND EACH change type (major, minor, patch).
- A single changeset file MUST contain only ONE package in its frontmatter.
- **Example 1:** If a PR adds a `minor` feature to `@platejs/core` and a `patch` fix to `@platejs/utils`, you MUST create TWO files: one for `@platejs/core` (minor) and one for `@platejs/utils` (patch).
- **Example 2:** If a PR adds `minor` features to both `@platejs/core` and `@platejs/utils`, you MUST create TWO separate `minor` changeset files, one for each package.
- This is essential for correct semantic versioning. DO NOT group multiple packages in one file.
**Changeset Standards (for package changes):**
- Use descriptive file naming: `[package]-[change-type].md`
- Include proper YAML frontmatter with affected packages and change types
- Write clear, concise descriptions using past tense verbs
- Focus on public API changes and user impact only
- Provide migration guidance for breaking changes
- Use code blocks to show "Before" and "After" examples
- Create separate changeset files for each distinct change type (major/minor/patch)
**Changelog Standards (for registry changes):**
- Update docs/components/changelog.mdx
- Follow the existing format and style
- Document component changes, additions, or removals
- Include any breaking changes or migration notes
- Use consistent version numbering
**Change Type Guidelines:**
- **major**: Breaking changes requiring user code updates
- **minor**: New features that are backward-compatible
- **patch**: Bug fixes and minor backward-compatible changes
**Writing Style:**
- Start bullet points with past tense verbs (Renamed, Added, Fixed, Removed)
- Be direct and action-oriented like Radix UI changelog style
- Use bold text for package names, plugin names, and important properties
- Keep descriptions concise and focused on user impact
- Provide clear migration steps for breaking changes
**File Organization:**
- Create changeset files in `.changeset/` directory
- Use descriptive names that indicate package and change type
- One file per distinct change to enable proper SemVer bumping
- Update changelog.mdx for registry component changes
**Changeset required when updating packages**
- Updating `docs/components/changelog.mdx` is required when updating `apps/www/src/registry`
- Use `/docs` command to update documentation
Please analyze the changes in this PR and create appropriate changeset files and/or update the changelog following the guide.