如何在Github的GraphQL API上获取包含某个分支的所有存储库

时间:2018-07-24 17:47:56

标签: github github-api github-graphql

我有许多存储库,其中一些包含一个具有相同名称的分支。我希望能够获取包含特定分支名称的所有存储库。到目前为止,这是我所拥有的,但是我似乎无法弄清楚如何添加必要的查询。

{
  repositoryOwner(login: "dev") {
    repositories(first: 1) {
      nodes {
        name
        refs(first: 15, refPrefix: "refs/heads/") {
          edges {
            node {
              name
            }
          }
        }
      }
    }
  }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

一种方法是请求所有具有qualifiedName作为<branch_name>的引用的存储库。然后在您的客户端中删除所有空结果:

{
  repositoryOwner(login: "JakeWharton") {
    repositories(first: 100) {
      nodes {
        ref(qualifiedName: "gh-pages") {
          repository {
            name
            description
          }
        }
      }
    }
  }
}

Try it in the explorer

使用排除null结果是:

curl -s -H "Authorization: token YOUR_TOKEN" \
     -d '{ 
          "query": "{ repositoryOwner(login: \"JakeWharton\") { repositories(first: 100) { nodes { ref(qualifiedName: \"gh-pages\") { repository { name } } } } } }"
      }' https://api.github.com/graphql | \
      jq -r '.data.repositoryOwner.repositories.nodes[] | select(.ref != null) | .ref.repository.name'

如果回购数量超过100,则您必须去through pagination

如果需要在单个存储库(或其中一个存储库)中找到分支名称的组合,也可以使用aliases。例如,寻找分支gh-pages1.0

{
  repositoryOwner(login: "JakeWharton") {
    repositories(first: 100) {
      nodes {
        branch1: ref(qualifiedName: "1.0") {
          repository {
            name
            description
          }
        }
        branch2: ref(qualifiedName: "gh-pages") {
          repository {
            name
            description
          }
        }
      }
    }
  }
}

Try it in the explorer