Skip to content

Commit 0adc3e5

Browse files
committed
feat: add automated PR review comment workflow for Claude integration
1 parent db48660 commit 0adc3e5

File tree

1 file changed

+79
-1
lines changed

1 file changed

+79
-1
lines changed

.github/workflows/claude.yml

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,82 @@ jobs:
3636
use_oauth: true
3737
claude_access_token: ${{ secrets.CLAUDE_ACCESS_TOKEN }}
3838
claude_refresh_token: ${{ secrets.CLAUDE_REFRESH_TOKEN }}
39-
claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}
39+
claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}
40+
41+
post-review-comment:
42+
needs: claude
43+
if: success() && needs.claude.result == 'success'
44+
runs-on: ubuntu-latest
45+
permissions:
46+
contents: read
47+
pull-requests: write
48+
issues: write
49+
steps:
50+
- name: Check for existing review comment
51+
id: check-comment
52+
uses: actions/github-script@v7
53+
with:
54+
github-token: ${{ secrets.GH_TOKEN }}
55+
script: |
56+
const reviewText = '@claude review if the changes made are as per the requirements';
57+
let comments = [];
58+
let issueNumber;
59+
60+
try {
61+
// Determine issue/PR number based on event type
62+
if (context.eventName === 'pull_request_review_comment' || context.eventName === 'pull_request_review') {
63+
issueNumber = context.payload.pull_request?.number || context.issue.number;
64+
} else if (context.eventName === 'issue_comment' && context.payload.issue.pull_request) {
65+
// This is a comment on a PR (not an issue)
66+
issueNumber = context.payload.issue.number;
67+
} else {
68+
// This is a regular issue
69+
issueNumber = context.issue.number;
70+
}
71+
72+
comments = await github.rest.issues.listComments({
73+
owner: context.repo.owner,
74+
repo: context.repo.repo,
75+
issue_number: issueNumber
76+
});
77+
78+
const existingComment = comments.data.find(comment =>
79+
comment.body.includes(reviewText)
80+
);
81+
82+
const shouldPost = !existingComment;
83+
core.setOutput('should-post', shouldPost);
84+
console.log(`Should post comment: ${shouldPost}`);
85+
86+
} catch (error) {
87+
console.log('Error checking comments:', error);
88+
core.setOutput('should-post', true); // If we can't check, proceed with posting
89+
}
90+
91+
- name: Post review comment
92+
if: steps.check-comment.outputs.should-post == 'true'
93+
uses: actions/github-script@v7
94+
with:
95+
github-token: ${{ secrets.GH_TOKEN }}
96+
script: |
97+
let issueNumber;
98+
99+
// Determine issue/PR number based on event type
100+
if (context.eventName === 'pull_request_review_comment' || context.eventName === 'pull_request_review') {
101+
issueNumber = context.payload.pull_request?.number || context.issue.number;
102+
} else if (context.eventName === 'issue_comment' && context.payload.issue.pull_request) {
103+
// This is a comment on a PR (not an issue)
104+
issueNumber = context.payload.issue.number;
105+
} else {
106+
// This is a regular issue
107+
issueNumber = context.issue.number;
108+
}
109+
110+
console.log(`Posting review comment on issue/PR #${issueNumber}`);
111+
112+
await github.rest.issues.createComment({
113+
issue_number: issueNumber,
114+
owner: context.repo.owner,
115+
repo: context.repo.repo,
116+
body: '@claude review if the changes made are as per the requirements'
117+
});

0 commit comments

Comments
 (0)