{"action":"created","comment":{"url":"https://api.github.com/repos/knative/build-pipeline/pulls/comments/235767659","pull_request_review_id":177706388,"id":235767659,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNTc2NzY1OQ==","diff_hunk":"@@ -0,0 +1,126 @@\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 resources\n+\n+import (\n+\t\"path/filepath\"\n+\n+\t\"fmt\"\n+\n+\t\"github.com/knative/build-pipeline/pkg/apis/pipeline/v1alpha1\"\n+\tbuildv1alpha1 \"github.com/knative/build/pkg/apis/build/v1alpha1\"\n+\t\"go.uber.org/zap\"\n+\tcorev1 \"k8s.io/api/core/v1\"\n+)\n+\n+var (\n+\tpvcDir       = \"/pvc\"\n+\tworkspaceDir = \"/workspace\"\n+)\n+\n+// WrapPostBuildSteps adds steps to run after sources and before steps to override the source with passedconstraint source\n+// also adds step to collect in the end to collect\n+func WrapPostBuildSteps(\n+\ttaskRun *v1alpha1.TaskRun,\n+\tb *buildv1alpha1.Build,\n+\tlogger *zap.SugaredLogger,\n+) {\n+\tvar postBuildSteps = make(map[string][]string)\n+\tfor _, postStep := range taskRun.Spec.PostBuiltSteps {\n+\t\tpostBuildSteps[postStep.Name] = postStep.Paths\n+\t}\n+\n+\tfor _, source := range b.Spec.Sources {\n+\t\tif paths, ok := postBuildSteps[source.Name]; ok {\n+\t\t\tvar newSteps []corev1.Container\n+\t\t\tfor _, path := range paths {\n+\t\t\t\tvar sPath string\n+\t\t\t\tif source.TargetPath == \"\" {\n+\t\t\t\t\tsPath = workspaceDir\n+\t\t\t\t} else {\n+\t\t\t\t\tsPath = filepath.Join(workspaceDir, source.TargetPath)\n+\t\t\t\t}\n+\t\t\t\tnewSteps = append(newSteps, []corev1.Container{{\n+\t\t\t\t\tName:         fmt.Sprintf(\"source-copy-make-%s\", source.Name),\n+\t\t\t\t\tImage:        \"ubuntu\",","path":"pkg/reconciler/v1alpha1/taskrun/resources/pre_post_build_step.go","position":59,"original_position":59,"commit_id":"3cd42f7f7ec38fb31c88149cdc0f39eaf3f417f6","original_commit_id":"3cd42f7f7ec38fb31c88149cdc0f39eaf3f417f6","user":{"login":"vdemeester","id":6508,"node_id":"MDQ6VXNlcjY1MDg=","avatar_url":"https://avatars0.githubusercontent.com/u/6508?v=4","gravatar_id":"","url":"https://api.github.com/users/vdemeester","html_url":"https://github.com/vdemeester","followers_url":"https://api.github.com/users/vdemeester/followers","following_url":"https://api.github.com/users/vdemeester/following{/other_user}","gists_url":"https://api.github.com/users/vdemeester/gists{/gist_id}","starred_url":"https://api.github.com/users/vdemeester/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vdemeester/subscriptions","organizations_url":"https://api.github.com/users/vdemeester/orgs","repos_url":"https://api.github.com/users/vdemeester/repos","events_url":"https://api.github.com/users/vdemeester/events{/privacy}","received_events_url":"https://api.github.com/users/vdemeester/received_events","type":"User","site_admin":false},"body":"We way want to use a smaller image like `busybox` (as `knative/build` if I'm correct).","created_at":"2018-11-22T15:44:06Z","updated_at":"2018-11-22T15:45:58Z","html_url":"https://github.com/knative/build-pipeline/pull/255#discussion_r235767659","pull_request_url":"https://api.github.com/repos/knative/build-pipeline/pulls/255","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/comments/235767659"},"html":{"href":"https://github.com/knative/build-pipeline/pull/255#discussion_r235767659"},"pull_request":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/255"}}},"pull_request":{"url":"https://api.github.com/repos/knative/build-pipeline/pulls/255","id":232761944,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMyNzYxOTQ0","html_url":"https://github.com/knative/build-pipeline/pull/255","diff_url":"https://github.com/knative/build-pipeline/pull/255.diff","patch_url":"https://github.com/knative/build-pipeline/pull/255.patch","issue_url":"https://api.github.com/repos/knative/build-pipeline/issues/255","number":255,"state":"open","locked":false,"title":"[WIP] Link git resources from previous task ","user":{"login":"shashwathi","id":9938926,"node_id":"MDQ6VXNlcjk5Mzg5MjY=","avatar_url":"https://avatars0.githubusercontent.com/u/9938926?v=4","gravatar_id":"","url":"https://api.github.com/users/shashwathi","html_url":"https://github.com/shashwathi","followers_url":"https://api.github.com/users/shashwathi/followers","following_url":"https://api.github.com/users/shashwathi/following{/other_user}","gists_url":"https://api.github.com/users/shashwathi/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwathi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwathi/subscriptions","organizations_url":"https://api.github.com/users/shashwathi/orgs","repos_url":"https://api.github.com/users/shashwathi/repos","events_url":"https://api.github.com/users/shashwathi/events{/privacy}","received_events_url":"https://api.github.com/users/shashwathi/received_events","type":"User","site_admin":false},"body":"In this PR I am proposing a solution for passing constraints between tasks. \r\n\r\n**Considered solutions**: \r\n * external blob storage like s3, gcs\r\n_Pros_: Operator can configure bucket at controller level or at pipeline level. Easy to create directory with pipelinerun/taskrun_names to never clash\r\n_Cons_: It is extra burden on operator to set this up(main pain point).\r\nAdditionally bucket becomes an external entity out of k8s ecosystem. If controller crasher or objects get deleted then it is possible buckets might be orphaned. \r\n\r\n* external server like s3 which is backed by PVC\r\n_Pros_: Operator does not have to setup anything. Only one PVC possibly backing this web server which will take take requests to write to file system and fetch from file system.\r\n_Cons_: I would be re-implementing a bad s3 or gcs version :D Handle concurrent read, write requests. I would have to make make the requests efficient by compressing file systems so avg pipelinerun time would become higher. Lot of writing new code which is never a great idea.\r\n\r\nIn this PR I am choosing the route of using PVC within lifetime of pipelinerun\r\n_Pros_: Operator doesn't have to worry about any external work. PVC is created and deleted in the lifetime of pipelinerun.\r\n_cons_: In few IAASes creating PVC is time consuming. Possibly operators could make this easy by preallocating disks ahead of time or some other potential solution to reuse from pool(I have not thought fool proof plan to solve this yet). \r\n\r\nCompared to other solutions I am leaning towards this as this does not include any new setup for operator or user. Objects created (PVC) are all in same k8s ecosystem and cleaned up as pipelinerun is completed.\r\n\r\n_Now onto implementation details_\r\nPVC with pipelinerun name is created as pipelinerun starts and this information is passed onto taskrun objects created to construct build steps.\r\n- Pipelinerun adds prebuildsteps, postbuildsteps, pvcName for taskrun. This essentially encompasses information for taskrun to construct build steps. Only pipeline task contains information about dependency of resource so this information needs to be translated to taskrun in easy format.\r\n- Taskruns reads this prebuildsteps, postbuildsteps to construct actual build step container information. Any existing Build steps will be \"Wrapped\" with prebuildsteps and  postbuildsteps. These build steps are  `cp -r source destination` containers. Incase of prebuildsteps, build source would have already created the path so this step overrides existing source folder with altered previous source.  Incase of postbuildsteps, build source will first make the dir in pvc and the copy the resource folder onto pvc(hence 2 steps, could be merged as an improvement).\r\n\r\n### TODO:\r\n- Add go integration tests\r\n- Add unit tests\r\n- Possibly refactor code more\r\n- Possibly merge creation and copy container into 1 container\r\n\r\n### You might be wondering with no tests, how do I know this PR works?\r\nI have added 2 pipelinerun samples under `examples/test-pvc`, `examples/test-pvc-2` which implement 2 different pipeline styles\r\n\r\n- `examples/test-pvc`- This is the vanilla use case of github repo being passed form task 1-> task2\r\n- `examples/test-pvc-2` - This is slightly complex use case of task 1, task 2 altering a git resource and task 3 checks that changed in task 1,2 are present\r\n\r\n\r\nWhat more changes does this PR include?\r\n- Support for targetPath in resource. As of today, pipeline resource does not support targetpath (path where the source will be placed) which means resources will placed under `/workspace` always, this PR would be too easy in that case. When we add support for target path it would be too complex to figure out hence I have included the complexity to support future and existing use cases. `examples/test-pvc` includes test with targetpath. I am also trying to show that proposed solution is not fragile.\r\n\r\nWhat will not be included?\r\n- Support for images\r\nThis PR only includes support for git resources. Support for images includes some design of metadata and I would like to follow up with another PR for that.\r\n\r\nI would like hear your thoughts, concerns about the approach and implementation. I will add required tests when I have 👍 \r\n\r\ncc @bobcatfish @pivotal-nader-ziada @ImJasonH @abayer ","created_at":"2018-11-21T18:30:19Z","updated_at":"2018-11-22T15:45:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"70e4db35357bfdbff92b82b2f866c27524086ad6","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ImJasonH","id":210737,"node_id":"MDQ6VXNlcjIxMDczNw==","avatar_url":"https://avatars1.githubusercontent.com/u/210737?v=4","gravatar_id":"","url":"https://api.github.com/users/ImJasonH","html_url":"https://github.com/ImJasonH","followers_url":"https://api.github.com/users/ImJasonH/followers","following_url":"https://api.github.com/users/ImJasonH/following{/other_user}","gists_url":"https://api.github.com/users/ImJasonH/gists{/gist_id}","starred_url":"https://api.github.com/users/ImJasonH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ImJasonH/subscriptions","organizations_url":"https://api.github.com/users/ImJasonH/orgs","repos_url":"https://api.github.com/users/ImJasonH/repos","events_url":"https://api.github.com/users/ImJasonH/events{/privacy}","received_events_url":"https://api.github.com/users/ImJasonH/received_events","type":"User","site_admin":false},{"login":"tejal29","id":1534539,"node_id":"MDQ6VXNlcjE1MzQ1Mzk=","avatar_url":"https://avatars0.githubusercontent.com/u/1534539?v=4","gravatar_id":"","url":"https://api.github.com/users/tejal29","html_url":"https://github.com/tejal29","followers_url":"https://api.github.com/users/tejal29/followers","following_url":"https://api.github.com/users/tejal29/following{/other_user}","gists_url":"https://api.github.com/users/tejal29/gists{/gist_id}","starred_url":"https://api.github.com/users/tejal29/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tejal29/subscriptions","organizations_url":"https://api.github.com/users/tejal29/orgs","repos_url":"https://api.github.com/users/tejal29/repos","events_url":"https://api.github.com/users/tejal29/events{/privacy}","received_events_url":"https://api.github.com/users/tejal29/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1075452092,"node_id":"MDU6TGFiZWwxMDc1NDUyMDky","url":"https://api.github.com/repos/knative/build-pipeline/labels/do-not-merge/work-in-progress","name":"do-not-merge/work-in-progress","color":"ededed","default":false},{"id":1060205926,"node_id":"MDU6TGFiZWwxMDYwMjA1OTI2","url":"https://api.github.com/repos/knative/build-pipeline/labels/size/XL","name":"size/XL","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/knative/build-pipeline/pulls/255/commits","review_comments_url":"https://api.github.com/repos/knative/build-pipeline/pulls/255/comments","review_comment_url":"https://api.github.com/repos/knative/build-pipeline/pulls/comments{/number}","comments_url":"https://api.github.com/repos/knative/build-pipeline/issues/255/comments","statuses_url":"https://api.github.com/repos/knative/build-pipeline/statuses/3cd42f7f7ec38fb31c88149cdc0f39eaf3f417f6","head":{"label":"shashwathi:output","ref":"output","sha":"3cd42f7f7ec38fb31c88149cdc0f39eaf3f417f6","user":{"login":"shashwathi","id":9938926,"node_id":"MDQ6VXNlcjk5Mzg5MjY=","avatar_url":"https://avatars0.githubusercontent.com/u/9938926?v=4","gravatar_id":"","url":"https://api.github.com/users/shashwathi","html_url":"https://github.com/shashwathi","followers_url":"https://api.github.com/users/shashwathi/followers","following_url":"https://api.github.com/users/shashwathi/following{/other_user}","gists_url":"https://api.github.com/users/shashwathi/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwathi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwathi/subscriptions","organizations_url":"https://api.github.com/users/shashwathi/orgs","repos_url":"https://api.github.com/users/shashwathi/repos","events_url":"https://api.github.com/users/shashwathi/events{/privacy}","received_events_url":"https://api.github.com/users/shashwathi/received_events","type":"User","site_admin":false},"repo":{"id":149769954,"node_id":"MDEwOlJlcG9zaXRvcnkxNDk3Njk5NTQ=","name":"build-pipeline","full_name":"shashwathi/build-pipeline","private":false,"owner":{"login":"shashwathi","id":9938926,"node_id":"MDQ6VXNlcjk5Mzg5MjY=","avatar_url":"https://avatars0.githubusercontent.com/u/9938926?v=4","gravatar_id":"","url":"https://api.github.com/users/shashwathi","html_url":"https://github.com/shashwathi","followers_url":"https://api.github.com/users/shashwathi/followers","following_url":"https://api.github.com/users/shashwathi/following{/other_user}","gists_url":"https://api.github.com/users/shashwathi/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwathi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwathi/subscriptions","organizations_url":"https://api.github.com/users/shashwathi/orgs","repos_url":"https://api.github.com/users/shashwathi/repos","events_url":"https://api.github.com/users/shashwathi/events{/privacy}","received_events_url":"https://api.github.com/users/shashwathi/received_events","type":"User","site_admin":false},"html_url":"https://github.com/shashwathi/build-pipeline","description":"A K8s-native Pipeline resource.","fork":true,"url":"https://api.github.com/repos/shashwathi/build-pipeline","forks_url":"https://api.github.com/repos/shashwathi/build-pipeline/forks","keys_url":"https://api.github.com/repos/shashwathi/build-pipeline/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shashwathi/build-pipeline/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shashwathi/build-pipeline/teams","hooks_url":"https://api.github.com/repos/shashwathi/build-pipeline/hooks","issue_events_url":"https://api.github.com/repos/shashwathi/build-pipeline/issues/events{/number}","events_url":"https://api.github.com/repos/shashwathi/build-pipeline/events","assignees_url":"https://api.github.com/repos/shashwathi/build-pipeline/assignees{/user}","branches_url":"https://api.github.com/repos/shashwathi/build-pipeline/branches{/branch}","tags_url":"https://api.github.com/repos/shashwathi/build-pipeline/tags","blobs_url":"https://api.github.com/repos/shashwathi/build-pipeline/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shashwathi/build-pipeline/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shashwathi/build-pipeline/git/refs{/sha}","trees_url":"https://api.github.com/repos/shashwathi/build-pipeline/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shashwathi/build-pipeline/statuses/{sha}","languages_url":"https://api.github.com/repos/shashwathi/build-pipeline/languages","stargazers_url":"https://api.github.com/repos/shashwathi/build-pipeline/stargazers","contributors_url":"https://api.github.com/repos/shashwathi/build-pipeline/contributors","subscribers_url":"https://api.github.com/repos/shashwathi/build-pipeline/subscribers","subscription_url":"https://api.github.com/repos/shashwathi/build-pipeline/subscription","commits_url":"https://api.github.com/repos/shashwathi/build-pipeline/commits{/sha}","git_commits_url":"https://api.github.com/repos/shashwathi/build-pipeline/git/commits{/sha}","comments_url":"https://api.github.com/repos/shashwathi/build-pipeline/comments{/number}","issue_comment_url":"https://api.github.com/repos/shashwathi/build-pipeline/issues/comments{/number}","contents_url":"https://api.github.com/repos/shashwathi/build-pipeline/contents/{+path}","compare_url":"https://api.github.com/repos/shashwathi/build-pipeline/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shashwathi/build-pipeline/merges","archive_url":"https://api.github.com/repos/shashwathi/build-pipeline/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shashwathi/build-pipeline/downloads","issues_url":"https://api.github.com/repos/shashwathi/build-pipeline/issues{/number}","pulls_url":"https://api.github.com/repos/shashwathi/build-pipeline/pulls{/number}","milestones_url":"https://api.github.com/repos/shashwathi/build-pipeline/milestones{/number}","notifications_url":"https://api.github.com/repos/shashwathi/build-pipeline/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shashwathi/build-pipeline/labels{/name}","releases_url":"https://api.github.com/repos/shashwathi/build-pipeline/releases{/id}","deployments_url":"https://api.github.com/repos/shashwathi/build-pipeline/deployments","created_at":"2018-09-21T13:50:22Z","updated_at":"2018-09-21T13:50:24Z","pushed_at":"2018-11-22T02:26:44Z","git_url":"git://github.com/shashwathi/build-pipeline.git","ssh_url":"git@github.com:shashwathi/build-pipeline.git","clone_url":"https://github.com/shashwathi/build-pipeline.git","svn_url":"https://github.com/shashwathi/build-pipeline","homepage":"","size":49047,"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":"cb74b7601b67b7af200dc98c8e355d07047f79d3","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":146641150,"node_id":"MDEwOlJlcG9zaXRvcnkxNDY2NDExNTA=","name":"build-pipeline","full_name":"knative/build-pipeline","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/build-pipeline","description":"A K8s-native Pipeline resource.","fork":false,"url":"https://api.github.com/repos/knative/build-pipeline","forks_url":"https://api.github.com/repos/knative/build-pipeline/forks","keys_url":"https://api.github.com/repos/knative/build-pipeline/keys{/key_id}","collaborators_url":"https://api.github.com/repos/knative/build-pipeline/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/knative/build-pipeline/teams","hooks_url":"https://api.github.com/repos/knative/build-pipeline/hooks","issue_events_url":"https://api.github.com/repos/knative/build-pipeline/issues/events{/number}","events_url":"https://api.github.com/repos/knative/build-pipeline/events","assignees_url":"https://api.github.com/repos/knative/build-pipeline/assignees{/user}","branches_url":"https://api.github.com/repos/knative/build-pipeline/branches{/branch}","tags_url":"https://api.github.com/repos/knative/build-pipeline/tags","blobs_url":"https://api.github.com/repos/knative/build-pipeline/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/knative/build-pipeline/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/knative/build-pipeline/git/refs{/sha}","trees_url":"https://api.github.com/repos/knative/build-pipeline/git/trees{/sha}","statuses_url":"https://api.github.com/repos/knative/build-pipeline/statuses/{sha}","languages_url":"https://api.github.com/repos/knative/build-pipeline/languages","stargazers_url":"https://api.github.com/repos/knative/build-pipeline/stargazers","contributors_url":"https://api.github.com/repos/knative/build-pipeline/contributors","subscribers_url":"https://api.github.com/repos/knative/build-pipeline/subscribers","subscription_url":"https://api.github.com/repos/knative/build-pipeline/subscription","commits_url":"https://api.github.com/repos/knative/build-pipeline/commits{/sha}","git_commits_url":"https://api.github.com/repos/knative/build-pipeline/git/commits{/sha}","comments_url":"https://api.github.com/repos/knative/build-pipeline/comments{/number}","issue_comment_url":"https://api.github.com/repos/knative/build-pipeline/issues/comments{/number}","contents_url":"https://api.github.com/repos/knative/build-pipeline/contents/{+path}","compare_url":"https://api.github.com/repos/knative/build-pipeline/compare/{base}...{head}","merges_url":"https://api.github.com/repos/knative/build-pipeline/merges","archive_url":"https://api.github.com/repos/knative/build-pipeline/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/knative/build-pipeline/downloads","issues_url":"https://api.github.com/repos/knative/build-pipeline/issues{/number}","pulls_url":"https://api.github.com/repos/knative/build-pipeline/pulls{/number}","milestones_url":"https://api.github.com/repos/knative/build-pipeline/milestones{/number}","notifications_url":"https://api.github.com/repos/knative/build-pipeline/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/knative/build-pipeline/labels{/name}","releases_url":"https://api.github.com/repos/knative/build-pipeline/releases{/id}","deployments_url":"https://api.github.com/repos/knative/build-pipeline/deployments","created_at":"2018-08-29T18:21:55Z","updated_at":"2018-11-22T15:08:26Z","pushed_at":"2018-11-22T14:58:26Z","git_url":"git://github.com/knative/build-pipeline.git","ssh_url":"git@github.com:knative/build-pipeline.git","clone_url":"https://github.com/knative/build-pipeline.git","svn_url":"https://github.com/knative/build-pipeline","homepage":"","size":49014,"stargazers_count":139,"watchers_count":139,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":35,"mirror_url":null,"archived":false,"open_issues_count":53,"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":35,"open_issues":53,"watchers":139,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/255"},"html":{"href":"https://github.com/knative/build-pipeline/pull/255"},"issue":{"href":"https://api.github.com/repos/knative/build-pipeline/issues/255"},"comments":{"href":"https://api.github.com/repos/knative/build-pipeline/issues/255/comments"},"review_comments":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/255/comments"},"review_comment":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/knative/build-pipeline/pulls/255/commits"},"statuses":{"href":"https://api.github.com/repos/knative/build-pipeline/statuses/3cd42f7f7ec38fb31c88149cdc0f39eaf3f417f6"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"vdemeester"}}