The Snakemake Wrappers repository

https://img.shields.io/badge/snakemake-≥5.7.0-brightgreen.svg?style=flat-square https://github.com/snakemake/snakemake-wrappers/workflows/Tests/badge.svg?branch=master

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 and use the corresponding wrapper files from https://github.com/snakemake/snakemake-wrappers/tree/0.2.0/bio/samtools/sort. Thereby, 0.2.0 can be replaced with the version tag you want to use, or a commit id. This ensures reproducibility since changes in the wrapper implementation will only be propagated to your workflow if you update that version tag.

Each wrapper defines required software packages and versions in an environment.yaml file. In combination with the --use-conda flag of Snakemake, this will be deployed automatically.

Alternatively, for example for development, the wrapper directive can also point to full URLs, including the local file://. For this to work, you need to provide the (remote) path to the directory containing the wrapper.* and environment.yaml files. For the above example, the explicit GitHub URL to specify would need to be the /raw/ version of the directory:

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

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://github.com/snakemake/snakemake-wrappers
  2. Clone your fork locally.
  3. Locally, create a new branch: git checkout -b my-new-snakemake-wrapper
  4. Commit your contributions to that branch and push them to your fork: git push -u origin my-new-snakemake-wrapper
  5. Create a pull request.

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. Other sustainable community maintained channels are possible as well.)
  • 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 sphinx-copybutton
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.