{"action":"created","comment":{"url":"https://api.github.com/repos/boutiques/boutiques/pulls/comments/93053466","pull_request_review_id":13572086,"id":93053466,"diff_hunk":"@@ -0,0 +1,351 @@\n+{\n+ \"cells\": [\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"# Getting Started with Boutiques\\n\",\n+    \"\\n\",\n+    \"As you've seen from our documentation, Boutiques is a flexible way to represent command line executables and distribute them across compute ecosystems consistently. A Boutiques identifier is a JSON file that fully describes the input and output parameters and files for a given command line call (or calls, as you can include pipes(`|`) and ampersands (`&`)). There are several ways Boutiques helps you build an identifier for your tool:\\n\",\n+    \"\\n\",\n+    \"- The [documentation](http://boutiques.github.io/docs) script helps develop understanding the schema organization\\n\",\n+    \"- The [validator](https://github.com/boutiques/boutiques/blob/master/tools/validator.rb) enables you to verify your identifier\\n\",\n+    \"- The [examples](https://github.com/aces/cbrain-plugins-neuro/tree/master/cbrain_task_descriptors) provide useful references for development.\\n\",\n+    \"\\n\",\n+    \"To help you aid in this process, we will walk through the process of making an identifier for [FSL's BET](http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/BET) (finished product found [here](https://github.com/aces/cbrain-plugins-neuro/blob/master/cbrain_task_descriptors/fsl_bet.json)).\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"## Step 1: Describing the command line\\n\",\n+    \"\\n\",\n+    \"The first step in creating an identifier for your command line call is creating a fully descriptive list of your command line options. If your tool was written in Python and you use the `argparse` library, then this is already done for you in large part. For many tools (bash, Python, or otherwise) this can be obtained by typing executing it with the `-h` flag. In the case of FSL's BET, we get the following:\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"code\",\n+   \"execution_count\": 2,\n+   \"metadata\": {\n+    \"collapsed\": false\n+   },\n+   \"outputs\": [\n+    {\n+     \"name\": \"stdout\",\n+     \"output_type\": \"stream\",\n+     \"text\": [\n+      \"\\n\",\n+      \"Usage:    bet <input> <output> [options]\\n\",\n+      \"\\n\",\n+      \"Main bet2 options:\\n\",\n+      \"  -o          generate brain surface outline overlaid onto original image\\n\",\n+      \"  -m          generate binary brain mask\\n\",\n+      \"  -s          generate approximate skull image\\n\",\n+      \"  -n          don't generate segmented brain image output\\n\",\n+      \"  -f <f>      fractional intensity threshold (0->1); default=0.5; smaller values give larger brain outline estimates\\n\",\n+      \"  -g <g>      vertical gradient in fractional intensity threshold (-1->1); default=0; positive values give larger brain outline at bottom, smaller at top\\n\",\n+      \"  -r <r>      head radius (mm not voxels); initial surface sphere is set to half of this\\n\",\n+      \"  -c <x y z>  centre-of-gravity (voxels not mm) of initial mesh surface.\\n\",\n+      \"  -t          apply thresholding to segmented brain image and mask\\n\",\n+      \"  -e          generates brain surface as mesh in .vtk format\\n\",\n+      \"\\n\",\n+      \"Variations on default bet2 functionality (mutually exclusive options):\\n\",\n+      \"  (default)   just run bet2\\n\",\n+      \"  -R          robust brain centre estimation (iterates BET several times)\\n\",\n+      \"  -S          eye & optic nerve cleanup (can be useful in SIENA)\\n\",\n+      \"  -B          bias field & neck cleanup (can be useful in SIENA)\\n\",\n+      \"  -Z          improve BET if FOV is very small in Z (by temporarily padding end slices)\\n\",\n+      \"  -F          apply to 4D FMRI data (uses -f 0.3 and dilates brain mask slightly)\\n\",\n+      \"  -A          run bet2 and then betsurf to get additional skull and scalp surfaces (includes registrations)\\n\",\n+      \"  -A2 <T2>    as with -A, when also feeding in non-brain-extracted T2 (includes registrations)\\n\",\n+      \"\\n\",\n+      \"Miscellaneous options:\\n\",\n+      \"  -v          verbose (switch on diagnostic messages)\\n\",\n+      \"  -h          display this help, then exits\\n\",\n+      \"  -d          debug (don't delete temporary intermediate images)\\n\",\n+      \"\\n\"\n+     ]\n+    }\n+   ],\n+   \"source\": [\n+    \"%%bash\\n\",\n+    \"bet -h\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"Looking at all of these flags, we see a list of options which can be summarized by:\\n\",\n+    \"```\\n\",\n+    \"bet [INPUT_FILE] [MASK] [FRACTIONAL_INTENSITY] [VERTICAL_GRADIENT] [CENTER_OF_GRAVITY] [OVERLAY_FLAG] [BINARY_MASK_FLAG] [APPROX_SKULL_FLAG] [NO_SEG_OUTPUT_FLAG] [VTK_VIEW_FLAG] [HEAD_RADIUS] [THRESHOLDING_FLAG] [ROBUST_ITERS_FLAG] [RES_OPTIC_CLEANUP_FLAG] [REDUCE_BIAS_FLAG] [SLICE_PADDING_FLAG] [MASK_WHOLE_SET_FLAG] [ADD_SURFACES_FLAG] [ADD_SURFACES_T2] [VERBOSE_FLAG] [DEBUG_FLAG]\\n\",\n+    \"```\\n\",\n+    \"\\n\",\n+    \"Now that we have summarized all command line options for our tool - some of which describe inputs and others, outputs - we can begin to craft our JSON Boutiques identifier.\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"## Step 2: Understanding Boutiques + JSON\\n\",\n+    \"\\n\",\n+    \"For those unfamiliar with JSON, we recommend following this [3 minute JSON tutorial](http://www.secretgeek.net/json_3mins) to get you up to speed. In short, a JSON file is a dictionary object which contains *keys* and associated *values*. A *key* informs us what is being described, and a *value* is the description (which, importantly, can be arbitrarily typed). The Boutiques identifier is a JSON file which requires the following keys, or, properties:\\n\",\n+    \"- `name`\\n\",\n+    \"- `description`\\n\",\n+    \"- `schema-version`\\n\",\n+    \"- `command-line`\\n\",\n+    \"- `inputs`\\n\",\n+    \"- `output-files`\\n\",\n+    \"\\n\",\n+    \"Some additional, optional, properties that a Boutiques fill will recognize are:\\n\",\n+    \"- `groups`\\n\",\n+    \"- `tool-version`\\n\",\n+    \"- `docker-image`\\n\",\n+    \"- `docker-index`\\n\",\n+    \"\\n\",\n+    \"In the case of BET, we will of course populate the required elements, but will also include `tool-version` and `groups`.\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"## Step 3: Populating the identifier\\n\",\n+    \"\\n\",\n+    \"We will break-up populating the identifier into two sections: adding meta-parameters (such as `name`, `description`, `schema-version`, `command-line`, `tool-version`, and `docker-image`, `docker-index` if we were to include them) and i/o-parameters (such as `inputs`, `output-files`, and `groups`).\\n\",\n+    \"\\n\",\n+    \"Currently, before adding any details, our identifier should looks like this:\\n\",\n+    \"\\n\",\n+    \"```\\n\",\n+    \"{\\n\",\n+    \"    \\\"name\\\" : TODO,\\n\",\n+    \"    \\\"tool-version\\\": TODO,\\n\",\n+    \"    \\\"description\\\": TODO,\\n\",\n+    \"    \\\"command-line\\\": TODO,\\n\",\n+    \"    \\\"scheme-version\\\": TODO,\\n\",\n+    \"    \\\"inputs\\\": TODO,\\n\",\n+    \"    \\\"output-files\\\": TODO,\\n\",\n+    \"    \\\"groups\\\" TODO\\n\",\n+    \"}\\n\",\n+    \"```\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {\n+    \"collapsed\": true\n+   },\n+   \"source\": [\n+    \"### Step 3.1: Adding meta-parameters\\n\",\n+    \"\\n\",\n+    \"Many of the meta-parameters will be obvious to you if you're familiar with the tool, or extractable from the message received earlier when you passed the `-h` flag into your program. We can update our JSON to be the following:\\n\",\n+    \"\\n\",\n+    \"```\\n\",\n+    \"{\\n\",\n+    \"    \\\"name\\\" : \\\"fsl_bet\\\",\\n\",\n+    \"\\t\\\"tool-version\\\" : \\\"1.0.0\\\",\\n\",\n+    \"\\t\\\"description\\\" : \\\"Automated brain extraction tool for FSL\\\",\\n\",\n+    \"\\t\\\"command-line\\\" : \\\"bet [INPUT_FILE] [MASK] [FRACTIONAL_INTENSITY] [VERTICAL_GRADIENT] [CENTER_OF_GRAVITY] [OVERLAY_FLAG] [BINARY_MASK_FLAG] [APPROX_SKULL_FLAG] [NO_SEG_OUTPUT_FLAG] [VTK_VIEW_FLAG] [HEAD_RADIUS] [THRESHOLDING_FLAG] [ROBUST_ITERS_FLAG] [RES_OPTIC_CLEANUP_FLAG] [REDUCE_BIAS_FLAG] [SLICE_PADDING_FLAG] [MASK_WHOLE_SET_FLAG] [ADD_SURFACES_FLAG] [ADD_SURFACES_T2] [VERBOSE_FLAG] [DEBUG_FLAG]\\\",\\n\",\n+    \"\\t\\\"schema-version\\\" : \\\"0.2\\\",\\n\",\n+    \"    \\\"inputs\\\": TODO,\\n\",\n+    \"    \\\"output-files\\\": TODO,\\n\",\n+    \"    \\\"groups\\\": TODO\\n\",\n+    \"}\\n\",\n+    \"```\"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"### Step 3.2: Adding i/o parameters\\n\",\n+    \"\\n\",\n+    \"Inputs and outputs of many applications are complicated - outputs can be dependent upon input flags, flags can be mutually exclusive or require at least one option, etc. The way Boutiques handles this is with a detailed schema which consists of options for inputs and outputs, as well as optionally specifying groups of inputs which may add additional layers of input complexity.\\n\",\n+    \"\\n\",\n+    \"As you have surely noted, tools do only contain a single \\\"name\\\" or \\\"version\\\" being used, but may have many input and output parameters. This means that inputs, outputs, and groups, will be described as a list. Each element of these lists will be a dictionary following the input, output, or group schema, respectively. This means that our JSON actually looks more like this:\\n\",\n+    \"\\n\",\n+    \"```\\n\",\n+    \"{\\n\",\n+    \"    \\\"name\\\" : \\\"fsl_bet\\\",\\n\",\n+    \"\\t\\\"tool-version\\\" : \\\"1.0.0\\\",\\n\",\n+    \"\\t\\\"description\\\" : \\\"Automated brain extraction tool for FSL\\\",\\n\",\n+    \"\\t\\\"command-line\\\" : \\\"bet [INPUT_FILE] [MASK] [FRACTIONAL_INTENSITY] [VERTICAL_GRADIENT] [CENTER_OF_GRAVITY] [OVERLAY_FLAG] [BINARY_MASK_FLAG] [APPROX_SKULL_FLAG] [NO_SEG_OUTPUT_FLAG] [VTK_VIEW_FLAG] [HEAD_RADIUS] [THRESHOLDING_FLAG] [ROBUST_ITERS_FLAG] [RES_OPTIC_CLEANUP_FLAG] [REDUCE_BIAS_FLAG] [SLICE_PADDING_FLAG] [MASK_WHOLE_SET_FLAG] [ADD_SURFACES_FLAG] [ADD_SURFACES_T2] [VERBOSE_FLAG] [DEBUG_FLAG]\\\",\\n\",\n+    \"\\t\\\"schema-version\\\" : \\\"0.2\\\",\\n\",\n+    \"    \\\"inputs\\\": [\\n\",\n+    \"        {TODO},\\n\",\n+    \"        {TODO},\\n\",\n+    \"        ...\\n\",\n+    \"    ],\\n\",\n+    \"    \\\"output-files\\\": [\\n\",\n+    \"        {TODO},\\n\",\n+    \"        {TODO},\\n\",\n+    \"        ...\\n\",\n+    \"    ],\\n\",\n+    \"    \\\"groups\\\": [\\n\",\n+    \"        {TODO},\\n\",\n+    \"        {TODO},\\n\",\n+    \"        ...\\n\",\n+    \"    ]\\n\",\n+    \"}\\n\",\n+    \"```\\n\",\n+    \"\\n\",\n+    \"As the file is beginning to grow considerably in number of lines, we will no longer show you the full JSON at each step but will simply show you the dictionaries responsible for output, input, and group entries. \"\n+   ]\n+  },\n+  {\n+   \"cell_type\": \"markdown\",\n+   \"metadata\": {},\n+   \"source\": [\n+    \"#### Step 3.2.1: Specifying inputs\\n\",\n+    \"\\n\",\n+    \"The input schema contains several options, many of which can be ignored with the exception of `id`, `name`, and `type`. These keys can be seen enumerated in the [documentation](http://boutiques.github.io/docs). For BET, there are several input values we can choose to demonstrate this for you. We have chosen three with considerably different functionality and therefore schemas. In particular:\\n\",\n+    \"- `[INPUT_FILE]`\\n\",\n+    \"- `[FRACTIONAL_INTENSITY]`\\n\",\n+    \"- `[CENTER_OF_GRAVITY]`\\n\",\n+    \"\\n\",\n+    \"**`[INPUT_FILE]`**   The simplest of these in the `[INPUT_FILE]` which is a required parameter that simply expects a qualified path to a file. The dictionary entry is:\\n\",\n+    \"```\\n\",\n+    \"{\\n\",\n+    \"    \\\"id\\\" : \\\"infile\\\",\\n\",\n+    \"    \\\"name\\\" : \\\"Input file\\\",\\n\",\n+    \"    \\\"type\\\" : \\\"File\\\",\\n\",\n+    \"    \\\"description\\\" : \\\"Input image (e.g. img.nii.gz)\\\",\\n\",\n+    \"    \\\"optional\\\": false,\\n\",\n+    \"    \\\"command-line-key\\\" : \\\"[INPUT_FILE]\\\"\\n\",\n+    \"}\\n\",\n+    \"```\\n\",\n+    \"\\n\",\n+    \"**`[FRACTIONAL_INTENSITY]`**   This parameter documents an optional flag that can be passed to the executable. Along with the flag, when it is passed, is a floating point value that can range from 0 to 1. We are able to validate at the level of Boutiques whether or not a valid input is passed, so that jobs are not submitted to the scheduler which will error, but they get flagged upon validation of inputs. This dictionary is:\\n\",\n+    \"```\\n\",\n+    \"{\\n\",\n+    \"    \\\"id\\\" : \\\"fractional_intensity\\\",\\n\",\n+    \"    \\\"name\\\" : \\\"Fractional intensity threshold\\\",\\n\",\n+    \"    \\\"type\\\" : \\\"Number\\\",\\n\",\n+    \"    \\\"description\\\" : \\\"Fractional intensity threshold (0->1); default=0.5; smaller values give larger brain outline estimates\\\",\\n\",\n+    \"    \\\"command-line-flag\\\": \\\"-f\\\",\\n\",\n+    \"    \\\"optional\\\": true,\\n\",\n+    \"    \\\"command-line-key\\\" : \\\"[FRACTIONAL_INTENSITY]\\\",\\n\",","path":"examples/Getting Started with Boutiques.ipynb","position":229,"original_position":229,"commit_id":"5de73b2608cb8e5de5b92ac354ba2fbd3da1e83b","original_commit_id":"5de73b2608cb8e5de5b92ac354ba2fbd3da1e83b","user":{"login":"glatard","id":5174953,"avatar_url":"https://avatars.githubusercontent.com/u/5174953?v=3","gravatar_id":"","url":"https://api.github.com/users/glatard","html_url":"https://github.com/glatard","followers_url":"https://api.github.com/users/glatard/followers","following_url":"https://api.github.com/users/glatard/following{/other_user}","gists_url":"https://api.github.com/users/glatard/gists{/gist_id}","starred_url":"https://api.github.com/users/glatard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glatard/subscriptions","organizations_url":"https://api.github.com/users/glatard/orgs","repos_url":"https://api.github.com/users/glatard/repos","events_url":"https://api.github.com/users/glatard/events{/privacy}","received_events_url":"https://api.github.com/users/glatard/received_events","type":"User","site_admin":false},"body":"Now `value-key`","created_at":"2016-12-19T15:30:28Z","updated_at":"2016-12-19T15:30:34Z","html_url":"https://github.com/boutiques/boutiques/pull/97#discussion_r93053466","pull_request_url":"https://api.github.com/repos/boutiques/boutiques/pulls/97","_links":{"self":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/comments/93053466"},"html":{"href":"https://github.com/boutiques/boutiques/pull/97#discussion_r93053466"},"pull_request":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/97"}}},"pull_request":{"url":"https://api.github.com/repos/boutiques/boutiques/pulls/97","id":98492552,"html_url":"https://github.com/boutiques/boutiques/pull/97","diff_url":"https://github.com/boutiques/boutiques/pull/97.diff","patch_url":"https://github.com/boutiques/boutiques/pull/97.patch","issue_url":"https://api.github.com/repos/boutiques/boutiques/issues/97","number":97,"state":"open","locked":false,"title":"tutorial","user":{"login":"gkiar","id":4883288,"avatar_url":"https://avatars.githubusercontent.com/u/4883288?v=3","gravatar_id":"","url":"https://api.github.com/users/gkiar","html_url":"https://github.com/gkiar","followers_url":"https://api.github.com/users/gkiar/followers","following_url":"https://api.github.com/users/gkiar/following{/other_user}","gists_url":"https://api.github.com/users/gkiar/gists{/gist_id}","starred_url":"https://api.github.com/users/gkiar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkiar/subscriptions","organizations_url":"https://api.github.com/users/gkiar/orgs","repos_url":"https://api.github.com/users/gkiar/repos","events_url":"https://api.github.com/users/gkiar/events{/privacy}","received_events_url":"https://api.github.com/users/gkiar/received_events","type":"User","site_admin":false},"body":"Added an ipython notebook tutorial for getting started with boutqiues","created_at":"2016-12-18T23:47:08Z","updated_at":"2016-12-19T15:37:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"82495d5887ffe966a6b4fc4ab353e72c9a4e8323","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/boutiques/boutiques/pulls/97/commits","review_comments_url":"https://api.github.com/repos/boutiques/boutiques/pulls/97/comments","review_comment_url":"https://api.github.com/repos/boutiques/boutiques/pulls/comments{/number}","comments_url":"https://api.github.com/repos/boutiques/boutiques/issues/97/comments","statuses_url":"https://api.github.com/repos/boutiques/boutiques/statuses/5de73b2608cb8e5de5b92ac354ba2fbd3da1e83b","head":{"label":"gkiar:master","ref":"master","sha":"5de73b2608cb8e5de5b92ac354ba2fbd3da1e83b","user":{"login":"gkiar","id":4883288,"avatar_url":"https://avatars.githubusercontent.com/u/4883288?v=3","gravatar_id":"","url":"https://api.github.com/users/gkiar","html_url":"https://github.com/gkiar","followers_url":"https://api.github.com/users/gkiar/followers","following_url":"https://api.github.com/users/gkiar/following{/other_user}","gists_url":"https://api.github.com/users/gkiar/gists{/gist_id}","starred_url":"https://api.github.com/users/gkiar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkiar/subscriptions","organizations_url":"https://api.github.com/users/gkiar/orgs","repos_url":"https://api.github.com/users/gkiar/repos","events_url":"https://api.github.com/users/gkiar/events{/privacy}","received_events_url":"https://api.github.com/users/gkiar/received_events","type":"User","site_admin":false},"repo":{"id":76813362,"name":"boutiques","full_name":"gkiar/boutiques","owner":{"login":"gkiar","id":4883288,"avatar_url":"https://avatars.githubusercontent.com/u/4883288?v=3","gravatar_id":"","url":"https://api.github.com/users/gkiar","html_url":"https://github.com/gkiar","followers_url":"https://api.github.com/users/gkiar/followers","following_url":"https://api.github.com/users/gkiar/following{/other_user}","gists_url":"https://api.github.com/users/gkiar/gists{/gist_id}","starred_url":"https://api.github.com/users/gkiar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkiar/subscriptions","organizations_url":"https://api.github.com/users/gkiar/orgs","repos_url":"https://api.github.com/users/gkiar/repos","events_url":"https://api.github.com/users/gkiar/events{/privacy}","received_events_url":"https://api.github.com/users/gkiar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gkiar/boutiques","description":"JSON schema and tools for boutiques application descriptors.","fork":true,"url":"https://api.github.com/repos/gkiar/boutiques","forks_url":"https://api.github.com/repos/gkiar/boutiques/forks","keys_url":"https://api.github.com/repos/gkiar/boutiques/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gkiar/boutiques/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gkiar/boutiques/teams","hooks_url":"https://api.github.com/repos/gkiar/boutiques/hooks","issue_events_url":"https://api.github.com/repos/gkiar/boutiques/issues/events{/number}","events_url":"https://api.github.com/repos/gkiar/boutiques/events","assignees_url":"https://api.github.com/repos/gkiar/boutiques/assignees{/user}","branches_url":"https://api.github.com/repos/gkiar/boutiques/branches{/branch}","tags_url":"https://api.github.com/repos/gkiar/boutiques/tags","blobs_url":"https://api.github.com/repos/gkiar/boutiques/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gkiar/boutiques/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gkiar/boutiques/git/refs{/sha}","trees_url":"https://api.github.com/repos/gkiar/boutiques/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gkiar/boutiques/statuses/{sha}","languages_url":"https://api.github.com/repos/gkiar/boutiques/languages","stargazers_url":"https://api.github.com/repos/gkiar/boutiques/stargazers","contributors_url":"https://api.github.com/repos/gkiar/boutiques/contributors","subscribers_url":"https://api.github.com/repos/gkiar/boutiques/subscribers","subscription_url":"https://api.github.com/repos/gkiar/boutiques/subscription","commits_url":"https://api.github.com/repos/gkiar/boutiques/commits{/sha}","git_commits_url":"https://api.github.com/repos/gkiar/boutiques/git/commits{/sha}","comments_url":"https://api.github.com/repos/gkiar/boutiques/comments{/number}","issue_comment_url":"https://api.github.com/repos/gkiar/boutiques/issues/comments{/number}","contents_url":"https://api.github.com/repos/gkiar/boutiques/contents/{+path}","compare_url":"https://api.github.com/repos/gkiar/boutiques/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gkiar/boutiques/merges","archive_url":"https://api.github.com/repos/gkiar/boutiques/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gkiar/boutiques/downloads","issues_url":"https://api.github.com/repos/gkiar/boutiques/issues{/number}","pulls_url":"https://api.github.com/repos/gkiar/boutiques/pulls{/number}","milestones_url":"https://api.github.com/repos/gkiar/boutiques/milestones{/number}","notifications_url":"https://api.github.com/repos/gkiar/boutiques/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gkiar/boutiques/labels{/name}","releases_url":"https://api.github.com/repos/gkiar/boutiques/releases{/id}","deployments_url":"https://api.github.com/repos/gkiar/boutiques/deployments","created_at":"2016-12-18T23:42:42Z","updated_at":"2016-11-03T23:44:08Z","pushed_at":"2016-12-19T00:44:28Z","git_url":"git://github.com/gkiar/boutiques.git","ssh_url":"git@github.com:gkiar/boutiques.git","clone_url":"https://github.com/gkiar/boutiques.git","svn_url":"https://github.com/gkiar/boutiques","homepage":"","size":287,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"boutiques:master","ref":"master","sha":"6d8fbd9b377555f50c5f0dfbe2f439533129b540","user":{"login":"boutiques","id":11424909,"avatar_url":"https://avatars.githubusercontent.com/u/11424909?v=3","gravatar_id":"","url":"https://api.github.com/users/boutiques","html_url":"https://github.com/boutiques","followers_url":"https://api.github.com/users/boutiques/followers","following_url":"https://api.github.com/users/boutiques/following{/other_user}","gists_url":"https://api.github.com/users/boutiques/gists{/gist_id}","starred_url":"https://api.github.com/users/boutiques/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boutiques/subscriptions","organizations_url":"https://api.github.com/users/boutiques/orgs","repos_url":"https://api.github.com/users/boutiques/repos","events_url":"https://api.github.com/users/boutiques/events{/privacy}","received_events_url":"https://api.github.com/users/boutiques/received_events","type":"Organization","site_admin":false},"repo":{"id":32616811,"name":"boutiques","full_name":"boutiques/boutiques","owner":{"login":"boutiques","id":11424909,"avatar_url":"https://avatars.githubusercontent.com/u/11424909?v=3","gravatar_id":"","url":"https://api.github.com/users/boutiques","html_url":"https://github.com/boutiques","followers_url":"https://api.github.com/users/boutiques/followers","following_url":"https://api.github.com/users/boutiques/following{/other_user}","gists_url":"https://api.github.com/users/boutiques/gists{/gist_id}","starred_url":"https://api.github.com/users/boutiques/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boutiques/subscriptions","organizations_url":"https://api.github.com/users/boutiques/orgs","repos_url":"https://api.github.com/users/boutiques/repos","events_url":"https://api.github.com/users/boutiques/events{/privacy}","received_events_url":"https://api.github.com/users/boutiques/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/boutiques/boutiques","description":"JSON schema and tools for boutiques application descriptors.","fork":false,"url":"https://api.github.com/repos/boutiques/boutiques","forks_url":"https://api.github.com/repos/boutiques/boutiques/forks","keys_url":"https://api.github.com/repos/boutiques/boutiques/keys{/key_id}","collaborators_url":"https://api.github.com/repos/boutiques/boutiques/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/boutiques/boutiques/teams","hooks_url":"https://api.github.com/repos/boutiques/boutiques/hooks","issue_events_url":"https://api.github.com/repos/boutiques/boutiques/issues/events{/number}","events_url":"https://api.github.com/repos/boutiques/boutiques/events","assignees_url":"https://api.github.com/repos/boutiques/boutiques/assignees{/user}","branches_url":"https://api.github.com/repos/boutiques/boutiques/branches{/branch}","tags_url":"https://api.github.com/repos/boutiques/boutiques/tags","blobs_url":"https://api.github.com/repos/boutiques/boutiques/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/boutiques/boutiques/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/boutiques/boutiques/git/refs{/sha}","trees_url":"https://api.github.com/repos/boutiques/boutiques/git/trees{/sha}","statuses_url":"https://api.github.com/repos/boutiques/boutiques/statuses/{sha}","languages_url":"https://api.github.com/repos/boutiques/boutiques/languages","stargazers_url":"https://api.github.com/repos/boutiques/boutiques/stargazers","contributors_url":"https://api.github.com/repos/boutiques/boutiques/contributors","subscribers_url":"https://api.github.com/repos/boutiques/boutiques/subscribers","subscription_url":"https://api.github.com/repos/boutiques/boutiques/subscription","commits_url":"https://api.github.com/repos/boutiques/boutiques/commits{/sha}","git_commits_url":"https://api.github.com/repos/boutiques/boutiques/git/commits{/sha}","comments_url":"https://api.github.com/repos/boutiques/boutiques/comments{/number}","issue_comment_url":"https://api.github.com/repos/boutiques/boutiques/issues/comments{/number}","contents_url":"https://api.github.com/repos/boutiques/boutiques/contents/{+path}","compare_url":"https://api.github.com/repos/boutiques/boutiques/compare/{base}...{head}","merges_url":"https://api.github.com/repos/boutiques/boutiques/merges","archive_url":"https://api.github.com/repos/boutiques/boutiques/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/boutiques/boutiques/downloads","issues_url":"https://api.github.com/repos/boutiques/boutiques/issues{/number}","pulls_url":"https://api.github.com/repos/boutiques/boutiques/pulls{/number}","milestones_url":"https://api.github.com/repos/boutiques/boutiques/milestones{/number}","notifications_url":"https://api.github.com/repos/boutiques/boutiques/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/boutiques/boutiques/labels{/name}","releases_url":"https://api.github.com/repos/boutiques/boutiques/releases{/id}","deployments_url":"https://api.github.com/repos/boutiques/boutiques/deployments","created_at":"2015-03-21T02:23:09Z","updated_at":"2016-11-03T23:44:08Z","pushed_at":"2016-12-19T00:44:28Z","git_url":"git://github.com/boutiques/boutiques.git","ssh_url":"git@github.com:boutiques/boutiques.git","clone_url":"https://github.com/boutiques/boutiques.git","svn_url":"https://github.com/boutiques/boutiques","homepage":"","size":281,"stargazers_count":10,"watchers_count":10,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":28,"forks":5,"open_issues":28,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/97"},"html":{"href":"https://github.com/boutiques/boutiques/pull/97"},"issue":{"href":"https://api.github.com/repos/boutiques/boutiques/issues/97"},"comments":{"href":"https://api.github.com/repos/boutiques/boutiques/issues/97/comments"},"review_comments":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/97/comments"},"review_comment":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/boutiques/boutiques/pulls/97/commits"},"statuses":{"href":"https://api.github.com/repos/boutiques/boutiques/statuses/5de73b2608cb8e5de5b92ac354ba2fbd3da1e83b"}}}}
{"actor":{"display_login":"glatard"}}