The Snakemake Wrappers repository

https://img.shields.io/badge/snakemake-≥4.5.0-brightgreen.svg?style=flat-square

The Snakemake Wrapper Repository is a collection of reusable wrappers that allow to quickly use popular tools from Snakemake rules and workflows.

Usage

The general strategy is to include a wrapper into your workflow via the wrapper directive, e.g.

rule samtools_sort:
    input:
        "mapped/{sample}.bam"
    output:
        "mapped/{sample}.sorted.bam"
    params:
        "-m 4G"
    threads: 8
    wrapper:
        "0.2.0/bio/samtools/sort"

Here, Snakemake will automatically download the corresponding wrapper from https://bitbucket.org/snakemake/snakemake-wrappers/src/0.2.0/bio/samtools/sort/wrapper.py. Thereby, 0.2.0 can be replaced with the version tag you want to use, or a commit id (see here). This ensures reproducibility since changes in the wrapper implementation won’t be propagated automatically to your workflow. Alternatively, e.g., for development, the wrapper directive can also point to full URLs, including the local file://.

Each wrapper defines required software packages and versions. In combination with the --use-conda flag of Snakemake, these will be deployed automatically.

Contribute

We invite anybody to contribute to the Snakemake Wrapper Repository. If you want to contribute we suggest the following procedure:

  1. Fork the repository: https://bitbucket.org/snakemake/snakemake-wrappers/fork
  2. Clone the repo locally: git clone https://MY_PROFILE@bitbucket.org/MY_PROFILE/snakemake-wrappers.git
  3. Locally, create a new branch: git checkout -b my-new-snakemake-wrapper
  4. Commit your contributions to that branch and push them to you fork: git push -u origin my-new-snakemake-wrapper
  5. Create a pull request: https://bitbucket.org/MY_PROFILE/snakemake-wrappers/pull-requests/new

The pull request will be reviewed and included as fast as possible. Contributions should follow the coding style of the already present examples, i.e.:

  • provide a meta.yaml with name, description and author(s) of the wrapper
  • provide an environment.yaml which lists all required software packages (the packages should be available for installation via the default anaconda channels or via the conda channels bioconda or conda-forge )
  • provide a minimal test case in a subfolder called test, with an example Snakefile that shows how to use the wrapper, some minimal testing data (also check existing wrappers for suitable data) and add an invocation of the test in test.py
  • follow the python style guide, using 4 spaces for indentation.

Testing locally

If you want to debug your contribution locally, before creating a pull request, we recommend adding your test case to the start of the list in test.py, so that it runs first. Then, install miniconda with the channels as described for bioconda and set up an environment with the necessary dependencies and activate it:

conda create -n test-snakemake-wrappers snakemake pytest conda
conda activate test-snakemake-wrappers

Afterwards, from the main directory of the repo, you can run the tests with:

pytest test.py -v

If you use a keyboard interrupt after your test has failed, you will get all the relevant stdout and stderr messages printed.

If you also want to test the docs generation locally, create another environment and activate it:

conda create -n test-snakemake-wrapper-docs sphinx sphinx_rtd_theme pyyaml
conda activate test-snakemake-wrapper-docs

Then, enter the respective directory and build the docs:

cd docs
make html

If it runs through, you can open the main page at docs/_build/html/index.html in a web browser. If you want to start fresh, you can clean up the build with make clean.