{"action":"created","comment":{"url":"https://api.github.com/repos/knative/eventing/pulls/comments/219616112","pull_request_review_id":157834494,"id":219616112,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxOTYxNjExMg==","diff_hunk":"@@ -0,0 +1,331 @@\n+/*\n+Copyright 2018 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+package subscription\n+\n+import (\n+\t\"context\"\n+\t\"encoding/json\"\n+\t\"fmt\"\n+\t\"log\"\n+\t\"strings\"\n+\n+\t\"github.com/golang/glog\"\n+\t\"github.com/knative/eventing/pkg/apis/eventing/v1alpha1\"\n+\t\"github.com/knative/pkg/apis/duck\"\n+\tduckv1alpha1 \"github.com/knative/pkg/apis/duck/v1alpha1\"\n+\t\"github.com/mattbaird/jsonpatch\"\n+\tcorev1 \"k8s.io/api/core/v1\"\n+\t\"k8s.io/apimachinery/pkg/api/equality\"\n+\t\"k8s.io/apimachinery/pkg/api/errors\"\n+\t\"k8s.io/apimachinery/pkg/api/meta\"\n+\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n+\t\"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured\"\n+\t\"k8s.io/apimachinery/pkg/runtime/schema\"\n+\t\"k8s.io/apimachinery/pkg/types\"\n+\t\"k8s.io/client-go/dynamic\"\n+\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n+\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n+)\n+\n+// Reconcile compares the actual state with the desired, and attempts to\n+// converge the two. It then updates the Status block of the Subscription resource\n+// with the current status of the resource.\n+func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {\n+\tglog.Infof(\"Reconciling subscription %v\", request)\n+\tsubscription := &v1alpha1.Subscription{}\n+\terr := r.client.Get(context.TODO(), request.NamespacedName, subscription)\n+\n+\tif errors.IsNotFound(err) {\n+\t\tglog.Errorf(\"could not find subscription %v\\n\", request)\n+\t\treturn reconcile.Result{}, nil\n+\t}\n+\n+\tif err != nil {\n+\t\tglog.Errorf(\"could not fetch Subscription %v for %+v\\n\", err, request)\n+\t\treturn reconcile.Result{}, err\n+\t}\n+\n+\toriginal := subscription.DeepCopy()\n+\n+\t// Reconcile this copy of the Subscription and then write back any status\n+\t// updates regardless of whether the reconcile error out.\n+\terr = r.reconcile(subscription)\n+\tif equality.Semantic.DeepEqual(original.Status, subscription.Status) {\n+\t\t// If we didn't change anything then don't call updateStatus.\n+\t\t// This is important because the copy we loaded from the informer's\n+\t\t// cache may be stale and we don't want to overwrite a prior update\n+\t\t// to status with this stale state.\n+\t} else if _, err := r.updateStatus(subscription); err != nil {\n+\t\tglog.Warningf(\"Failed to update subscription status: %v\", err)\n+\t\treturn reconcile.Result{}, err\n+\t}\n+\n+\t// Requeue if the resource is not ready:\n+\treturn reconcile.Result{}, err\n+}\n+\n+func (r *reconciler) reconcile(subscription *v1alpha1.Subscription) error {\n+\t// See if the subscription has been deleted\n+\taccessor, err := meta.Accessor(subscription)\n+\tif err != nil {\n+\t\tlog.Fatalf(\"Failed to get metadata: %s\", err)\n+\t}\n+\tdeletionTimestamp := accessor.GetDeletionTimestamp()\n+\tglog.Infof(\"DeletionTimestamp: %v\", deletionTimestamp)\n+\n+\t// Reconcile the subscription to the From channel that's consuming events that are either\n+\t// going to the call or if there's no call, directly to result.\n+\tfrom, err := r.resolveFromChannelable(subscription.Namespace, &subscription.Spec.From)\n+\tif err != nil {\n+\t\tglog.Warningf(\"Failed to resolve From %+v : %s\", subscription.Spec.From, err)\n+\t\treturn err\n+\t}\n+\tif from.Status.Subscribable == nil {\n+\t\tglog.Warningf(\"Failed to resolve the from %+v\", subscription.Spec.From)\n+\t\treturn fmt.Errorf(\"Failed to resolve the from %+v\", subscription.Spec.From)\n+\t}\n+\n+\tcallDomain := \"\"\n+\tif subscription.Spec.Call != nil {\n+\t\tcallDomain, err = r.resolveCall(subscription.Namespace, *subscription.Spec.Call)\n+\t\tif err != nil {\n+\t\t\tglog.Warningf(\"Failed to resolve Call %v : %v\", *subscription.Spec.Call, err)\n+\t\t}\n+\t\tglog.Infof(\"Resolved call to: %q\", callDomain)\n+\t}\n+\n+\tresultDomain := \"\"\n+\tif subscription.Spec.Result != nil {\n+\t\tresultDomain, err = r.resolveResult(subscription.Namespace, *subscription.Spec.Result)\n+\t\tif err != nil {\n+\t\t\tglog.Warningf(\"Failed to resolve Result %v : %v\", subscription.Spec.Result, err)\n+\t\t}\n+\t\tglog.Infof(\"Resolved result to: %q\", resultDomain)\n+\t}\n+\n+\t// Ok, now that we have the From and at least one of the Call/Result, let's greconcile","path":"pkg/controller/eventing/subscription/reconcile.go","position":120,"original_position":120,"commit_id":"66c4ca3b4874c314e47c1e3e48a6d7aaa712a114","original_commit_id":"66c4ca3b4874c314e47c1e3e48a6d7aaa712a114","user":{"login":"grantr","id":680,"node_id":"MDQ6VXNlcjY4MA==","avatar_url":"https://avatars3.githubusercontent.com/u/680?v=4","gravatar_id":"","url":"https://api.github.com/users/grantr","html_url":"https://github.com/grantr","followers_url":"https://api.github.com/users/grantr/followers","following_url":"https://api.github.com/users/grantr/following{/other_user}","gists_url":"https://api.github.com/users/grantr/gists{/gist_id}","starred_url":"https://api.github.com/users/grantr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grantr/subscriptions","organizations_url":"https://api.github.com/users/grantr/orgs","repos_url":"https://api.github.com/users/grantr/repos","events_url":"https://api.github.com/users/grantr/events{/privacy}","received_events_url":"https://api.github.com/users/grantr/received_events","type":"User","site_admin":false},"body":"typo nit: `reconcile`","created_at":"2018-09-21T20:18:06Z","updated_at":"2018-09-21T20:52:51Z","html_url":"https://github.com/knative/eventing/pull/437#discussion_r219616112","pull_request_url":"https://api.github.com/repos/knative/eventing/pulls/437","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/knative/eventing/pulls/comments/219616112"},"html":{"href":"https://github.com/knative/eventing/pull/437#discussion_r219616112"},"pull_request":{"href":"https://api.github.com/repos/knative/eventing/pulls/437"}}},"pull_request":{"url":"https://api.github.com/repos/knative/eventing/pulls/437","id":216668054,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE2NjY4MDU0","html_url":"https://github.com/knative/eventing/pull/437","diff_url":"https://github.com/knative/eventing/pull/437.diff","patch_url":"https://github.com/knative/eventing/pull/437.patch","issue_url":"https://api.github.com/repos/knative/eventing/issues/437","number":437,"state":"open","locked":false,"title":"WIP: Subscription Controller ","user":{"login":"vaikas-google","id":11279988,"node_id":"MDQ6VXNlcjExMjc5OTg4","avatar_url":"https://avatars3.githubusercontent.com/u/11279988?v=4","gravatar_id":"","url":"https://api.github.com/users/vaikas-google","html_url":"https://github.com/vaikas-google","followers_url":"https://api.github.com/users/vaikas-google/followers","following_url":"https://api.github.com/users/vaikas-google/following{/other_user}","gists_url":"https://api.github.com/users/vaikas-google/gists{/gist_id}","starred_url":"https://api.github.com/users/vaikas-google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaikas-google/subscriptions","organizations_url":"https://api.github.com/users/vaikas-google/orgs","repos_url":"https://api.github.com/users/vaikas-google/repos","events_url":"https://api.github.com/users/vaikas-google/events{/privacy}","received_events_url":"https://api.github.com/users/vaikas-google/received_events","type":"User","site_admin":false},"body":"Fixes #438 \r\n\r\n## Proposed Changes\r\n\r\n*** Please focus on the proposed model changes ***\r\n\r\n  * Background: https://gist.github.com/vaikas-google/5600923ffbe3a19a474cf668cf8ddea9\r\n  * Change Subscription Controller to accept eventing.knative.dev channels\r\n  * resolve the references in subscriptions\r\n  * open question, what to stuff into the subscriptions in the channelable interface\r\n  * \r\n\r\n**Release Note**\r\n<!-- Enter your extended release note in the below block. If the PR requires\r\nadditional action from users switching to the new release, include the string\r\n\"action required\". If no release note is required, write \"NONE\". -->\r\n```release-note\r\n```","created_at":"2018-09-19T14:49:00Z","updated_at":"2018-09-21T20:52:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dcaa640aa2bd9d15bda142fb4424727ae5d58817","assignee":null,"assignees":[],"requested_reviewers":[{"login":"inlined","id":1553807,"node_id":"MDQ6VXNlcjE1NTM4MDc=","avatar_url":"https://avatars0.githubusercontent.com/u/1553807?v=4","gravatar_id":"","url":"https://api.github.com/users/inlined","html_url":"https://github.com/inlined","followers_url":"https://api.github.com/users/inlined/followers","following_url":"https://api.github.com/users/inlined/following{/other_user}","gists_url":"https://api.github.com/users/inlined/gists{/gist_id}","starred_url":"https://api.github.com/users/inlined/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inlined/subscriptions","organizations_url":"https://api.github.com/users/inlined/orgs","repos_url":"https://api.github.com/users/inlined/repos","events_url":"https://api.github.com/users/inlined/events{/privacy}","received_events_url":"https://api.github.com/users/inlined/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":897406231,"node_id":"MDU6TGFiZWw4OTc0MDYyMzE=","url":"https://api.github.com/repos/knative/eventing/labels/approved","name":"approved","color":"ededed","default":false},{"id":966817998,"node_id":"MDU6TGFiZWw5NjY4MTc5OTg=","url":"https://api.github.com/repos/knative/eventing/labels/do-not-merge/work-in-progress","name":"do-not-merge/work-in-progress","color":"b60205","default":false},{"id":904029784,"node_id":"MDU6TGFiZWw5MDQwMjk3ODQ=","url":"https://api.github.com/repos/knative/eventing/labels/size/XXL","name":"size/XXL","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/knative/eventing/pulls/437/commits","review_comments_url":"https://api.github.com/repos/knative/eventing/pulls/437/comments","review_comment_url":"https://api.github.com/repos/knative/eventing/pulls/comments{/number}","comments_url":"https://api.github.com/repos/knative/eventing/issues/437/comments","statuses_url":"https://api.github.com/repos/knative/eventing/statuses/66c4ca3b4874c314e47c1e3e48a6d7aaa712a114","head":{"label":"vaikas-google:subscription-controller","ref":"subscription-controller","sha":"66c4ca3b4874c314e47c1e3e48a6d7aaa712a114","user":{"login":"vaikas-google","id":11279988,"node_id":"MDQ6VXNlcjExMjc5OTg4","avatar_url":"https://avatars3.githubusercontent.com/u/11279988?v=4","gravatar_id":"","url":"https://api.github.com/users/vaikas-google","html_url":"https://github.com/vaikas-google","followers_url":"https://api.github.com/users/vaikas-google/followers","following_url":"https://api.github.com/users/vaikas-google/following{/other_user}","gists_url":"https://api.github.com/users/vaikas-google/gists{/gist_id}","starred_url":"https://api.github.com/users/vaikas-google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaikas-google/subscriptions","organizations_url":"https://api.github.com/users/vaikas-google/orgs","repos_url":"https://api.github.com/users/vaikas-google/repos","events_url":"https://api.github.com/users/vaikas-google/events{/privacy}","received_events_url":"https://api.github.com/users/vaikas-google/received_events","type":"User","site_admin":false},"repo":{"id":142069684,"node_id":"MDEwOlJlcG9zaXRvcnkxNDIwNjk2ODQ=","name":"eventing","full_name":"vaikas-google/eventing","private":false,"owner":{"login":"vaikas-google","id":11279988,"node_id":"MDQ6VXNlcjExMjc5OTg4","avatar_url":"https://avatars3.githubusercontent.com/u/11279988?v=4","gravatar_id":"","url":"https://api.github.com/users/vaikas-google","html_url":"https://github.com/vaikas-google","followers_url":"https://api.github.com/users/vaikas-google/followers","following_url":"https://api.github.com/users/vaikas-google/following{/other_user}","gists_url":"https://api.github.com/users/vaikas-google/gists{/gist_id}","starred_url":"https://api.github.com/users/vaikas-google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaikas-google/subscriptions","organizations_url":"https://api.github.com/users/vaikas-google/orgs","repos_url":"https://api.github.com/users/vaikas-google/repos","events_url":"https://api.github.com/users/vaikas-google/events{/privacy}","received_events_url":"https://api.github.com/users/vaikas-google/received_events","type":"User","site_admin":false},"html_url":"https://github.com/vaikas-google/eventing","description":"Open source specification and implementation of Knative event binding and delivery","fork":true,"url":"https://api.github.com/repos/vaikas-google/eventing","forks_url":"https://api.github.com/repos/vaikas-google/eventing/forks","keys_url":"https://api.github.com/repos/vaikas-google/eventing/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vaikas-google/eventing/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vaikas-google/eventing/teams","hooks_url":"https://api.github.com/repos/vaikas-google/eventing/hooks","issue_events_url":"https://api.github.com/repos/vaikas-google/eventing/issues/events{/number}","events_url":"https://api.github.com/repos/vaikas-google/eventing/events","assignees_url":"https://api.github.com/repos/vaikas-google/eventing/assignees{/user}","branches_url":"https://api.github.com/repos/vaikas-google/eventing/branches{/branch}","tags_url":"https://api.github.com/repos/vaikas-google/eventing/tags","blobs_url":"https://api.github.com/repos/vaikas-google/eventing/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vaikas-google/eventing/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vaikas-google/eventing/git/refs{/sha}","trees_url":"https://api.github.com/repos/vaikas-google/eventing/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vaikas-google/eventing/statuses/{sha}","languages_url":"https://api.github.com/repos/vaikas-google/eventing/languages","stargazers_url":"https://api.github.com/repos/vaikas-google/eventing/stargazers","contributors_url":"https://api.github.com/repos/vaikas-google/eventing/contributors","subscribers_url":"https://api.github.com/repos/vaikas-google/eventing/subscribers","subscription_url":"https://api.github.com/repos/vaikas-google/eventing/subscription","commits_url":"https://api.github.com/repos/vaikas-google/eventing/commits{/sha}","git_commits_url":"https://api.github.com/repos/vaikas-google/eventing/git/commits{/sha}","comments_url":"https://api.github.com/repos/vaikas-google/eventing/comments{/number}","issue_comment_url":"https://api.github.com/repos/vaikas-google/eventing/issues/comments{/number}","contents_url":"https://api.github.com/repos/vaikas-google/eventing/contents/{+path}","compare_url":"https://api.github.com/repos/vaikas-google/eventing/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vaikas-google/eventing/merges","archive_url":"https://api.github.com/repos/vaikas-google/eventing/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vaikas-google/eventing/downloads","issues_url":"https://api.github.com/repos/vaikas-google/eventing/issues{/number}","pulls_url":"https://api.github.com/repos/vaikas-google/eventing/pulls{/number}","milestones_url":"https://api.github.com/repos/vaikas-google/eventing/milestones{/number}","notifications_url":"https://api.github.com/repos/vaikas-google/eventing/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vaikas-google/eventing/labels{/name}","releases_url":"https://api.github.com/repos/vaikas-google/eventing/releases{/id}","deployments_url":"https://api.github.com/repos/vaikas-google/eventing/deployments","created_at":"2018-07-23T21:09:14Z","updated_at":"2018-09-21T00:40:23Z","pushed_at":"2018-09-21T15:56:28Z","git_url":"git://github.com/vaikas-google/eventing.git","ssh_url":"git@github.com:vaikas-google/eventing.git","clone_url":"https://github.com/vaikas-google/eventing.git","svn_url":"https://github.com/vaikas-google/eventing","homepage":"","size":16052,"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":"01f95cb1c5d29d5248bdd679f14ce724ba6aad67","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":124951822,"node_id":"MDEwOlJlcG9zaXRvcnkxMjQ5NTE4MjI=","name":"eventing","full_name":"knative/eventing","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/eventing","description":"Open source specification and implementation of Knative event binding and delivery","fork":false,"url":"https://api.github.com/repos/knative/eventing","forks_url":"https://api.github.com/repos/knative/eventing/forks","keys_url":"https://api.github.com/repos/knative/eventing/keys{/key_id}","collaborators_url":"https://api.github.com/repos/knative/eventing/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/knative/eventing/teams","hooks_url":"https://api.github.com/repos/knative/eventing/hooks","issue_events_url":"https://api.github.com/repos/knative/eventing/issues/events{/number}","events_url":"https://api.github.com/repos/knative/eventing/events","assignees_url":"https://api.github.com/repos/knative/eventing/assignees{/user}","branches_url":"https://api.github.com/repos/knative/eventing/branches{/branch}","tags_url":"https://api.github.com/repos/knative/eventing/tags","blobs_url":"https://api.github.com/repos/knative/eventing/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/knative/eventing/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/knative/eventing/git/refs{/sha}","trees_url":"https://api.github.com/repos/knative/eventing/git/trees{/sha}","statuses_url":"https://api.github.com/repos/knative/eventing/statuses/{sha}","languages_url":"https://api.github.com/repos/knative/eventing/languages","stargazers_url":"https://api.github.com/repos/knative/eventing/stargazers","contributors_url":"https://api.github.com/repos/knative/eventing/contributors","subscribers_url":"https://api.github.com/repos/knative/eventing/subscribers","subscription_url":"https://api.github.com/repos/knative/eventing/subscription","commits_url":"https://api.github.com/repos/knative/eventing/commits{/sha}","git_commits_url":"https://api.github.com/repos/knative/eventing/git/commits{/sha}","comments_url":"https://api.github.com/repos/knative/eventing/comments{/number}","issue_comment_url":"https://api.github.com/repos/knative/eventing/issues/comments{/number}","contents_url":"https://api.github.com/repos/knative/eventing/contents/{+path}","compare_url":"https://api.github.com/repos/knative/eventing/compare/{base}...{head}","merges_url":"https://api.github.com/repos/knative/eventing/merges","archive_url":"https://api.github.com/repos/knative/eventing/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/knative/eventing/downloads","issues_url":"https://api.github.com/repos/knative/eventing/issues{/number}","pulls_url":"https://api.github.com/repos/knative/eventing/pulls{/number}","milestones_url":"https://api.github.com/repos/knative/eventing/milestones{/number}","notifications_url":"https://api.github.com/repos/knative/eventing/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/knative/eventing/labels{/name}","releases_url":"https://api.github.com/repos/knative/eventing/releases{/id}","deployments_url":"https://api.github.com/repos/knative/eventing/deployments","created_at":"2018-03-12T21:08:29Z","updated_at":"2018-09-21T16:55:23Z","pushed_at":"2018-09-21T16:55:20Z","git_url":"git://github.com/knative/eventing.git","ssh_url":"git@github.com:knative/eventing.git","clone_url":"https://github.com/knative/eventing.git","svn_url":"https://github.com/knative/eventing","homepage":"","size":15964,"stargazers_count":220,"watchers_count":220,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":55,"mirror_url":null,"archived":false,"open_issues_count":109,"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":55,"open_issues":109,"watchers":220,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/knative/eventing/pulls/437"},"html":{"href":"https://github.com/knative/eventing/pull/437"},"issue":{"href":"https://api.github.com/repos/knative/eventing/issues/437"},"comments":{"href":"https://api.github.com/repos/knative/eventing/issues/437/comments"},"review_comments":{"href":"https://api.github.com/repos/knative/eventing/pulls/437/comments"},"review_comment":{"href":"https://api.github.com/repos/knative/eventing/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/knative/eventing/pulls/437/commits"},"statuses":{"href":"https://api.github.com/repos/knative/eventing/statuses/66c4ca3b4874c314e47c1e3e48a6d7aaa712a114"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"grantr"}}