使用GitHub的GraphQL API,如何判断谁关闭了问题或提取请求?

时间:2018-03-16 18:09:55

标签: graphql github-api

如果出现问题或请求号码,我想使用GitHub GraphQL API的单个查询获取以下信息:

  • 无论是问题还是拉取请求
  • 问题的状态(打开,关闭)或PR(打开,关闭,合并)
  • 如果问题或公关已经关闭,谁关闭了它,何时关闭
  • 如果合并了问题或公关,合并了谁和何时合并

使用以下查询,除了确定关闭问题或PR之外,我所有这一切都有效:

{
  repository(owner: "Automattic", name: "wp-calypso") {
    issueOrPullRequest(number: 23226) {
      __typename
      ... on Closable {
        closed
        closedAt
        # TODO: How to get ClosedEvent { actor } ?
      }
      ... on Issue {
        issueState: state
        title
      }
      ... on PullRequest {
        prState: state
        title
        merged
        mergedAt
        mergeCommit {
          committer {
            user {
              login
            }
          }
        }
      }
    }
  }
}

我使用GitHub的GraphQL Explorer工具运行此查询:https://developer.github.com/v4/explorer/

我可以将问题或公关视为Closable,但我认为我需要从那里到达影响该对象的最后一个ClosedEvent。这是我还没有想到的部分。

在GitHub的v3 REST API中,确定所有这些信息可能需要2个请求。对于已关闭(不是合并)的提款请求,closed_by字段仅在请求提取请求作为问题时显示 (通过issues API调用)。所有其他拉取请求信息均可通过pulls API调用获取。

1 个答案:

答案 0 :(得分:2)

让关闭问题的演员的一种环形(并且丑陋)方式如下(受此answer的启发)。我希望可能有更好的方法,但到目前为止这是一种方法。

诀窍是在给定的时间线中查询大量的事件(如果您完全确定在关闭后没有关于问题/ PR的评论,您可以说timeline(last: 1)),找到其中包含ClosedEventMergedEvent并提取actor

{
  repository(owner: "Automattic", name: "wp-calypso") {
    issueOrPullRequest(number: 23226) {
      __typename
      ... on Closable {
        closed
        closedAt
      }
      ... on Issue {
        timeline(last: 100) {
          edges {
            node {
              __typename
              ... on ClosedEvent {
                actor{
                  login
                }
              }
            }
          }
        }
      }
      ... on PullRequest {
        timeline(last: 100) {
          edges {
            node {
              __typename
              ... on MergedEvent {
                actor{
                  login
                }
              }
            }
          }
        }
      }
    }
  }
}