mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-14 00:35:02 -05:00
## Changes 🏗️ This PR updates the Claude Block Docs Review CI workflow to update existing comments instead of creating new ones on each push. ### What's Changed: 1. **Concurrency group** - Prevents race conditions if the workflow runs twice simultaneously 2. **Comment cleanup step** - Deletes any previous Claude review comment before posting a new one 3. **Marker instruction** - Instructs Claude to include a `<!-- CLAUDE_DOCS_REVIEW -->` marker in its comment for identification ### Why: Previously, every PR push would create a new review comment, cluttering the PR with multiple comments. Now only the most recent review is shown. ### Testing: 1. Create a PR that triggers this workflow (modify a file in `docs/integrations/` or `autogpt_platform/backend/backend/blocks/`) 2. Verify first run creates comment with marker 3. Push another commit 4. Verify old comment is deleted and new comment is created (not accumulated) Requested by @Bentlybro --- ## Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [ ] I have made a test plan - [ ] I have tested my changes according to the test plan (will be tested on merge) #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) <!-- greptile_comment --> <h2>Greptile Overview</h2> <details><summary><h3>Greptile Summary</h3></summary> Added concurrency control and comment deduplication to prevent multiple Claude review comments from accumulating on PRs. The workflow now deletes previous review comments (identified by `<!-- CLAUDE_DOCS_REVIEW -->` marker) before posting new ones, and uses concurrency groups to prevent race conditions. </details> <details><summary><h3>Confidence Score: 5/5</h3></summary> - This PR is safe to merge with minimal risk - The changes are well-contained, follow GitHub Actions best practices, and use built-in GitHub APIs safely. The concurrency control prevents race conditions, and the comment cleanup logic uses proper filtering with `head -1` to handle edge cases. The HTML comment marker approach is standard and reliable. - No files require special attention </details> <details><summary><h3>Sequence Diagram</h3></summary> ```mermaid sequenceDiagram participant GH as GitHub PR Event participant WF as Workflow participant API as GitHub API participant Claude as Claude Action GH->>WF: PR opened/synchronized WF->>WF: Check concurrency group Note over WF: Cancel any in-progress runs<br/>for same PR number WF->>API: Query PR comments API-->>WF: Return all comments WF->>WF: Filter for CLAUDE_DOCS_REVIEW marker alt Previous comment exists WF->>API: DELETE comment by ID API-->>WF: Comment deleted else No previous comment WF->>WF: Skip deletion end WF->>Claude: Run code review Claude->>API: POST new comment with marker API-->>Claude: Comment created ``` </details> <sub>Last reviewed commit: fb1b436</sub> <!-- greptile_other_comments_section --> <!-- /greptile_comment -->
130 lines
5.0 KiB
YAML
130 lines
5.0 KiB
YAML
name: Claude Block Docs Review
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize]
|
|
paths:
|
|
- "docs/integrations/**"
|
|
- "autogpt_platform/backend/backend/blocks/**"
|
|
|
|
concurrency:
|
|
group: claude-docs-review-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
claude-review:
|
|
# Only run for PRs from members/collaborators
|
|
if: |
|
|
github.event.pull_request.author_association == 'OWNER' ||
|
|
github.event.pull_request.author_association == 'MEMBER' ||
|
|
github.event.pull_request.author_association == 'COLLABORATOR'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
id-token: write
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.11"
|
|
|
|
- name: Set up Python dependency cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: ~/.cache/pypoetry
|
|
key: poetry-${{ runner.os }}-${{ hashFiles('autogpt_platform/backend/poetry.lock') }}
|
|
restore-keys: |
|
|
poetry-${{ runner.os }}-
|
|
|
|
- name: Install Poetry
|
|
run: |
|
|
cd autogpt_platform/backend
|
|
HEAD_POETRY_VERSION=$(python3 ../../.github/workflows/scripts/get_package_version_from_lockfile.py poetry)
|
|
curl -sSL https://install.python-poetry.org | POETRY_VERSION=$HEAD_POETRY_VERSION python3 -
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: Install dependencies
|
|
working-directory: autogpt_platform/backend
|
|
run: |
|
|
poetry install --only main
|
|
poetry run prisma generate
|
|
|
|
- name: Run Claude Code Review
|
|
uses: anthropics/claude-code-action@v1
|
|
with:
|
|
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
claude_args: |
|
|
--allowedTools "Read,Glob,Grep,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"
|
|
prompt: |
|
|
You are reviewing a PR that modifies block documentation or block code for AutoGPT.
|
|
|
|
## Your Task
|
|
Review the changes in this PR and provide constructive feedback. Focus on:
|
|
|
|
1. **Documentation Accuracy**: For any block code changes, verify that:
|
|
- Input/output tables in docs match the actual block schemas
|
|
- Description text accurately reflects what the block does
|
|
- Any new blocks have corresponding documentation
|
|
|
|
2. **Manual Content Quality**: Check manual sections (marked with `<!-- MANUAL: -->` markers):
|
|
- "How it works" sections should have clear technical explanations
|
|
- "Possible use case" sections should have practical, real-world examples
|
|
- Content should be helpful for users trying to understand the blocks
|
|
|
|
3. **Template Compliance**: Ensure docs follow the standard template:
|
|
- What it is (brief intro)
|
|
- What it does (description)
|
|
- How it works (technical explanation)
|
|
- Inputs table
|
|
- Outputs table
|
|
- Possible use case
|
|
|
|
4. **Cross-references**: Check that links and anchors are correct
|
|
|
|
## Review Process
|
|
1. First, get the PR diff to see what changed: `gh pr diff ${{ github.event.pull_request.number }}`
|
|
2. Read any modified block files to understand the implementation
|
|
3. Read corresponding documentation files to verify accuracy
|
|
4. Provide your feedback as a PR comment
|
|
|
|
## IMPORTANT: Comment Marker
|
|
Start your PR comment with exactly this HTML comment marker on its own line:
|
|
<!-- CLAUDE_DOCS_REVIEW -->
|
|
|
|
This marker is used to identify and replace your comment on subsequent runs.
|
|
|
|
Be constructive and specific. If everything looks good, say so!
|
|
If there are issues, explain what's wrong and suggest how to fix it.
|
|
|
|
- name: Delete old Claude review comments
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
# Get all comment IDs with our marker, sorted by creation date (oldest first)
|
|
COMMENT_IDS=$(gh api \
|
|
repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments \
|
|
--jq '[.[] | select(.body | contains("<!-- CLAUDE_DOCS_REVIEW -->"))] | sort_by(.created_at) | .[].id')
|
|
|
|
# Count comments
|
|
COMMENT_COUNT=$(echo "$COMMENT_IDS" | grep -c . || true)
|
|
|
|
if [ "$COMMENT_COUNT" -gt 1 ]; then
|
|
# Delete all but the last (newest) comment
|
|
echo "$COMMENT_IDS" | head -n -1 | while read -r COMMENT_ID; do
|
|
if [ -n "$COMMENT_ID" ]; then
|
|
echo "Deleting old review comment: $COMMENT_ID"
|
|
gh api -X DELETE repos/${{ github.repository }}/issues/comments/$COMMENT_ID
|
|
fi
|
|
done
|
|
else
|
|
echo "No old review comments to clean up"
|
|
fi
|