{"action":"created","comment":{"url":"https://api.github.com/repos/knative/test-infra/pulls/comments/255775827","pull_request_review_id":202446764,"id":255775827,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI1NTc3NTgyNw==","diff_hunk":"@@ -0,0 +1,327 @@\n+/*\n+Copyright 2019 The Knative Authors\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+// ghutil.go provides generic functions supporting Github operations\n+// It helps overcome Github rate limit errors\n+\n+package ghutil\n+\n+import (\n+\t\"context\"\n+\t\"io/ioutil\"\n+\t\"strings\"\n+\t\"log\"\n+\t\"fmt\"\n+\t\"time\"\n+\n+\t\"golang.org/x/oauth2\"\n+\t\"github.com/google/go-github/github\"\n+)\n+\n+const (\n+\tmaxRetryCount = 5\n+\ttokenReserve  = 50\n+\n+\t// IssueOpenState is the state of open github issue\n+\tIssueOpenState IssueStateEnum = \"open\"\n+\t// IssueCloseState is the state of closed github issue\n+\tIssueCloseState IssueStateEnum = \"close\"\n+\t// IssueAllState can be used as filter for querying genericList including closed genericList\n+\tIssueAllState  IssueStateEnum = \"all\"\n+)\n+\n+// IssueStateEnum represents different states of Github Issues\n+type IssueStateEnum string\n+\n+// client for github authentication\n+// without explicitly authenticate this client can still be used for anonymous operations\n+var client *github.Client\n+var ctx = context.Background()\n+\n+// Authenticate explicitly authenticate github with giving token\n+func Authenticate(tokenFilePath *string) error {\n+\tb, err := ioutil.ReadFile(*tokenFilePath)\n+\tif err != nil {\n+\t\treturn err\n+\t}\n+\tts := oauth2.StaticTokenSource(\n+\t\t&oauth2.Token{AccessToken: strings.TrimSpace(string(b))},\n+\t)\n+\tclient = github.NewClient(oauth2.NewClient(ctx, ts))\n+\treturn nil\n+}\n+\n+// GetCurrentUser gets authenticated user\n+func GetCurrentUser() (*github.User, error) {\n+\tvar res *github.User\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"getting current user\"),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\tres, resp, err = client.Users.Get(ctx, \"\")\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn res, err\n+}\n+\n+// ListIssuesByRepo lists genericList within given repo,\n+// filters by labels if labels provided\n+func ListIssuesByRepo(org, repo string, labels []string) ([]*github.Issue, error) {\n+\tissueListOptions := github.IssueListByRepoOptions{\n+\t\tState:  string(IssueAllState),\n+\t}\n+\tif len(labels) > 0 {\n+\t\tissueListOptions.Labels = labels\n+\t}\n+\t\n+\tvar res []*github.Issue\n+\toptions := &github.ListOptions{}\n+\tgenericList, err := depaginate(\n+\t\tfmt.Sprintf(\"listing genericList with label '%v'\", labels),\n+\t\tmaxRetryCount,\n+\t\toptions,\n+\t\tfunc() ([]interface{}, *github.Response, error) {\n+\t\t\tpage, resp, err := client.Issues.ListByRepo(ctx, org, repo, &issueListOptions)\n+\t\t\tvar interfaceList []interface{}\n+\t\t\tif nil == err {\n+\t\t\t\tfor _, issue := range page {\n+\t\t\t\t\tinterfaceList = append(interfaceList, issue)\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn interfaceList, resp, err\n+\t\t},\n+\t)\n+\tfor _, issue := range genericList {\n+\t\tres = append(res, issue.(*github.Issue))\n+\t}\n+\treturn res, err\n+}\n+\n+// CreateIssue creates issue\n+func CreateIssue(org, repo, title, body string) (*github.Issue, error) {\n+\tissue := &github.IssueRequest{\n+\t\tTitle: &title,\n+\t\tBody:  &body,\n+\t}\n+\n+\tvar res *github.Issue\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"creating issue '%s %s' '%s'\", org, repo, title),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\tres, resp, err = client.Issues.Create(ctx, org, repo, issue)\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn res, err\n+}\n+\n+// CloseIssue closes issue\n+func CloseIssue(org, repo string, number int) error {\n+\treturn updateIssueState(org, repo, IssueCloseState, number)\n+}\n+\n+// ReopenIssue reopen issue\n+func ReopenIssue(org, repo string, number int) error {\n+\treturn updateIssueState(org, repo, IssueOpenState, number)\n+}\n+\n+// ListComments gets all comments from issue\n+func ListComments(org, repo string, number int) ([]*github.IssueComment, error) {\n+\tvar res []*github.IssueComment\n+\toptions := &github.ListOptions{}\n+\tgenericList, err := depaginate(\n+\t\tfmt.Sprintf(\"commenting issue '%s %s %d'\", org, repo, number),\n+\t\tmaxRetryCount,\n+\t\toptions,\n+\t\tfunc() ([]interface{}, *github.Response, error) {\n+\t\t\tpage, resp, err := client.Issues.ListComments(ctx, org, repo, number, nil)\n+\t\t\tvar interfaceList []interface{}\n+\t\t\tif nil == err {\n+\t\t\t\tfor _, issue := range page {\n+\t\t\t\t\tinterfaceList = append(interfaceList, issue)\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn interfaceList, resp, err\n+\t\t},\n+\t)\n+\tfor _, issue := range genericList {\n+\t\tres = append(res, issue.(*github.IssueComment))\n+\t}\n+\treturn res, err\n+}\n+\n+// GetComment gets comment by comment ID\n+func GetComment(org, repo string, commentID int64) (*github.IssueComment, error) {\n+\tvar res *github.IssueComment\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"getting comment '%s %s %d'\", org, repo, commentID),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\tres, resp, err = client.Issues.GetComment(ctx, org, repo, commentID)\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn res, err\n+}\n+\n+// CreateComment adds comment to issue\n+func CreateComment(org, repo string, number int, commentStr string) error {\n+\tcomment := &github.IssueComment{\n+\t\tBody: &commentStr,\n+\t}\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"commenting issue '%s %s %d'\", org, repo, number),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\t_, resp, err = client.Issues.CreateComment(ctx, org, repo, number, comment)\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn err\n+}\n+\n+// EditComment edits comment with given comment ID\n+func EditComment(org, repo string, commentID int64, commentStr string) error {\n+\tcomment := &github.IssueComment{\n+\t\tBody: &commentStr,\n+\t}\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"editing comment '%s %s %d'\", org, repo, commentID),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\t_, resp, err = client.Issues.EditComment(ctx, org, repo, commentID, comment)\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn err\n+}\n+\n+// AddLabelsToIssue adds label on issue\n+func AddLabelsToIssue(org, repo string, number int, labelStrs []string) error {\n+\t_, err := retry(\n+\t\tfmt.Sprintf(\"add labels '%v' to '%s %s %d'\", labelStrs, org, repo, number),\n+\t\tmaxRetryCount,\n+\t\tfunc() (*github.Response, error) {\n+\t\t\tvar resp *github.Response\n+\t\t\tvar err error\n+\t\t\t_, resp, err = client.Issues.AddLabelsToIssue(ctx, org, repo, number, labelStrs)\n+\t\t\treturn resp, err\n+\t\t},\n+\t)\n+\treturn err\n+}\n+\n+// RemoveLabelForIssue in case test failed, remove label auto:lessflaky if exists","path":"tools/flaky-test-reporter/ghutil/ghutil.go","position":239,"original_position":239,"commit_id":"7eb8b76bb07800e8df437f21f0efdc9c914dfd7c","original_commit_id":"7eb8b76bb07800e8df437f21f0efdc9c914dfd7c","user":{"login":"adrcunha","id":35786489,"node_id":"MDQ6VXNlcjM1Nzg2NDg5","avatar_url":"https://avatars3.githubusercontent.com/u/35786489?v=4","gravatar_id":"","url":"https://api.github.com/users/adrcunha","html_url":"https://github.com/adrcunha","followers_url":"https://api.github.com/users/adrcunha/followers","following_url":"https://api.github.com/users/adrcunha/following{/other_user}","gists_url":"https://api.github.com/users/adrcunha/gists{/gist_id}","starred_url":"https://api.github.com/users/adrcunha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adrcunha/subscriptions","organizations_url":"https://api.github.com/users/adrcunha/orgs","repos_url":"https://api.github.com/users/adrcunha/repos","events_url":"https://api.github.com/users/adrcunha/events{/privacy}","received_events_url":"https://api.github.com/users/adrcunha/received_events","type":"User","site_admin":false},"body":"Update comment.","created_at":"2019-02-12T02:11:53Z","updated_at":"2019-02-12T02:18:26Z","html_url":"https://github.com/knative/test-infra/pull/466#discussion_r255775827","pull_request_url":"https://api.github.com/repos/knative/test-infra/pulls/466","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/knative/test-infra/pulls/comments/255775827"},"html":{"href":"https://github.com/knative/test-infra/pull/466#discussion_r255775827"},"pull_request":{"href":"https://api.github.com/repos/knative/test-infra/pulls/466"}}},"pull_request":{"url":"https://api.github.com/repos/knative/test-infra/pulls/466","id":252078635,"node_id":"MDExOlB1bGxSZXF1ZXN0MjUyMDc4NjM1","html_url":"https://github.com/knative/test-infra/pull/466","diff_url":"https://github.com/knative/test-infra/pull/466.diff","patch_url":"https://github.com/knative/test-infra/pull/466.patch","issue_url":"https://api.github.com/repos/knative/test-infra/issues/466","number":466,"state":"open","locked":false,"title":"Flaky test reporting(part #3) Add ghutil package for supporting Github issues tracking","user":{"login":"chaodaiG","id":45011425,"node_id":"MDQ6VXNlcjQ1MDExNDI1","avatar_url":"https://avatars0.githubusercontent.com/u/45011425?v=4","gravatar_id":"","url":"https://api.github.com/users/chaodaiG","html_url":"https://github.com/chaodaiG","followers_url":"https://api.github.com/users/chaodaiG/followers","following_url":"https://api.github.com/users/chaodaiG/following{/other_user}","gists_url":"https://api.github.com/users/chaodaiG/gists{/gist_id}","starred_url":"https://api.github.com/users/chaodaiG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chaodaiG/subscriptions","organizations_url":"https://api.github.com/users/chaodaiG/orgs","repos_url":"https://api.github.com/users/chaodaiG/repos","events_url":"https://api.github.com/users/chaodaiG/events{/privacy}","received_events_url":"https://api.github.com/users/chaodaiG/received_events","type":"User","site_admin":false},"body":"This package is a wrapper of 'github.com/google/go-github/github',  handles authentication, issues, comments related helper functions, with logic of retry and depagination.\r\n\r\nAll apis declared in this package will later on be used for issues tracking of flaky tests, includes listing/creating/closing/reopening issues and listing/creating/editing comments, and adding/removing labels\r\n\r\nPart of: #132 ","created_at":"2019-02-11T21:55:59Z","updated_at":"2019-02-12T02:18:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c79b1e2f2a27e75a4c9f77a53b2ca6ac56f69670","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jessiezcc","id":37942702,"node_id":"MDQ6VXNlcjM3OTQyNzAy","avatar_url":"https://avatars2.githubusercontent.com/u/37942702?v=4","gravatar_id":"","url":"https://api.github.com/users/jessiezcc","html_url":"https://github.com/jessiezcc","followers_url":"https://api.github.com/users/jessiezcc/followers","following_url":"https://api.github.com/users/jessiezcc/following{/other_user}","gists_url":"https://api.github.com/users/jessiezcc/gists{/gist_id}","starred_url":"https://api.github.com/users/jessiezcc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jessiezcc/subscriptions","organizations_url":"https://api.github.com/users/jessiezcc/orgs","repos_url":"https://api.github.com/users/jessiezcc/repos","events_url":"https://api.github.com/users/jessiezcc/events{/privacy}","received_events_url":"https://api.github.com/users/jessiezcc/received_events","type":"User","site_admin":false},{"login":"dushyanthsc","id":43390008,"node_id":"MDQ6VXNlcjQzMzkwMDA4","avatar_url":"https://avatars3.githubusercontent.com/u/43390008?v=4","gravatar_id":"","url":"https://api.github.com/users/dushyanthsc","html_url":"https://github.com/dushyanthsc","followers_url":"https://api.github.com/users/dushyanthsc/followers","following_url":"https://api.github.com/users/dushyanthsc/following{/other_user}","gists_url":"https://api.github.com/users/dushyanthsc/gists{/gist_id}","starred_url":"https://api.github.com/users/dushyanthsc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dushyanthsc/subscriptions","organizations_url":"https://api.github.com/users/dushyanthsc/orgs","repos_url":"https://api.github.com/users/dushyanthsc/repos","events_url":"https://api.github.com/users/dushyanthsc/events{/privacy}","received_events_url":"https://api.github.com/users/dushyanthsc/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":993222908,"node_id":"MDU6TGFiZWw5OTMyMjI5MDg=","url":"https://api.github.com/repos/knative/test-infra/labels/approved","name":"approved","color":"ededed","default":false},{"id":993222917,"node_id":"MDU6TGFiZWw5OTMyMjI5MTc=","url":"https://api.github.com/repos/knative/test-infra/labels/size/L","name":"size/L","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/knative/test-infra/pulls/466/commits","review_comments_url":"https://api.github.com/repos/knative/test-infra/pulls/466/comments","review_comment_url":"https://api.github.com/repos/knative/test-infra/pulls/comments{/number}","comments_url":"https://api.github.com/repos/knative/test-infra/issues/466/comments","statuses_url":"https://api.github.com/repos/knative/test-infra/statuses/7eb8b76bb07800e8df437f21f0efdc9c914dfd7c","head":{"label":"chaodaiG:github_package_support_flaky_tests_reporting","ref":"github_package_support_flaky_tests_reporting","sha":"7eb8b76bb07800e8df437f21f0efdc9c914dfd7c","user":{"login":"chaodaiG","id":45011425,"node_id":"MDQ6VXNlcjQ1MDExNDI1","avatar_url":"https://avatars0.githubusercontent.com/u/45011425?v=4","gravatar_id":"","url":"https://api.github.com/users/chaodaiG","html_url":"https://github.com/chaodaiG","followers_url":"https://api.github.com/users/chaodaiG/followers","following_url":"https://api.github.com/users/chaodaiG/following{/other_user}","gists_url":"https://api.github.com/users/chaodaiG/gists{/gist_id}","starred_url":"https://api.github.com/users/chaodaiG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chaodaiG/subscriptions","organizations_url":"https://api.github.com/users/chaodaiG/orgs","repos_url":"https://api.github.com/users/chaodaiG/repos","events_url":"https://api.github.com/users/chaodaiG/events{/privacy}","received_events_url":"https://api.github.com/users/chaodaiG/received_events","type":"User","site_admin":false},"repo":{"id":159388501,"node_id":"MDEwOlJlcG9zaXRvcnkxNTkzODg1MDE=","name":"test-infra","full_name":"chaodaiG/test-infra","private":false,"owner":{"login":"chaodaiG","id":45011425,"node_id":"MDQ6VXNlcjQ1MDExNDI1","avatar_url":"https://avatars0.githubusercontent.com/u/45011425?v=4","gravatar_id":"","url":"https://api.github.com/users/chaodaiG","html_url":"https://github.com/chaodaiG","followers_url":"https://api.github.com/users/chaodaiG/followers","following_url":"https://api.github.com/users/chaodaiG/following{/other_user}","gists_url":"https://api.github.com/users/chaodaiG/gists{/gist_id}","starred_url":"https://api.github.com/users/chaodaiG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chaodaiG/subscriptions","organizations_url":"https://api.github.com/users/chaodaiG/orgs","repos_url":"https://api.github.com/users/chaodaiG/repos","events_url":"https://api.github.com/users/chaodaiG/events{/privacy}","received_events_url":"https://api.github.com/users/chaodaiG/received_events","type":"User","site_admin":false},"html_url":"https://github.com/chaodaiG/test-infra","description":"Test infrastructure for the Knative project.","fork":true,"url":"https://api.github.com/repos/chaodaiG/test-infra","forks_url":"https://api.github.com/repos/chaodaiG/test-infra/forks","keys_url":"https://api.github.com/repos/chaodaiG/test-infra/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chaodaiG/test-infra/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chaodaiG/test-infra/teams","hooks_url":"https://api.github.com/repos/chaodaiG/test-infra/hooks","issue_events_url":"https://api.github.com/repos/chaodaiG/test-infra/issues/events{/number}","events_url":"https://api.github.com/repos/chaodaiG/test-infra/events","assignees_url":"https://api.github.com/repos/chaodaiG/test-infra/assignees{/user}","branches_url":"https://api.github.com/repos/chaodaiG/test-infra/branches{/branch}","tags_url":"https://api.github.com/repos/chaodaiG/test-infra/tags","blobs_url":"https://api.github.com/repos/chaodaiG/test-infra/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chaodaiG/test-infra/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chaodaiG/test-infra/git/refs{/sha}","trees_url":"https://api.github.com/repos/chaodaiG/test-infra/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chaodaiG/test-infra/statuses/{sha}","languages_url":"https://api.github.com/repos/chaodaiG/test-infra/languages","stargazers_url":"https://api.github.com/repos/chaodaiG/test-infra/stargazers","contributors_url":"https://api.github.com/repos/chaodaiG/test-infra/contributors","subscribers_url":"https://api.github.com/repos/chaodaiG/test-infra/subscribers","subscription_url":"https://api.github.com/repos/chaodaiG/test-infra/subscription","commits_url":"https://api.github.com/repos/chaodaiG/test-infra/commits{/sha}","git_commits_url":"https://api.github.com/repos/chaodaiG/test-infra/git/commits{/sha}","comments_url":"https://api.github.com/repos/chaodaiG/test-infra/comments{/number}","issue_comment_url":"https://api.github.com/repos/chaodaiG/test-infra/issues/comments{/number}","contents_url":"https://api.github.com/repos/chaodaiG/test-infra/contents/{+path}","compare_url":"https://api.github.com/repos/chaodaiG/test-infra/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chaodaiG/test-infra/merges","archive_url":"https://api.github.com/repos/chaodaiG/test-infra/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chaodaiG/test-infra/downloads","issues_url":"https://api.github.com/repos/chaodaiG/test-infra/issues{/number}","pulls_url":"https://api.github.com/repos/chaodaiG/test-infra/pulls{/number}","milestones_url":"https://api.github.com/repos/chaodaiG/test-infra/milestones{/number}","notifications_url":"https://api.github.com/repos/chaodaiG/test-infra/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chaodaiG/test-infra/labels{/name}","releases_url":"https://api.github.com/repos/chaodaiG/test-infra/releases{/id}","deployments_url":"https://api.github.com/repos/chaodaiG/test-infra/deployments","created_at":"2018-11-27T19:31:52Z","updated_at":"2019-02-11T19:08:38Z","pushed_at":"2019-02-11T23:19:31Z","git_url":"git://github.com/chaodaiG/test-infra.git","ssh_url":"git@github.com:chaodaiG/test-infra.git","clone_url":"https://github.com/chaodaiG/test-infra.git","svn_url":"https://github.com/chaodaiG/test-infra","homepage":null,"size":10703,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"knative:master","ref":"master","sha":"0a26451335d22f168a00e218679bc7ab32fd15bf","user":{"login":"knative","id":35583233,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTgzMjMz","avatar_url":"https://avatars2.githubusercontent.com/u/35583233?v=4","gravatar_id":"","url":"https://api.github.com/users/knative","html_url":"https://github.com/knative","followers_url":"https://api.github.com/users/knative/followers","following_url":"https://api.github.com/users/knative/following{/other_user}","gists_url":"https://api.github.com/users/knative/gists{/gist_id}","starred_url":"https://api.github.com/users/knative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/knative/subscriptions","organizations_url":"https://api.github.com/users/knative/orgs","repos_url":"https://api.github.com/users/knative/repos","events_url":"https://api.github.com/users/knative/events{/privacy}","received_events_url":"https://api.github.com/users/knative/received_events","type":"Organization","site_admin":false},"repo":{"id":136082371,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYwODIzNzE=","name":"test-infra","full_name":"knative/test-infra","private":false,"owner":{"login":"knative","id":35583233,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTgzMjMz","avatar_url":"https://avatars2.githubusercontent.com/u/35583233?v=4","gravatar_id":"","url":"https://api.github.com/users/knative","html_url":"https://github.com/knative","followers_url":"https://api.github.com/users/knative/followers","following_url":"https://api.github.com/users/knative/following{/other_user}","gists_url":"https://api.github.com/users/knative/gists{/gist_id}","starred_url":"https://api.github.com/users/knative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/knative/subscriptions","organizations_url":"https://api.github.com/users/knative/orgs","repos_url":"https://api.github.com/users/knative/repos","events_url":"https://api.github.com/users/knative/events{/privacy}","received_events_url":"https://api.github.com/users/knative/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/knative/test-infra","description":"Test infrastructure for the Knative project.","fork":false,"url":"https://api.github.com/repos/knative/test-infra","forks_url":"https://api.github.com/repos/knative/test-infra/forks","keys_url":"https://api.github.com/repos/knative/test-infra/keys{/key_id}","collaborators_url":"https://api.github.com/repos/knative/test-infra/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/knative/test-infra/teams","hooks_url":"https://api.github.com/repos/knative/test-infra/hooks","issue_events_url":"https://api.github.com/repos/knative/test-infra/issues/events{/number}","events_url":"https://api.github.com/repos/knative/test-infra/events","assignees_url":"https://api.github.com/repos/knative/test-infra/assignees{/user}","branches_url":"https://api.github.com/repos/knative/test-infra/branches{/branch}","tags_url":"https://api.github.com/repos/knative/test-infra/tags","blobs_url":"https://api.github.com/repos/knative/test-infra/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/knative/test-infra/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/knative/test-infra/git/refs{/sha}","trees_url":"https://api.github.com/repos/knative/test-infra/git/trees{/sha}","statuses_url":"https://api.github.com/repos/knative/test-infra/statuses/{sha}","languages_url":"https://api.github.com/repos/knative/test-infra/languages","stargazers_url":"https://api.github.com/repos/knative/test-infra/stargazers","contributors_url":"https://api.github.com/repos/knative/test-infra/contributors","subscribers_url":"https://api.github.com/repos/knative/test-infra/subscribers","subscription_url":"https://api.github.com/repos/knative/test-infra/subscription","commits_url":"https://api.github.com/repos/knative/test-infra/commits{/sha}","git_commits_url":"https://api.github.com/repos/knative/test-infra/git/commits{/sha}","comments_url":"https://api.github.com/repos/knative/test-infra/comments{/number}","issue_comment_url":"https://api.github.com/repos/knative/test-infra/issues/comments{/number}","contents_url":"https://api.github.com/repos/knative/test-infra/contents/{+path}","compare_url":"https://api.github.com/repos/knative/test-infra/compare/{base}...{head}","merges_url":"https://api.github.com/repos/knative/test-infra/merges","archive_url":"https://api.github.com/repos/knative/test-infra/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/knative/test-infra/downloads","issues_url":"https://api.github.com/repos/knative/test-infra/issues{/number}","pulls_url":"https://api.github.com/repos/knative/test-infra/pulls{/number}","milestones_url":"https://api.github.com/repos/knative/test-infra/milestones{/number}","notifications_url":"https://api.github.com/repos/knative/test-infra/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/knative/test-infra/labels{/name}","releases_url":"https://api.github.com/repos/knative/test-infra/releases{/id}","deployments_url":"https://api.github.com/repos/knative/test-infra/deployments","created_at":"2018-06-04T21:01:06Z","updated_at":"2019-02-11T23:57:45Z","pushed_at":"2019-02-12T00:52:19Z","git_url":"git://github.com/knative/test-infra.git","ssh_url":"git@github.com:knative/test-infra.git","clone_url":"https://github.com/knative/test-infra.git","svn_url":"https://github.com/knative/test-infra","homepage":null,"size":10666,"stargazers_count":18,"watchers_count":18,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":38,"mirror_url":null,"archived":false,"open_issues_count":52,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":38,"open_issues":52,"watchers":18,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/knative/test-infra/pulls/466"},"html":{"href":"https://github.com/knative/test-infra/pull/466"},"issue":{"href":"https://api.github.com/repos/knative/test-infra/issues/466"},"comments":{"href":"https://api.github.com/repos/knative/test-infra/issues/466/comments"},"review_comments":{"href":"https://api.github.com/repos/knative/test-infra/pulls/466/comments"},"review_comment":{"href":"https://api.github.com/repos/knative/test-infra/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/knative/test-infra/pulls/466/commits"},"statuses":{"href":"https://api.github.com/repos/knative/test-infra/statuses/7eb8b76bb07800e8df437f21f0efdc9c914dfd7c"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"adrcunha"}}