GitHub GraphQL API:获取提交的标签
GitHub GraphQL API: Get tags for a commit
我不知道是否很难对这个问题进行有用的搜索,或者是否没有解决方案,但我一直在努力弄清楚如何使用 GitHub GraphQL API 获取与给定提交关联的所有标签。
我是 GraphQL 和 GitHub API 的新手,所以我只是使用 GitHub's explorer 来尝试找到执行此操作的机制。
这是我尝试过的,其中有一个带有哈希 bfa0635104bc9a559254b5007646942ff269ae11
和消息 1.0.0
的提交,标记为 v1.0.0
。鉴于提交哈希,我正在尝试获取该标签。
{
repository(owner: "bscotch", name: "stitch") {
createdAt
description
name
object(expression: "bfa0635104bc9a559254b5007646942ff269ae11") {
... on Commit {
message
oid
}
... on Tag {
tagId: id
target {
oid
}
}
}
ref(qualifiedName: "bfa0635104bc9a559254b5007646942ff269ae11") {
name
}
refs(first: 10, refPrefix: "refs/tags/", orderBy: {field: TAG_COMMIT_DATE, direction: DESC}, query: "bfa0635104bc9a559254b5007646942ff269ae11") {
nodes {
name
}
}
}
}
以上只输出returns条数据为... on Commit
条内容。其他一切都完全不存在:
{
"data": {
"repository": {
"createdAt": "2020-09-18T18:47:33Z",
"description": "A Gamemaker Studio 2 Pipeline Development Kit. A CLI and Node.JS API for creating GMS2 asset pipelines.",
"name": "stitch",
"object": {
"message": "1.0.0",
"oid": "bfa0635104bc9a559254b5007646942ff269ae11"
},
"ref": null,
"refs": {
"nodes": []
}
}
}
}
有没有办法通过 API 做到这一点?我最好的猜测是,如果有的话,它是通过 refs
字段。
我也一直在苦苦挣扎,这不是最好的答案,但它至少起码是有效的。
查询 refs/tags/
以获取所有标签,然后以您用于匹配 OID 的任何语言手动过滤。你不能保证在一次调用中获取 all 标签,这样你就可以肯定其中有 OID,但我试图匹配可能是最近的标签,所以它工作正常。
{
repository(name: "dg", owner: "dgattey") {
refs(refPrefix: "refs/tags/", last: 100) {
nodes {
name
target {
oid
}
}
}
}
}
这给了我一个巨大的列表,但在其中,我有
{
"node": {
"name": "v2.0.1",
"target": {
"oid": "85fe69df20062aafeea7593c45c1785f44208252"
}
}
}
而且我可以使用其他代码根据我正在搜索的 OID 检查“85fe69df20062aafeea7593c45c1785f44208252”。不理想!
我不知道是否很难对这个问题进行有用的搜索,或者是否没有解决方案,但我一直在努力弄清楚如何使用 GitHub GraphQL API 获取与给定提交关联的所有标签。
我是 GraphQL 和 GitHub API 的新手,所以我只是使用 GitHub's explorer 来尝试找到执行此操作的机制。
这是我尝试过的,其中有一个带有哈希 bfa0635104bc9a559254b5007646942ff269ae11
和消息 1.0.0
的提交,标记为 v1.0.0
。鉴于提交哈希,我正在尝试获取该标签。
{
repository(owner: "bscotch", name: "stitch") {
createdAt
description
name
object(expression: "bfa0635104bc9a559254b5007646942ff269ae11") {
... on Commit {
message
oid
}
... on Tag {
tagId: id
target {
oid
}
}
}
ref(qualifiedName: "bfa0635104bc9a559254b5007646942ff269ae11") {
name
}
refs(first: 10, refPrefix: "refs/tags/", orderBy: {field: TAG_COMMIT_DATE, direction: DESC}, query: "bfa0635104bc9a559254b5007646942ff269ae11") {
nodes {
name
}
}
}
}
以上只输出returns条数据为... on Commit
条内容。其他一切都完全不存在:
{
"data": {
"repository": {
"createdAt": "2020-09-18T18:47:33Z",
"description": "A Gamemaker Studio 2 Pipeline Development Kit. A CLI and Node.JS API for creating GMS2 asset pipelines.",
"name": "stitch",
"object": {
"message": "1.0.0",
"oid": "bfa0635104bc9a559254b5007646942ff269ae11"
},
"ref": null,
"refs": {
"nodes": []
}
}
}
}
有没有办法通过 API 做到这一点?我最好的猜测是,如果有的话,它是通过 refs
字段。
我也一直在苦苦挣扎,这不是最好的答案,但它至少起码是有效的。
查询 refs/tags/
以获取所有标签,然后以您用于匹配 OID 的任何语言手动过滤。你不能保证在一次调用中获取 all 标签,这样你就可以肯定其中有 OID,但我试图匹配可能是最近的标签,所以它工作正常。
{
repository(name: "dg", owner: "dgattey") {
refs(refPrefix: "refs/tags/", last: 100) {
nodes {
name
target {
oid
}
}
}
}
}
这给了我一个巨大的列表,但在其中,我有
{
"node": {
"name": "v2.0.1",
"target": {
"oid": "85fe69df20062aafeea7593c45c1785f44208252"
}
}
}
而且我可以使用其他代码根据我正在搜索的 OID 检查“85fe69df20062aafeea7593c45c1785f44208252”。不理想!