fix: increase MAX_DIFF_SIZE default from 800KB to 5MB #76
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: AI Code Reviewer | |
| on: | |
| pull_request: | |
| types: [labeled] | |
| jobs: | |
| comprehensive-review: | |
| name: AI Code Review | |
| runs-on: ubuntu-latest | |
| if: github.event.action == 'labeled' && github.event.label.name == 'ai_code_review' | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| - name: Get PR diff | |
| run: | | |
| # Fetch the base branch (works for any target branch, not just main) | |
| git fetch origin ${{ github.event.pull_request.base.ref }} | |
| git diff origin/${{ github.event.pull_request.base.ref }}...HEAD --no-color > diff.txt | |
| - name: AI Code Review | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| AI_MODEL: ${{ vars.AI_MODEL || 'moonshotai/kimi-k2-thinking' }} | |
| AI_TEMPERATURE: ${{ vars.AI_TEMPERATURE || '0.1' }} | |
| AI_MAX_TOKENS: ${{ vars.AI_MAX_TOKENS || '64000' }} | |
| MAX_DIFF_SIZE: ${{ vars.MAX_DIFF_SIZE || '800000' }} | |
| EXCLUDE_FILE_PATTERNS: ${{ vars.EXCLUDE_FILE_PATTERNS || '*.lock,*.min.js,*.min.css,package-lock.json,yarn.lock' }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| REPO_FULL_NAME: ${{ github.repository }} | |
| FAIL_ON_REQUESTED_CHANGES: ${{ vars.FAIL_ON_REQUESTED_CHANGES || 'false' }} | |
| DEBUG_MODE: ${{ vars.DEBUG_MODE || 'false' }} | |
| run: | | |
| # Run the AI reviewer and save response to file | |
| echo "Running AI code review..." | |
| # Temporarily disable errexit to capture errors properly | |
| set +e | |
| AI_RESPONSE=$(cat diff.txt | bash ai-reviewer.sh) | |
| EXIT_CODE=$? | |
| set -e | |
| # Output raw response for debugging (only in debug mode) | |
| if [ "$DEBUG_MODE" = "true" ]; then | |
| echo "=== RAW AI RESPONSE FOR DEBUG ===" | |
| echo "Exit code: $EXIT_CODE" | |
| echo "$AI_RESPONSE" | |
| echo "=== END RAW AI RESPONSE ===" | |
| fi | |
| # Check if the script failed | |
| if [ $EXIT_CODE -ne 0 ]; then | |
| echo "❌ AI reviewer script failed with exit code $EXIT_CODE" | |
| echo "" | |
| echo "Error output:" | |
| echo "$AI_RESPONSE" | |
| exit 1 | |
| fi | |
| # Check if AI_RESPONSE is empty | |
| if [ -z "$AI_RESPONSE" ]; then | |
| echo "❌ AI response is empty" | |
| exit 1 | |
| fi | |
| # Parse JSON response | |
| if ! echo "$AI_RESPONSE" | jq . >/dev/null 2>&1; then | |
| echo "⚠️ AI response is not valid JSON. Cannot process review." | |
| # Log raw response for debugging (redact sensitive info) | |
| echo "=== DEBUG: Raw AI Response (first 2000 chars) ===" | |
| echo "$AI_RESPONSE" | head -c 2000 | |
| echo "" | |
| echo "=== END DEBUG ===" | |
| # Try to extract JSON from thinking model response | |
| if echo "$AI_RESPONSE" | grep -q '"content"'; then | |
| echo "=== DEBUG: Attempting to extract content from response ===" | |
| EXTRACTED_CONTENT=$(echo "$AI_RESPONSE" | jq -r '.choices[0].message.content // empty' 2>/dev/null || echo "") | |
| if [ -n "$EXTRACTED_CONTENT" ]; then | |
| echo "Extracted content (first 1000 chars):" | |
| echo "$EXTRACTED_CONTENT" | head -c 1000 | |
| echo "" | |
| fi | |
| fi | |
| # Don't post raw response as it may contain sensitive data | |
| echo "AI response could not be processed. Please check the workflow logs for debugging information." | gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} -F - | |
| exit 1 | |
| fi | |
| # Extract fields from JSON | |
| REVIEW=$(echo "$AI_RESPONSE" | jq -r '.review // "No review provided"') | |
| DECISION=$(echo "$AI_RESPONSE" | jq -r '.fail_pass_workflow // "uncertain"' | tr -d '\n\r' | xargs) | |
| LABELS=$(echo "$AI_RESPONSE" | jq -r '.labels_added[]? // empty') | |
| # Post the review as PR comment | |
| echo "$REVIEW" | gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} -F - | |
| # Add labels to PR | |
| echo "Labels to add: $LABELS" | |
| for label in $LABELS; do | |
| echo "Adding label: $label" | |
| if gh label create "$label" --color "0366d6" --description "Auto-created by AI reviewer" 2>/dev/null; then | |
| echo "Created new label: $label" | |
| else | |
| echo "Label already exists: $label" | |
| fi | |
| if gh issue edit ${{ github.event.pull_request.number }} --add-label "$label" 2>/dev/null; then | |
| echo "Successfully added label: $label" | |
| else | |
| echo "Failed to add label: $label" | |
| fi | |
| done | |
| # Handle workflow decision (after posting review and labels) | |
| echo "AI decision: $DECISION" | |
| # Store the decision for later use | |
| echo "DECISION=$DECISION" >> "$GITHUB_ENV" | |
| # Remove the ai_code_review label to make re-triggering easier | |
| echo "Removing ai_code_review label to allow easy re-triggering" | |
| if gh issue edit ${{ github.event.pull_request.number }} --remove-label "ai_code_review" 2>/dev/null; then | |
| echo "Successfully removed ai_code_review label" | |
| else | |
| echo "Failed to remove ai_code_review label (may have been already removed)" | |
| fi | |
| echo "✅ AI review completed successfully" | |
| - name: Fail Workflow if Requested | |
| if: env.FAIL_ON_REQUESTED_CHANGES == 'true' && env.DECISION == 'fail' | |
| run: | | |
| echo "❌ AI requested changes and FAIL_ON_REQUESTED_CHANGES is enabled. Failing workflow." | |
| echo "The review has been posted above. Please address the requested changes." | |
| exit 1 | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| rm -f diff.txt | |
| # Only remove ai_response.txt if it exists (only created in debug mode) | |
| if [ -f "ai_response.txt" ]; then | |
| rm -f ai_response.txt | |
| fi |