# =============================================================================
# PR Check: Changeset — 检查 PR 是否附带 changeset
#
# 触发时机: PR 打开 / 有新推送 / 重开 / label 变更时自动运行
# 功能:
# - 检查 PR 是否新增了 .changeset/*.md 文件
# - 自动跳过: 纯文档/CI 变更(仅修改 .github/, docs/, *.md)
# - 手动跳过: 添加 skip-changeset label
# =============================================================================
name: 'PR: Changeset Check'
on:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
changeset-check:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Check for skip-changeset label
id: skip-label
run: |
if echo '${{ toJSON(github.event.pull_request.labels.*.name) }}' | jq -e 'index("skip-changeset")' > /dev/null 2>&1; then
echo "skip=true" >> $GITHUB_OUTPUT
echo "✅ skip-changeset label detected, skipping check"
else
echo "skip=false" >> $GITHUB_OUTPUT
fi
- uses: actions/checkout@v6
if: steps.skip-label.outputs.skip != 'true'
with:
fetch-depth: 0
- name: Check if only docs/CI changes
if: steps.skip-label.outputs.skip != 'true'
id: docs-only
run: |
CHANGED_FILES=$(git diff --name-only origin/${{ github.event.pull_request.base.ref }}...HEAD)
echo "Changed files:"
echo "$CHANGED_FILES"
# 检查是否所有变更文件都是文档/CI 相关
NON_DOC_FILES=$(echo "$CHANGED_FILES" | grep -v -E '^(\.github/|docs/|\.changeset/|.*\.md$)' || true)
if [ -z "$NON_DOC_FILES" ]; then
echo "skip=true" >> $GITHUB_OUTPUT
echo "✅ Only docs/CI changes detected, skipping changeset check"
else
echo "skip=false" >> $GITHUB_OUTPUT
fi
- name: Check for changeset
if: steps.skip-label.outputs.skip != 'true' && steps.docs-only.outputs.skip != 'true'
run: |
# 获取 PR 新增的 changeset 文件(排除 README.md 和 config.json)
NEW_CHANGESETS=$(git diff --name-only --diff-filter=A origin/${{ github.event.pull_request.base.ref }}...HEAD -- '.changeset/*.md' | grep -v 'README.md' || true)
if [ -z "$NEW_CHANGESETS" ]; then
echo "❌ No changeset found!"
echo ""
echo "This PR is missing a changeset. Please add one by running:"
echo ""
echo " yarn changeset"
echo ""
echo "If this change doesn't need a version bump, add the 'skip-changeset' label to this PR."
exit 1
else
echo "✅ Changeset found:"
echo "$NEW_CHANGESETS"
fi