如何获取GitHub仓库最新活跃部署?GraphQL查询优化求助
如何用GitHub GraphQL筛选状态为ACTIVE的部署
要筛选出状态为ACTIVE的部署,GitHub GraphQL的repository.deployments字段本身不支持直接按state过滤,但可以通过Search查询实现精准筛选,无需在后端聚合结果。
方案一:使用Search查询直接过滤
直接利用GitHub的Search GraphQL接口,通过查询字符串指定部署状态、仓库和环境,直接获取符合要求的结果:
query ($repo_owner: String!, $repo_name: String!, $environment: String!) { search( query: "repo:${repo_owner}/${repo_name} type:deployment state:active environment:${environment}", type: DEPLOYMENT, first: 10, orderBy: {field: CREATED_AT, direction: DESC} ) { nodes { ... on Deployment { state ref { name } createdAt } } } }
查询参数说明:
repo:${repo_owner}/${repo_name}:限定查询的目标仓库type:deployment:指定查询类型为部署记录state:active:筛选状态为ACTIVE的部署environment:${environment}:限定目标部署环境
原查询无法直接过滤的原因
GitHub GraphQL的Repository.deployments字段的可用参数中,没有提供按state过滤的选项,只能返回指定环境下的所有部署,无法在查询阶段完成状态筛选。因此Search接口是最直接的替代方案。
备选方案(不推荐)
如果一定要沿用原有的repository.deployments查询结构,只能在获取结果后手动过滤state为ACTIVE的节点,但这需要在客户端或后端处理数据,不符合你不想聚合结果的需求,因此不推荐。
内容的提问来源于stack exchange,提问作者Berkin
相关产品推荐
相关产品推荐

