Getting Started with Galaxy Development
This page is a combination walk through guide and list of links meant to help new developers become acquainted with the Galaxy development ecosystem and how to contribute in a wide variety of ways.
If you are unfamiliar with Galaxy - the best way to start by using Galaxy, for instance by walking through a simple analysis. The Galaxy 101 on usegalaxy.org is such a place to start. Those wishing to dive deeper into using Galaxy - checkout the following resources.
Develop a Tool
Once familiar with Galaxy, every developer should write at least one Galaxy tool - it is the most common way to extend Galaxy with new functionality. A "tool" wraps an external application, script, or shell command - describing both the user interface and how to translate it into a command-line via a simple XML file.
For those particularly interested in tool development the following section provides many more resources to read through and opportunities for contribution.
Tool Development Resources
A somewhat complete description of tags used for in tool XML files.
Tool Development Training Materials - from Hsiao lab, BC Public Health Microbiology & Reference Laboratory, BC Centre for Disease Control.
A tutorial on writing of functional tests
What to do if Galaxy incorrectly reports that your tool failed to execute
Best Practices for Tool Development
A discussion on outputing multiple individual datasets
Managing tools from a Galaxy administrator perspective.
- Tool conversion and generation efforts:
A tool interface generator is maintained at http://cli-mate.lumc.nl.
gxargparse - a drop in replacement of Python's argparse to generate Galaxy tools by Eric Rasche.
A discussion on converting common workflow language tool descriptions into Galaxy tools - with prototype by Peter Amstutz.
If you need to run an arbitrary working script (Python, Perl, R or Bash currently supported), and optionally turn it into a proper Galaxy tool, the Tool Factory can be installed in a local Galaxy from the Main Tool Shed to instantly wrap arbitrary scripts. It will turn these into Tool Shed archives ready to upload to a new repository from where they can be automagically installed into any Galaxy. **Only runs for administrative users** - exposes insecure unrestricted scripting, so only install in private development clones please. Generated tools are as secure as any other Galaxy tools.
Popular tool repositories on github to contribute to and serve as best practice examples:
GalaxyP Tools - A collection of tools for proteomics maintained by the GalaxyP team.
Using the API
After tool development the second most common way to develop extensions to Galaxy - is not to writing extensions at all - but instead to write scripts or applications that leverage the Galaxy API.
While this wiki contains additional documentation, it is quite dated and in some ways represents less than best practices. For more information it is probably best to review the source code documentation for the API or the source code itself.
Contributing to the Galaxy Core
Contributing to the Extended Galaxy Ecosystem
In addition to the Galaxy core project and tool projects listed above - there are many open source projects related to Galaxy that would welcome contributions - many but certainly not all of them can be found on the galaxyproject landing page on github. Many more are in the following list (the Issues pages of these projects offer many great ways to contribute to the Galaxy ecosystem).
- Devteam managed ansible projects related to managing Galaxy servers.
Ansible Galaxy - Core role for deploying Galaxy.
Ansible Galaxy OS - Ansible role for configuring the base operating system dependencies useful for Galaxy servers.
Ansible PostgreSQL Ansible role for configuring PostgreSQL (used on usegalaxy.org).
https://github.com/jmchilton/planemo-machinelPlanemo Machine Ansible and Packer components useful for building development virtual machines.
https://github.com/galaxyproject/ansible-galaxy-extraslAnsible Galaxy Extras Ansible role for configuring dynamic production servers such as Docker images and cloud-based virtual machines (used by planemo-machine and docker-galaxy-stable).
https://github.com/galaxyproject/ansible-tracksterlAnsible Trackster Ansible role for configuring Trackster dependencies.