GitHub GraphQL API怎么在仓库没有Release的情况下获取仓库的所有tag?

'''
query { 
  repository(owner:"madler", name:"zlib") {
      releases(last:100) {
      		totalCount
          nodes {
              name
              tagName
          }
          pageInfo {
              startCursor
              hasPreviousPage
          }
      }
  }
}
'''

我是这样查询的,但是遇到没有Release的仓库就获取不到内容,比如madler/zlib这个仓库

在没有Release的情况下获取仓库的所有tag可以通过以下步骤:

1.使用GitHub GraphQL API中的repository查询来获取仓库的所有标签(tag)和提交(commit)的SHA值,示例查询如下:

query {
  repository(owner: "owner_name", name: "repo_name") {
    refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
      edges {
        node {
          name
          target {
            ... on Commit {
              oid
            }
          }
        }
      }
    }
  }
}

在查询中,我们使用了refs来获取仓库中所有的标签,refPrefix参数用于指定查询的前缀为refs/tags/,first参数用于指定最多返回的标签数目,orderBy参数用于指定标签的排序方式,这里我们按标签的提交日期进行降序排序。

2.对查询结果进行处理,提取出所有的标签名称和对应的提交SHA值。
示例代码如下:

import requests

def get_all_tags(owner, repo):
    query = """
    query {
      repository(owner: "%s", name: "%s") {
        refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
          edges {
            node {
              name
              target {
                ... on Commit {
                  oid
                }
              }
            }
          }
        }
      }
    }
    """ % (owner, repo)

    response = requests.post('https://api.github.com/graphql', json={'query': query},
                             headers={'Authorization': 'bearer YOUR_ACCESS_TOKEN'})

    data = response.json()
    tags = []
    for edge in data['data']['repository']['refs']['edges']:
        tag_name = edge['node']['name']
        commit_sha = edge['node']['target']['oid']
        tags.append((tag_name, commit_sha))

    return tags

# 示例查询
tags = get_all_tags("owner_name", "repo_name")
print(tags)

以上代码中,我们使用了Python requests库来向GitHub GraphQL API发送查询请求,其中YOUR_ACCESS_TOKEN需要替换成你自己的GitHub Access Token。查询结果中的data字段包含了所有标签的名称和对应的提交SHA值,我们将它们提取出来并以元组的形式存储在tags列表中返回。

注意:如果仓库过多,可能需要使用分页查询来获取所有标签。