{"action":"created","comment":{"url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/comments/81747511","pull_request_review_id":2703505,"id":81747511,"diff_hunk":"@@ -0,0 +1,277 @@\n+# Using the Resin Supervisor for managing dependent applications\n+\n+Since version 2.5.0 the Resin Supervisor can act as a proxy for dependent apps.\n+\n+Only Supervisors after version 2.5.0 have this functionality, and some of the endpoints appeared in later versions (we've noted it down where this is the case).\n+\n+## What is a dependent application\n+\n+A **dependent application** is a resin application that targets devices not capable of interacting directly with the Resin API - the reasons can be several, the most common are:\n+\n+- no direct Internet capabilities\n+- not able to run Resin OS (being a microcontroller, for example)\n+\n+The **dependent application** is scoped under a resin application, which gets the definition of **gateway application**.\n+\n+The **gateway application** is responsible for detecting, provisioning and managing **dependent devices** belonging to one of its **dependent applications**. This is possible leveraging a new set of endpoints exposed by the Resin Supervisor.\n+\n+A dependent application follows the same development cycle of a conventional resin application:\n+\n+- it binds to your git workspace via the **resin remote**\n+- it consists in a Docker application\n+- it offers the same environment and configuration variables management\n+\n+There are some differences:\n+\n+- it does not support Dockerfile templating\n+- the Dockerfile must target a `x86` base image\n+- the actual firmware/business logic must be stored in the `/assets` folder within the built docker image.\n+\n+  - You can either just `COPY` a pre-built artifact in that folder, or build your artifact at push time and then store it in the `/assets` folder.\n+\n+## How a dependent application works\n+\n+### Design\n+\n+Resin Supervisor exposes a REST interface when the data-flow goes from the Resin Application to the Resin API (from now on, called **pull** dataflow) and a **Hook** mechanism when the data-flow goes from the Resin API to the Resin Application (from now on, called **push** dataflow). The term **Hook** is meant as a convention of HTTP requests made from the Resin Supervisor to the gateway application\n+\n+\n+### Hook\n+\n+It's worth noting the **Hook** APIs described in this document consist in the opposite direction flow: It's the Resin Supervisor consuming a REST interface exposed by the gateway application. These methods are described as **what the Resin Supervisor expects to find on a push dataflow**\n+\n+### Hook configuration\n+\n+You can point the supervisor where to find the hook server via a configuration variable.\n+\n+- `RESIN_DEPENDENT_DEVICES_HOOK_ADDRESS` _(defaults to `http://0.0.0.0:1337/v1/devices/`)_\n+\n+# HTTP API reference\n+\n+## Applications\n+\n+### GET /v1/dependent-apps\n+Dependent Applications List\n+\n+**Example**\n+\n+```bash\n+curl -X GET $RESIN_SUPERVISOR_ADDRESS/v1/dependent-apps?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+```javascript\n+[\n+     {\n+         \"id\": 13015,\n+         \"device_type\": \"edge\",\n+         \"name\": \"edgeApp1\",\n+         \"commit\": \"d43bea5e16658e653088ce4b9a91b6606c3c2a0d\",\n+         \"env\": null\n+     },\n+     {\n+         \"id\": 13016,\n+         \"device_type\": \"edge\",\n+         \"name\": \"edgeApp2\",\n+         \"commit\": \"d0f6624d6410fa079159fa3ebe0d3af46753d75d\",\n+         \"env\": null\n+     }\n+ ]\n+```\n+\n+### GET /v1/dependent-apps/:appId/assets/:commit\n+Dependent Application Updates Registry\n+\n+**Example**\n+\n+```bash\n+curl -X GET $RESIN_SUPERVISOR_ADDRESS/v1/dependent-apps/<appId>/assets/<commit>?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+\n+```none\n+[application/x-tar] .tar\n+```\n+\n+## Devices\n+\n+### GET /v1/devices\n+Dependent Devices List\n+\n+**Example**\n+\n+```bash\n+curl -X GET $RESIN_SUPERVISOR_ADDRESS/v1/devices?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+\n+```javascript\n+[\n+     {\n+         \"id\": 1,\n+         \"uuid\": \"5ae8cf6e062c033ea38435498ad9b487bcc714e9eab0fed0404ee56e397790\",\n+         \"appId\": 13015,\n+         \"device_type\": \"edge\",\n+         \"logs_channel\": \"69f961abffaad1ff66031b29f712be4fb19e1bfabf1fee7a9ebfb5fa75a1fbdb\",\n+         \"deviceId\": \"47270\",\n+         \"is_online\": null,\n+         \"name\": \"blue-sun\",\n+         \"status\": \"Provisioned\",\n+         \"download_progress\": null,\n+         \"commit\": \"d43bea5e16658e693088ce4b9a91b6606c3c2a0d\",\n+         \"targetCommit\": \"d43bea5e16653e653088ce4b9a91b6606c3c2a0d\",\n+         \"env\": null,\n+         \"targetEnv\": null\n+     },\n+     {\n+         \"id\": 3,\n+         \"uuid\": \"8dc608765fd32665d49d218a7eb4657bc2ab8a56db06d2c57ef7c7e9a115da\",\n+         \"appId\": 13015,\n+         \"device_type\": \"edge\",\n+         \"logs_channel\": \"d0244a90e8cd6e9a1ab410d3d599dea7f15110a6fe37b2a8fd69bb6ee0bce043\",\n+         \"deviceId\": \"47318\",\n+         \"is_online\": null,\n+         \"name\": \"wild-paper\",\n+         \"status\": \"Provisioned\",\n+         \"download_progress\": null,\n+         \"commit\": \"d43bea5e16658e253088ce4b9a91b6606c3c2a0d\",\n+         \"targetCommit\": \"d43bea5e11658e653088ce4b9a91b6606c3c2a0d\",\n+         \"env\": null,\n+         \"targetEnv\": null\n+     }\n+ ]\n+```\n+\n+### POST /v1/devices\n+Dependent Device Provision\n+\n+**Example**\n+\n+```bash\n+curl -H \"Content-Type: application/json\" -X POST --data '{\"appId\": <appId>}' /\n+$RESIN_SUPERVISOR_ADDRESS/v1/devices?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 201 CREATED`\n+\n+\n+```javascript\n+{\n+          \"id\": 47318,\n+            \"uuid\": \"8dc608765fd32665d49a268a7eb4657bc2ab8a56db06d2c57ef7c7e9a115da\",\n+      \"name\": \"wild-paper\",\n+          \"note\": null,\n+          \"device_type\": \"edge\",\n+    }\n+```\n+\n+### GET /v1/devices/:uuid\n+Dependent Device Information\n+\n+**Example**\n+\n+```bash\n+curl -X GET $RESIN_SUPERVISOR_ADDRESS/v1/devices/<uuid>?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+```javascript\n+{\n+           \"id\": 1,\n+           \"uuid\": \"5ae8cf6e062c033ea57837498ad9b487bfc714e9eab0fed0404ee56e397790\",\n+           \"appId\": 13015,\n+           \"device_type\": \"edge\",\n+           \"logs_channel\": \"69f961abffaad2ff00031b29f718be4fb19e1bfabf1fee7a9ebfb5fa75a1fbdb\",\n+           \"deviceId\": \"47270\",\n+           \"is_online\": null,\n+           \"name\": \"blue-sun\",\n+           \"status\": \"Provisioned\",\n+           \"download_progress\": null,\n+           \"commit\": \"d43bea5e16658e623088je4b9a91b6606c3c2a0d\",\n+           \"targetCommit\": \"d43bea5e16658e651088ce4b9a21b6606c3c2a0d\",\n+           \"env\": null,\n+           \"targetEnv\": null\n+       }\n+```\n+\n+### PUT /v1/devices/:uuid\n+Dependent Device Information Update\n+\n+**Example**\n+\n+```bash\n+curl -H \"Content-Type: application/json\" -X PUT --data /\n+'{\"is_online\":true, \"status\": \"Updating\", \"commit\": \"339125a7529cb2c2a8c93a0bbd8af69f2d96286ab4f4552cb5cfe99b0d3ee9\"}' /\n+$RESIN_SUPERVISOR_ADDRESS/v1/devices/<uuid>?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+```javascript\n+{\n+           \"id\": 1,\n+           \"uuid\": \"5ae8cf6e062c033ea38437498ad9b482bcc714e9eab0fed0404ee56e397790\",\n+           \"appId\": 13015,\n+           \"device_type\": \"edge\",\n+           \"logs_channel\": \"69f961abffaad2ff66031b29f712be4fb19e1bfabf1fee7a9ebfb5fa05a1fbdb\",\n+           \"deviceId\": \"47270\",\n+           \"is_online\": true,\n+           \"name\": \"blue-sun\",\n+           \"status\": \"Updating\",\n+           \"download_progress\": null,\n+           \"commit\": \"d43bea5e16658e653088ce4b9a11b6606c3c2a0d\",\n+           \"targetCommit\": \"d43bea5e16658e653088se4b9a91b6606c3c2a0d\",\n+           \"env\": null,\n+           \"targetEnv\": null\n+       }\n+```\n+\n+### POST /v1/devices/:uuid/logs\n+Dependent Dependent Device Log\n+\n+**Example**\n+\n+```bash\n+curl -H \"Content-Type: application/json\" -X POST --data '{\"message\":\"detected movement\",\"timestamp\":1472142960}' /\n+$RESIN_SUPERVISOR_ADDRESS/v1/devices/<uuid>/logs?apikey=$RESIN_SUPERVISOR_API_KEY\n+```\n+**Response**\n+`HTTP/1.1 202 ACCEPTED`\n+\n+## Hook (the request the Resin Supervisor performs)\n+\n+### PUT /v1/devices/:uuid/restart\n+Dependent Device Restart Notification\n+\n+**Example**\n+\n+```bash\n+curl -H \"Content-Type: application/json\" -X PUT /\n+http://127.0.0.1:1337/v1/devices/<uuid>/restart\n+```\n+**Response**\n+`HTTP/1.1 200 OK`\n+\n+### PUT /v1/devices/:uuid\n+Dependent Device Update Notification","path":"docs/dependent-apps.md","position":268,"original_position":268,"commit_id":"ec0b328cda57150b23a2cff23813e4ba6a331b80","original_commit_id":"258e08f5d47531d65609016dc6570aaae29da897","user":{"login":"josephroberts","id":1107385,"avatar_url":"https://avatars.githubusercontent.com/u/1107385?v=3","gravatar_id":"","url":"https://api.github.com/users/josephroberts","html_url":"https://github.com/josephroberts","followers_url":"https://api.github.com/users/josephroberts/followers","following_url":"https://api.github.com/users/josephroberts/following{/other_user}","gists_url":"https://api.github.com/users/josephroberts/gists{/gist_id}","starred_url":"https://api.github.com/users/josephroberts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josephroberts/subscriptions","organizations_url":"https://api.github.com/users/josephroberts/orgs","repos_url":"https://api.github.com/users/josephroberts/repos","events_url":"https://api.github.com/users/josephroberts/events{/privacy}","received_events_url":"https://api.github.com/users/josephroberts/received_events","type":"User","site_admin":false},"body":"Probably not the right place. but essentially I haven't implemented any DB caching so each time I get the request I write the target commit for the device into my DB which is stored on `/data`. Furthermore it could potentially be days before the micro comes online for an update and it seems wasteful to keep making the request given that the ENM has already told the proxy-visor it is going to handle it","created_at":"2016-10-04T12:46:06Z","updated_at":"2016-10-04T12:46:06Z","html_url":"https://github.com/resin-io/resin-supervisor/pull/288#discussion_r81747511","pull_request_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288","_links":{"self":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/comments/81747511"},"html":{"href":"https://github.com/resin-io/resin-supervisor/pull/288#discussion_r81747511"},"pull_request":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288"}}},"pull_request":{"url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288","id":87880628,"html_url":"https://github.com/resin-io/resin-supervisor/pull/288","diff_url":"https://github.com/resin-io/resin-supervisor/pull/288.diff","patch_url":"https://github.com/resin-io/resin-supervisor/pull/288.patch","issue_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/288","number":288,"state":"open","locked":false,"title":"document dependent apps feature","user":{"login":"curcuz","id":2338223,"avatar_url":"https://avatars.githubusercontent.com/u/2338223?v=3","gravatar_id":"","url":"https://api.github.com/users/curcuz","html_url":"https://github.com/curcuz","followers_url":"https://api.github.com/users/curcuz/followers","following_url":"https://api.github.com/users/curcuz/following{/other_user}","gists_url":"https://api.github.com/users/curcuz/gists{/gist_id}","starred_url":"https://api.github.com/users/curcuz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/curcuz/subscriptions","organizations_url":"https://api.github.com/users/curcuz/orgs","repos_url":"https://api.github.com/users/curcuz/repos","events_url":"https://api.github.com/users/curcuz/events{/privacy}","received_events_url":"https://api.github.com/users/curcuz/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-10-04T12:02:59Z","updated_at":"2016-10-04T12:46:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"508cb18789b87420538338439eacb4505b897ecd","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288/commits","review_comments_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288/comments","review_comment_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/288/comments","statuses_url":"https://api.github.com/repos/resin-io/resin-supervisor/statuses/ec0b328cda57150b23a2cff23813e4ba6a331b80","head":{"label":"resin-io:dependent-apps-docs","ref":"dependent-apps-docs","sha":"ec0b328cda57150b23a2cff23813e4ba6a331b80","user":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars.githubusercontent.com/u/6157842?v=3","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"repo":{"id":44161944,"name":"resin-supervisor","full_name":"resin-io/resin-supervisor","owner":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars.githubusercontent.com/u/6157842?v=3","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/resin-io/resin-supervisor","description":"Resin Supervisor: resin.io's agent on devices.","fork":false,"url":"https://api.github.com/repos/resin-io/resin-supervisor","forks_url":"https://api.github.com/repos/resin-io/resin-supervisor/forks","keys_url":"https://api.github.com/repos/resin-io/resin-supervisor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/resin-supervisor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/resin-supervisor/teams","hooks_url":"https://api.github.com/repos/resin-io/resin-supervisor/hooks","issue_events_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/resin-supervisor/events","assignees_url":"https://api.github.com/repos/resin-io/resin-supervisor/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/resin-supervisor/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/resin-supervisor/tags","blobs_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/resin-supervisor/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/resin-supervisor/languages","stargazers_url":"https://api.github.com/repos/resin-io/resin-supervisor/stargazers","contributors_url":"https://api.github.com/repos/resin-io/resin-supervisor/contributors","subscribers_url":"https://api.github.com/repos/resin-io/resin-supervisor/subscribers","subscription_url":"https://api.github.com/repos/resin-io/resin-supervisor/subscription","commits_url":"https://api.github.com/repos/resin-io/resin-supervisor/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/resin-supervisor/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/resin-supervisor/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/resin-supervisor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/resin-supervisor/merges","archive_url":"https://api.github.com/repos/resin-io/resin-supervisor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/resin-supervisor/downloads","issues_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/resin-supervisor/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/resin-supervisor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/resin-supervisor/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/resin-supervisor/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/resin-supervisor/deployments","created_at":"2015-10-13T08:15:58Z","updated_at":"2016-09-18T07:57:56Z","pushed_at":"2016-10-04T12:29:54Z","git_url":"git://github.com/resin-io/resin-supervisor.git","ssh_url":"git@github.com:resin-io/resin-supervisor.git","clone_url":"https://github.com/resin-io/resin-supervisor.git","svn_url":"https://github.com/resin-io/resin-supervisor","homepage":"https://resin.io","size":1943,"stargazers_count":31,"watchers_count":31,"language":"CoffeeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"open_issues_count":64,"forks":14,"open_issues":64,"watchers":31,"default_branch":"master"}},"base":{"label":"resin-io:master","ref":"master","sha":"8ff8d0a7c0c3f93ea248298861ee152622022d58","user":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars.githubusercontent.com/u/6157842?v=3","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"repo":{"id":44161944,"name":"resin-supervisor","full_name":"resin-io/resin-supervisor","owner":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars.githubusercontent.com/u/6157842?v=3","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/resin-io/resin-supervisor","description":"Resin Supervisor: resin.io's agent on devices.","fork":false,"url":"https://api.github.com/repos/resin-io/resin-supervisor","forks_url":"https://api.github.com/repos/resin-io/resin-supervisor/forks","keys_url":"https://api.github.com/repos/resin-io/resin-supervisor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/resin-supervisor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/resin-supervisor/teams","hooks_url":"https://api.github.com/repos/resin-io/resin-supervisor/hooks","issue_events_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/resin-supervisor/events","assignees_url":"https://api.github.com/repos/resin-io/resin-supervisor/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/resin-supervisor/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/resin-supervisor/tags","blobs_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/resin-supervisor/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/resin-supervisor/languages","stargazers_url":"https://api.github.com/repos/resin-io/resin-supervisor/stargazers","contributors_url":"https://api.github.com/repos/resin-io/resin-supervisor/contributors","subscribers_url":"https://api.github.com/repos/resin-io/resin-supervisor/subscribers","subscription_url":"https://api.github.com/repos/resin-io/resin-supervisor/subscription","commits_url":"https://api.github.com/repos/resin-io/resin-supervisor/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/resin-supervisor/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/resin-supervisor/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/resin-supervisor/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/resin-supervisor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/resin-supervisor/merges","archive_url":"https://api.github.com/repos/resin-io/resin-supervisor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/resin-supervisor/downloads","issues_url":"https://api.github.com/repos/resin-io/resin-supervisor/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/resin-supervisor/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/resin-supervisor/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/resin-supervisor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/resin-supervisor/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/resin-supervisor/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/resin-supervisor/deployments","created_at":"2015-10-13T08:15:58Z","updated_at":"2016-09-18T07:57:56Z","pushed_at":"2016-10-04T12:29:54Z","git_url":"git://github.com/resin-io/resin-supervisor.git","ssh_url":"git@github.com:resin-io/resin-supervisor.git","clone_url":"https://github.com/resin-io/resin-supervisor.git","svn_url":"https://github.com/resin-io/resin-supervisor","homepage":"https://resin.io","size":1943,"stargazers_count":31,"watchers_count":31,"language":"CoffeeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"open_issues_count":64,"forks":14,"open_issues":64,"watchers":31,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288"},"html":{"href":"https://github.com/resin-io/resin-supervisor/pull/288"},"issue":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/issues/288"},"comments":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/issues/288/comments"},"review_comments":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288/comments"},"review_comment":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/pulls/288/commits"},"statuses":{"href":"https://api.github.com/repos/resin-io/resin-supervisor/statuses/ec0b328cda57150b23a2cff23813e4ba6a331b80"}}}}
{"actor":{"display_login":"josephroberts"}}