我在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时,每个发行版和标签都拥有资产,即使在我的查询中,结果还是会命中或未命中。我想念什么?
答案 0 :(得分:2)
目标是git reference,在这种情况下,它可以指向Tag
或Commit
对象。当它指向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
}
}
请注意,在上面的示例中,我使用了fragments来减小查询大小并提高可读性
我的猜测是,如果引用指向annotated tag的Tag
对象,该对象可以保存消息,特定的标记日期和标记信息。如果它指向Commit
对象,则是lightweight tag,它只是链接到提交