github graphQL API - 如何检索问题的项目项?

问题描述 投票:0回答:1

我是 github graphQL API 的新手,我一直在使用 github Entreprise Cloud 寻找以下问题的解决方案:

  • 我有一个存储库“myRepo”,其中包含问题“myIssue”
  • 问题“myIssue”被添加到项目V2“myProject”中,该项目在组织级别定义(而不是在存储库中)
  • 项目“myProject”包含一个字段“Status”(创建项目时的默认字段)

现在...如果项目中问题的“状态”值不是“已关闭”,我想在通过合并 PR 关闭问题时自动重新打开问题。

问题是:拥有问题“myIssue”的节点 ID,如何使用 graphQL 检索项目“myProject”中该问题的字段“Status”的值(假设我有项目编号或其节点 ID)查询?

尝试过类似的事情

query findProjectItemsForIssueNumber($owner: String!, $repoName: String!, $issueNumber:Int!) {
  viewer {
    organization(login:$owner) {
      repository(name:$repoName) {
        issue(number:$issueNumber) {
          url
          projectItems(first:20) {
            nodes {
              id
            }
          }
        }
      }
    }
  }
}

源自https://gist.github.com/richkuz/e8842fce354edbd4e12dcbfa9ca40ff6

但是

projectItems
不是
Issue
字段


更新 所以...在更多地了解 graphQL 并浏览 github 的文档之后,当问题的自定义字段值发生更改时,似乎不会产生事件。因此,我不得不采取相反的方式,即使用预定的工作流程,该工作流程将使用 graphQL 查询来根据我设置的条件来识别与项目相关的所有问题。 这就是我想到的:

query getIssueDetailsOnProject {
  node (id: "<your project node id>") {
    ... on ProjectV2 {
      number
      title
      shortDescription
      items( first: 100 after: "<cursor value>") {
        totalCount
        pageInfo {
          endCursor
          hasNextPage
          startCursor
        }
        nodes {
          type
          databaseId
          content {
            ... on Issue {
              id
              number
              state
            }
          }
          fieldValueByName( name: "Status") {
             ... on ProjectV2ItemFieldSingleSelectValue {
              status: name
            }
          }
        }
      }
    }
  }
}

这将返回类似的内容

{
  "data": {
    "node": {
      "number": 123,
      "title": "my project title",
      "shortDescription": "test project blah blag",
      "items": {
        "totalCount": 321,
        "pageInfo": {
          "endCursor": "Abcd",
          "hasNextPage": true,
          "startCursor": "Abcc"
        },
        "nodes": [
          {
            "type": "ISSUE",
            "databaseId": 12345,
            "content": {
              "id": "JDU6GXNzxKUxUTK2Mui=",
              "number": 4321,
              "state": "OPEN"
            },
            "fieldValueByName": {
              "status": "Closed"
            }
          },
          ...

只要

hasNextPage
true
,我就会迭代查找
state
OPEN
,但
status
Closed
的情况,然后关闭这些情况(使用类似

的突变查询)
mutation closeMyIssue {
  closeIssue(input: {issueId: "<the node id of the issue from previous query content.id>", stateReason: COMPLETED}) {
    clientMutationId
    issue {
      state
      stateReason
      closed
      closedAt
    }
  }
}
graphql github-actions github-api github-graphql github-api-v3
1个回答
0
投票

在原帖编辑中回答

© www.soinside.com 2019 - 2024. All rights reserved.