如何使用GitHub GraphQL API筛选GitHub App创建的议题?
正确筛选GitHub机器人创建的开放议题
我正将GitHub机器人从REST API迁移到GraphQL API,目标是筛选pacstall/pacstall-programs仓库中由pacstall-pacbot创建的开放议题。尝试了以下两个查询:
query ListOpenIssues { repository(name: "pacstall-programs", owner: "pacstall") { issues(last: 100, filterBy: {states: OPEN, createdBy: "app/pacstall-pacbot"}) { nodes { number title url } } } }
query ListOpenIssues { repository(name: "pacstall-programs", owner: "pacstall") { issues(last: 100, filterBy: {states: OPEN, createdBy: "pacstall-pacbot"}) { nodes { number title url } } } }
但两个查询均返回空结果:
{ "data": { "repository": { "issues": { "nodes": [] } } } }
问题原因
你之前的查询返回空的核心原因是:GitHub GraphQL API的issues.filterBy.createdBy字段要求传入GitHub应用的ID,而非应用名称(包括app/<应用名>格式也不支持直接作为参数传入)。
解决方案
方案1:通过应用ID筛选(推荐)
- 先查询你的GitHub应用ID:
执行以下GraphQL查询,获取pacstall-pacbot的唯一ID:
query GetPacbotID { app(login: "pacstall-pacbot") { id } }
- 将获取到的ID替换到议题查询中:
query ListOpenIssues { repository(name: "pacstall-programs", owner: "pacstall") { issues(last: 100, filterBy: {states: OPEN, createdBy: "替换为上面得到的应用ID"}) { nodes { number title url } } } }
方案2:客户端过滤
如果不想提前查询应用ID,可以先获取所有开放议题,再在客户端代码中过滤作者为app/pacstall-pacbot的条目:
query ListOpenIssues { repository(name: "pacstall-programs", owner: "pacstall") { issues(last: 100, filterBy: {states: OPEN}) { nodes { number title url author { login } } } } }
之后在你的代码中筛选author.login === "app/pacstall-pacbot"的议题即可。
内容的提问来源于stack exchange,提问作者Wizard28
相关产品推荐
相关产品推荐

