開いているプル リクエストについて github graphql API を照会し、それらに関するカウントと概要情報を Slack チャネルに投稿するスクリプトを作成しています。
github-graphql API を照会して結果を返すことができます。結果を繰り返し処理してプロパティを読み取ることができます。
キーの値は一意であると考えていましたが、そうではないことがわかりました (たとえば、「名前」の値を持つ複数のキーがあります)。
graphql api 応答から必要な情報を抽出する方法が見つからないため、現在行き詰まっています。REST API では、データに対して複数の API を複数回呼び出すことになりますが、今回は graphql API を使用したいと考えています。
Graphql クエリは次のとおりです。
query { organization(login: "MyOrganisation") {
repositories(first: 20, orderBy: {field: PUSHED_AT, direction: DESC}) {
nodes {
name
pullRequests(first: 10, states: OPEN, orderBy: {field: UPDATED_AT, direction: DESC}) {
nodes {
headRepository { nameWithOwner }
url
author {
... on User {
login name
}
}
mergeable
createdAt
baseRefName
headRefName
title
... on PullRequest {
pullRequestcommits: commits(last: 1) {
totalCount
nodes {
commit {
url
status { state contexts { context description createdAt targetUrl } }
}
}
}
}
}
}
}
}
}
}
応答は次の行に沿っています。
{
"data": {
"organization": {
"repositories": {
"nodes": [
{
"name": "my-service-1",
"pullRequests": {
"nodes": []
}
},
{
"name": "my-service-2",
"pullRequests": {
"nodes": []
}
},
{
"name": "my-service-3",
"pullRequests": {
"nodes": []
}
},
{
"name": "my-service-4",
"pullRequests": {
"nodes": [
{
"headRepository": {
"nameWithOwner": "MyOrganisation/my-service-4"
},
"url": "https://www.githhub.com/MyOrganisation/my-service-4/pull/21",
"author": {
"login": "Bob1",
"name": "Bob"
},
"mergeable": "MERGEABLE",
"createdAt": "2019-08-20T15:24:52Z",
"baseRefName": "develop",
"headRefName": "feature/name-tags",
"title": "Added tags",
"pullRequestcommits": {
"totalCount": 1,
"nodes": [
{
"commit": {
"url": "https://www.githhub.com/MyOrganisation/my-service-4/commit/6bdda3a4adbc9bc7ea621556be1097bf0e618b3a",
"status": null
}
}
]
}
}
]
}
},
{
"name": "my-service-5",
"pullRequests": {
"nodes": [
{
"headRepository": {
"nameWithOwner": "MyOrganisation/my-service-5"
},
"url": "https://www.github.com/MyOrganisation/my-service-5",
"author": {
"login": "Anne2",
"name": "Anne"
},
"mergeable": "MERGEABLE",
"createdAt": "2019-08-27T08:18:52Z",
"baseRefName": "develop",
"headRefName": "feature/new-nodejs-upgrade",
"title": "Changed nodejs version to the latet version of 10 supported b…",
"pullRequestcommits": {
"totalCount": 1,
"nodes": [
{
"commit": {
"url": "https://www.github.com/MyOrganisation/my-service-5/commit/6a0694cfa86864c7bad509273536ef0506ad40ff",
"status": null
}
}
]
}
},
{
"headRepository": {
"nameWithOwner": "MyOrganisation/my-service-5r"
},
"url": "https://www.github.com/MyOrganisation/my-service-5/pull/72",
"author": {
"login": "Peter3",
"name": "Peter"
},
"mergeable": "MERGEABLE",
"createdAt": "2019-08-20T13:13:39Z",
"baseRefName": "develop",
"headRefName": "feature/Tagging-cloudformation-stacks",
"title": "Added tags to the change set, this will add tags to all objec…",
"pullRequestcommits": {
"totalCount": 2,
"nodes": [
{
"commit": {
"url": "https://www.github.com/MyOrganisation/my-service-5/commit/6f14a2d8157ee2efc5a869741df6683da1d6789f",
"status": null
}
}
]
}
}
]
}
},
そして、必要なデータを取得するために使用できると思って書いたコード:
function iterate(obj: any, stack: any) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object") {
iterate(obj[property], stack + '.' + property);
} else {
if (property === 'name') {
console.log(property + " " + obj[property]);
}
}
}
}
}
しかし、これはうまくいかず、これを行う方法が思いつきません。どんな指針も本当に感謝しています。
次の行に沿って配列を作成したいと思います。
pullrequests [
[repo: my-service-1, openprs: 0],
[repo: my-service-2, openprs: 0],
[repo: my-service-3, openprs: 0],
[repo: my-service-4, openprs: 1, [createdAt: 2019-08-20T15:24:52Z, url: https://www.githhub.com/MyOrganisation/my-service-4/pull/21, author: Bob, headRefName: feature/name-tags, title: Added tags]]
etc.
]