From c16e94c54f6ce940e7a250e443face5a24b39c07 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 10:32:32 +0200 Subject: [PATCH 01/13] Use pixi for all environment management --- template/pixi.toml.jinja | 27 +++++++++++++++ template/tests/integration_test.py.jinja | 42 ++++++++++++++++++++++++ template/workflow/Snakefile | 2 +- template/workflow/envs/shell.yaml | 6 ---- template/workflow/rules/automatic.smk | 2 +- template/workflow/rules/dummy.smk | 2 +- tests/template_test.py | 6 ++++ 7 files changed, 78 insertions(+), 9 deletions(-) delete mode 100644 template/workflow/envs/shell.yaml diff --git a/template/pixi.toml.jinja b/template/pixi.toml.jinja index 207e14e..70f7639 100644 --- a/template/pixi.toml.jinja +++ b/template/pixi.toml.jinja @@ -22,5 +22,32 @@ snakefmt = ">=0.10.2" snakemake-minimal = ">=9.19.0" pytz = ">=2026.1.post1" +[feature.module.dependencies] +curl = ">=8.9.1" + +[environments] +module = { features = ["module"], no-default-feature = true } + [tasks] test-integration = {cmd = "pytest tests/integration_test.py"} + +{% raw %} +[tasks.export-snakemake-env] +description = "Export one Pixi environment as Snakemake-compatible conda files" +args = ["env", { arg = "outdir", default = "workflow/envs" }] +depends-on = [ + { task = "_export-snakemake-pin", args = ["{{ env }}", "win-64", "{{ outdir }}"] }, + { task = "_export-snakemake-pin", args = ["{{ env }}", "linux-64", "{{ outdir }}"] }, + { task = "_export-snakemake-pin", args = ["{{ env }}", "osx-arm64", "{{ outdir }}"] }, +] +cmd = "pixi workspace export conda-environment --environment '{{ env }}' '{{ outdir }}/{{ env }}.yaml'" + +[tasks._export-snakemake-pin] +description = "Export one Pixi environment/platform as a Snakemake-compatible pin file" +args = ["env", "platform", { arg = "outdir", default = "workflow/envs" }] +cmd = """ +set -e +pixi workspace export conda-explicit-spec --environment '{{ env }}' --platform '{{ platform }}' '{{ outdir }}' +mv '{{ outdir }}/{{ env }}_{{ platform }}_conda_spec.txt' '{{ outdir }}/{{ env }}.{{ platform }}.pin.txt' +""" +{% endraw %} diff --git a/template/tests/integration_test.py.jinja b/template/tests/integration_test.py.jinja index 1dfbcbc..8be1724 100644 --- a/template/tests/integration_test.py.jinja +++ b/template/tests/integration_test.py.jinja @@ -4,6 +4,7 @@ PLEASE ENSURE THIS SET OF MINIMAL TESTS WORKS BEFORE PUBLISHING YOUR MODULE. Contents may be updated in future template updates. """ +import json import subprocess from pathlib import Path @@ -17,6 +18,47 @@ def module_path(): return Path(__file__).parent.parent +@pytest.fixture(scope="module") +def pixi_environments(module_path) -> dict: + """Pixi environments defined for this project.""" + process = subprocess.run( + ["pixi", "info", "--json"], + check=True, + cwd=module_path, + capture_output=True, + text=True, + ) + return { + environment["name"]: environment + for environment in json.loads(process.stdout)["environments_info"] + } + + +def test_snakemake_environments( + module_path, pixi_environments, tmp_path +): + """All Snakemake environment files should be based on pixi counterparts.""" + env_dir = module_path / "workflow/envs" + env_files = sorted(env_dir.glob("*.yaml")) + assert env_files + + for env_file in env_files: + env_name = env_file.stem + + output_dir = tmp_path / env_name + subprocess.run( + ["pixi", "run", "export-snakemake-env", env_name, str(output_dir)], + check=True, + cwd=module_path, + ) + + generated_yaml = output_dir / env_file.name + assert generated_yaml.read_text() == env_file.read_text() + + for platform in pixi_environments[env_name]["platforms"]: + assert (env_dir / f"{env_name}.{platform}.pin.txt").exists() + + def test_interface_file(module_path): """The interfacing file should be correct.""" assert ModuleInterface.from_yaml(module_path / "INTERFACE.yaml") diff --git a/template/workflow/Snakefile b/template/workflow/Snakefile index 1f8f266..7d35eb0 100644 --- a/template/workflow/Snakefile +++ b/template/workflow/Snakefile @@ -45,6 +45,6 @@ rule all: log: stderr="/all.stderr", conda: - "envs/shell.yaml" + "envs/module.yaml" shell: 'echo "This workflow must be called as a snakemake module." > {log.stderr}' diff --git a/template/workflow/envs/shell.yaml b/template/workflow/envs/shell.yaml deleted file mode 100644 index e4b351d..0000000 --- a/template/workflow/envs/shell.yaml +++ /dev/null @@ -1,6 +0,0 @@ -name: shell -channels: - - conda-forge - - nodefaults -dependencies: - - curl=8.9.1 diff --git a/template/workflow/rules/automatic.smk b/template/workflow/rules/automatic.smk index bdd8982..a7a37fe 100644 --- a/template/workflow/rules/automatic.smk +++ b/template/workflow/rules/automatic.smk @@ -11,6 +11,6 @@ rule dummy_download: log: "/dummy_download.log", conda: - "../envs/shell.yaml" + "../envs/module.yaml" shell: 'curl -sSLo {output.readme} "{params.url}"' diff --git a/template/workflow/rules/dummy.smk b/template/workflow/rules/dummy.smk index a0ab9a3..c7e7660 100644 --- a/template/workflow/rules/dummy.smk +++ b/template/workflow/rules/dummy.smk @@ -11,6 +11,6 @@ rule dummy_add_text: log: "/dummy_add_text.log", conda: - "../envs/shell.yaml" + "../envs/module.yaml" script: "../scripts/dummy_script.py" diff --git a/tests/template_test.py b/tests/template_test.py index a710ea6..c499056 100644 --- a/tests/template_test.py +++ b/tests/template_test.py @@ -37,6 +37,12 @@ def pixi_built(self, template_project): cwd=template_project, check=True, ) + subprocess.run( + "pixi run export-snakemake-env module", + shell=True, + cwd=template_project, + check=True, + ) return template_project def test_pytest(self, pixi_built): From aa0fe3ed33b855d0c573a2d3caa6c3877a5edf2e Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 11:13:20 +0200 Subject: [PATCH 02/13] Add local pinning strategy configuration --- template/.gitignore.jinja | 3 ++- template/.pixi/.gitignore.jinja | 3 +++ template/.pixi/config.toml | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 template/.pixi/.gitignore.jinja create mode 100644 template/.pixi/config.toml diff --git a/template/.gitignore.jinja b/template/.gitignore.jinja index f03928b..7210c19 100644 --- a/template/.gitignore.jinja +++ b/template/.gitignore.jinja @@ -12,7 +12,8 @@ __pycache__ *.pyc ### Environments -.pixi/ +.pixi/* +!.pixi/.gitignore ### Snakemake .snakemake/ diff --git a/template/.pixi/.gitignore.jinja b/template/.pixi/.gitignore.jinja new file mode 100644 index 0000000..8399391 --- /dev/null +++ b/template/.pixi/.gitignore.jinja @@ -0,0 +1,3 @@ +* +!.gitignore +!config.toml diff --git a/template/.pixi/config.toml b/template/.pixi/config.toml new file mode 100644 index 0000000..a6a577c --- /dev/null +++ b/template/.pixi/config.toml @@ -0,0 +1 @@ +pinning-strategy = "latest-up" From d231369630d20e4a0e6a30fff2a3b004b0dcf9c3 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:31:23 +0200 Subject: [PATCH 03/13] Update README at both levels. --- README.md | 42 +++++++++++++++++++++++++++++++--------- template/README.md.jinja | 15 ++++++++++++++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index aee5aeb..f8fd894 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,26 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake.readthedocs.io/en/stable/). This template is part of the [Modelblocks](https://www.modelblocks.org/) toolset. -## Learning resources +> [!INFO] +> +> Looking for general general information on Modelblocks and modular workflows? +> +> - Visit the Modelblocks [official website](https://www.modelblocks.org/) and [documentation](https://modelblocks.readthedocs.io/en). +> - Read about `Snakemake` modularisation in the [`Snakemake` documentation](https://snakemake.readthedocs.io/en/stable/snakefiles/modularization.html#modules). +> -Looking for general information on Modelblocks or how data modules work? +## Features -- Visit the [Modelblocks](https://www.modelblocks.org/) website and read our [documentation and guidelines](https://modelblocks.readthedocs.io/en). -- Check the auto-generated minimal example. You can find it in `tests/integration/Snakefile`. -- Read about `Snakemake` modularisation in the [`Snakemake` documentation](https://snakemake.readthedocs.io/en/stable/snakefiles/modularization.html#modules). +- Stable `Snakemake` development using `pixi`'s lockfile and conda-pinning functionality, with the following environments: + - `default`: the development environment, including `Snakemake` and `conda` as dependencies. This is never delivered to module users! + - `module`: the environment used by rules in the `Snakemake` workflow. It should only contain minimal dependencies needed by your module's processing steps. -## Features +> [!TIP] +> +> Before running your workflow, make sure to export the `module` environment so `Snakemake` can use it. +> See [the available pixi comands](#pixi-run-export-snakemake-env-module) for more information. +> -- Standardised layout compliant with the [`Snakemake` workflow catalogue](https://snakemake.github.io/snakemake-workflow-catalog/#) listing requirements, so modules can be included automatically once published. Read more about those requirements [here](https://snakemake.github.io/snakemake-workflow-catalog/docs/catalog.html#standardized-usage-workflows). - Standardised input-output structure across modules: - `resources/`: files needed for the module's processes. - `user/`: files that should be provided by users. Document them well! @@ -22,7 +31,7 @@ Looking for general information on Modelblocks or how data modules work? - Continuous Integration (CI) settings, ready for [pre-commit.ci](https://pre-commit.ci/). - Contributor recognition via [All Contributors](https://allcontributors.org/en/). - GitHub Actions to automate chores during pull requests and releases. - - Pre-made `pytest` setup. +- Fully compliant with the [`Snakemake` workflow catalogue](https://snakemake.github.io/snakemake-workflow-catalog/#) listing requirements, so modules can be included automatically once published. Read more about those requirements [here](https://snakemake.github.io/snakemake-workflow-catalog/docs/catalog.html#standardized-usage-workflows). > [!IMPORTANT] > @@ -65,7 +74,8 @@ This template uses [`pixi`](https://pixi.sh/) as its package manager. Once insta ```shell cd ./ # navigate to the new project - pixi install --all # install the project environment + pixi install --all # install the project's environments + pixi run export-snakemake-env module # initialise the Snakemake environment ``` 5. Register your project in [pre-commit.ci](https://pre-commit.ci/) and [allcontributors.org](https://allcontributors.org/en/) to benefit from CI and contributor task automation. 6. Extra: run the auto-generated example module! @@ -75,6 +85,20 @@ This template uses [`pixi`](https://pixi.sh/) as its package manager. Once insta pixi run snakemake --use-conda # run it! ``` +## `pixi` task commands + +### `pixi run export-snakemake-env module` + +Exports the module's environment to `conda`, so `Snakemake` can use it during execution. +This will generate both a `module.yaml` file and platform-specific spec files for Windows, Linux and macOS (e.g., `module.win-64.pin.txt`). + +### `pixi run test-integration` + +Run a minimal set of standardised tests to ensure your module complies with Modelblock requirements. +These are executed by Github's CI during pull requests. + + + ## Contributors ✨ Thanks goes to these wonderful people, sorted alphabetically ([emoji key](https://allcontributors.org/en/reference/emoji-key/)): diff --git a/template/README.md.jinja b/template/README.md.jinja index 2e072ef..d6cb8fa 100644 --- a/template/README.md.jinja +++ b/template/README.md.jinja @@ -44,6 +44,21 @@ cd {{module_short_name}} pixi install --all ``` +Please be aware that this is a multi-environment project (see [pixi.toml](./pixi.toml) for details). +- `default`: used for development and integration testing. +Because it contains `Snakemake`, `conda` and `pytest` as dependencies it **should not be used** in `Snakemake` rules. +- `module`: contains minimal dependencies used in `Snakemake` rules. +If modified, be sure to export it to `Snakemake` so it can be recreated by module users: + +```shell +# create module.yaml and conda-spec pin files in workflow/envs/ +pixi run export-snakemake-env module +``` + + +## Testing + + For testing, simply run: ```shell From 7b0879d1d6fc436e393ed1d59a53e51b213a4bdc Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:45:14 +0200 Subject: [PATCH 04/13] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f8fd894..030bf04 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake > [!TIP] > > Before running your workflow, make sure to export the `module` environment so `Snakemake` can use it. -> See [the available pixi comands](#pixi-run-export-snakemake-env-module) for more information. +> See [the available pixi commands](#pixi-run-export-snakemake-env-module) for more information. > - Standardised input-output structure across modules: From 79cf6d4a3a9317f9185b77ab1b75c45430837b2c Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:48:32 +0200 Subject: [PATCH 05/13] update ruff CI --- .pre-commit-config.yaml | 2 +- template/.pre-commit-config.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 04bc352..824eea5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.15.18 hooks: - - id: ruff + - id: ruff-check args: [--fix, --exit-non-zero-on-fix] - id: ruff-format diff --git a/template/.pre-commit-config.yaml b/template/.pre-commit-config.yaml index 222f40b..7ae919a 100644 --- a/template/.pre-commit-config.yaml +++ b/template/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.15.18 hooks: - - id: ruff + - id: ruff-check args: [--fix, --exit-non-zero-on-fix] - id: ruff-format From 430d334dd1fc0553e285d2b33614584c5b724520 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:18:59 +0200 Subject: [PATCH 06/13] replace info admonition with note --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 030bf04..677833a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake.readthedocs.io/en/stable/). This template is part of the [Modelblocks](https://www.modelblocks.org/) toolset. -> [!INFO] +> [!NOTE] > > Looking for general general information on Modelblocks and modular workflows? > From ed5334084bc1290348532455d6241a4b141af1e9 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Tue, 23 Jun 2026 18:21:05 +0200 Subject: [PATCH 07/13] Update clio-tools to add convention_version to INTERFACE --- template/INTERFACE.yaml | 2 ++ template/pixi.toml.jinja | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/template/INTERFACE.yaml b/template/INTERFACE.yaml index 1283095..4d51cce 100644 --- a/template/INTERFACE.yaml +++ b/template/INTERFACE.yaml @@ -1,4 +1,6 @@ # Module Input-Output structure for automated docs generation +convention_version: v1.0.0 + pathvars: snakemake_defaults: logs: diff --git a/template/pixi.toml.jinja b/template/pixi.toml.jinja index 70f7639..80fdab3 100644 --- a/template/pixi.toml.jinja +++ b/template/pixi.toml.jinja @@ -9,7 +9,7 @@ platforms = ["win-64", "linux-64", "osx-arm64"] homepage = "https://www.modelblocks.org/" [dependencies] -clio-tools = ">=2026.03.30" +clio-tools = ">=2026.06.23" conda = ">=25.0.0" ipdb = ">=0.13.13" ipykernel = ">=6.29.5" From b14afd97a739c28b355224ea8629fad8f11b5bc2 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Wed, 24 Jun 2026 11:26:14 +0200 Subject: [PATCH 08/13] Add conftest.py and place for module downloads --- template/tests/conftest.py | 12 ++++++++++++ ...integration_test.py.jinja => integration_test.py} | 11 +++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 template/tests/conftest.py rename template/tests/{integration_test.py.jinja => integration_test.py} (91%) diff --git a/template/tests/conftest.py b/template/tests/conftest.py new file mode 100644 index 0000000..f5a5699 --- /dev/null +++ b/template/tests/conftest.py @@ -0,0 +1,12 @@ +"""Shared pytest fixtures.""" + +from pathlib import Path + +import pytest + + +@pytest.fixture(scope="module") +def module_path(): + """Parent directory of the project.""" + # If your module needs files in resources/user/, place automated downloads here. + return Path(__file__).parent.parent diff --git a/template/tests/integration_test.py.jinja b/template/tests/integration_test.py similarity index 91% rename from template/tests/integration_test.py.jinja rename to template/tests/integration_test.py index 8be1724..e0f7266 100644 --- a/template/tests/integration_test.py.jinja +++ b/template/tests/integration_test.py @@ -12,12 +12,6 @@ from clio_tools.data_module import ModuleInterface -@pytest.fixture(scope="module") -def module_path(): - """Parent directory of the project.""" - return Path(__file__).parent.parent - - @pytest.fixture(scope="module") def pixi_environments(module_path) -> dict: """Pixi environments defined for this project.""" @@ -40,7 +34,7 @@ def test_snakemake_environments( """All Snakemake environment files should be based on pixi counterparts.""" env_dir = module_path / "workflow/envs" env_files = sorted(env_dir.glob("*.yaml")) - assert env_files + assert env_files, f"No conda environments found in {module_path}." for env_file in env_files: env_name = env_file.stem @@ -56,7 +50,8 @@ def test_snakemake_environments( assert generated_yaml.read_text() == env_file.read_text() for platform in pixi_environments[env_name]["platforms"]: - assert (env_dir / f"{env_name}.{platform}.pin.txt").exists() + pin_file = env_dir / f"{env_name}.{platform}.pin.txt" + assert pin_file.exists(), f"{env_name} has no conda pins for {platform}" def test_interface_file(module_path): From 2d71290590ea87cf4888d3e2a45d6a506471797b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 09:26:24 +0000 Subject: [PATCH 09/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- template/tests/integration_test.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/template/tests/integration_test.py b/template/tests/integration_test.py index e0f7266..e20dba3 100644 --- a/template/tests/integration_test.py +++ b/template/tests/integration_test.py @@ -28,9 +28,7 @@ def pixi_environments(module_path) -> dict: } -def test_snakemake_environments( - module_path, pixi_environments, tmp_path -): +def test_snakemake_environments(module_path, pixi_environments, tmp_path): """All Snakemake environment files should be based on pixi counterparts.""" env_dir = module_path / "workflow/envs" env_files = sorted(env_dir.glob("*.yaml")) From 4039a37fbf101f214b712ccb8655539da012cf8b Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:13:29 +0200 Subject: [PATCH 10/13] Improve README --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 677833a..a2c06c9 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,12 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake - `default`: the development environment, including `Snakemake` and `conda` as dependencies. This is never delivered to module users! - `module`: the environment used by rules in the `Snakemake` workflow. It should only contain minimal dependencies needed by your module's processing steps. -> [!TIP] -> -> Before running your workflow, make sure to export the `module` environment so `Snakemake` can use it. -> See [the available pixi commands](#pixi-run-export-snakemake-env-module) for more information. +> [!IMPORTANT] > +> All software dependencies should be defined in `pixi.toml`. +> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`. +> This must include at least the `module` environment, as well as any additional environments created for this purpose. +> See the [commands section](#pixi-task-commands) for more information. - Standardised input-output structure across modules: - `resources/`: files needed for the module's processes. @@ -87,10 +88,10 @@ This template uses [`pixi`](https://pixi.sh/) as its package manager. Once insta ## `pixi` task commands -### `pixi run export-snakemake-env module` +### `pixi run export-snakemake-env ` -Exports the module's environment to `conda`, so `Snakemake` can use it during execution. -This will generate both a `module.yaml` file and platform-specific spec files for Windows, Linux and macOS (e.g., `module.win-64.pin.txt`). +Export `` to `conda`-compatible dependency files, saved in `workflow/envs`, allowing `Snakemake` to use them during rule execution. +This will generate both an `.yaml` file and platform-specific pin files for Windows, Linux and macOS (e.g., `.win-64.pin.txt`). ### `pixi run test-integration` @@ -98,7 +99,6 @@ Run a minimal set of standardised tests to ensure your module complies with Mode These are executed by Github's CI during pull requests. - ## Contributors ✨ Thanks goes to these wonderful people, sorted alphabetically ([emoji key](https://allcontributors.org/en/reference/emoji-key/)): From 5fda8ae61856a9b95d7e5136bdf664406a618e64 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:31:57 +0200 Subject: [PATCH 11/13] Update README.md Add detail on Snakemake's relation to pixi Co-authored-by: Jann Launer <32454596+jnnr@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2c06c9..fd885a6 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake > [!IMPORTANT] > > All software dependencies should be defined in `pixi.toml`. -> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`. +> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`-compatible depency files. This is necessary as long as Snakemake does not directly support the use of pixi. > This must include at least the `module` environment, as well as any additional environments created for this purpose. > See the [commands section](#pixi-task-commands) for more information. From cb106aa4a1df32ef3a21403d48ccfed410450e63 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 11:32:04 +0000 Subject: [PATCH 12/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd885a6..16bed0c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake > [!IMPORTANT] > > All software dependencies should be defined in `pixi.toml`. -> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`-compatible depency files. This is necessary as long as Snakemake does not directly support the use of pixi. +> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`-compatible depency files. This is necessary as long as Snakemake does not directly support the use of pixi. > This must include at least the `module` environment, as well as any additional environments created for this purpose. > See the [commands section](#pixi-task-commands) for more information. From 57686beb344428b7bb88ce8b13a207e60bd06808 Mon Sep 17 00:00:00 2001 From: Ivan Ruiz Manuel <72193617+irm-codebase@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:32:35 +0200 Subject: [PATCH 13/13] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16bed0c..59c27c2 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ A template for modular data workflows built with [`Snakemake`](https://snakemake > [!IMPORTANT] > > All software dependencies should be defined in `pixi.toml`. -> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`-compatible depency files. This is necessary as long as Snakemake does not directly support the use of pixi. +> Before running your module for the first time, use the `export-snakemake-env` pixi command to export the required `Snakemake` environments to `conda`-compatible dependency files. This is necessary as long as Snakemake does not directly support the use of pixi. > This must include at least the `module` environment, as well as any additional environments created for this purpose. > See the [commands section](#pixi-task-commands) for more information.