如何检查Issue是否为Pull Request?Github App Webhook场景
嘿,这个问题我太熟了!之前开发GitHub App处理Webhook的时候刚好研究过,给你说两个直接有效的方法:
一、快速判断
issue_comment Webhook的评论是否在Pull Request中 在issue_comment的Webhook payload里,issue对象本身就带了关键的判断依据——pull_request属性。因为GitHub的Pull Request本质上就是一种特殊的Issue,所以如果这条评论是在PR里的,payload.issue.pull_request会是一个包含PR相关链接的对象;如果是普通Issue的评论,这个值就是null。
举个实际代码的例子(以Node.js处理Webhook为例):
// 假设payload是你接收到的Webhook原始数据 if (payload.issue.pull_request) { console.log("这条评论来自Pull Request!"); // 还能通过payload.issue.pull_request.url获取PR的API链接,进一步操作 } else { console.log("这条评论来自普通Issue!"); }
二、检查任意Issue是否为Pull Request
不管是通过Webhook拿到的Issue对象,还是调用GitHub API获取的Issue详情,判断逻辑都是一样的:看Issue数据里的pull_request字段。
比如你调用GitHub API获取某个Issue的详情(接口:GET /repos/{owner}/{repo}/issues/{issue_number}),返回的JSON结构里:
- 如果存在
pull_request字段且不为null(里面会有html_url、url等PR相关属性),那这个Issue就是Pull Request; - 如果
pull_request是null,那就是普通Issue。
举个curl调用的例子:
curl -H "Authorization: token YOUR_GITHUB_TOKEN" \ https://api.github.com/repos/你的用户名/你的仓库/issues/Issue编号
另外补充个小技巧:如果你已经知道Issue编号,也可以直接尝试访问PR的API端点(GET /repos/{owner}/{repo}/pulls/{编号}),如果返回200状态码就是PR,404就是普通Issue,但这种方法不如检查pull_request字段高效,毕竟多了一次API请求。
内容的提问来源于stack exchange,提问作者Ztyx
相关产品推荐
相关产品推荐

