Github标签和发布资产网址列表

时间:2018-12-20 05:11:21

标签: github graphql github-api github-graphql

我在github graphql接口上苦苦挣扎,以获取所需的数据。我想获取标签和发行版的资产网址列表。似乎有些回购协议产生了我想要的结果,而其他则什么也没产生。

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”产生的标签没有压缩包。当我查看spring-framework repo时,它显然具有发布的资产。

为什么它们不在此查询中显示?当我查看git时,每个发行版和标签都拥有资产,即使在我的查询中,结果还是会命中或未命中。我想念什么?

1 个答案:

答案 0 :(得分:2)

目标是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来减小查询大小并提高可读性

我的猜测是,如果引用指向annotated tagTag对象,该对象可以保存消息,特定的标记日期和标记信息。如果它指向Commit对象,则是lightweight tag,它只是链接到提交