标签和发布 Assets url 的 Github 列表

标签 github graphql github-api github-graphql

我正在努力使用 github graphql 接口(interface)来获取我需要的数据。我想获取标签和版本的 Assets URL 列表。似乎有些 repo 产生了我想要的结果,而另一些则什么也没有产生。

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 repo 时,它显然有发布 Assets 。

为什么他们没有显示在此查询中?当我查看 git 时,每个版本和标签都有 Assets ,即使在我的查询中,结果也有问题。我错过了什么?

最佳答案

目标是 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这只是链接到一个提交

关于标签和发布 Assets url 的 Github 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53862730/

相关文章:

git - 如何使用 GitHub API V3 列出公共(public)存储库的所有版本

git - 克隆后记住多个 git 远程 url

git - 我的 Github 仓库有 'main' 和 'master' 分支——它们的目的是什么?

github - Github Enterprise 如何保护他们在虚拟机上交付的代码?

reactjs - 如何为 AWS 中的嵌套字段设置限制以扩大 DynamoDB 模式?

javascript - 获取每年 GitHub 用户贡献的数量

git - 我如何为 GitHub 上的维基页面发出 pull 请求?

sql - 使用 Node.js 连接表的 GraphQL 查询

graphql,当有 "add"和 "update"突变时如何设计输入类型?

ruby-on-rails - 使用 github api 为 github 存储库创建 webhook