From 687abffe302b82a15a0ab2fad0aa734398f73532 Mon Sep 17 00:00:00 2001 From: kpj2006 <24ucs074@lnmiit.ac.in> Date: Sun, 15 Feb 2026 22:29:23 +0530 Subject: [PATCH 1/3] Add CodeRabbit approval handler and sync PR labels for review status --- .github/workflows/coderabbit-approval.yml | 119 ++++++++++++++++++++++ .github/workflows/sync-pr-labels.yml | 17 ++++ 2 files changed, 136 insertions(+) create mode 100644 .github/workflows/coderabbit-approval.yml diff --git a/.github/workflows/coderabbit-approval.yml b/.github/workflows/coderabbit-approval.yml new file mode 100644 index 0000000..20596ca --- /dev/null +++ b/.github/workflows/coderabbit-approval.yml @@ -0,0 +1,119 @@ +name: CodeRabbit Approval Handler + +on: + pull_request_review: + types: [submitted] + +permissions: + contents: read + pull-requests: write + issues: write + +jobs: + remove-pending-label: + if: ${{ github.repository_owner == 'AOSSIE-Org' }} + runs-on: ubuntu-latest + steps: + - name: Check if CodeRabbit approved + id: check-approval + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const review = context.payload.review; + const reviewer = review.user.login; + const state = review.state; + const prNumber = context.payload.pull_request.number; + + console.log(`Reviewer: ${reviewer}`); + console.log(`Review state: ${state}`); + console.log(`PR number: ${prNumber}`); + + // Check if the reviewer is CodeRabbit and the review is approved + const isCodeRabbit = reviewer === 'coderabbitai' || reviewer === 'coderabbitai[bot]'; + const isApproved = state === 'approved'; + + core.setOutput('is_coderabbit_approved', isCodeRabbit && isApproved); + + return { + isCodeRabbit, + isApproved, + shouldRemoveLabel: isCodeRabbit && isApproved + }; + + - name: Remove pending CodeRabbit review label + if: steps.check-approval.outputs.is_coderabbit_approved == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + const labelToRemove = 'pending-coderabbit-review'; + + try { + // Check if label exists on the PR + const pr = await github.rest.issues.get({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber + }); + + const hasLabel = pr.data.labels.some(label => label.name === labelToRemove); + + if (hasLabel) { + console.log(`Removing label: ${labelToRemove}`); + + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + name: labelToRemove + }); + + console.log(`✅ Successfully removed '${labelToRemove}' label from PR #${prNumber}`); + } else { + console.log(`Label '${labelToRemove}' not found on PR #${prNumber}`); + } + } catch (error) { + if (error.status === 404) { + console.log(`Label '${labelToRemove}' does not exist on PR #${prNumber}`); + } else { + console.error(`Error removing label: ${error.message}`); + throw error; + } + } + + - name: Add CodeRabbit approved label + if: steps.check-approval.outputs.is_coderabbit_approved == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + console.log('Adding coderabbit-approved label'); + + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ['coderabbit-approved'] + }); + + console.log(`✅ Added 'coderabbit-approved' label to PR #${prNumber}`); + + - name: Summary + if: steps.check-approval.outputs.is_coderabbit_approved == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + console.log('='.repeat(50)); + console.log('CodeRabbit Approval Handler Complete'); + console.log('='.repeat(50)); + console.log(`✅ PR #${prNumber} has been approved by CodeRabbit`); + console.log(`✅ Removed 'pending-coderabbit-review' label`); + console.log(`✅ Added 'coderabbit-approved' label`); + console.log('='.repeat(50)); diff --git a/.github/workflows/sync-pr-labels.yml b/.github/workflows/sync-pr-labels.yml index 8e137cf..73e087f 100644 --- a/.github/workflows/sync-pr-labels.yml +++ b/.github/workflows/sync-pr-labels.yml @@ -315,6 +315,23 @@ jobs: console.log(`Error applying contributor labels: ${error.message}`); } + # STEP 5: CodeRabbit review status + - name: Add pending CodeRabbit review label + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + console.log('Adding pending-coderabbit-review label'); + + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ['pending-coderabbit-review'] + }); + # Summary step - name: Label sync summary uses: actions/github-script@v7 From 91ebec39c4638bee69c9d290c3ba7a54c80d0d8a Mon Sep 17 00:00:00 2001 From: kpj2006 <24ucs074@lnmiit.ac.in> Date: Sun, 15 Feb 2026 23:19:02 +0530 Subject: [PATCH 2/3] Update CodeRabbit approval handler to include dismissed reviews and enhance label management --- .github/workflows/coderabbit-approval.yml | 38 ++++++++++++++++------- .github/workflows/sync-pr-labels.yml | 1 + 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/.github/workflows/coderabbit-approval.yml b/.github/workflows/coderabbit-approval.yml index 20596ca..7caba0d 100644 --- a/.github/workflows/coderabbit-approval.yml +++ b/.github/workflows/coderabbit-approval.yml @@ -2,7 +2,7 @@ name: CodeRabbit Approval Handler on: pull_request_review: - types: [submitted] + types: [submitted,dismissed] permissions: contents: read @@ -42,6 +42,7 @@ jobs: }; - name: Remove pending CodeRabbit review label + id: remove-label if: steps.check-approval.outputs.is_coderabbit_approved == 'true' uses: actions/github-script@v7 with: @@ -71,12 +72,15 @@ jobs: }); console.log(`✅ Successfully removed '${labelToRemove}' label from PR #${prNumber}`); + core.setOutput('label_was_present', 'true'); } else { console.log(`Label '${labelToRemove}' not found on PR #${prNumber}`); + core.setOutput('label_was_present', 'false'); } } catch (error) { if (error.status === 404) { console.log(`Label '${labelToRemove}' does not exist on PR #${prNumber}`); + core.setOutput('label_was_present', 'false'); } else { console.error(`Error removing label: ${error.message}`); throw error; @@ -91,16 +95,21 @@ jobs: script: | const prNumber = context.payload.pull_request.number; - console.log('Adding coderabbit-approved label'); - - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: prNumber, - labels: ['coderabbit-approved'] - }); - - console.log(`✅ Added 'coderabbit-approved' label to PR #${prNumber}`); + try { + console.log('Adding coderabbit-approved label'); + + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ['coderabbit-approved'] + }); + + console.log(`✅ Added 'coderabbit-approved' label to PR #${prNumber}`); + } catch (error) { + console.error(`Error adding label: ${error.message}`); + throw error; + } - name: Summary if: steps.check-approval.outputs.is_coderabbit_approved == 'true' @@ -109,11 +118,16 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const prNumber = context.payload.pull_request.number; + const labelWasPresent = '${{ steps.remove-label.outputs.label_was_present }}' === 'true'; console.log('='.repeat(50)); console.log('CodeRabbit Approval Handler Complete'); console.log('='.repeat(50)); console.log(`✅ PR #${prNumber} has been approved by CodeRabbit`); - console.log(`✅ Removed 'pending-coderabbit-review' label`); + if (labelWasPresent) { + console.log(`✅ Removed 'pending-coderabbit-review' label`); + } else { + console.log(`ℹ️ 'pending-coderabbit-review' label was not present`); + } console.log(`✅ Added 'coderabbit-approved' label`); console.log('='.repeat(50)); diff --git a/.github/workflows/sync-pr-labels.yml b/.github/workflows/sync-pr-labels.yml index 73e087f..9960e77 100644 --- a/.github/workflows/sync-pr-labels.yml +++ b/.github/workflows/sync-pr-labels.yml @@ -317,6 +317,7 @@ jobs: # STEP 5: CodeRabbit review status - name: Add pending CodeRabbit review label + if: github.event.action != 'edited' uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} From 5e99bd8978a8c8ab12c84954f08d1b245959e143 Mon Sep 17 00:00:00 2001 From: kpj2006 <24ucs074@lnmiit.ac.in> Date: Sun, 15 Feb 2026 23:34:12 +0530 Subject: [PATCH 3/3] remove the case of dismissed --- .github/workflows/coderabbit-approval.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/coderabbit-approval.yml b/.github/workflows/coderabbit-approval.yml index 7caba0d..9efc338 100644 --- a/.github/workflows/coderabbit-approval.yml +++ b/.github/workflows/coderabbit-approval.yml @@ -2,7 +2,7 @@ name: CodeRabbit Approval Handler on: pull_request_review: - types: [submitted,dismissed] + types: [submitted] permissions: contents: read