{"action":"created","comment":{"url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/comments/179755272","pull_request_review_id":110060431,"id":179755272,"diff_hunk":"@@ -0,0 +1,205 @@\n+# RFC 116 object Service\n+* Comments: [#116](https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/116)\n+* Proposed by: @jhford\n+\n+# Summary\n+\n+Taskcluster tasks often produce artifacts during the course of being run.\n+Examples include browser distribution archives, json metadata and log files.\n+We currently store artifacts in a single region of S3 and split management of\n+artifacts between the Queue and Cloud Mirror.  This project is to design an\n+object storage api which drastically simplifies the management of objects from\n+the Queue's perspective while at the same time handling the cross-region\n+replication and cache management of Cloud Mirror as well as enabling\n+cross-cloud support.\n+\n+The object service should not be directly exposed to end users as a Rest API.\n+It will instead be a generalised API that the Queue uses to facilitate artifact\n+creation from tasks.  In other words, the Queue gates operations to the\n+object service.  The service will be exposed to endusers by means of a `Location`\n+header value on a `300` series redirect or by relaying responses.\n+\n+The Queue will now store only the name of objects and would treat the name of\n+an object as an opaque identifier and defer all management of the actual\n+bytes to this system.  The Queue would also stop doing IP to object store\n+mappings.\n+\n+This RFC is to decide on what the objects service is and its interface, not\n+implementation details.\n+\n+## Motivation\n+\n+* We want the Queue to be easier to understand, develop and maintain\n+* We want objects to be easier to understand, develop and maintain\n+* We want better object handling without increasing complexity of the Queue\n+  codebase\n+* We want to have more clear responsibilities for our services\n+* We want to consolidate the handling of objects into a single service\n+* We want to build generalised software when possible as participants of a free\n+  software community\n+\n+# Details\n+\n+* Auth will not be done with scopes and tc-auth, but a shared secret between\n+  Queue and objects, with JWT being a possibility\n+* The Queue will block new artifacts after task resolution by not issuing new\n+  signed urls to this service\n+* Data storage in objects will be done with Postgres and not Azure Table\n+  Storage\n+* We do not intend to have an operation to list objects in the API\n+* The redirecting logic of the object service will adhere to the HTTP spec\n+  using 300-series redirects where possible\n+* Where content-negotiation is impossible, the service will block retreival or\n+  creation of artifacts when incoming requests aren't compatible with required\n+  response\n+* We will support uploading artifacts to different regions and services so that\n+  we can minimize interregion transfer costs for initial object creation\n+\n+## API\n+This API is up for debate and is only an illustrative starting point.  \n+\n+### Generalised request format\n+There will be a concept of a generalised HTTP request.  These requests are used\n+to transmit metadata of an HTTP request which the artifact service requires the\n+client to perform.\n+\n+An example usage of this format is uploading a file.  The creation endpoint of\n+this service will generate all of the HTTP request metadata that the uploading\n+worker will use to upload file.  Then the worker will match these HTTP requests","path":"rfcs/0116-artifact-service.md","position":68,"original_position":68,"commit_id":"e645ae8f621180d9511c6abafe1ceb6170c50b0a","original_commit_id":"e645ae8f621180d9511c6abafe1ceb6170c50b0a","user":{"login":"djmitche","id":28673,"avatar_url":"https://avatars3.githubusercontent.com/u/28673?v=4","gravatar_id":"","url":"https://api.github.com/users/djmitche","html_url":"https://github.com/djmitche","followers_url":"https://api.github.com/users/djmitche/followers","following_url":"https://api.github.com/users/djmitche/following{/other_user}","gists_url":"https://api.github.com/users/djmitche/gists{/gist_id}","starred_url":"https://api.github.com/users/djmitche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/djmitche/subscriptions","organizations_url":"https://api.github.com/users/djmitche/orgs","repos_url":"https://api.github.com/users/djmitche/repos","events_url":"https://api.github.com/users/djmitche/events{/privacy}","received_events_url":"https://api.github.com/users/djmitche/received_events","type":"User","site_admin":false},"body":"s/worker/uploader/g","created_at":"2018-04-06T13:23:04Z","updated_at":"2018-04-06T13:58:31Z","html_url":"https://github.com/taskcluster/taskcluster-rfcs/pull/116#discussion_r179755272","pull_request_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/comments/179755272"},"html":{"href":"https://github.com/taskcluster/taskcluster-rfcs/pull/116#discussion_r179755272"},"pull_request":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116"}}},"pull_request":{"url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116","id":177061075,"html_url":"https://github.com/taskcluster/taskcluster-rfcs/pull/116","diff_url":"https://github.com/taskcluster/taskcluster-rfcs/pull/116.diff","patch_url":"https://github.com/taskcluster/taskcluster-rfcs/pull/116.patch","issue_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/116","number":116,"state":"open","locked":false,"title":"Object service proposal first draft","user":{"login":"jhford","id":607353,"avatar_url":"https://avatars3.githubusercontent.com/u/607353?v=4","gravatar_id":"","url":"https://api.github.com/users/jhford","html_url":"https://github.com/jhford","followers_url":"https://api.github.com/users/jhford/followers","following_url":"https://api.github.com/users/jhford/following{/other_user}","gists_url":"https://api.github.com/users/jhford/gists{/gist_id}","starred_url":"https://api.github.com/users/jhford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jhford/subscriptions","organizations_url":"https://api.github.com/users/jhford/orgs","repos_url":"https://api.github.com/users/jhford/repos","events_url":"https://api.github.com/users/jhford/events{/privacy}","received_events_url":"https://api.github.com/users/jhford/received_events","type":"User","site_admin":false},"body":"This proposal was discussed during the Berlin work week on March 22, 2018.  I'm going to the PR stage directly as we've already had a lot of discussions about this with almost the whole team present.  I believe that this PR reflects the design we've been speaking about.  My feeling was also that we'd agreed that a concrete proposal was the best step to take next.\r\n\r\nLet's discuss this!  I'm flagging people for review who were most actively involved in the discussion.","created_at":"2018-03-23T12:52:43Z","updated_at":"2018-04-06T13:58:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c62a55e0e08ca66a0f2b13f4a8c7eb904a8ac5dc","assignee":{"login":"jhford","id":607353,"avatar_url":"https://avatars3.githubusercontent.com/u/607353?v=4","gravatar_id":"","url":"https://api.github.com/users/jhford","html_url":"https://github.com/jhford","followers_url":"https://api.github.com/users/jhford/followers","following_url":"https://api.github.com/users/jhford/following{/other_user}","gists_url":"https://api.github.com/users/jhford/gists{/gist_id}","starred_url":"https://api.github.com/users/jhford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jhford/subscriptions","organizations_url":"https://api.github.com/users/jhford/orgs","repos_url":"https://api.github.com/users/jhford/repos","events_url":"https://api.github.com/users/jhford/events{/privacy}","received_events_url":"https://api.github.com/users/jhford/received_events","type":"User","site_admin":false},"assignees":[{"login":"jhford","id":607353,"avatar_url":"https://avatars3.githubusercontent.com/u/607353?v=4","gravatar_id":"","url":"https://api.github.com/users/jhford","html_url":"https://github.com/jhford","followers_url":"https://api.github.com/users/jhford/followers","following_url":"https://api.github.com/users/jhford/following{/other_user}","gists_url":"https://api.github.com/users/jhford/gists{/gist_id}","starred_url":"https://api.github.com/users/jhford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jhford/subscriptions","organizations_url":"https://api.github.com/users/jhford/orgs","repos_url":"https://api.github.com/users/jhford/repos","events_url":"https://api.github.com/users/jhford/events{/privacy}","received_events_url":"https://api.github.com/users/jhford/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"imbstack","id":127521,"avatar_url":"https://avatars2.githubusercontent.com/u/127521?v=4","gravatar_id":"","url":"https://api.github.com/users/imbstack","html_url":"https://github.com/imbstack","followers_url":"https://api.github.com/users/imbstack/followers","following_url":"https://api.github.com/users/imbstack/following{/other_user}","gists_url":"https://api.github.com/users/imbstack/gists{/gist_id}","starred_url":"https://api.github.com/users/imbstack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imbstack/subscriptions","organizations_url":"https://api.github.com/users/imbstack/orgs","repos_url":"https://api.github.com/users/imbstack/repos","events_url":"https://api.github.com/users/imbstack/events{/privacy}","received_events_url":"https://api.github.com/users/imbstack/received_events","type":"User","site_admin":false},{"login":"petemoore","id":190790,"avatar_url":"https://avatars0.githubusercontent.com/u/190790?v=4","gravatar_id":"","url":"https://api.github.com/users/petemoore","html_url":"https://github.com/petemoore","followers_url":"https://api.github.com/users/petemoore/followers","following_url":"https://api.github.com/users/petemoore/following{/other_user}","gists_url":"https://api.github.com/users/petemoore/gists{/gist_id}","starred_url":"https://api.github.com/users/petemoore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petemoore/subscriptions","organizations_url":"https://api.github.com/users/petemoore/orgs","repos_url":"https://api.github.com/users/petemoore/repos","events_url":"https://api.github.com/users/petemoore/events{/privacy}","received_events_url":"https://api.github.com/users/petemoore/received_events","type":"User","site_admin":false},{"login":"ccooper","id":609786,"avatar_url":"https://avatars0.githubusercontent.com/u/609786?v=4","gravatar_id":"","url":"https://api.github.com/users/ccooper","html_url":"https://github.com/ccooper","followers_url":"https://api.github.com/users/ccooper/followers","following_url":"https://api.github.com/users/ccooper/following{/other_user}","gists_url":"https://api.github.com/users/ccooper/gists{/gist_id}","starred_url":"https://api.github.com/users/ccooper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ccooper/subscriptions","organizations_url":"https://api.github.com/users/ccooper/orgs","repos_url":"https://api.github.com/users/ccooper/repos","events_url":"https://api.github.com/users/ccooper/events{/privacy}","received_events_url":"https://api.github.com/users/ccooper/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":598010835,"url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/labels/Phase:%20Proposal","name":"Phase: Proposal","color":"b60205","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116/commits","review_comments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116/comments","review_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/116/comments","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/statuses/e645ae8f621180d9511c6abafe1ceb6170c50b0a","head":{"label":"taskcluster:artifact-service","ref":"artifact-service","sha":"e645ae8f621180d9511c6abafe1ceb6170c50b0a","user":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars2.githubusercontent.com/u/6257436?v=4","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"repo":{"id":86847026,"name":"taskcluster-rfcs","full_name":"taskcluster/taskcluster-rfcs","owner":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars2.githubusercontent.com/u/6257436?v=4","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/taskcluster/taskcluster-rfcs","description":"Taskcluster team planning","fork":false,"url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs","forks_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/forks","keys_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/teams","hooks_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/hooks","issue_events_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/events","assignees_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/tags","blobs_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/languages","stargazers_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/stargazers","contributors_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/contributors","subscribers_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/subscribers","subscription_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/subscription","commits_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/merges","archive_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/downloads","issues_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/labels{/name}","releases_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/deployments","created_at":"2017-03-31T18:04:51Z","updated_at":"2018-03-27T15:36:47Z","pushed_at":"2018-04-05T17:12:53Z","git_url":"git://github.com/taskcluster/taskcluster-rfcs.git","ssh_url":"git@github.com:taskcluster/taskcluster-rfcs.git","clone_url":"https://github.com/taskcluster/taskcluster-rfcs.git","svn_url":"https://github.com/taskcluster/taskcluster-rfcs","homepage":"","size":111,"stargazers_count":2,"watchers_count":2,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10,"mirror_url":null,"archived":false,"open_issues_count":34,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0"},"forks":10,"open_issues":34,"watchers":2,"default_branch":"master"}},"base":{"label":"taskcluster:master","ref":"master","sha":"a05b01af9d61a807ed1a1e39e07c18ab5bbda02e","user":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars2.githubusercontent.com/u/6257436?v=4","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"repo":{"id":86847026,"name":"taskcluster-rfcs","full_name":"taskcluster/taskcluster-rfcs","owner":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars2.githubusercontent.com/u/6257436?v=4","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/taskcluster/taskcluster-rfcs","description":"Taskcluster team planning","fork":false,"url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs","forks_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/forks","keys_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/teams","hooks_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/hooks","issue_events_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/events","assignees_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/tags","blobs_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/languages","stargazers_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/stargazers","contributors_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/contributors","subscribers_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/subscribers","subscription_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/subscription","commits_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/merges","archive_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/downloads","issues_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/labels{/name}","releases_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/deployments","created_at":"2017-03-31T18:04:51Z","updated_at":"2018-03-27T15:36:47Z","pushed_at":"2018-04-05T17:12:53Z","git_url":"git://github.com/taskcluster/taskcluster-rfcs.git","ssh_url":"git@github.com:taskcluster/taskcluster-rfcs.git","clone_url":"https://github.com/taskcluster/taskcluster-rfcs.git","svn_url":"https://github.com/taskcluster/taskcluster-rfcs","homepage":"","size":111,"stargazers_count":2,"watchers_count":2,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10,"mirror_url":null,"archived":false,"open_issues_count":34,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0"},"forks":10,"open_issues":34,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116"},"html":{"href":"https://github.com/taskcluster/taskcluster-rfcs/pull/116"},"issue":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/116"},"comments":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/issues/116/comments"},"review_comments":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116/comments"},"review_comment":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/pulls/116/commits"},"statuses":{"href":"https://api.github.com/repos/taskcluster/taskcluster-rfcs/statuses/e645ae8f621180d9511c6abafe1ceb6170c50b0a"}},"author_association":"NONE"}}
{"actor":{"display_login":"djmitche"}}