1

我不知道是否很难对这个问题进行有用的搜索,或者是否没有解决方案,但我一直在尝试弄清楚如何使用 GitHub GraphQL API 来获取与给定提交关联的所有标签。

我是 GraphQL 和 GitHub API 的新手,所以我只是使用GitHub 的资源管理器来尝试找到执行此操作的机制。

这是我尝试过的,其中有一个带有 hashbfa0635104bc9a559254b5007646942ff269ae11和 message的提交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
      }
    }
  }
}

上面的输出只返回... 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现场。

4

1 回答 1

1

我也一直在苦苦挣扎,这不是最好的答案,但至少它至少有效。

查询refs/tags/以获取所有标签,然后以您用于匹配 OID 的任何语言手动过滤。您不能保证在一次调用中获取所有标签,因此您肯定会在其中包含 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”。不理想!

于 2021-04-28T00:56:21.803 回答