-
Notifications
You must be signed in to change notification settings - Fork 13
133 lines (114 loc) · 5.14 KB
/
coderabbit-approval.yml
File metadata and controls
133 lines (114 loc) · 5.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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.EXTERNAL_LABELLER_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
id: remove-label
if: steps.check-approval.outputs.is_coderabbit_approved == 'true'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.EXTERNAL_LABELLER_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}`);
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;
}
}
- name: Add CodeRabbit approved label
if: steps.check-approval.outputs.is_coderabbit_approved == 'true'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.EXTERNAL_LABELLER_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const prNumber = context.payload.pull_request.number;
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'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.EXTERNAL_LABELLER_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`);
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));