starforge 0.3.6
Build Galaxy things in virtualized environments
License: MIT
Keywords: starforge galaxy docker qemu

.. figure:: https://raw.githubusercontent.com/galaxyproject/starforge/master/docs/starforge_logo.png
   :alt: Starforge Logo
   :align: center
   :figwidth: 100%
   :target: https://github.com/galaxyproject/Starforge

Starforge: Build `Galaxy`_ things in virtualization

Things you can do with Starforge:

- Build `Galaxy Tool Shed`_ dependencies
- Build `Python Wheels`_ (e.g. for the `Galaxy Wheels Server`_)
- Rebuild Debian or Ubuntu source packages (for modifications)

These things will be built in Docker. Additionally, wheels can be built in
QEMU/KVM virtualized systems.

Documentation can be found at `starforge.readthedocs.org
<http://starforge.readthedocs.org/>`_

Starforge is maintained by the `Galaxy`_ Project and community. A `list of
contributors <https://github.com/galaxyproject/starforge/graphs/contributors>`_
to the project can be found on GitHub.

Quick Start
-----------

For all types of builds, begin by `installing Docker`_.

----------------------
Tool Shed Dependencies
----------------------

There are two scripts that can be used, depending on the package recipes
available:

.. sourcecode:: console

    $ ./build.sh <package>
    $ python build.py <package> --version 1.0

``build.sh`` is the older format, and simply uses a single
``<package>build.sh`` file, like Atlas. `build.py` is the newer format, and
uses yaml metadata in ``<package>/<version>/build.yml``.

The base image for Galaxy packages is Debian Squeeze. This will hopefully
produce binaries usable on Galaxy's targeted platforms (at time of writing:
CentOS 6+, Debian 6.0+, Ubuntu 12.04+).

.. sourcecode:: console

    $ ./build galaxy <package>
    $ python build.py <package>

To build packages against a different OS, you can use the `--image` flag, e.g.:

.. sourcecode:: console

    $ ./build <dist>[:tag] <package>
    $ python build.py <package> --image <dist>[:tag]

e.g.

.. sourcecode:: console

    $ ./build ubuntu:trusty nginx
    $ python build.py nginx --image debian:squeeze

**Building all the things:**

There's a separate ``build-all.sh`` which allows you to build all of the
packages using their preferred build mechanism

Notes on the two build scripts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**build.py**

The ``<version>`` option is optional, and defaults to the string ``'default'``,
which is useful for recipes that don't have version specific changes (E.g.
bcftools 1.0 builds identically to 1.2)

-------------
Python Wheels
-------------

Starforge can build both pure Python and C-extension Python modules into wheels
for Linux under Docker and for Mac OS X under QEMU/KVM. To do this, you'll want
to install Starforge (preferably in a Python virtualenv) using ``pip install
starforge`` (to install from PyPI_) or ``python setup.py install`` to install
from the source.

Docker (and QEMU) images to use are specified in `starforge/config/default.yml
<https://github.com/galaxyproject/starforge/blob/master/starforge/config/default.yml>`_.
To modify this file, copy it to
``$XDG_CONFIG_HOME/galaxy-starforge/config.yml`` (``$XDG_CONFIG_HOME`` is, by
default ``~/.config``). The sample file `wheels/build/wheels.yml`_ is used to
determine what wheels can be built and their rules for building. To use this
file, use the ``--wheels-config`` argument to ``starforge wheel`` or copy
``wheels.yml`` to ``$XDG_CONFIG_HOME/galaxy-starforge/wheels.yml``.

Wheels can be built using ``starforge wheel <package>``, e.g.:

.. sourcecode:: console

    $ starforge wheel pycrypto
    $ starforge wheel --no-qemu pysam   # only build on docker

See the output of ``starforge --help`` for help using the Starforge command-line interface.

Pull Request wheel builder
^^^^^^^^^^^^^^^^^^^^^^^^^^

Pull requests to the `Starforge`_ repository on Github that modify
`wheels/build/wheels.yml`_ can automatically be built for all specified
platforms on a dedicated Starforge build server by the `Galaxy Jenkins`_
service. To utilize, modify wheels.yml as appropriate and create a pull
request. Any member of the `Galaxy Committers`_ group can then authorize
Jenkins to initiate the build. If it fails, you can modify the pull request and
further builds can be triggered.

Notes on images
^^^^^^^^^^^^^^^

**Linux**

Images used to build wheels are uploaded to the `Starforge Docker Hub`_ repo
and will be pulled as necessary. Typically you will only use the
`manylinux1-wheel <https://hub.docker.com/r/starforge/manylinux1-wheel/>`_ and
`manylinux1-32-wheel
<https://hub.docker.com/r/starforge/manylinux1-32-wheel/>`_ images, which are
`manylinux <https://github.com/pypa/manylinux>`_ CentOS 5-based images that
will usually produce wheels usable on all Galaxy-supported platforms.

You can also produce "platform-specific" wheels by using the ``full-wheel``
imageset. This is useful if you want to link to distribution-specific system
versions of non-standard libraries without bundling them in to the wheel.

**Mac OS X**

Mac OS X images are not provided due to legal reasons. Consult the `osx`
documentation for details.

.. _Galaxy: http://galaxyproject.org/
.. _Galaxy Tool Shed: http://toolshed.g2.bx.psu.edu/
.. _Python Wheels: http://pythonwheels.com/
.. _Galaxy Wheels Server: http://wheels.galaxyproject.org/
.. _installing Docker: https://docs.docker.com/engine/installation/
.. _PyPI: https://pypi.python.org/
.. _Starforge Docker Hub: https://hub.docker.com/r/starforge/
.. _wheels/build/wheels.yml:
.. _Galaxy Jenkins: http://jenkins.galaxyproject.org
.. _Starforge: https://github.com/galaxyproject/starforge/
.. _Galaxy Committers: https://github.com/galaxyproject/galaxy/blob/dev/doc/source/project/organization.rst


.. :changelog:

History
-------

.. to_doc

---------------------
0.4.0 (2018-04-25)
---------------------

---------------------
0.3.6 (2018-04-25)
---------------------

- Python 3-compatible ``setup.py`` wrapping. `Pull Request 171`_    
- Fix for pip 10. `c516bae`_

---------------------
0.3.5 (2017-10-01)
---------------------

- Support xz/lzma tarballs for wheel builds `Pull Request 166`_

---------------------
0.3.4 (2017-09-12)
---------------------

- Native support for auditwheel and delocate. (#160)

---------------------
0.3.3 (2017-09-08)
---------------------

- Do not build sdists with the `wheel` subcommand by default. (#155)

---------------------
0.3.2 (2017-09-08)
---------------------

- Fix a bug where the wrong working directory was set when building wheels with
  multiple sources. (#154)

---------------------
0.3.1 (2017-09-08)
---------------------

- Fix a bug with ``sudo`` and ``brew install`` on macOS. (#151).
- Short circuit platform caching on OS X (#150).

---------------------
0.3 (2017-01-10)
---------------------

- Drop the dependency on the "Galaxy" wheel fork, which makes installation much
  easier. "Platform-specific" wheels can still be built.
- When building Docker images, install Starforge from the local source instead
  of installing from PyPI or Github.

---------------------
0.2.1 (2016-05-27)
---------------------

- Do a case-insensitive comparison for cached tarball names (uWSGI's project
  name is ``uWSGI`` but its source tarballs are named ``uwsgi-*``). 7672547_

---------------------
0.2 (2016-05-19)
---------------------

- Added support for building manylinux1 wheels. 0dbecb7_

---------------------
0.1.1 (2016-01-20)
---------------------

- Only running prebuild during wheel builds (and not sdists) was too naive,
  since this prevents changing the version number of sdists in the prebuild
  action (a common use of the prebuild action). Instead, allow for separate
  ``wheel``, ``sdist``, and ``all`` prebuild actions.  Reverts the behavior of
  9008c57_. `Issue 64`_
- Install Galaxy pip from Github instead of wheels.galaxyproject.org so that
  Starforge images can be built with new versions of Galaxy pip before they are
  released. 97b4ba4_

---------------------
0.1 (2016-01-12)
---------------------

- Reimplemented the wheel building scripts as a library and ``starforge``
  command line
- Wrote some documentation

---------------------
Older than 0.1
---------------------

Originally Galaxy docker-build and later renamed Starforge, but as a collection
of disjointed shell scripts, Python, and YAML used to build Galaxy Tool Shed
dependencies, as well as rebuilding Debian and Ubuntu source packages with
modifications (which itself came from a project created to do the same via
Vagrant and Ansible called vadebuildsible).

.. _Galaxy: http://galaxyproject.org/

.. github_links
.. _c516bae: https://github.com/galaxyproject/starforge/commit/c516bae4052d326034c07d10ca0a639e7c393830
.. _Pull Request 171: https://github.com/galaxyproject/starforge/pull/171
.. _Pull Request 166: https://github.com/galaxyproject/starforge/pull/166
.. _9008c57: https://github.com/galaxyproject/starforge/commit/9008c57b09521298b919fac1de00fb62a448bcab
.. _97b4ba4: https://github.com/galaxyproject/starforge/commit/97b4ba4a591e359b01dc69161925c301c9a7d1b7
.. _0dbecb7: https://github.com/galaxyproject/starforge/commit/0dbecb79e28baecb62546b629cae9dbebf46df19
.. _7672547: https://github.com/galaxyproject/starforge/commit/7672547adf3fe05d19f29d62a6a766ef114fd459
.. _Issue 64: https://github.com/galaxyproject/starforge/issues/64