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”。不理想!