{"action":"created","comment":{"url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/comments/50902667","id":50902667,"diff_hunk":"@@ -0,0 +1,573 @@\n+Galaxy Framework Dependencies\n+=============================\n+\n+Galaxy is a large Python application with a long list of `Python module\n+dependencies`_. As a result, the Galaxy developers have made significant effort\n+to provide these dependencies in as simple a method as possible. Prior to the\n+16.01 release, this was done by distributing dependencies in Python's old\n+standard packaging format (Egg) in a non-standard way. As of the 16.01 release,\n+Galaxy now distributes dependencies in Python's new standard packaging format\n+(Wheel), albeit still in a non-standard way. Thankfully, the new distribution\n+method is far more compatible with the standard package distribution tooling\n+(i.e. `pip`_) than the old method.\n+\n+.. _Python module dependencies: https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/dependencies/requirements.txt\n+.. _pip: https://pip.pypa.io/\n+.. _wheel: https://wheel.readthedocs.org/\n+\n+How it works\n+------------\n+\n+Upon startup (with ``run.sh``), the startup scripts will:\n+\n+1. Create a Python `virtualenv`_ in the directory ``.venv``.\n+\n+2. Unset the ``$PYTHONPATH`` environment variable (if set) as this can\n+   interfere with installing `Galaxy pip`_ and dependencies.\n+\n+3. Replace that virtualenv's pip with `Galaxy pip`_.\n+\n+4. Download and install wheels from the Galaxy project wheel server,\n+   `wheels.galaxyproject.org`_, using pip.\n+\n+5. Start Galaxy using ``.venv/bin/python``.\n+\n+.. _virtualenv: https://virtualenv.readthedocs.org/\n+.. _wheels.galaxyproject.org: https://wheels.galaxyproject.org/\n+\n+Options\n+-------\n+\n+A variety of options to ``run.sh`` are available to control the above behavior:\n+\n+- ``--skip-venv``: Do not create or use a virtualenv, and do not replace pip\n+  with Galaxy pip.\n+- ``--skip-wheels``: Do not install wheels.\n+- ``--no-create-venv``: Do not create a virtualenv, but use one if it exists at\n+  ``.venv`` or if ``$VIRTUAL_ENV`` is set (this variable is set by virtualenv's\n+  ``activate``)\n+- ``--replace-pip/--no-replace-pip``: Do/do not replace pip with Galaxy pip.\n+\n+Managing dependencies manually\n+------------------------------\n+\n+Create a virtualenv\n+^^^^^^^^^^^^^^^^^^^\n+\n+Using a `virtualenv`_ in ``.venv`` under the Galaxy source tree is not\n+required. More complicated Galaxy setups may choose to use a virtualenv\n+external to the Galaxy source tree, which can be done either by not using\n+``run.sh`` directly (an example of this can be found under the `Supervisor`_\n+section) or using the ``--no-create-venv`` option, explained in the `Options`_\n+section. It is also possible to force Galaxy to start without a virtualenv at\n+all, but you should not do this unless you know what you're doing.\n+\n+To manually create a virtualenv, you will first need to obtain virtualenv.\n+There are a variety of ways to do this:\n+\n+- ``pip install virtualenv``\n+- Install your Linux distribution's virtualenv package from the system package\n+  manager (e.g. ``apt-get install python-virtualenv``).\n+- Download the `virtualenv source from PyPI\n+  <https://pypi.python.org/pypi/virtualenv>`_, untar, and run the\n+  ``virtualenv.py`` script contained within as ``python virtualenv.py\n+  /path/to/galaxy/virtualenv``\n+\n+Once this is done, create a virtualenv. In our example, the virtualenv will\n+live in ``/srv/galaxy/venv`` and the Galaxy source code has been cloned to\n+``/srv/galaxy/server``.\n+\n+.. code-block:: console\n+    \n+    $ virtualenv /srv/galaxy/venv\n+    New python executable in /srv/galaxy/venv/bin/python\n+    Installing setuptools, pip, wheel...done.\n+    $ . /srv/galaxy/venv/bin/activate\n+    (venv)$\n+\n+Install dependencies\n+^^^^^^^^^^^^^^^^^^^^\n+\n+Normally, ``run.sh`` calls `common_startup.sh`_, which creates the virtualenv,\n+installs Galaxy pip, and installs dependencies. You can call this script\n+yourself to set up Galaxy pip and the dependencies without creating a\n+virtualenv using the ``--no-create-venv`` option:\n+\n+.. code-block:: console\n+    \n+    (venv)$ PYTHONPATH= sh /srv/galaxy/server/scripts/common_startup.sh --no-create-venv\n+    Ignoring indexes: https://pypi.python.org/simple\n+    Collecting pip\n+      Downloading https://wheels.galaxyproject.org/packages/pip-8.0.0+gx1-py2.py3-none-any.whl (1.2MB)\n+        100% |████████████████████████████████| 1.2MB 37.8MB/s \n+    Installing collected packages: pip\n+      Found existing installation: pip 7.1.2\n+        Uninstalling pip-7.1.2:\n+          Successfully uninstalled pip-7.1.2\n+    Successfully installed pip-8.0.0+gx1\n+    Collecting bx-python==0.7.3 (from -r requirements.txt (line 2))\n+      Downloading https://wheels.galaxyproject.org/packages/bx_python-0.7.3-cp27-cp27mu-linux_x86_64.whl (1.7MB)\n+        100% |████████████████████████████████| 1.7MB 25.4MB/s \n+\n+    ...\n+\n+    Collecting pysam==0.8.3+gx1 (from -r requirements.txt (line 69))\n+      Downloading https://wheels.galaxyproject.org/packages/pysam-0.8.3+gx1-cp27-cp27mu-linux_x86_64.whl (7.4MB)\n+        100% |████████████████████████████████| 7.4MB 15.1MB/s \n+    Installing collected packages: bx-python, MarkupSafe, PyYAML, SQLAlchemy,\n+      mercurial, numpy, pycrypto, six, Paste, PasteDeploy, docutils, wchartype,\n+      repoze.lru, Routes, WebOb, WebHelpers, Mako, pytz, Babel, Beaker,\n+      Markdown, Cheetah, requests, requests-toolbelt, boto, bioblend, amqp,\n+      anyjson, kombu, pbr, sqlparse, decorator, Tempita, sqlalchemy-migrate,\n+      Parsley, nose, SVGFig, ecdsa, paramiko, Fabric, Whoosh, pysam\n+    Successfully installed Babel-2.0 Beaker-1.7.0 Cheetah-2.4.4 Fabric-1.10.2\n+      Mako-1.0.2 Markdown-2.6.3 MarkupSafe-0.23 Parsley-1.3 Paste-2.0.2\n+      PasteDeploy-1.5.2 PyYAML-3.11 Routes-2.2 SQLAlchemy-1.0.8 SVGFig-1.1.6\n+      Tempita-0.5.3.dev0 WebHelpers-1.3 WebOb-1.4.1 Whoosh-2.4.1+gx1 amqp-1.4.8\n+      anyjson-0.3.3 bioblend-0.6.1 boto-2.38.0 bx-python-0.7.3 decorator-4.0.2\n+      docutils-0.12 ecdsa-0.13 kombu-3.0.30 mercurial-3.4.2 nose-1.3.7\n+      numpy-1.9.2 paramiko-1.15.2 pbr-1.8.0 pycrypto-2.6.1 pysam-0.8.3+gx1\n+      pytz-2015.4 repoze.lru-0.6 requests-2.8.1 requests-toolbelt-0.4.0\n+      six-1.9.0 sqlalchemy-migrate-0.10.0 sqlparse-0.1.16 wchartype-0.1\n+\n+**Warning:** If your ``$PYTHONPATH`` is set, it may interfere with the\n+dependency installation process (this will almost certainly be the case if you\n+use `virtualenv-burrito`_). Without ``--no-create-venv`` the ``$PYTHONPATH``\n+variable will be automatically unset, but we assume you know what you're doing\n+and may want it left intact if you are using ``--no-create-venv``. If you\n+encounter problems, try unsetting ``$PYTHONPATH`` as shown in the example\n+above.\n+\n+.. _common_startup.sh: https://github.com/galaxyproject/galaxy/blob/dev/scripts/common_startup.sh\n+.. _virtualenv-burrito: https://github.com/brainsik/virtualenv-burrito\n+\n+Installing unpinned dependencies\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Galaxy's dependencies can be installed either \"pinned\" (they will be installed\n+at exact versions specified for your Galaxy release) or \"unpinned\" (the latest\n+versions of all dependencies will be installed unless there are known\n+incompatibilities with new versions). By default, the release branch(es) of\n+Galaxy use pinned versions for three reasons:\n+\n+1. Using pinned versions insures that the prebuilt wheels on\n+   `wheels.galaxyproject.org`_ will be installed, and no compilation will be\n+   necesseary.\n+\n+2. Galaxy releases are tested with the pinned versions and this allows us to\n+   give as much assurance as possible that the pinned versions will work with\n+   the given Galaxy release (especially as time progresses and newer dependency\n+   versions are released while the Galaxy release receives fewer updates.\n+\n+3. Pinning furthers Galaxy's goal of reproducibility as differing dependency\n+   versions could result in non-reproducible behavior.\n+\n+Install dependencies using the `unpinned requirements file`_, and then instruct\n+Galaxy to start without attempting to fetch wheels:\n+\n+.. code-block:: console\n+\n+    (venv)$ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt\n+    (venv)$ deactivate\n+    $ sh run.sh --no-create-venv --skip-wheels\n+\n+Including ``--index-url=https://wheels.galaxyproject.org/simple/`` is important\n+- at least one current Galaxy dependency (SVGFig) is not available in PyPI but\n+is available (in both source and wheel form) on `wheels.galaxyproject.org`_,\n+and two (pysam, Whoosh) include modifications specific to Galaxy which are only\n+available on `wheels.galaxyproject.org`_.\n+\n+.. _unpinned requirements file: https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/dependencies/requirements.txt\n+\n+Wheel interaction with other software\n+-------------------------------------\n+\n+Galaxy job handlers\n+^^^^^^^^^^^^^^^^^^^\n+\n+All Galaxy jobs run a metadata detection step on the job outputs upon\n+completion of the tool. The metadata detection step requires many of Galaxy's\n+dependencies. Because of this, it's necessary to make sure the metadata\n+detection step runs in Galaxy's virtualenv. If you run a relatively simple\n+Galaxy setup (e.g. single process, or multiple Python Paste processes started\n+using ``run.sh``) then this is assured for you automatically. In more\n+complicated setups (using a cluster, supervisor, and/or the \"headless\" Galaxy\n+handler) it may be necessary to make sure the handlers know where the\n+virtualenv (or a virtualenv containing Galaxy's dependencies) can be found.\n+\n+If your jobs are failing due to Python ``ImportError`` exceptions, this is most\n+likely the problem. If your jobs run on a cluster, you can use the ``<env>``\n+tag in ``job_conf.xml`` to source the virtualenv. For example:\n+\n+.. code-block:: xml\n+\n+    <job_conf>\n+        <plugins>\n+            ...\n+        </plugins>\n+        <destinations default=\"cluster\">\n+            <destination id=\"cluster\" runner=\"drmaa\">\n+                <param id=\"nativeSpecification\"> ...cluster options... </param>\n+\n+                <env file=\"/galaxy/server/.venv/bin/activate\" />\n+\n+            </destination>\n+        </destinations>\n+    </job_conf>\n+\n+If your Galaxy server's virtualenv isn't available on the cluster you can\n+create one manually using the instructions under `Managing dependencies\n+manually`_.\n+\n+Pulsar\n+^^^^^^\n+\n+If using `Pulsar`_'s option to set metadata on the remote server, the same\n+conditions as with `Galaxy job handlers`_ apply. You should create a virtualenv\n+on the remote resource, install Galaxy's dependencies in to it, and set an\n+``<env>`` tag pointing to the virtualenv's ``activate`` as in the `Galaxy job\n+handlers`_ section. Instructions on how to create a virtualenv can be found\n+under the `Managing dependencies manually`_ section.\n+\n+.. _Pulsar: http://pulsar.readthedocs.org/\n+\n+Conda\n+^^^^^\n+\n+`Conda`_ and `virtualenv`_ are incompatible. However, Conda provides its own\n+environment separation functionality in the form of `Conda environments`_.\n+Starting Galaxy with Conda Python will cause ``--skip-venv`` to be implicitly\n+set, and the currently active Conda environment will be used to install Galaxy\n+framework dependencies instaead.  Be sure to create and activate a Conda\n+environment for Galaxy prior to installing packages and/or starting Galaxy.\n+\n+You may choose to install Galaxy's dependencies either at their `pinned`_\n+versions using pip or `unpinned`_ using a combination of conda and pip. When\n+running under Conda, pip is not replaced with Galaxy pip, so installing pinned\n+dependencies will require compilation, will be slower and requires having those\n+dependencies' build-time dependencies installed, but has benefits as explained\n+under the `Installing unpinned dependencies`_ section.  Installing unpinned\n+dependencies allows you to use Conda's binary packages for quick and easy\n+installation.\n+\n+Pinned dependencies will be installed by default when running ``run.sh``. To\n+install unpinned dependencies, the process is similar as to installing unpinned\n+versions without Conda, with the extra step of installing as much as possible\n+from Conda/Bioconda before installing from pip. Begin by adding the `Bioconda`_\n+channel as explained in the `Bioconda instructions`_ and then creating a new\n+Conda environment using the provided Conda requirements file. Then, install\n+remaining dependencies using pip and start Galaxy, instructing it to skip the\n+automatic fetching of pinned dependencies.\n+\n+.. code-block:: console\n+\n+    $ conda config --add channels r\n+    $ conda config --add channels bioconda\n+    $ conda create --name galaxy --file lib/galaxy/dependencies/conda-requirements.txt\n+    Fetching package metadata: ........\n+    Solving package specifications: ............................................\n+    Package plan for installation in environment /home/nate/conda/envs/galaxy:\n+\n+    The following packages will be downloaded:\n+\n+        package                    |            build\n+        ---------------------------|-----------------\n+        boto-2.38.0                |           py27_0         1.3 MB\n+        cheetah-2.4.4              |           py27_0         267 KB\n+        decorator-4.0.6            |           py27_0          11 KB\n+        docutils-0.12              |           py27_0         636 KB\n+        ecdsa-0.11                 |           py27_0          73 KB\n+        markupsafe-0.23            |           py27_0          30 KB\n+        mercurial-3.4.2            |           py27_0         2.9 MB\n+        nose-1.3.7                 |           py27_0         194 KB\n+        paste-1.7.5.1              |           py27_0         490 KB\n+        pytz-2015.7                |           py27_0         174 KB\n+        repoze.lru-0.6             |           py27_0          15 KB\n+        requests-2.9.1             |           py27_0         605 KB\n+        six-1.10.0                 |           py27_0          16 KB\n+        sqlalchemy-1.0.11          |           py27_0         1.3 MB\n+        sqlparse-0.1.18            |           py27_0          51 KB\n+        webob-1.4.1                |           py27_0         108 KB\n+        babel-2.1.1                |           py27_0         2.3 MB\n+        bx-python-0.7.3            |      np110py27_1         2.1 MB\n+        mako-1.0.3                 |           py27_0         105 KB\n+        paramiko-1.15.2            |           py27_0         197 KB\n+        pastedeploy-1.5.2          |           py27_1          23 KB\n+        requests-toolbelt-0.5.0    |           py27_0          83 KB\n+        routes-2.2                 |           py27_0          48 KB\n+        bioblend-0.7.0             |           py27_0         181 KB\n+        fabric-1.10.2              |           py27_0         108 KB\n+        ------------------------------------------------------------\n+                                               Total:        13.2 MB\n+\n+    The following NEW packages will be INSTALLED:\n+\n+        babel:             2.1.1-py27_0     \n+        bioblend:          0.7.0-py27_0     \n+        boto:              2.38.0-py27_0    \n+        bx-python:         0.7.3-np110py27_1\n+        cheetah:           2.4.4-py27_0     \n+        decorator:         4.0.6-py27_0     \n+        docutils:          0.12-py27_0      \n+        ecdsa:             0.11-py27_0      \n+        fabric:            1.10.2-py27_0    \n+        libgfortran:       1.0-0            \n+        mako:              1.0.3-py27_0     \n+        markupsafe:        0.23-py27_0      \n+        mercurial:         3.4.2-py27_0     \n+        nose:              1.3.7-py27_0     \n+        numpy:             1.10.2-py27_0    \n+        openblas:          0.2.14-3         \n+        openssl:           1.0.2e-0         \n+        paramiko:          1.15.2-py27_0    \n+        paste:             1.7.5.1-py27_0   \n+        pastedeploy:       1.5.2-py27_1     \n+        pip:               7.1.2-py27_0     \n+        pycrypto:          2.6.1-py27_0     \n+        python:            2.7.11-0         \n+        pytz:              2015.7-py27_0    \n+        pyyaml:            3.11-py27_1      \n+        readline:          6.2-2            \n+        repoze.lru:        0.6-py27_0       \n+        requests:          2.9.1-py27_0     \n+        requests-toolbelt: 0.5.0-py27_0     \n+        routes:            2.2-py27_0       \n+        setuptools:        19.2-py27_0      \n+        six:               1.10.0-py27_0    \n+        sqlalchemy:        1.0.11-py27_0    \n+        sqlite:            3.9.2-0          \n+        sqlparse:          0.1.18-py27_0    \n+        tk:                8.5.18-0         \n+        webob:             1.4.1-py27_0     \n+        wheel:             0.26.0-py27_1    \n+        yaml:              0.1.6-0          \n+        zlib:              1.2.8-0          \n+\n+    Proceed ([y]/n)? \n+\n+    Fetching packages ...\n+    boto-2.38.0-py 100% |############################################| Time: 0:00:00   3.27 MB/s\n+    cheetah-2.4.4- 100% |############################################| Time: 0:00:00   1.65 MB/s\n+    decorator-4.0. 100% |############################################| Time: 0:00:00  20.38 MB/s\n+    docutils-0.12- 100% |############################################| Time: 0:00:00   2.21 MB/s\n+    ecdsa-0.11-py2 100% |############################################| Time: 0:00:00 762.58 kB/s\n+    markupsafe-0.2 100% |############################################| Time: 0:00:00 931.23 kB/s\n+    mercurial-3.4. 100% |############################################| Time: 0:00:00   5.36 MB/s\n+    nose-1.3.7-py2 100% |############################################| Time: 0:00:00   1.12 MB/s\n+    paste-1.7.5.1- 100% |############################################| Time: 0:00:00   1.91 MB/s\n+    pytz-2015.7-py 100% |############################################| Time: 0:00:00   1.08 MB/s\n+    repoze.lru-0.6 100% |############################################| Time: 0:00:00 465.26 kB/s\n+    requests-2.9.1 100% |############################################| Time: 0:00:00   2.28 MB/s\n+    six-1.10.0-py2 100% |############################################| Time: 0:00:00 477.04 kB/s\n+    sqlalchemy-1.0 100% |############################################| Time: 0:00:00   4.25 MB/s\n+    sqlparse-0.1.1 100% |############################################| Time: 0:00:00 774.57 kB/s\n+    webob-1.4.1-py 100% |############################################| Time: 0:00:00 819.13 kB/s\n+    babel-2.1.1-py 100% |############################################| Time: 0:00:00   5.53 MB/s\n+    bx-python-0.7. 100% |############################################| Time: 0:00:00   5.11 MB/s\n+    mako-1.0.3-py2 100% |############################################| Time: 0:00:00 813.04 kB/s\n+    paramiko-1.15. 100% |############################################| Time: 0:00:00   1.23 MB/s\n+    pastedeploy-1. 100% |############################################| Time: 0:00:00 721.20 kB/s\n+    requests-toolb 100% |############################################| Time: 0:00:00 856.06 kB/s\n+    routes-2.2-py2 100% |############################################| Time: 0:00:00 666.70 kB/s\n+    bioblend-0.7.0 100% |############################################| Time: 0:00:00   1.15 MB/s\n+    fabric-1.10.2- 100% |############################################| Time: 0:00:00 843.81 kB/s\n+    Extracting packages ...\n+    [      COMPLETE      ]|###############################################################| 100%\n+    Linking packages ...\n+    [      COMPLETE      ]|###############################################################| 100%\n+    #\n+    # To activate this environment, use:\n+    # $ source activate galaxy\n+    #\n+    # To deactivate this environment, use:\n+    # $ source deactivate\n+    #\n+    $ source activate galaxy\n+    discarding /home/nate/conda/bin from PATH\n+    prepending /home/nate/conda/envs/galaxy/bin to PATH\n+    $ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt","path":"doc/source/admin/framework_dependencies.rst","position":388,"original_position":388,"commit_id":"dc801dc1f6097b283e01c784d09261b3c4ee21e5","original_commit_id":"dc801dc1f6097b283e01c784d09261b3c4ee21e5","user":{"login":"natefoo","id":286969,"avatar_url":"https://avatars.githubusercontent.com/u/286969?v=3","gravatar_id":"","url":"https://api.github.com/users/natefoo","html_url":"https://github.com/natefoo","followers_url":"https://api.github.com/users/natefoo/followers","following_url":"https://api.github.com/users/natefoo/following{/other_user}","gists_url":"https://api.github.com/users/natefoo/gists{/gist_id}","starred_url":"https://api.github.com/users/natefoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/natefoo/subscriptions","organizations_url":"https://api.github.com/users/natefoo/orgs","repos_url":"https://api.github.com/users/natefoo/repos","events_url":"https://api.github.com/users/natefoo/events{/privacy}","received_events_url":"https://api.github.com/users/natefoo/received_events","type":"User","site_admin":false},"body":"But thanks for the reminder, the priority of that task has just increased. =)","created_at":"2016-01-26T21:27:18Z","updated_at":"2016-01-26T21:27:18Z","html_url":"https://github.com/galaxyproject/galaxy/pull/1589#discussion_r50902667","pull_request_url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589","_links":{"self":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/comments/50902667"},"html":{"href":"https://github.com/galaxyproject/galaxy/pull/1589#discussion_r50902667"},"pull_request":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589"}}},"pull_request":{"url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589","id":57274059,"html_url":"https://github.com/galaxyproject/galaxy/pull/1589","diff_url":"https://github.com/galaxyproject/galaxy/pull/1589.diff","patch_url":"https://github.com/galaxyproject/galaxy/pull/1589.patch","issue_url":"https://api.github.com/repos/galaxyproject/galaxy/issues/1589","number":1589,"state":"open","locked":false,"title":"[16.01] Add admin documentation for framework dependencies (wheels)","user":{"login":"natefoo","id":286969,"avatar_url":"https://avatars.githubusercontent.com/u/286969?v=3","gravatar_id":"","url":"https://api.github.com/users/natefoo","html_url":"https://github.com/natefoo","followers_url":"https://api.github.com/users/natefoo/followers","following_url":"https://api.github.com/users/natefoo/following{/other_user}","gists_url":"https://api.github.com/users/natefoo/gists{/gist_id}","starred_url":"https://api.github.com/users/natefoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/natefoo/subscriptions","organizations_url":"https://api.github.com/users/natefoo/orgs","repos_url":"https://api.github.com/users/natefoo/repos","events_url":"https://api.github.com/users/natefoo/events{/privacy}","received_events_url":"https://api.github.com/users/natefoo/received_events","type":"User","site_admin":false},"body":"We should probably highlight the **Galaxy job handlers** section in the release notes since some Galaxy servers will need to do this for job handling to continue working correctly.\r\n\r\nAs I got deeper into writing this I lost focus a bit - if there are things that I should cover and I didn't, please let me know. Likewise, if I went too into depth on anything, please point it out.","created_at":"2016-01-26T21:20:24Z","updated_at":"2016-01-26T21:27:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a16178b496f99cec19fcab7bd9fb96a46d3d8e7e","assignee":null,"milestone":{"url":"https://api.github.com/repos/galaxyproject/galaxy/milestones/1","html_url":"https://github.com/galaxyproject/galaxy/milestones/16.01","labels_url":"https://api.github.com/repos/galaxyproject/galaxy/milestones/1/labels","id":1340720,"number":1,"title":"16.01","description":"Tentative freeze date for 16.01","creator":{"login":"erasche","id":458683,"avatar_url":"https://avatars.githubusercontent.com/u/458683?v=3","gravatar_id":"","url":"https://api.github.com/users/erasche","html_url":"https://github.com/erasche","followers_url":"https://api.github.com/users/erasche/followers","following_url":"https://api.github.com/users/erasche/following{/other_user}","gists_url":"https://api.github.com/users/erasche/gists{/gist_id}","starred_url":"https://api.github.com/users/erasche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erasche/subscriptions","organizations_url":"https://api.github.com/users/erasche/orgs","repos_url":"https://api.github.com/users/erasche/repos","events_url":"https://api.github.com/users/erasche/events{/privacy}","received_events_url":"https://api.github.com/users/erasche/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":323,"state":"open","created_at":"2015-10-06T16:36:51Z","updated_at":"2016-01-26T21:20:55Z","due_on":"2016-01-05T06:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589/commits","review_comments_url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589/comments","review_comment_url":"https://api.github.com/repos/galaxyproject/galaxy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/galaxyproject/galaxy/issues/1589/comments","statuses_url":"https://api.github.com/repos/galaxyproject/galaxy/statuses/dc801dc1f6097b283e01c784d09261b3c4ee21e5","head":{"label":"natefoo:admin-docs","ref":"admin-docs","sha":"dc801dc1f6097b283e01c784d09261b3c4ee21e5","user":{"login":"natefoo","id":286969,"avatar_url":"https://avatars.githubusercontent.com/u/286969?v=3","gravatar_id":"","url":"https://api.github.com/users/natefoo","html_url":"https://github.com/natefoo","followers_url":"https://api.github.com/users/natefoo/followers","following_url":"https://api.github.com/users/natefoo/following{/other_user}","gists_url":"https://api.github.com/users/natefoo/gists{/gist_id}","starred_url":"https://api.github.com/users/natefoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/natefoo/subscriptions","organizations_url":"https://api.github.com/users/natefoo/orgs","repos_url":"https://api.github.com/users/natefoo/repos","events_url":"https://api.github.com/users/natefoo/events{/privacy}","received_events_url":"https://api.github.com/users/natefoo/received_events","type":"User","site_admin":false},"repo":{"id":31212836,"name":"galaxy","full_name":"natefoo/galaxy","owner":{"login":"natefoo","id":286969,"avatar_url":"https://avatars.githubusercontent.com/u/286969?v=3","gravatar_id":"","url":"https://api.github.com/users/natefoo","html_url":"https://github.com/natefoo","followers_url":"https://api.github.com/users/natefoo/followers","following_url":"https://api.github.com/users/natefoo/following{/other_user}","gists_url":"https://api.github.com/users/natefoo/gists{/gist_id}","starred_url":"https://api.github.com/users/natefoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/natefoo/subscriptions","organizations_url":"https://api.github.com/users/natefoo/orgs","repos_url":"https://api.github.com/users/natefoo/repos","events_url":"https://api.github.com/users/natefoo/events{/privacy}","received_events_url":"https://api.github.com/users/natefoo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/natefoo/galaxy","description":"Galaxy","fork":true,"url":"https://api.github.com/repos/natefoo/galaxy","forks_url":"https://api.github.com/repos/natefoo/galaxy/forks","keys_url":"https://api.github.com/repos/natefoo/galaxy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/natefoo/galaxy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/natefoo/galaxy/teams","hooks_url":"https://api.github.com/repos/natefoo/galaxy/hooks","issue_events_url":"https://api.github.com/repos/natefoo/galaxy/issues/events{/number}","events_url":"https://api.github.com/repos/natefoo/galaxy/events","assignees_url":"https://api.github.com/repos/natefoo/galaxy/assignees{/user}","branches_url":"https://api.github.com/repos/natefoo/galaxy/branches{/branch}","tags_url":"https://api.github.com/repos/natefoo/galaxy/tags","blobs_url":"https://api.github.com/repos/natefoo/galaxy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/natefoo/galaxy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/natefoo/galaxy/git/refs{/sha}","trees_url":"https://api.github.com/repos/natefoo/galaxy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/natefoo/galaxy/statuses/{sha}","languages_url":"https://api.github.com/repos/natefoo/galaxy/languages","stargazers_url":"https://api.github.com/repos/natefoo/galaxy/stargazers","contributors_url":"https://api.github.com/repos/natefoo/galaxy/contributors","subscribers_url":"https://api.github.com/repos/natefoo/galaxy/subscribers","subscription_url":"https://api.github.com/repos/natefoo/galaxy/subscription","commits_url":"https://api.github.com/repos/natefoo/galaxy/commits{/sha}","git_commits_url":"https://api.github.com/repos/natefoo/galaxy/git/commits{/sha}","comments_url":"https://api.github.com/repos/natefoo/galaxy/comments{/number}","issue_comment_url":"https://api.github.com/repos/natefoo/galaxy/issues/comments{/number}","contents_url":"https://api.github.com/repos/natefoo/galaxy/contents/{+path}","compare_url":"https://api.github.com/repos/natefoo/galaxy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/natefoo/galaxy/merges","archive_url":"https://api.github.com/repos/natefoo/galaxy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/natefoo/galaxy/downloads","issues_url":"https://api.github.com/repos/natefoo/galaxy/issues{/number}","pulls_url":"https://api.github.com/repos/natefoo/galaxy/pulls{/number}","milestones_url":"https://api.github.com/repos/natefoo/galaxy/milestones{/number}","notifications_url":"https://api.github.com/repos/natefoo/galaxy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/natefoo/galaxy/labels{/name}","releases_url":"https://api.github.com/repos/natefoo/galaxy/releases{/id}","deployments_url":"https://api.github.com/repos/natefoo/galaxy/deployments","created_at":"2015-02-23T15:01:46Z","updated_at":"2016-01-14T21:09:49Z","pushed_at":"2016-01-26T21:18:11Z","git_url":"git://github.com/natefoo/galaxy.git","ssh_url":"git@github.com:natefoo/galaxy.git","clone_url":"https://github.com/natefoo/galaxy.git","svn_url":"https://github.com/natefoo/galaxy","homepage":"http://galaxyproject.org","size":84273,"stargazers_count":0,"watchers_count":0,"language":"Python","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":"dev"}},"base":{"label":"galaxyproject:release_16.01","ref":"release_16.01","sha":"c117d400506e605c41e3837b83d79593733c5af0","user":{"login":"galaxyproject","id":7937847,"avatar_url":"https://avatars.githubusercontent.com/u/7937847?v=3","gravatar_id":"","url":"https://api.github.com/users/galaxyproject","html_url":"https://github.com/galaxyproject","followers_url":"https://api.github.com/users/galaxyproject/followers","following_url":"https://api.github.com/users/galaxyproject/following{/other_user}","gists_url":"https://api.github.com/users/galaxyproject/gists{/gist_id}","starred_url":"https://api.github.com/users/galaxyproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/galaxyproject/subscriptions","organizations_url":"https://api.github.com/users/galaxyproject/orgs","repos_url":"https://api.github.com/users/galaxyproject/repos","events_url":"https://api.github.com/users/galaxyproject/events{/privacy}","received_events_url":"https://api.github.com/users/galaxyproject/received_events","type":"Organization","site_admin":false},"repo":{"id":31211061,"name":"galaxy","full_name":"galaxyproject/galaxy","owner":{"login":"galaxyproject","id":7937847,"avatar_url":"https://avatars.githubusercontent.com/u/7937847?v=3","gravatar_id":"","url":"https://api.github.com/users/galaxyproject","html_url":"https://github.com/galaxyproject","followers_url":"https://api.github.com/users/galaxyproject/followers","following_url":"https://api.github.com/users/galaxyproject/following{/other_user}","gists_url":"https://api.github.com/users/galaxyproject/gists{/gist_id}","starred_url":"https://api.github.com/users/galaxyproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/galaxyproject/subscriptions","organizations_url":"https://api.github.com/users/galaxyproject/orgs","repos_url":"https://api.github.com/users/galaxyproject/repos","events_url":"https://api.github.com/users/galaxyproject/events{/privacy}","received_events_url":"https://api.github.com/users/galaxyproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/galaxyproject/galaxy","description":"Data intensive science for everyone.","fork":false,"url":"https://api.github.com/repos/galaxyproject/galaxy","forks_url":"https://api.github.com/repos/galaxyproject/galaxy/forks","keys_url":"https://api.github.com/repos/galaxyproject/galaxy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/galaxyproject/galaxy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/galaxyproject/galaxy/teams","hooks_url":"https://api.github.com/repos/galaxyproject/galaxy/hooks","issue_events_url":"https://api.github.com/repos/galaxyproject/galaxy/issues/events{/number}","events_url":"https://api.github.com/repos/galaxyproject/galaxy/events","assignees_url":"https://api.github.com/repos/galaxyproject/galaxy/assignees{/user}","branches_url":"https://api.github.com/repos/galaxyproject/galaxy/branches{/branch}","tags_url":"https://api.github.com/repos/galaxyproject/galaxy/tags","blobs_url":"https://api.github.com/repos/galaxyproject/galaxy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/galaxyproject/galaxy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/galaxyproject/galaxy/git/refs{/sha}","trees_url":"https://api.github.com/repos/galaxyproject/galaxy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/galaxyproject/galaxy/statuses/{sha}","languages_url":"https://api.github.com/repos/galaxyproject/galaxy/languages","stargazers_url":"https://api.github.com/repos/galaxyproject/galaxy/stargazers","contributors_url":"https://api.github.com/repos/galaxyproject/galaxy/contributors","subscribers_url":"https://api.github.com/repos/galaxyproject/galaxy/subscribers","subscription_url":"https://api.github.com/repos/galaxyproject/galaxy/subscription","commits_url":"https://api.github.com/repos/galaxyproject/galaxy/commits{/sha}","git_commits_url":"https://api.github.com/repos/galaxyproject/galaxy/git/commits{/sha}","comments_url":"https://api.github.com/repos/galaxyproject/galaxy/comments{/number}","issue_comment_url":"https://api.github.com/repos/galaxyproject/galaxy/issues/comments{/number}","contents_url":"https://api.github.com/repos/galaxyproject/galaxy/contents/{+path}","compare_url":"https://api.github.com/repos/galaxyproject/galaxy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/galaxyproject/galaxy/merges","archive_url":"https://api.github.com/repos/galaxyproject/galaxy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/galaxyproject/galaxy/downloads","issues_url":"https://api.github.com/repos/galaxyproject/galaxy/issues{/number}","pulls_url":"https://api.github.com/repos/galaxyproject/galaxy/pulls{/number}","milestones_url":"https://api.github.com/repos/galaxyproject/galaxy/milestones{/number}","notifications_url":"https://api.github.com/repos/galaxyproject/galaxy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/galaxyproject/galaxy/labels{/name}","releases_url":"https://api.github.com/repos/galaxyproject/galaxy/releases{/id}","deployments_url":"https://api.github.com/repos/galaxyproject/galaxy/deployments","created_at":"2015-02-23T14:18:06Z","updated_at":"2016-01-18T14:00:06Z","pushed_at":"2016-01-26T21:24:43Z","git_url":"git://github.com/galaxyproject/galaxy.git","ssh_url":"git@github.com:galaxyproject/galaxy.git","clone_url":"https://github.com/galaxyproject/galaxy.git","svn_url":"https://github.com/galaxyproject/galaxy","homepage":"https://galaxyproject.org/","size":109175,"stargazers_count":105,"watchers_count":105,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":159,"mirror_url":null,"open_issues_count":261,"forks":159,"open_issues":261,"watchers":105,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589"},"html":{"href":"https://github.com/galaxyproject/galaxy/pull/1589"},"issue":{"href":"https://api.github.com/repos/galaxyproject/galaxy/issues/1589"},"comments":{"href":"https://api.github.com/repos/galaxyproject/galaxy/issues/1589/comments"},"review_comments":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589/comments"},"review_comment":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/galaxyproject/galaxy/pulls/1589/commits"},"statuses":{"href":"https://api.github.com/repos/galaxyproject/galaxy/statuses/dc801dc1f6097b283e01c784d09261b3c4ee21e5"}}}}