From e2733bcfaa14d240ad88382234feb6c331150889 Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:00:36 -0500 Subject: [PATCH] Update claude-review.yml --- .github/workflows/claude-review.yml | 76 ++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 24 deletions(-) diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml index fc2355d..5c5d51a 100644 --- a/.github/workflows/claude-review.yml +++ b/.github/workflows/claude-review.yml @@ -37,16 +37,23 @@ jobs: uses: actions/github-script@v7 with: script: | - const pr = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.name, - pull_number: ${{ inputs.pr_number }} - }); - console.log(`Base SHA: ${pr.data.base.sha}`); - console.log(`Head SHA: ${pr.data.head.sha}`); - return { - base_sha: pr.data.base.sha, - head_sha: pr.data.head.sha + try { + const { owner, repo } = context.repo; + console.log(`Getting PR #${{ inputs.pr_number }} from ${owner}/${repo}`); + + const pr = await github.rest.pulls.get({ + owner: owner, + repo: repo, + pull_number: parseInt(${{ inputs.pr_number }}) + }); + + return { + base_sha: pr.data.base.sha, + head_sha: pr.data.head.sha + }; + } catch (error) { + core.setFailed(`Failed to get PR details: ${error.message}`); + throw error; } - name: Get changed files @@ -60,14 +67,21 @@ jobs: HEAD_SHA=${{ github.event.pull_request.head.sha }} fi + echo "Base SHA: $BASE_SHA" + echo "Head SHA: $HEAD_SHA" + # Get the diff and save to a file - git diff $BASE_SHA..$HEAD_SHA > changes.diff + git diff $BASE_SHA..$HEAD_SHA > changes.diff || echo "Failed to get diff" # Create a filtered version without ignored files - cat changes.diff | grep -v -E '(package-lock.json|yarn.lock|node_modules|\.md$|\.json$)' | grep -E '\.(js|ts|py|cpp|h|java|cs)$' > filtered_changes.diff + cat changes.diff | grep -v -E '(package-lock.json|yarn.lock|node_modules|\.md$|\.json$)' | grep -E '\.(js|ts|py|cpp|h|java|cs)$' > filtered_changes.diff || true # Store the size of the diff - echo "diff_size=$(stat -f%z filtered_changes.diff)" >> $GITHUB_OUTPUT + if [ -f filtered_changes.diff ]; then + echo "diff_size=$(wc -c < filtered_changes.diff)" >> $GITHUB_OUTPUT + else + echo "diff_size=0" >> $GITHUB_OUTPUT + fi - name: Analyze code with Claude if: steps.changed-files.outputs.diff_size != '0' @@ -108,7 +122,7 @@ jobs: -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -d "{ - \"model\": \"claude-3-sonnet-20240229\", + \"model\": \"claude-3-sonnet-20241022\", \"max_tokens\": 4096, \"temperature\": 0.7, \"messages\": [{ @@ -117,8 +131,13 @@ jobs: }] }") - # Extract the review content from the response - REVIEW=$(echo $RESPONSE | jq -r '.content[0].text') + # Extract the review content from the response and handle potential errors + if echo "$RESPONSE" | jq -e '.content[0].text' > /dev/null; then + REVIEW=$(echo "$RESPONSE" | jq -r '.content[0].text') + else + echo "Error in Claude API response: $RESPONSE" + exit 1 + fi # Escape the review content for GitHub Actions REVIEW="${REVIEW//'%'/'%25'}" @@ -134,11 +153,20 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | - const review = `${{ steps.analysis.outputs.review }}`; - - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.name, - issue_number: ${{ steps.pr-number.outputs.number }}, - body: `# Claude Code Review\n\n${review}` - }); + try { + const { owner, repo } = context.repo; + const prNumber = ${{ steps.pr-number.outputs.number }}; + const review = `${{ steps.analysis.outputs.review }}`; + + console.log(`Posting review to PR #${prNumber} in ${owner}/${repo}`); + + await github.rest.issues.createComment({ + owner: owner, + repo: repo, + issue_number: prNumber, + body: `# Claude Code Review\n\n${review}` + }); + } catch (error) { + core.setFailed(`Failed to post review: ${error.message}`); + throw error; + }