2

開いているプル リクエストについて 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.
]
4

0 に答える 0