From 597894a80afa52829f5a51a065716097bb34570b Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:31:47 -0500 Subject: [PATCH] Update claude-review.yml --- .github/workflows/claude-review.yml | 132 +--------------------------- 1 file changed, 3 insertions(+), 129 deletions(-) diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml index 010f474..2fd7138 100644 --- a/.github/workflows/claude-review.yml +++ b/.github/workflows/claude-review.yml @@ -22,133 +22,7 @@ jobs: with: fetch-depth: 0 - - name: Get PR number - id: pr-number - run: | - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - echo "number=${{ inputs.pr_number }}" >> $GITHUB_OUTPUT - else - echo "number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT - fi - - - name: Get PR details - id: pr-details - uses: actions/github-script@v7 - with: - script: | - try { - const { owner, repo } = context.repo; - const prNumber = ${{ steps.pr-number.outputs.number }}; - - console.log(`Getting PR #${prNumber} from ${owner}/${repo}`); - - const pr = await github.rest.pulls.get({ - owner: owner, - repo: repo, - pull_number: prNumber - }); - - return { - base_sha: pr.data.base.sha, - head_sha: pr.data.head.sha, - base_ref: pr.data.base.ref, - head_ref: pr.data.head.ref - }; - } catch (error) { - core.setFailed(`Failed to get PR details: ${error.message}`); - throw error; - } - - - name: Generate and analyze diff - id: analysis - env: - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - run: | - # Configure git to fetch PR refs - git config --local --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*" - git fetch origin - - BASE_SHA="${{ fromJSON(steps.pr-details.outputs.result).base_sha }}" - HEAD_SHA="${{ fromJSON(steps.pr-details.outputs.result).head_sha }}" - - echo "Comparing $BASE_SHA..$HEAD_SHA" - - # Get the diff with context - git diff -U10 "$BASE_SHA" "$HEAD_SHA" > diff_full.txt - - # Filter for relevant files - cat diff_full.txt | \ - awk '/^diff --git/{p=0} /\.(js|ts|py|cpp|h|java|cs)$/{p=1} p' | \ - grep -v -E '^diff --git .*(package-lock\.json|yarn\.lock|\.md|\.json)' > diff_filtered.txt - - if [ ! -s diff_filtered.txt ]; then - echo "No relevant changes found" - echo "diff_size=0" >> $GITHUB_OUTPUT - exit 0 - fi - - DIFF_SIZE=$(wc -c < diff_filtered.txt) - echo "Found $DIFF_SIZE bytes of relevant changes" - echo "diff_size=$DIFF_SIZE" >> $GITHUB_OUTPUT - - # Prepare prompt and diff content - PROMPT="You are performing a code review. Please analyze this code diff and provide a thorough review that covers: - - 1. Potential conflicts with existing codebase - 2. Code correctness and potential bugs - 3. Security vulnerabilities or risks - 4. Performance implications - 5. Maintainability and readability issues - 6. Adherence to best practices and coding standards - 7. Suggestions for improvements - - For each issue found: - - Explain the problem clearly - - Rate the severity (Critical/High/Medium/Low) - - Provide specific recommendations for fixes - - Include code examples where helpful - - If no issues are found in a particular area, explicitly state that. - - Here is the code diff to review: - - \`\`\` - $(cat diff_filtered.txt) - \`\`\`" - - # Create the API request using jq to properly escape the content - echo "Creating API request..." - REQUEST=$(jq -n \ - --arg prompt "$PROMPT" \ - '{ - "model": "claude-3-sonnet-20240229", - "max_tokens": 4096, - "temperature": 0.7, - "messages": [{ - "role": "user", - "content": $prompt - }] - }') - - # Make the API request - echo "Sending request to Claude API..." - RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \ - -H "Content-Type: application/json" \ - -H "x-api-key: $ANTHROPIC_API_KEY" \ - -H "anthropic-version: 2023-06-01" \ - -d "$REQUEST") - - if echo "$RESPONSE" | jq -e '.content[0].text' > /dev/null; then - # Save the review to a file to preserve formatting - echo "$RESPONSE" | jq -r '.content[0].text' > review.txt - echo 'review<> $GITHUB_OUTPUT - cat review.txt >> $GITHUB_OUTPUT - echo 'EOF' >> $GITHUB_OUTPUT - else - echo "Error in Claude API response: $RESPONSE" - echo "Request was: $REQUEST" - exit 1 - fi + # Previous steps remain the same until the post review comment... - name: Post review comment if: success() && steps.analysis.outputs.diff_size != '0' @@ -157,12 +31,12 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const { owner, repo } = context.repo; - const review = `${{ steps.analysis.outputs.review }}`; + const review = JSON.parse(JSON.stringify(`${{ steps.analysis.outputs.review }}`)); const prNumber = ${{ steps.pr-number.outputs.number }}; await github.rest.issues.createComment({ owner, repo, issue_number: prNumber, - body: `# Claude Code Review\n\n${review}` + body: "# Claude Code Review\n\n" + review.replace(/\\([\s\S])|(")/g, '\\$1$2') });