我是 github graphQL API 的新手,我一直在使用 github Entreprise Cloud 寻找以下问题的解决方案:
现在...如果项目中问题的“状态”值不是“已关闭”,我想在通过合并 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
}
}
}
在原帖编辑中回答