mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
* should only pass if the PR has a new changeset * improvements to docs-only check * add changeset
117 lines
5 KiB
YAML
117 lines
5 KiB
YAML
name: Check Changeset
|
|
run-name: Check for Changeset in PR
|
|
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
|
|
jobs:
|
|
check-changeset:
|
|
# Skip draft PRs and dependabot PRs
|
|
if: github.event.pull_request.draft == false && github.actor != 'dependabot[bot]'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: Check for changeset
|
|
id: check-changeset
|
|
run: |
|
|
# Debug info
|
|
echo "Current directory: $(pwd)"
|
|
echo "PR Base Ref: ${{ github.event.pull_request.base.ref }}"
|
|
echo "PR Head Ref: ${{ github.event.pull_request.head.ref }}"
|
|
echo "PR Head SHA: ${{ github.event.pull_request.head.sha }}"
|
|
echo "Git status:"
|
|
git status
|
|
|
|
# Get list of changed files
|
|
git fetch origin ${{ github.event.pull_request.base.ref }}
|
|
CHANGED_FILES=$(git diff --name-only origin/${{ github.event.pull_request.base.ref }} HEAD)
|
|
echo "Changed files:"
|
|
echo "$CHANGED_FILES"
|
|
|
|
# Check if any of the changed files are in docs/ or .github/
|
|
echo "Checking if changes are docs-only..."
|
|
DOCS_ONLY=true
|
|
while IFS= read -r file; do
|
|
if [[ ! "$file" =~ ^(docs/|.github/) ]]; then
|
|
echo "Found non-docs change: $file"
|
|
DOCS_ONLY=false
|
|
break
|
|
fi
|
|
done <<< "$CHANGED_FILES"
|
|
|
|
# If changes are docs-only, skip changeset check
|
|
if [ "$DOCS_ONLY" = true ]; then
|
|
echo "All changes are in docs/ or .github/, skipping changeset check"
|
|
exit 0
|
|
else
|
|
echo "Changes include non-docs files, checking for changeset..."
|
|
fi
|
|
|
|
# Check if any changeset files are in the changed files
|
|
echo "Checking for changeset files in changed files..."
|
|
CHANGESET_IN_PR=false
|
|
while IFS= read -r file; do
|
|
if [[ "$file" =~ ^\.changeset/.*\.md$ && "$file" != ".changeset/README.md" && "$file" != ".changeset/config.json" ]]; then
|
|
echo "Found changeset file in PR: $file"
|
|
CHANGESET_IN_PR=true
|
|
break
|
|
fi
|
|
done <<< "$CHANGED_FILES"
|
|
|
|
if [ "$CHANGESET_IN_PR" = false ]; then
|
|
echo "No changeset files found in changed files. Changed files in .changeset/:"
|
|
echo "$CHANGED_FILES" | grep "^\.changeset/" || true
|
|
echo "::error::No changeset file found in PR changes. Please run 'npm run changeset' to create one."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Comment on PR
|
|
if: failure()
|
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
|
with:
|
|
script: |
|
|
const message = `This PR requires a changeset since it includes user-facing changes. Please:
|
|
|
|
1. Run \`npm run changeset\` locally
|
|
2. Choose the appropriate version bump:
|
|
- \`major\` for breaking changes (1.0.0 → 2.0.0)
|
|
- \`minor\` for new features (1.0.0 → 1.1.0)
|
|
- \`patch\` for bug fixes (1.0.0 → 1.0.1)
|
|
3. Write a clear description of your changes
|
|
4. Commit the generated changeset file
|
|
|
|
Note: Documentation-only changes do not require a changeset.`;
|
|
|
|
// Get existing comments
|
|
const comments = await github.rest.issues.listComments({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.issue.number
|
|
});
|
|
|
|
// Check if we already commented
|
|
const botComment = comments.data.find(comment =>
|
|
comment.user.login === 'github-actions[bot]' &&
|
|
comment.body.includes('This PR requires a changeset')
|
|
);
|
|
|
|
if (!botComment) {
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.issue.number,
|
|
body: message
|
|
});
|
|
}
|