如何用GitHub v4 GraphQL查询组织内特定团队成员创建的开放PR
通过GitHub v4 GraphQL查询特定团队成员创建的所有开放PR
问题背景
当Pull Request(PR)被申请评审的团队任意成员批准后,即便仍处于开放状态,也会从GitHub控制面板中消失。常规的待评审PR查询语句无法覆盖这类已经过审批、但仍处于开放状态的本团队成员提交的PR。
常规查询的局限
查询单个用户待评审PR
常用的查询指定用户待评审PR的GraphQL语句如下:
{ search(query: "type:pr state:open review-requested:StevenACoffman", type: ISSUE, first: 100) { issueCount pageInfo { endCursor startCursor } edges { node { ... on PullRequest { url } } } } }
查询团队待评审PR
查询指定团队待评审PR的语法为:team-review-requested:ORG/TEAMNAME,其中ORG需替换为对应组织名,TEAMNAME替换为对应团队名。
上述两种查询均只能返回等待当前用户/团队评审的PR,无法展示已被其他团队成员批准的、由本团队成员创建的开放PR。
完整实现方案
第一步:获取目标团队的成员列表
首先执行以下GraphQL语句,按名称查询指定团队的所有成员账号信息:
{ organization(login: "khan") { teams(first: 100, query: "districts") { totalCount edges { node { members { edges { node { name login } } } name description } } } } }
使用时将organization的login参数替换为你的组织名,teams的query参数替换为目标团队的名称,执行后即可获取该团队所有成员的GitHub登录ID。
第二步:拼接条件查询所有本团队成员创建的开放PR
拿到团队成员登录ID列表后,在search接口的query参数中拼接所有成员的author:筛选条件,结合type:pr和state:open筛选,即可查询到所有本团队成员创建的开放PR,无论是否已经获得团队成员的批准。
参考示例如下(假设团队成员的登录ID为user1、user2、user3):
{ search(query: "type:pr state:open author:user1 author:user2 author:user3", type: ISSUE, first: 100) { issueCount pageInfo { endCursor startCursor } edges { node { ... on PullRequest { url title author { login } createdAt } } } } }
如果团队成员数量较多,可以分批次拼接查询条件,或者通过分页参数处理返回的结果集。
内容的提问来源于stack exchange,提问作者SteveCoffman
相关产品推荐
相关产品推荐

