From 393557449455386b76c48092b125d43eafe37b0b Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Wed, 1 Apr 2026 20:38:14 -0400 Subject: [PATCH] fix(ci): degrade timed-out ai reviews gracefully --- .github/workflows/ai-review.yml | 5 +++-- tests/unit/scripts/github/ai-review-workflow.test.ts | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index bb5e7246..2e2e7071 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -478,6 +478,7 @@ jobs: - name: Run Claude Code Review id: claude-review timeout-minutes: ${{ fromJSON(needs.prepare.outputs.claude_timeout_minutes) }} + continue-on-error: true uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.GLM_API_KEY }} @@ -602,7 +603,7 @@ jobs: if-no-files-found: ignore - name: Add success reaction - if: success() && github.event_name == 'issue_comment' + if: success() && github.event_name == 'issue_comment' && steps.claude-review.outcome == 'success' run: | gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions \ --method POST -f content=rocket @@ -610,7 +611,7 @@ jobs: GH_TOKEN: ${{ steps.app-token.outputs.token }} - name: Add failure reaction - if: failure() && github.event_name == 'issue_comment' + if: always() && github.event_name == 'issue_comment' && (failure() || steps.claude-review.outcome == 'failure') run: | gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions \ --method POST -f content=confused diff --git a/tests/unit/scripts/github/ai-review-workflow.test.ts b/tests/unit/scripts/github/ai-review-workflow.test.ts index 00a478ef..e786e2a0 100644 --- a/tests/unit/scripts/github/ai-review-workflow.test.ts +++ b/tests/unit/scripts/github/ai-review-workflow.test.ts @@ -31,6 +31,7 @@ describe('ai-review workflow', () => { const claudeReviewStep = steps.find((step) => step.id === 'claude-review'); expect(claudeReviewStep).toBeDefined(); expect(claudeReviewStep?.uses).toBe('anthropics/claude-code-action@v1'); + expect(claudeReviewStep?.['continue-on-error']).toBe(true); expect(claudeReviewStep?.with?.path_to_claude_code_executable).toBe( '${{ steps.toolchain.outputs.claude_path }}' );