【问题标题】:Github list of tag and release asset urls标记和发布资产 urls 的 Github 列表
【发布时间】:2018-12-26 08:43:18
【问题描述】:

我正在努力使用 github graphql 界面来获取我需要的数据。我想获取标签和版本的资产 url 列表。似乎有些 repos 产生了我想要的结果,而另一些则什么也没产生。

query {
 repository(owner:"erlang",name:"otp") {
    releases(last:100) {
      edges {
        node {
          url
          releaseAssets(last:100) {
            edges {
              node {
                downloadUrl
              }
            }
          }
          tag {
            name
            target {
              ... on Commit {
                zipballUrl
                tarballUrl
              }
            }
          }
        }
      }
    }
    tags:refs(refPrefix:"refs/tags/", last:30) {
      edges {
        tag:node {
          name
          target {
            sha:oid
            commitResourcePath
            ... on Commit {
              zipballUrl
              tarballUrl
              author {
                name
                email
                date
              }
            }
          }
        }
      }
    }
  }
}

按原样,该查询会产生我想要的结果(或至少一些结果),而 owner:"spring-projects",name:"spring-framework" 会产生没有 tarball 的标签。当我查看 spring-framework 存储库时,它显然具有发布资产。

为什么它们没有显示在此查询中?当我查看 git 时,每个版本和标签都有资产,即使在我的查询中,结果也是命中或未命中。我错过了什么?

【问题讨论】:

    标签: github graphql github-api github-graphql


    【解决方案1】:

    目标是git reference,在这种情况下,它可以指向TagCommit 对象。当它指向Commit 时,您的查询将返回预期结果,因为...on Commit 不为空。要获得Tag,只需尝试使用...on Tag 并根据您的需要提取标记器或它指向的提交。这是一个例子:

    {
      repository(owner: "spring-projects", name: "spring-framework") {
        releases(last: 100) {
          edges {
            node {
              url
              releaseAssets(last: 100) {
                edges {
                  node {
                    downloadUrl
                  }
                }
              }
              tag {
                ...refInfo
              }
            }
          }
        }
        tags: refs(refPrefix: "refs/tags/", last: 30) {
          edges {
            node {
              ...refInfo
            }
          }
        }
      }
    }
    
    fragment refInfo on Ref {
      name
      target {
        sha: oid
        commitResourcePath
        __typename
        ... on Tag {
          target {
            ... on Commit {
              ...commitInfo
            }
          }
          tagger {
            name
            email
            date
          }
        }
        ... on Commit {
          ...commitInfo
        }
      }
    }
    
    fragment commitInfo on Commit {
      zipballUrl
      tarballUrl
      author {
        name
        email
        date
      }
    }
    

    Try it in the explorer

    请注意,在上面的示例中,我使用了fragments 来减小查询大小并提高可读性

    我的猜测是,如果 ref 指向一个 Tag 对象,该对象是一个 annotated tag,它可以保存一条消息、一个特定的标记日期和标记信息。如果它指向一个Commit 对象,它就是一个lightweight tag,它只是链接到一个提交

    【讨论】:

    • 这正是我所需要的!感谢您抽出宝贵时间创建这个内容丰富的回复。圣诞快乐。
    猜你喜欢
    • 2020-11-06
    • 2015-08-22
    • 1970-01-01
    • 2014-04-06
    • 2022-11-04
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多