ToolShed Readiness Checklist¶
The process from writing a tool to getting it into a ToolShed can be long and arduous and confusing. This checklist should assist in making sure you have done everything required for a great, easy to use Galaxy Tool!
Before ToolShed¶
- A GitHub repository should exist for your wrappers, either one you own, or perhaps you are contributing to the IUC’s repository.
- A tool directory should exist for the specific set of tools or related functionality you are wrapping.
- Check Bioconda for available packages required for the tool you are wrapping. If they do not exist, you may need to create them. The IUC will be happy to help you with doing this.
- Planemo should be installed (
pip install -U planemo
) - You will need to have credentials to access your ToolShed (either the Main ToolShed, or your local Galactic ToolShed).
Creating the Tool Wrapper (XML File)¶
- Review the IUC’s Best Practices for Tools.
- Consult the Galaxy Tool XML File schema.
- Create your tool wrapper with a command like
planemo tool_init --id 'tool_name' --name 'Tool description'
. - Alternatively, you could copy and modify an existing IUC wrapper.
- Give your tool an appropriate
ID
andname
by consulting the IUC’s Best Practices for Tools. TheID
is usually the same as the name of the tool XML file and directory. - Define a Tool Version for the wrapper. If it is the first wrapper, is recommended to use the same version as the tool in the requirement.
- Add a short tool Description.
- Fill in the Requirements section with the conda package name and version number for the tool and its dependencies.
- Add the Version Command that specifies the command to get the tool’s version.
- Add the Command section. The command to run the tool must be within CDATA tags, written in Cheetah and conform to PEP 8. You should add Exit Code detection and use single quotes for all Input and Output parameters of type
data
,data_collection
andtext
. - Supply at least one Input with a description of parameters. Add Validators to user input fields.
- Supply at least one Output with a description of parameters. For Output that is optionally created, use Filters.
- Supply at least one Test. The primary output is a good choice for testing. Don’t forget the use of
sim_size
if variable data is included. - Add a Help section written in valid reStructuredText within CDATA tags.
- Add a Citation section with a citation for the tool, preferably a DOI.
- If your tool uses built-in data:
- Provide the comment-only
tool-data/data_table_name.loc.sample
file - Provide the comment-only
tool_data_table_conf.xml.sample
file
- Provide the comment-only
- Check that the XML elements and parameters attributes are in the Order specified in the Best Practices.
- If you have a collection of related tools you can try to avoid duplicating XML by using a Macros XML file
- Use 4 spaces for indentation.
Testing Your Tool¶
- Fill the
test-data
directory with at least one input file and the expected output file. - It is strongly encouraged that you use small test data sets, ideally
under 1 Mb. Every Galaxy instance that downloads your tool will
have to download an entire copy of the test data. If the sum of your
test-data files is larger than that, consider use of
contains
and test for a small subset of the output, see the CWPair2 example. - If your tool uses tool-data:
- Provide a
tool_data_table_conf.xml.test
file, which is an uncommented version oftool_data_table_conf.xml.sample
containing the path to the loc file for testing:<file path="${__HERE__}/test-data/data_table_name.loc" />
(Please note the use of${__HERE__}
to indicate the directory where the tool is). - Provide the .loc file:
test-data/data_table_name.loc
- For a good example of how to test parameters from data tables, please see the Bowtie example.
- Provide a
- Check your tool XML with
planemo lint
. - Run functional tool tests in a local Galaxy with
planemo test
. - Serve the tool on a local Galaxy instance for manual verification that everything looks as expected with the
planemo serve
command.
Uploading Your Tool to a ToolShed¶
- Ensure you have a
.shed.yml
file with the appropriate contents. - Check the
.shed.yml
withplanemo shed_lint
. - Create the remote repository with
planemo shed_create --shed_target [toolshed|your_local_shed:9000]
.
Adding Your Tool to the IUC Repository¶
- Create an issue on IUC GitHub, tracking your progress and ensuring that no one else is working on the same tool.
- Fork IUC GitHub on your GitHub account.
- Clone the corresponding repository
git clone https://github.com/<YOUR_NAME>/tools-iuc tools-iuc
- Within that folder, create a corresponding branch with
git checkout -b $branch_name
. You might name it after the tool. - After you have tested your tool and are completely happy with it (per
previous sections of this document), add your tool and all associated data,
then Commit the changes with
git commit -m "I changed X, Y, and Z"
. Finally push your changes to github withgit push origin $branch_name
. - Go to the IUC’s Repository and click on ‘Compare & Pull Request’.
- Add a comment describing what the tool and any extra information that might be needed (E.g. “I had some trouble with the data tables, can someone please double check them”).
- The IUC will review your tool for inclusion.
- Note that any Python code submitted to IUC must conform to PEP 8, in order to pass the flake8 Travis CI testing.