{"action":"created","comment":{"url":"https://api.github.com/repos/resin-io/etcher/pulls/comments/96905427","pull_request_review_id":17503590,"id":96905427,"diff_hunk":"@@ -0,0 +1,428 @@\n+Etcher Extended Archives\n+========================\n+\n+Etcher extended archives are archive files including an image and a special\n+metadata directory including information that describes the image, device type,\n+and vendor in detail, enabling Etcher to make use of such information to\n+deliver advanced features and a more pleasant experience to the user.\n+\n+Entities\n+--------\n+\n+### Vendor\n+\n+A vendor represents a manufacturer of a device type and potential publisher.\n+\n+*Some examples of image vendors are: Beagleboard, Raspberry Pi Foundation,\n+Intel, and ODroid.*\n+\n+### Publisher\n+\n+A publisher represents an entity that maintains and publishes official images.\n+\n+*Some examples of image publishers are: Tizen, RetroPie, Resin.io, and CoreOS.*\n+\n+### Device\n+\n+A device represents a specific device type manufactured by a vendor.\n+\n+*Some examples of devices are: Beaglebone Black, Beaglebone Green, Intel\n+Edison, and Raspberry Pi 3.*\n+\n+### Client\n+\n+A client represents the program making use of the information about the other\n+entities.\n+\n+*At the moment of this writing, the only existent client is the Etcher application.*\n+\n+File format\n+-----------\n+\n+The file format should have the following characteristics:\n+\n+- Streamability: The extended archive allows the client to consume all its\n+  information in a streaming fashion\n+\n+- Compression: The extended archive should be compressed in order to save\n+  network resources\n+\n+We base this format on the [`tar`][tar] archive format, which has the following\n+benefits:\n+\n+- It's a nearly universal archive format (easy to find robust implementations)\n+\n+- It allows us to easily impose a file order, which greatly helps with\n+  streamability. This is not trivial with `zip`, for instance\n+\n+- It precedes each file with a header construct, making it streaming friendly\n+\n+The [`tar`][tar] archive is then compressed with the [`xz`][xz] data\n+compression format, which has the following benefits:\n+\n+- A native, robust, performant, cross-platform and streaming-based\n+  decompression library for [node.js][nodejs], called\n+  [`lzma-native`][lzma-native], which we battle tested at Etcher\n+\n+- A way to calculate the precise uncompressed size of the file no matter the\n+  size (which is a [known limitation of `gzip` after 4\n+  GB](https://github.com/resin-io/etcher/issues/638)), and an operation\n+  [`lzma-native`][lzma-native] supports out of the box. This is not possible\n+  with `bzip2`\n+\n+- Decent compression ratio, and compression/decompression time\n+\n+The resulting file should contain the `.etch` extension.\n+\n+Archive layout\n+--------------\n+\n+The contents of an extended archive are the followings:\n+\n+- **REQUIRED** `.meta/manifest.json`\n+- `.meta/publisher.svg`\n+- `.meta/device.svg`\n+- `.meta/image.svg`\n+- `.meta/schema.json`\n+- `.meta/image.bmap`\n+- `.meta/instructions.markdown`\n+- `.meta/release-notes.txt`\n+- **REQUIRED** `image.<extension>`\n+- `.meta/checksum`\n+\n+### Order\n+\n+Notice that the order is important. The `.meta/` directory must come before the\n+image data, since we need that information before being able to make use of the\n+image.\n+\n+The order of the files inside `.meta/` is not mandatory, however the order\n+described above ensures the maximum UX perceived efficiency.\n+\n+### Graphics\n+\n+We chose [`svg`][svg] over other image formats since clients can display it on\n+any kind of screen resolution without requiring multi-layer files, or multiple\n+files workarounds.\n+\n+Archive files\n+-------------\n+\n+### `.meta/manifest.json`\n+\n+This is the only required file inside `.meta`, which declares information about\n+the image, the target device type, and the publisher. This file may contain the\n+following top level properties:\n+\n+- `publisher`: Information about the image publisher\n+- `device`: Information about the image device type\n+- `image`: Information about the image itself\n+\n+#### Publisher\n+\n+Here's an example of a real-world publisher manifest for RetroPie:\n+\n+```json\n+{\n+  \"name\": \"RetroPie\",\n+  \"url\": \"https://retropie.org.uk\",\n+  \"supportUrl\": \"https://retropie.org.uk/forum/\",\n+  \"colorScheme\": {\n+    \"background\": \"#535760\",\n+    \"text\": \"#FFFFFF\",\n+    \"primary\": \"#5793db\"\n+  }\n+}\n+```\n+\n+Describe a publisher with any of the following properties:\n+\n+##### `name (String)`\n+\n+The display human-friendly name of the publisher.\n+\n+##### `url (String)`\n+\n+The main url of the publisher, usually the landing page.\n+\n+##### `supportUrl (String)`\n+\n+The publisher url where users can get general support.\n+\n+This could be a link to a forum, IRC room, troubleshooting page, support form,\n+etc.\n+\n+##### `colorScheme (Object)`\n+\n+The publisher specific color scheme, if any.\n+\n+The client may allow a certain degree of branding based on this color scheme.\n+\n+You may declare the following colors, in hexadecimal format:\n+\n+- `background`: The background color\n+- `text`: The text color\n+- `primary`: The primary color\n+\n+#### Device\n+\n+Here's an example of a real-world device manifest for Raspberry Pi 3:\n+\n+```json\n+{\n+  \"displayName\": \"Raspberry Pi 3\",\n+  \"url\": \"https://www.raspberrypi.org/products/raspberry-pi-3-model-b/\",\n+  \"arch\": \"armv7hf\",\n+  \"slug\": \"raspberrypi3\",\n+  \"slugAliases\": [\n+    \"raspberry-pi3\",\n+    \"rpi3\"\n+  ]\n+}\n+```\n+\n+Describe a device with any of the following properties:\n+\n+##### `displayName (String)`\n+\n+The human-friendly name of the device.\n+\n+##### `url (String)`\n+\n+The url to the landing page of the device.\n+\n+##### `arch (String[])`\n+\n+The device architecture.\n+\n+The current possible values are: `aarch64`, `amd64`, `armv5e`, `armv6`,\n+`armv7hf`, and `i386`.\n+\n+##### `slug (String)`\n+\n+The device slug. Officially recognised slugs include:\n+\n+- `artik10`\n+- `artik5`\n+- `artik710`\n+- `beaglebone-black`\n+- `beaglebone-green-wifi`\n+- `beaglebone-green`\n+- `colibri-imx6dl`\n+- `cybertan-ze250`\n+- `edge`\n+- `hummingboard`\n+- `intel-edison`\n+- `intel-nuc`\n+- `nitrogen6x`\n+- `odroid-c1`\n+- `odroid-xu4`\n+- `parallella`\n+- `qemux86-64`\n+- `qemux86`\n+- `raspberry-pi`\n+- `raspberry-pi2`\n+- `raspberrypi3`\n+- `ts4900`\n+- `ts7700`\n+- `via-vab820-quad`\n+- `zynq-xz702`\n+\n+##### `slugAliases (String[])`\n+\n+The device slug aliases, if any.\n+\n+##### `compatibleWith (String[])`\n+\n+An array of the device slugs this device is compatible with.\n+\n+#### Image\n+\n+Here's an example of a real-world image manifest for Raspbian Jessie:\n+\n+```json\n+{\n+  \"displayName\": \"Raspbian Jessie\",\n+  \"version\": \"May 2016\",\n+  \"url\": \"https://www.raspberrypi.org/downloads/raspbian/\",\n+  \"releaseNotesUrl\": \"http://downloads.raspberrypi.org/raspbian/release_notes.txt\",\n+  \"checksumType\": \"sha1\",\n+  \"recommendedDriveSize\": 4294967296,\n+  \"updateUrl\": \"https://downloads.raspberrypi.org/raspbian_latest\",\n+  \"etag\": \"c0170-53152af2-533d18ef29fc0\",\n+  \"supportedDevices\": [\n+    \"raspberrypi\",\n+    \"raspberrypi2\",\n+    \"raspberrypi3\"\n+  ]\n+}\n+```\n+\n+Describe an image with any of the following properties:\n+\n+##### `displayName (String)`\n+\n+The human-friendly name of the image.\n+\n+##### `version (String)`\n+\n+The version of the image.\n+\n+##### `url (String)`\n+\n+The main url of the image.\n+\n+##### `releaseNotesUrl (String)`\n+\n+The url to the image's release notes or CHANGELOG. This URL will take\n+precedence over `.meta/release-notes.txt` if defined.\n+\n+##### `releaseDate (String)`\n+\n+The release date timestamp. The date should conform to [ISO 8601][iso8601]\n+standard.\n+\n+##### `checksumType (String)`\n+\n+The checksum type. The current possible values are: `sha1`, `crc32`, and `md5`.\n+\n+See the `.meta/checksum` file.\n+\n+##### `recommendedDriveSize (Number)`\n+\n+The minimum recommended drive size to flash this image, in bytes.\n+\n+The use case for this option is that while a drive might be large enough to\n+contain the image, it might not be large enough to deliver a good experience\n+when actual using the application or operating system contained in the image.\n+\n+##### `supportedDevices (String[])`\n+\n+An array of the device slugs this image supports.\n+\n+##### `updateUrl (String)`\n+\n+The url where the client can request the latest version of the image.\n+\n+The way this works is that you provide a generic url that redirects to the\n+latest image resource. The client will follow all redirects until it finds the\n+final image, and will check (using the `etag` property) if the resource matches\n+the currently selected image.\n+\n+If the ETags don't match, the client may point the user to download the new one\n+image.\n+\n+If the HTTP response from `updateUrl` doesn't contain an ETag this mechanism is\n+ignored.\n+\n+##### `etag (String)`\n+\n+The [HTTP Etag][etag] of the current image.\n+\n+Clients may use this to check if the image resolved by `updateUrl` is different\n+to the one we have locally.\n+\n+##### `expiryDate (String)`\n+\n+The timestamp to determine the expiration date of the image. The date should\n+conform to [ISO 8601][iso8601] standard.\n+\n+Clients may use this information to refuse flashing the image.","path":"docs/EXTENDED-ARCHIVES.md","position":330,"original_position":330,"commit_id":"b38e463e52ad10214e00f7154c253b15cb91e135","original_commit_id":"b38e463e52ad10214e00f7154c253b15cb91e135","user":{"login":"lurch","id":476186,"avatar_url":"https://avatars.githubusercontent.com/u/476186?v=3","gravatar_id":"","url":"https://api.github.com/users/lurch","html_url":"https://github.com/lurch","followers_url":"https://api.github.com/users/lurch/followers","following_url":"https://api.github.com/users/lurch/following{/other_user}","gists_url":"https://api.github.com/users/lurch/gists{/gist_id}","starred_url":"https://api.github.com/users/lurch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lurch/subscriptions","organizations_url":"https://api.github.com/users/lurch/orgs","repos_url":"https://api.github.com/users/lurch/repos","events_url":"https://api.github.com/users/lurch/events{/privacy}","received_events_url":"https://api.github.com/users/lurch/received_events","type":"User","site_admin":false},"body":"If we're using an 'open' (and non-encrypted) compression method such as `.zip` or `.tar` then obviously a determined user will still be able to extract the image and write it manually, so maybe this should just be a warning, rather than an outright refusal?","created_at":"2017-01-19T16:56:05Z","updated_at":"2017-01-19T16:56:05Z","html_url":"https://github.com/resin-io/etcher/pull/707#discussion_r96905427","pull_request_url":"https://api.github.com/repos/resin-io/etcher/pulls/707","_links":{"self":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/comments/96905427"},"html":{"href":"https://github.com/resin-io/etcher/pull/707#discussion_r96905427"},"pull_request":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/707"}}},"pull_request":{"url":"https://api.github.com/repos/resin-io/etcher/pulls/707","id":85901399,"html_url":"https://github.com/resin-io/etcher/pull/707","diff_url":"https://github.com/resin-io/etcher/pull/707.diff","patch_url":"https://github.com/resin-io/etcher/pull/707.patch","issue_url":"https://api.github.com/repos/resin-io/etcher/issues/707","number":707,"state":"open","locked":false,"title":"docs: etcher extended archives specification","user":{"login":"jviotti","id":2192773,"avatar_url":"https://avatars.githubusercontent.com/u/2192773?v=3","gravatar_id":"","url":"https://api.github.com/users/jviotti","html_url":"https://github.com/jviotti","followers_url":"https://api.github.com/users/jviotti/followers","following_url":"https://api.github.com/users/jviotti/following{/other_user}","gists_url":"https://api.github.com/users/jviotti/gists{/gist_id}","starred_url":"https://api.github.com/users/jviotti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jviotti/subscriptions","organizations_url":"https://api.github.com/users/jviotti/orgs","repos_url":"https://api.github.com/users/jviotti/repos","events_url":"https://api.github.com/users/jviotti/events{/privacy}","received_events_url":"https://api.github.com/users/jviotti/received_events","type":"User","site_admin":false},"body":"This document aims to describe in detail the structure of an Etcher\nExtended Archive.\n\nSigned-off-by: Juan Cruz Viotti jviotti@openmailbox.org\n","created_at":"2016-09-20T02:29:21Z","updated_at":"2017-01-19T16:56:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"44df38c6b89af96c896d45a523af232728ede497","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/resin-io/etcher/pulls/707/commits","review_comments_url":"https://api.github.com/repos/resin-io/etcher/pulls/707/comments","review_comment_url":"https://api.github.com/repos/resin-io/etcher/pulls/comments{/number}","comments_url":"https://api.github.com/repos/resin-io/etcher/issues/707/comments","statuses_url":"https://api.github.com/repos/resin-io/etcher/statuses/b38e463e52ad10214e00f7154c253b15cb91e135","head":{"label":"resin-io:extended-archives","ref":"extended-archives","sha":"b38e463e52ad10214e00f7154c253b15cb91e135","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":45055693,"name":"etcher","full_name":"resin-io/etcher","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/etcher","description":"Flash OS images to SD cards & USB drives, safely and easily.","fork":false,"url":"https://api.github.com/repos/resin-io/etcher","forks_url":"https://api.github.com/repos/resin-io/etcher/forks","keys_url":"https://api.github.com/repos/resin-io/etcher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/etcher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/etcher/teams","hooks_url":"https://api.github.com/repos/resin-io/etcher/hooks","issue_events_url":"https://api.github.com/repos/resin-io/etcher/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/etcher/events","assignees_url":"https://api.github.com/repos/resin-io/etcher/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/etcher/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/etcher/tags","blobs_url":"https://api.github.com/repos/resin-io/etcher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/etcher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/etcher/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/etcher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/etcher/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/etcher/languages","stargazers_url":"https://api.github.com/repos/resin-io/etcher/stargazers","contributors_url":"https://api.github.com/repos/resin-io/etcher/contributors","subscribers_url":"https://api.github.com/repos/resin-io/etcher/subscribers","subscription_url":"https://api.github.com/repos/resin-io/etcher/subscription","commits_url":"https://api.github.com/repos/resin-io/etcher/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/etcher/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/etcher/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/etcher/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/etcher/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/etcher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/etcher/merges","archive_url":"https://api.github.com/repos/resin-io/etcher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/etcher/downloads","issues_url":"https://api.github.com/repos/resin-io/etcher/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/etcher/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/etcher/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/etcher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/etcher/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/etcher/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/etcher/deployments","created_at":"2015-10-27T16:53:23Z","updated_at":"2017-01-19T14:48:29Z","pushed_at":"2017-01-19T15:36:37Z","git_url":"git://github.com/resin-io/etcher.git","ssh_url":"git@github.com:resin-io/etcher.git","clone_url":"https://github.com/resin-io/etcher.git","svn_url":"https://github.com/resin-io/etcher","homepage":"https://etcher.io","size":11481,"stargazers_count":1837,"watchers_count":1837,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":104,"mirror_url":null,"open_issues_count":86,"forks":104,"open_issues":86,"watchers":1837,"default_branch":"master"}},"base":{"label":"resin-io:master","ref":"master","sha":"4bf313c7a8529484f7deae8ceb19df6b4f81c453","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":45055693,"name":"etcher","full_name":"resin-io/etcher","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/etcher","description":"Flash OS images to SD cards & USB drives, safely and easily.","fork":false,"url":"https://api.github.com/repos/resin-io/etcher","forks_url":"https://api.github.com/repos/resin-io/etcher/forks","keys_url":"https://api.github.com/repos/resin-io/etcher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/etcher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/etcher/teams","hooks_url":"https://api.github.com/repos/resin-io/etcher/hooks","issue_events_url":"https://api.github.com/repos/resin-io/etcher/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/etcher/events","assignees_url":"https://api.github.com/repos/resin-io/etcher/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/etcher/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/etcher/tags","blobs_url":"https://api.github.com/repos/resin-io/etcher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/etcher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/etcher/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/etcher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/etcher/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/etcher/languages","stargazers_url":"https://api.github.com/repos/resin-io/etcher/stargazers","contributors_url":"https://api.github.com/repos/resin-io/etcher/contributors","subscribers_url":"https://api.github.com/repos/resin-io/etcher/subscribers","subscription_url":"https://api.github.com/repos/resin-io/etcher/subscription","commits_url":"https://api.github.com/repos/resin-io/etcher/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/etcher/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/etcher/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/etcher/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/etcher/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/etcher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/etcher/merges","archive_url":"https://api.github.com/repos/resin-io/etcher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/etcher/downloads","issues_url":"https://api.github.com/repos/resin-io/etcher/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/etcher/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/etcher/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/etcher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/etcher/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/etcher/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/etcher/deployments","created_at":"2015-10-27T16:53:23Z","updated_at":"2017-01-19T14:48:29Z","pushed_at":"2017-01-19T15:36:37Z","git_url":"git://github.com/resin-io/etcher.git","ssh_url":"git@github.com:resin-io/etcher.git","clone_url":"https://github.com/resin-io/etcher.git","svn_url":"https://github.com/resin-io/etcher","homepage":"https://etcher.io","size":11481,"stargazers_count":1837,"watchers_count":1837,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":104,"mirror_url":null,"open_issues_count":86,"forks":104,"open_issues":86,"watchers":1837,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/707"},"html":{"href":"https://github.com/resin-io/etcher/pull/707"},"issue":{"href":"https://api.github.com/repos/resin-io/etcher/issues/707"},"comments":{"href":"https://api.github.com/repos/resin-io/etcher/issues/707/comments"},"review_comments":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/707/comments"},"review_comment":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/resin-io/etcher/pulls/707/commits"},"statuses":{"href":"https://api.github.com/repos/resin-io/etcher/statuses/b38e463e52ad10214e00f7154c253b15cb91e135"}}}}
{"actor":{"display_login":"lurch"}}