在 GraphQL 中获取没有预发布的最新版本

Get latest release without prerelease in GraphQL

我正在将我与 GitHub REST API 的连接迁移到 GraphQL API,我对获取最新版本感到困惑。

当我使用下面的端点通过 REST API 获取最新版本时,它永远不会 return 草稿版本或预发布版本。

/repos/:owner/:repo/releases/latest

但是,当我对 GraphQL 做同样的事情时 API 我无法过滤它,使用下面的查询我得到了最新版本,但如果它是和预发布我将不得不再次查询以找到另一个。

{
  InovaFarmaApi: repository(owner: "precisaosistemas", name: "inovafarma-api") {
    ...releaseData
  }
}

fragment releaseData on Repository {
  releases (last: 2) {
      nodes {
        isPrerelease
      }
    }
}

我可以只筛选发行版而不筛选草稿发行版或预发行版吗?

看起来不像。

GitHub 开发人员文档完整列出了所有 GraphQL 对象类型、它们的字段和相关参数。 Repository in particular documents its releases field; that has the Relay connection parameters and an ordering, but the only supported ReleaseOrderField 值是 CREATED_ATNAME.

这意味着您需要重复调​​用以翻阅版本,直到找到符合您标准的版本。

query GetRelease($owner: String!, $name: String!, $cursor: String) {
  repository(owner: $owner, name: $name) {
    releases(before: $cursor,
             last: 1,
             orderBy: {field: CREATED_AT, order: DESC}) {
      pageInfo { hasPreviousPage, startCursor }
      nodes {
        isPrerelease
        ...OtherReleaseData
      }
    }
  }
}

如果您点击了 isPrerelease 为真(您不想要)的版本,并且 hasPreviousPage 也为真,则重新 运行 传递先前 startCursor 值作为 cursor 参数。