snakemake-software-deployment-plugin-container 0.3.0__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (13) hide show
  1. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/.github/workflows/ci.yml +3 -9
  2. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/CHANGELOG.md +19 -0
  3. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/PKG-INFO +2 -2
  4. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/pixi.lock +349 -93
  5. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/pyproject.toml +6 -3
  6. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/src/snakemake_software_deployment_plugin_container/__init__.py +89 -38
  7. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/tests/test_plugin.py +29 -0
  8. snakemake_software_deployment_plugin_container-0.3.0/setup.cfg +0 -7
  9. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/.github/workflows/conventional-prs.yml +0 -0
  10. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/.github/workflows/release-please.yml +0 -0
  11. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/.gitignore +0 -0
  12. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/LICENSE +0 -0
  13. {snakemake_software_deployment_plugin_container-0.3.0 → snakemake_software_deployment_plugin_container-0.5.0}/README.md +0 -0
@@ -36,19 +36,13 @@ jobs:
36
36
  steps:
37
37
  - uses: actions/checkout@v5
38
38
 
39
+ - run: sudo apt-get update && sudo apt-get install fuse2fs
40
+
39
41
  - name: Setup pixi
40
42
  uses: prefix-dev/setup-pixi@v0
41
43
 
42
- - name: Setup envmodules
43
- run: |
44
- sudo apt-get update
45
- sudo apt-get install -y environment-modules
46
-
47
44
  - name: Run pytest
48
- shell: bash -el {0}
49
- run: |
50
- command -v module
51
- pixi run test -v
45
+ run: pixi run test -v
52
46
 
53
47
  - name: Run Coverage
54
48
  run: pixi run coverage-report
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0](https://github.com/snakemake/snakemake-software-deployment-plugin-container/compare/v0.4.0...v0.5.0) (2026-03-08)
4
+
5
+
6
+ ### Features
7
+
8
+ * add apptainer support (plus various small fixes) ([#11](https://github.com/snakemake/snakemake-software-deployment-plugin-container/issues/11)) ([54a5c70](https://github.com/snakemake/snakemake-software-deployment-plugin-container/commit/54a5c70a6ca1ca9ff9b39cd16dc6a7d86ebd2df7))
9
+
10
+ ## [0.4.0](https://github.com/snakemake/snakemake-software-deployment-plugin-container/compare/v0.3.0...v0.4.0) (2026-02-27)
11
+
12
+
13
+ ### Features
14
+
15
+ * implement check whether given executable is contained in container image ([9edf4a6](https://github.com/snakemake/snakemake-software-deployment-plugin-container/commit/9edf4a6d4a80cea414bdbc844a58d052e2e8db0a))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * adapt to latest changes in interface ([3c5fd0b](https://github.com/snakemake/snakemake-software-deployment-plugin-container/commit/3c5fd0bda99ec3e64dbe0b2b9012e14287759509))
21
+
3
22
  ## [0.3.0](https://github.com/snakemake/snakemake-software-deployment-plugin-container/compare/v0.2.1...v0.3.0) (2026-02-18)
4
23
 
5
24
 
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snakemake-software-deployment-plugin-container
3
- Version: 0.3.0
3
+ Version: 0.5.0
4
4
  Project-URL: repository, https://github.com/snakemake/snakemake-software-deployment-plugin-container
5
5
  Project-URL: documentation, https://snakemake.github.io/snakemake-plugin-catalog/plugins/software-deployment/container.html
6
6
  Author-email: Ben Carrillo <ben.uzh@pm.me>, Johannes Köster <johannes.koester@uni-due.de>
7
7
  License-File: LICENSE
8
8
  Requires-Python: <4.0,>=3.11
9
9
  Requires-Dist: snakemake-interface-common<2.0.0,>=1.17.4
10
- Requires-Dist: snakemake-interface-software-deployment-plugins<1.0,>=0.9.1
10
+ Requires-Dist: snakemake-interface-software-deployment-plugins<1.0,>=0.15.0
11
11
  Requires-Dist: udocker<2.0.0,>=1.3.17
12
12
  Description-Content-Type: text/markdown
13
13
 
@@ -11,7 +11,7 @@ environments:
11
11
  linux-64:
12
12
  - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
13
13
  - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
14
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
14
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
15
15
  - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda
16
16
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
17
17
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda
@@ -20,7 +20,7 @@ environments:
20
20
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
21
21
  - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda
22
22
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda
23
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda
23
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda
24
24
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
25
25
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda
26
26
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
@@ -33,21 +33,21 @@ environments:
33
33
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
34
34
  - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
35
35
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
36
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
36
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
37
37
  - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
38
38
  - pypi: https://files.pythonhosted.org/packages/0f/c4/2da11760cebae7cfc66304ce5dccbabf9f1323e3e0ab8091960b84ad2bd6/snakemake_interface_common-1.22.0-py3-none-any.whl
39
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
39
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
40
40
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
41
41
  - pypi: ./
42
42
  osx-arm64:
43
43
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
44
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
45
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
44
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
45
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda
46
46
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
47
47
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
48
48
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
49
49
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
50
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
50
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda
51
51
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
52
52
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
53
53
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
@@ -58,10 +58,10 @@ environments:
58
58
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
59
59
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
60
60
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
61
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
61
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
62
62
  - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl
63
63
  - pypi: https://files.pythonhosted.org/packages/0f/c4/2da11760cebae7cfc66304ce5dccbabf9f1323e3e0ab8091960b84ad2bd6/snakemake_interface_common-1.22.0-py3-none-any.whl
64
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
64
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
65
65
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
66
66
  - pypi: ./
67
67
  dev:
@@ -74,25 +74,41 @@ environments:
74
74
  packages:
75
75
  linux-64:
76
76
  - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
77
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/apptainer-1.4.5-h6ccafba_0.conda
77
78
  - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
78
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
79
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
80
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cni-1.0.1-ha975731_1.tar.bz2
81
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cni-plugins-1.3.0-ha8f183a_0.conda
79
82
  - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
80
83
  - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.4-py314h67df5f8_0.conda
81
84
  - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
85
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/fuse-overlayfs-1.16-ha5fcf3e_1.conda
86
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/gocryptfs-2.6.1-ha770c72_0.conda
82
87
  - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda
83
88
  - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
89
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda
84
90
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
91
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda
85
92
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda
86
93
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
94
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libfuse3-3.18.1-h9a46e9c_0.conda
87
95
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
96
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda
88
97
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
98
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
89
99
  - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda
90
100
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda
91
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda
101
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libseccomp-2.6.0-hb03c661_0.conda
102
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda
92
103
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
93
104
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda
105
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda
106
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda
94
107
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
108
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda
109
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda
95
110
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda
111
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda
96
112
  - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda
97
113
  - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda
98
114
  - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
@@ -104,6 +120,8 @@ environments:
104
120
  - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
105
121
  - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
106
122
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.14-h40fa522_1.conda
123
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/squashfs-tools-4.7.5-h7b2cdf3_0.conda
124
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/squashfuse-0.6.1-hb8971b7_1.conda
107
125
  - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
108
126
  - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda
109
127
  - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
@@ -111,25 +129,25 @@ environments:
111
129
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
112
130
  - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
113
131
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
114
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
132
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
115
133
  - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
116
134
  - pypi: https://files.pythonhosted.org/packages/1a/c7/e6e9ff155558b473f9eec20f7e35faa15dd6f3d03c4100f7609e44a8428f/snakemake_interface_common-1.19.2-py3-none-any.whl
117
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
135
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
118
136
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
119
137
  - pypi: ./
120
138
  osx-arm64:
121
139
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
122
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
140
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
123
141
  - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
124
142
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.13.4-py314h6e9b3f0_0.conda
125
143
  - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
126
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
144
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda
127
145
  - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
128
146
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
129
147
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
130
148
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
131
149
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
132
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
150
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda
133
151
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
134
152
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
135
153
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda
@@ -150,10 +168,10 @@ environments:
150
168
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
151
169
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
152
170
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
153
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
171
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
154
172
  - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
155
173
  - pypi: https://files.pythonhosted.org/packages/1a/c7/e6e9ff155558b473f9eec20f7e35faa15dd6f3d03c4100f7609e44a8428f/snakemake_interface_common-1.19.2-py3-none-any.whl
156
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
174
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
157
175
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
158
176
  - pypi: ./
159
177
  publish:
@@ -172,10 +190,10 @@ environments:
172
190
  - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda
173
191
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda
174
192
  - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
175
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
176
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
193
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
194
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda
177
195
  - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda
178
- - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda
196
+ - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda
179
197
  - conda: https://conda.anaconda.org/conda-forge/linux-64/cmarkgfm-2024.11.20-py314h5bd0f2a_1.conda
180
198
  - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
181
199
  - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda
@@ -199,12 +217,12 @@ environments:
199
217
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda
200
218
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
201
219
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
202
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_0.conda
220
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda
203
221
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
204
222
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
205
223
  - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda
206
224
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda
207
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda
225
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda
208
226
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
209
227
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda
210
228
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
@@ -229,7 +247,7 @@ environments:
229
247
  - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda
230
248
  - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda
231
249
  - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_1.conda
232
- - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda
250
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda
233
251
  - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py314hdafbbf9_0.conda
234
252
  - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
235
253
  - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
@@ -240,10 +258,10 @@ environments:
240
258
  - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda
241
259
  - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
242
260
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
243
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
261
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
244
262
  - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
245
263
  - pypi: https://files.pythonhosted.org/packages/1a/c7/e6e9ff155558b473f9eec20f7e35faa15dd6f3d03c4100f7609e44a8428f/snakemake_interface_common-1.19.2-py3-none-any.whl
246
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
264
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
247
265
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
248
266
  - pypi: ./
249
267
  osx-arm64:
@@ -253,10 +271,10 @@ environments:
253
271
  - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda
254
272
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda
255
273
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
256
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
257
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
274
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
275
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda
258
276
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda
259
- - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda
277
+ - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda
260
278
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmarkgfm-2024.11.20-py314hb84d1df_1.conda
261
279
  - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
262
280
  - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda
@@ -264,7 +282,7 @@ environments:
264
282
  - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
265
283
  - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
266
284
  - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
267
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
285
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda
268
286
  - conda: https://conda.anaconda.org/conda-forge/noarch/id-1.6.1-pyhcf101f3_0.conda
269
287
  - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda
270
288
  - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda
@@ -273,12 +291,12 @@ environments:
273
291
  - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-6.1.0-pyhcf101f3_0.conda
274
292
  - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.4.0-pyhcf101f3_1.conda
275
293
  - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.7.0-pyh534df25_0.conda
276
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda
294
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda
277
295
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
278
296
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
279
297
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda
280
298
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
281
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
299
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda
282
300
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
283
301
  - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda
284
302
  - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
@@ -300,7 +318,7 @@ environments:
300
318
  - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda
301
319
  - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda
302
320
  - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_1.conda
303
- - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda
321
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda
304
322
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
305
323
  - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
306
324
  - conda: https://conda.anaconda.org/conda-forge/noarch/twine-6.2.0-pyhcf101f3_0.conda
@@ -310,10 +328,10 @@ environments:
310
328
  - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda
311
329
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
312
330
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
313
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
331
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
314
332
  - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl
315
333
  - pypi: https://files.pythonhosted.org/packages/1a/c7/e6e9ff155558b473f9eec20f7e35faa15dd6f3d03c4100f7609e44a8428f/snakemake_interface_common-1.19.2-py3-none-any.whl
316
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
334
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
317
335
  - pypi: https://files.pythonhosted.org/packages/55/d6/caafad263b0e2375c2a8c586ac8b91fb7d3e363e6d1ab1e35a365d684254/udocker-1.3.17-py2.py3-none-any.whl
318
336
  - pypi: ./
319
337
  packages:
@@ -342,6 +360,30 @@ packages:
342
360
  purls: []
343
361
  size: 8191
344
362
  timestamp: 1744137672556
363
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/apptainer-1.4.5-h6ccafba_0.conda
364
+ sha256: aa34ebc55ab69fea3e42d3ffe26ee4169794be1d1ffadadc5a35857554c3dddb
365
+ md5: d09c947d2f15fa9e36e5377ad93a6277
366
+ depends:
367
+ - __glibc >=2.17
368
+ - __glibc >=2.17,<3.0.a0
369
+ - cni-plugins >=0.7.4
370
+ - fuse-overlayfs
371
+ - gocryptfs
372
+ - libarchive >=3.8.2,<3.9.0a0
373
+ - libgcc >=14
374
+ - libseccomp >=2.4.4,<3.0a0
375
+ - libstdcxx >=14
376
+ - libuuid >=2.41.2,<3.0a0
377
+ - openssl >=3.5.4,<4.0a0
378
+ - squashfs-tools
379
+ - squashfuse
380
+ constrains:
381
+ - singularity ==9999999999
382
+ license: BSD-3-Clause
383
+ license_family: BSD
384
+ purls: []
385
+ size: 21979472
386
+ timestamp: 1764716258107
345
387
  - pypi: https://files.pythonhosted.org/packages/b3/66/e6c0a808950ba5a4042e2fcedd577fc7401536c7db063de4d7c36be06f84/argparse_dataclass-2.0.0-py3-none-any.whl
346
388
  name: argparse-dataclass
347
389
  version: 2.0.0
@@ -435,25 +477,25 @@ packages:
435
477
  purls: []
436
478
  size: 124834
437
479
  timestamp: 1771350416561
438
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
439
- sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2
440
- md5: bddacf101bb4dd0e51811cb69c7790e2
480
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
481
+ sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc
482
+ md5: 4492fd26db29495f0ba23f146cd5638d
441
483
  depends:
442
484
  - __unix
443
485
  license: ISC
444
486
  purls: []
445
- size: 146519
446
- timestamp: 1767500828366
447
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
448
- sha256: 110338066d194a715947808611b763857c15458f8b3b97197387356844af9450
449
- md5: eacc711330cd46939f66cd401ff9c44b
487
+ size: 147413
488
+ timestamp: 1772006283803
489
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda
490
+ sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656
491
+ md5: 765c4d97e877cdbbb88ff33152b86125
450
492
  depends:
451
493
  - python >=3.10
452
494
  license: ISC
453
495
  purls:
454
496
  - pkg:pypi/certifi?source=compressed-mapping
455
- size: 150969
456
- timestamp: 1767500900768
497
+ size: 151445
498
+ timestamp: 1772001170301
457
499
  - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda
458
500
  sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e
459
501
  md5: cf45f4278afd6f4e6d03eda0f435d527
@@ -486,17 +528,16 @@ packages:
486
528
  - pkg:pypi/cffi?source=hash-mapping
487
529
  size: 292983
488
530
  timestamp: 1761203354051
489
- - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda
490
- sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59
491
- md5: a22d1fd9bf98827e280a02875d9a007a
531
+ - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda
532
+ sha256: 05ea76a016c77839b64f9f8ec581775f6c8a259044bd5b45a177e46ab4e7feac
533
+ md5: beb628209b2b354b98203066f90b3287
492
534
  depends:
493
535
  - python >=3.10
494
536
  license: MIT
495
- license_family: MIT
496
537
  purls:
497
- - pkg:pypi/charset-normalizer?source=hash-mapping
498
- size: 50965
499
- timestamp: 1760437331772
538
+ - pkg:pypi/charset-normalizer?source=compressed-mapping
539
+ size: 53210
540
+ timestamp: 1772816516728
500
541
  - conda: https://conda.anaconda.org/conda-forge/linux-64/cmarkgfm-2024.11.20-py314h5bd0f2a_1.conda
501
542
  sha256: c2420839a943580dece9c5857492d69732df2af6dac6cb8fd8dd92c20060beae
502
543
  md5: 23985f6de5f68e3465807e1fbbc98f30
@@ -527,6 +568,27 @@ packages:
527
568
  - pkg:pypi/cmarkgfm?source=hash-mapping
528
569
  size: 115970
529
570
  timestamp: 1760363189413
571
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cni-1.0.1-ha975731_1.tar.bz2
572
+ sha256: 4d83a78ca08a6e40f48bc2d93cc8646959e175bd21b97dc055e44558605a3984
573
+ md5: 58f92707fb5595c8cd90d278f602011c
574
+ depends:
575
+ - jq
576
+ - libgcc-ng >=9.4.0
577
+ license: Apache-2.0
578
+ license_family: Apache
579
+ purls: []
580
+ size: 1768993
581
+ timestamp: 1643043326782
582
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cni-plugins-1.3.0-ha8f183a_0.conda
583
+ sha256: 0bc7985c802700112d0e6de90bebf300518a7bf68d2767b5654ce7f90bc98245
584
+ md5: 7b19dcc220b79ec9249ecf2f4e671986
585
+ depends:
586
+ - cni 1.0.1.*
587
+ license: Apache-2.0
588
+ license_family: Apache
589
+ purls: []
590
+ size: 30645988
591
+ timestamp: 1689423051718
530
592
  - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
531
593
  sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
532
594
  md5: 962b9857ee8e7018c22f2776ffa0b2d7
@@ -538,15 +600,19 @@ packages:
538
600
  - pkg:pypi/colorama?source=hash-mapping
539
601
  size: 27011
540
602
  timestamp: 1733218222191
541
- - pypi: https://files.pythonhosted.org/packages/31/28/d28211d29bcc3620b1fece85a65ce5bb22f18670a03cd28ea4b75ede270c/configargparse-1.7.1-py3-none-any.whl
603
+ - pypi: https://files.pythonhosted.org/packages/00/27/5ec3deed103817f19e8bd53298e724aab0b62900b3663cdd516ba3ea5b66/configargparse-1.7.3-py3-none-any.whl
542
604
  name: configargparse
543
- version: 1.7.1
544
- sha256: 8b586a31f9d873abd1ca527ffbe58863c99f36d896e2829779803125e83be4b6
605
+ version: 1.7.3
606
+ sha256: e7c787eaf6788c760252b6784be6fbf8edc106ca16d7e59b0b5743d1d8ee416d
545
607
  requires_dist:
546
608
  - pyyaml ; extra == 'yaml'
609
+ - black ; extra == 'test'
547
610
  - mock ; extra == 'test'
611
+ - toml ; extra == 'test'
548
612
  - pyyaml ; extra == 'test'
549
613
  - pytest ; extra == 'test'
614
+ - pytest-cov ; extra == 'test'
615
+ - pytest-subtests ; extra == 'test'
550
616
  requires_python: '>=3.6'
551
617
  - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.4-py314h67df5f8_0.conda
552
618
  sha256: b84aa99886610e0c3856ee1b577fe5c2552a5677bb7d281b4a86e79248813898
@@ -642,6 +708,26 @@ packages:
642
708
  - pkg:pypi/exceptiongroup?source=hash-mapping
643
709
  size: 21333
644
710
  timestamp: 1763918099466
711
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/fuse-overlayfs-1.16-ha5fcf3e_1.conda
712
+ sha256: 52b5405b80340544b77d4b50081a7c97a43364991649325ebd84ac334e0bd919
713
+ md5: f2266d4f0c70e1188e532b5b3f7c1503
714
+ depends:
715
+ - __glibc >=2.17,<3.0.a0
716
+ - libfuse3 >=3.18.0,<4.0a0
717
+ - libgcc >=14
718
+ license: GPL-3.0-or-later
719
+ license_family: GPL
720
+ purls: []
721
+ size: 58878
722
+ timestamp: 1766170267806
723
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/gocryptfs-2.6.1-ha770c72_0.conda
724
+ sha256: ce4a5def3bb39644f1b3b9e948a6c897dbae5b3a47d93011447757990d257838
725
+ md5: bb437fbff41ae6014e00e92a3121ab9f
726
+ license: MIT
727
+ license_family: MIT
728
+ purls: []
729
+ size: 3874149
730
+ timestamp: 1754972186137
645
731
  - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
646
732
  sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3
647
733
  md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9
@@ -690,16 +776,16 @@ packages:
690
776
  purls: []
691
777
  size: 12728445
692
778
  timestamp: 1767969922681
693
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
694
- sha256: d4cefbca587429d1192509edc52c88de52bc96c2447771ddc1f8bee928aed5ef
695
- md5: 1e93aca311da0210e660d2247812fa02
779
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda
780
+ sha256: 24bc62335106c30fecbcc1dba62c5eba06d18b90ea1061abd111af7b9c89c2d7
781
+ md5: 114e6bfe7c5ad2525eb3597acdbf2300
696
782
  depends:
697
783
  - __osx >=11.0
698
784
  license: MIT
699
785
  license_family: MIT
700
786
  purls: []
701
- size: 12358010
702
- timestamp: 1767970350308
787
+ size: 12389400
788
+ timestamp: 1772209104304
703
789
  - conda: https://conda.anaconda.org/conda-forge/noarch/id-1.6.1-pyhcf101f3_0.conda
704
790
  sha256: 54c80a4ca6e6a19b4bb89c829f757d0de00362a3bfa4647517d2ebd519717f0f
705
791
  md5: 563a022fc58cf7a200c35cb3fee07a6b
@@ -812,6 +898,19 @@ packages:
812
898
  - pkg:pypi/jeepney?source=hash-mapping
813
899
  size: 40015
814
900
  timestamp: 1740828380668
901
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda
902
+ sha256: ab26cb11ad0d10f5c6637d925b044c74a3eacb5825686d3720313b3cb6d40cef
903
+ md5: 2714e43bfc035f7ef26796632aa1b523
904
+ depends:
905
+ - oniguruma 6.9.*
906
+ - libgcc >=13
907
+ - __glibc >=2.17,<3.0.a0
908
+ - oniguruma >=6.9.10,<6.10.0a0
909
+ license: MIT
910
+ license_family: MIT
911
+ purls: []
912
+ size: 313184
913
+ timestamp: 1751447310552
815
914
  - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.7.0-pyh534df25_0.conda
816
915
  sha256: 9def5c6fb3b3b4952a4f6b55a019b5c7065b592682b84710229de5a0b73f6364
817
916
  md5: c88f9579d08eb4031159f03640714ce3
@@ -861,16 +960,36 @@ packages:
861
960
  purls: []
862
961
  size: 725507
863
962
  timestamp: 1770267139900
864
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda
865
- sha256: 5fbeb2fc2673f0455af6079abf93faaf27f11a92574ad51565fa1ecac9a4e2aa
866
- md5: 4cb5878bdb9ebfa65b7cdff5445087c5
963
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda
964
+ sha256: ee2cf1499a5a5fd5f03c6203597fe14bf28c6ca2a8fffb761e41f3cf371e768e
965
+ md5: 5fdaa8b856683a5598459dead3976578
966
+ depends:
967
+ - __glibc >=2.17,<3.0.a0
968
+ - bzip2 >=1.0.8,<2.0a0
969
+ - libgcc >=14
970
+ - liblzma >=5.8.1,<6.0a0
971
+ - libxml2
972
+ - libxml2-16 >=2.14.6
973
+ - libzlib >=1.3.1,<2.0a0
974
+ - lz4-c >=1.10.0,<1.11.0a0
975
+ - lzo >=2.10,<3.0a0
976
+ - openssl >=3.5.4,<4.0a0
977
+ - zstd >=1.5.7,<1.6.0a0
978
+ license: BSD-2-Clause
979
+ license_family: BSD
980
+ purls: []
981
+ size: 886102
982
+ timestamp: 1767630453053
983
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda
984
+ sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb
985
+ md5: e9c56daea841013e7774b5cd46f41564
867
986
  depends:
868
987
  - __osx >=11.0
869
988
  license: Apache-2.0 WITH LLVM-exception
870
989
  license_family: Apache
871
990
  purls: []
872
- size: 570068
873
- timestamp: 1770238262922
991
+ size: 568910
992
+ timestamp: 1772001095642
874
993
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda
875
994
  sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5
876
995
  md5: e7f7ce06ec24cfcfb9e36d28cf82ba57
@@ -917,6 +1036,20 @@ packages:
917
1036
  purls: []
918
1037
  size: 40979
919
1038
  timestamp: 1769456747661
1039
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libfuse3-3.18.1-h9a46e9c_0.conda
1040
+ sha256: 78f7b5cdbe11de46ce002051b7f7704a5355adcd1981ef4bab5a257f2de768c0
1041
+ md5: 05fc8ed4897addcb7a3dacf828f0e64d
1042
+ depends:
1043
+ - __glibc >=2.17,<3.0.a0
1044
+ - libgcc >=14
1045
+ - libiconv >=1.18,<2.0a0
1046
+ constrains:
1047
+ - libfuse <3
1048
+ license: LGPL-2.1-only AND GPL-2.0-only
1049
+ license_family: GPL
1050
+ purls: []
1051
+ size: 444602
1052
+ timestamp: 1766280090297
920
1053
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
921
1054
  sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5
922
1055
  md5: 0aa00f03f9e39fb9876085dee11a85d4
@@ -927,12 +1060,23 @@ packages:
927
1060
  - libgcc-ng ==15.2.0=*_18
928
1061
  - libgomp 15.2.0 he0feb66_18
929
1062
  license: GPL-3.0-only WITH GCC-exception-3.1
1063
+ license_family: GPL
930
1064
  purls: []
931
1065
  size: 1041788
932
1066
  timestamp: 1771378212382
933
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_0.conda
934
- sha256: 0d8cf491cb00aeb35fcfb68dfcb5b0ad188a98fb35c21c2421d2b2acc128cbf5
935
- md5: b7113551db5a3e2403cdd052c66e9999
1067
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda
1068
+ sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893
1069
+ md5: d5e96b1ed75ca01906b3d2469b4ce493
1070
+ depends:
1071
+ - libgcc 15.2.0 he0feb66_18
1072
+ license: GPL-3.0-only WITH GCC-exception-3.1
1073
+ license_family: GPL
1074
+ purls: []
1075
+ size: 27526
1076
+ timestamp: 1771378224552
1077
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda
1078
+ sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce
1079
+ md5: bb26456332b07f68bf3b7622ed71c0da
936
1080
  depends:
937
1081
  - __glibc >=2.17,<3.0.a0
938
1082
  - libffi >=3.5.2,<3.6.0a0
@@ -941,17 +1085,18 @@ packages:
941
1085
  - libzlib >=1.3.1,<2.0a0
942
1086
  - pcre2 >=10.47,<10.48.0a0
943
1087
  constrains:
944
- - glib 2.86.4 *_0
1088
+ - glib 2.86.4 *_1
945
1089
  license: LGPL-2.1-or-later
946
1090
  purls: []
947
- size: 4432190
948
- timestamp: 1771291719860
1091
+ size: 4398701
1092
+ timestamp: 1771863239578
949
1093
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
950
1094
  sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110
951
1095
  md5: 239c5e9546c38a1e884d69effcf4c882
952
1096
  depends:
953
1097
  - __glibc >=2.17,<3.0.a0
954
1098
  license: GPL-3.0-only WITH GCC-exception-3.1
1099
+ license_family: GPL
955
1100
  purls: []
956
1101
  size: 603262
957
1102
  timestamp: 1771378117851
@@ -1009,9 +1154,19 @@ packages:
1009
1154
  purls: []
1010
1155
  size: 73690
1011
1156
  timestamp: 1769482560514
1012
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda
1013
- sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217
1014
- md5: da5be73701eecd0e8454423fd6ffcf30
1157
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libseccomp-2.6.0-hb03c661_0.conda
1158
+ sha256: 5702c323cc6e1b9327f4f2aad32269301a4189944cdc847ee3ac9d6f96694d24
1159
+ md5: 6b17df90864bfc2b42881b42365968de
1160
+ depends:
1161
+ - __glibc >=2.17,<3.0.a0
1162
+ - libgcc >=14
1163
+ license: LGPL-2.1-only
1164
+ purls: []
1165
+ size: 95153
1166
+ timestamp: 1764897052812
1167
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda
1168
+ sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993
1169
+ md5: fd893f6a3002a635b5e50ceb9dd2c0f4
1015
1170
  depends:
1016
1171
  - __glibc >=2.17,<3.0.a0
1017
1172
  - icu >=78.2,<79.0a0
@@ -1019,19 +1174,19 @@ packages:
1019
1174
  - libzlib >=1.3.1,<2.0a0
1020
1175
  license: blessing
1021
1176
  purls: []
1022
- size: 942808
1023
- timestamp: 1768147973361
1024
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
1025
- sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167
1026
- md5: 4b0bf313c53c3e89692f020fb55d5f2c
1177
+ size: 951405
1178
+ timestamp: 1772818874251
1179
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda
1180
+ sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c
1181
+ md5: f6233a3fddc35a2ec9f617f79d6f3d71
1027
1182
  depends:
1028
1183
  - __osx >=11.0
1029
1184
  - icu >=78.2,<79.0a0
1030
1185
  - libzlib >=1.3.1,<2.0a0
1031
1186
  license: blessing
1032
1187
  purls: []
1033
- size: 909777
1034
- timestamp: 1768148320535
1188
+ size: 918420
1189
+ timestamp: 1772819478684
1035
1190
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
1036
1191
  sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e
1037
1192
  md5: 1b08cd684f34175e4514474793d44bcb
@@ -1041,6 +1196,7 @@ packages:
1041
1196
  constrains:
1042
1197
  - libstdcxx-ng ==15.2.0=*_18
1043
1198
  license: GPL-3.0-only WITH GCC-exception-3.1
1199
+ license_family: GPL
1044
1200
  purls: []
1045
1201
  size: 5852330
1046
1202
  timestamp: 1771378262446
@@ -1055,6 +1211,39 @@ packages:
1055
1211
  purls: []
1056
1212
  size: 40311
1057
1213
  timestamp: 1766271528534
1214
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda
1215
+ sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392
1216
+ md5: e49238a1609f9a4a844b09d9926f2c3d
1217
+ depends:
1218
+ - __glibc >=2.17,<3.0.a0
1219
+ - icu >=78.2,<79.0a0
1220
+ - libgcc >=14
1221
+ - libiconv >=1.18,<2.0a0
1222
+ - liblzma >=5.8.2,<6.0a0
1223
+ - libxml2-16 2.15.2 hca6bf5a_0
1224
+ - libzlib >=1.3.1,<2.0a0
1225
+ license: MIT
1226
+ license_family: MIT
1227
+ purls: []
1228
+ size: 45968
1229
+ timestamp: 1772704614539
1230
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda
1231
+ sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c
1232
+ md5: f3bc152cb4f86babe30f3a4bf0dbef69
1233
+ depends:
1234
+ - __glibc >=2.17,<3.0.a0
1235
+ - icu >=78.2,<79.0a0
1236
+ - libgcc >=14
1237
+ - libiconv >=1.18,<2.0a0
1238
+ - liblzma >=5.8.2,<6.0a0
1239
+ - libzlib >=1.3.1,<2.0a0
1240
+ constrains:
1241
+ - libxml2 2.15.2
1242
+ license: MIT
1243
+ license_family: MIT
1244
+ purls: []
1245
+ size: 557492
1246
+ timestamp: 1772704601644
1058
1247
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
1059
1248
  sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4
1060
1249
  md5: edb0dca6bc32e4f4789199455a1dbeb8
@@ -1080,6 +1269,29 @@ packages:
1080
1269
  purls: []
1081
1270
  size: 46438
1082
1271
  timestamp: 1727963202283
1272
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda
1273
+ sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346
1274
+ md5: 9de5350a85c4a20c685259b889aa6393
1275
+ depends:
1276
+ - __glibc >=2.17,<3.0.a0
1277
+ - libgcc >=13
1278
+ - libstdcxx >=13
1279
+ license: BSD-2-Clause
1280
+ license_family: BSD
1281
+ purls: []
1282
+ size: 167055
1283
+ timestamp: 1733741040117
1284
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda
1285
+ sha256: 5c6bbeec116e29f08e3dad3d0524e9bc5527098e12fc432c0e5ca53ea16337d4
1286
+ md5: 45161d96307e3a447cc3eb5896cf6f8c
1287
+ depends:
1288
+ - libgcc >=14
1289
+ - __glibc >=2.17,<3.0.a0
1290
+ license: GPL-2.0-or-later
1291
+ license_family: GPL
1292
+ purls: []
1293
+ size: 191060
1294
+ timestamp: 1753889274283
1083
1295
  - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda
1084
1296
  sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e
1085
1297
  md5: 5b5203189eb668f042ac2b0826244964
@@ -1169,6 +1381,17 @@ packages:
1169
1381
  - pkg:pypi/nh3?source=hash-mapping
1170
1382
  size: 634553
1171
1383
  timestamp: 1771078287944
1384
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda
1385
+ sha256: bbff8a60f70d5ebab138b564554f28258472e1e63178614562d4feee29d10da2
1386
+ md5: 6ce853cb231f18576d2db5c2d4cb473e
1387
+ depends:
1388
+ - __glibc >=2.17,<3.0.a0
1389
+ - libgcc >=13
1390
+ license: BSD-2-Clause
1391
+ license_family: BSD
1392
+ purls: []
1393
+ size: 248670
1394
+ timestamp: 1735727084819
1172
1395
  - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda
1173
1396
  sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c
1174
1397
  md5: f61eb8cd60ff9057122a3d338b99c00f
@@ -1513,9 +1736,9 @@ packages:
1513
1736
  - pkg:pypi/rfc3986?source=hash-mapping
1514
1737
  size: 38028
1515
1738
  timestamp: 1733921806657
1516
- - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda
1517
- sha256: ed17985cec5a0540002c6cabe67848f7cc17e5f4019c0e2a40534e9b7c0b38de
1518
- md5: 33950a076fd589a7655c6888cc3d2b34
1739
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda
1740
+ sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590
1741
+ md5: 7a6289c50631d620652f5045a63eb573
1519
1742
  depends:
1520
1743
  - markdown-it-py >=2.2.0
1521
1744
  - pygments >=2.13.0,<3.0.0
@@ -1526,8 +1749,8 @@ packages:
1526
1749
  license_family: MIT
1527
1750
  purls:
1528
1751
  - pkg:pypi/rich?source=compressed-mapping
1529
- size: 208269
1530
- timestamp: 1769971520792
1752
+ size: 208472
1753
+ timestamp: 1771572730357
1531
1754
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.14-h40fa522_1.conda
1532
1755
  noarch: python
1533
1756
  sha256: 0c6c9825ff88195fd13936d63872213d6c88c1fe795d136881c0753c3037c5ff
@@ -1597,23 +1820,56 @@ packages:
1597
1820
  - configargparse>=1.7
1598
1821
  - packaging>=24.0,<26.0
1599
1822
  requires_python: '>=3.8'
1600
- - pypi: https://files.pythonhosted.org/packages/3e/40/78867f0bacd71b973d6c76ea94a8324d017ee4c1d8c6b96cc8efdb86c466/snakemake_interface_software_deployment_plugins-0.10.1-py3-none-any.whl
1823
+ - pypi: https://files.pythonhosted.org/packages/70/69/ac592871aa3fb98b85a7d5e013ff8fca7bcb2e923a9e1806aa096dc964c0/snakemake_interface_software_deployment_plugins-0.15.0-py3-none-any.whl
1601
1824
  name: snakemake-interface-software-deployment-plugins
1602
- version: 0.10.1
1603
- sha256: da2a221c2a56caad99c9998863aeb41e6d930530507009b29a0ea05bdab476a8
1825
+ version: 0.15.0
1826
+ sha256: af0982dbae114a6df08ef93f227a4280e6ce086a1d77502b9e4d0845a1e8f846
1604
1827
  requires_dist:
1605
1828
  - argparse-dataclass>=2.0.0,<3.0
1606
1829
  - snakemake-interface-common>=1.17.4,<2.0.0
1607
1830
  requires_python: '>=3.11,<4.0'
1608
1831
  - pypi: ./
1609
1832
  name: snakemake-software-deployment-plugin-container
1610
- version: 0.3.0
1611
- sha256: fbd9c1a2618e53ae973413383190a06842d47bfc6b52ccf93a654a06aeba2478
1833
+ version: 0.5.0
1834
+ sha256: 0e3785b8002a15ac0cdcc06f1c49ace8589d148ccaed349fc7559d17d361aeca
1612
1835
  requires_dist:
1613
1836
  - snakemake-interface-common>=1.17.4,<2.0.0
1614
- - snakemake-interface-software-deployment-plugins>=0.9.1,<1.0
1837
+ - snakemake-interface-software-deployment-plugins>=0.15.0,<1.0
1615
1838
  - udocker>=1.3.17,<2.0.0
1616
1839
  requires_python: '>=3.11,<4.0'
1840
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/squashfs-tools-4.7.5-h7b2cdf3_0.conda
1841
+ sha256: 26ff56e6971967fb3db558522bd7c48be138a6dd4d89a3f0d1da7fc193f2fa85
1842
+ md5: 6736d727970007fe6822334502eaabc5
1843
+ depends:
1844
+ - __glibc >=2.17,<3.0.a0
1845
+ - libgcc >=14
1846
+ - zstd >=1.5.7,<1.6.0a0
1847
+ - lz4-c >=1.10.0,<1.11.0a0
1848
+ - liblzma >=5.8.2,<6.0a0
1849
+ - lzo >=2.10,<3.0a0
1850
+ - libzlib >=1.3.1,<2.0a0
1851
+ license: GPL-2.0-or-later
1852
+ license_family: GPL
1853
+ purls: []
1854
+ size: 282115
1855
+ timestamp: 1772548039399
1856
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/squashfuse-0.6.1-hb8971b7_1.conda
1857
+ sha256: 44e9cba06e0fdce1520891f0bda7691e1f41ab221e5773016e45cb0dda21a47d
1858
+ md5: b900adfc16e5367aa80929e66809aff2
1859
+ depends:
1860
+ - __glibc >=2.17,<3.0.a0
1861
+ - libfuse3 >=3.18.0,<4.0a0
1862
+ - libgcc >=14
1863
+ - liblzma >=5.8.1,<6.0a0
1864
+ - libzlib >=1.3.1,<2.0a0
1865
+ - lz4-c >=1.10.0,<1.11.0a0
1866
+ - lzo >=2.10,<3.0a0
1867
+ - zstd >=1.5.7,<1.6.0a0
1868
+ license: BSD-2-Clause
1869
+ license_family: BSD
1870
+ purls: []
1871
+ size: 64133
1872
+ timestamp: 1766138155082
1617
1873
  - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
1618
1874
  sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac
1619
1875
  md5: cffd3bdd58090148f4cfcd831f4b26ab
@@ -1732,7 +1988,7 @@ packages:
1732
1988
  license: MIT
1733
1989
  license_family: MIT
1734
1990
  purls:
1735
- - pkg:pypi/zipp?source=compressed-mapping
1991
+ - pkg:pypi/zipp?source=hash-mapping
1736
1992
  size: 24194
1737
1993
  timestamp: 1764460141901
1738
1994
  - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "snakemake-software-deployment-plugin-container"
3
- version = "0.3.0"
3
+ version = "0.5.0"
4
4
  authors = [
5
5
  { name = "Ben Carrillo", email = "ben.uzh@pm.me" },
6
6
  { name = "Johannes Köster", email = "johannes.koester@uni-due.de" }
@@ -10,7 +10,7 @@ readme = "README.md"
10
10
  requires-python = ">=3.11,<4.0"
11
11
  dependencies = [
12
12
  "snakemake-interface-common (>=1.17.4,<2.0.0)",
13
- "snakemake-interface-software-deployment-plugins (>=0.9.1,<1.0)",
13
+ "snakemake-interface-software-deployment-plugins (>=0.15.0,<1.0)",
14
14
  "udocker (>=1.3.17,<2.0.0)",
15
15
  ]
16
16
 
@@ -39,6 +39,9 @@ ruff = ">=0.10.0,<0.15"
39
39
  pytest-cov = ">=6.0.0,<7"
40
40
  pyrefly = ">=0.52.0,<0.53"
41
41
 
42
+ [tool.pixi.feature.dev.target.linux-64.dependencies]
43
+ apptainer = ">=1.4.5,<2.0"
44
+
42
45
  [tool.pixi.feature.dev.tasks]
43
46
  format = "ruff format"
44
47
  lint = "ruff check"
@@ -57,7 +60,7 @@ cmd = [
57
60
 
58
61
  [tool.coverage.report]
59
62
  exclude_lines = ["pass", "\\.\\.\\."]
60
- fail_under = 91.0
63
+ fail_under = 87.0
61
64
 
62
65
  [tool.pixi.feature.publish.dependencies]
63
66
  twine = ">=6.1.0,<7"
@@ -1,10 +1,11 @@
1
+ import re
2
+
1
3
  __author__ = "ben carrillo"
2
4
  __copyright__ = "Copyright 2025, ben carrillo"
3
5
  __email__ = "ben.uzh@pm.me"
4
6
  __license__ = "MIT"
5
7
 
6
8
  import shlex
7
- import tempfile
8
9
  from dataclasses import dataclass, field
9
10
  from os import getcwd
10
11
  from shutil import which
@@ -12,6 +13,7 @@ from typing import Iterable, List
12
13
 
13
14
  from snakemake_interface_software_deployment_plugins.settings import (
14
15
  SoftwareDeploymentSettingsBase,
16
+ CommonSettings,
15
17
  )
16
18
  from snakemake_interface_software_deployment_plugins import (
17
19
  EnvBase,
@@ -30,6 +32,7 @@ from snakemake_interface_common.settings import SettingsEnumBase
30
32
  class Runtime(SettingsEnumBase):
31
33
  UDOCKER = 0
32
34
  PODMAN = 1
35
+ APPTAINER = 2
33
36
 
34
37
 
35
38
  @dataclass
@@ -53,10 +56,11 @@ class Settings(SoftwareDeploymentSettingsBase):
53
56
  )
54
57
 
55
58
 
59
+ common_settings = CommonSettings(provides="container")
60
+
61
+
56
62
  @dataclass
57
63
  class EnvSpec(EnvSpecBase):
58
- # TODO: when integrating this plugin, image_uri should be populated from the container keyword (via whatever mechanism is exposing)
59
- # the plugin to the software deployment registry.
60
64
  image_uri: str
61
65
 
62
66
  @classmethod
@@ -76,8 +80,8 @@ class EnvSpec(EnvSpecBase):
76
80
  class Env(EnvBase):
77
81
  # image_repo is the de-referenced repository from where the image was obtained
78
82
  image_repo: str
79
- settings: Settings # type: ignore
80
- spec: EnvSpec # type: ignore
83
+ settings: Settings
84
+ spec: EnvSpec
81
85
 
82
86
  # image_hash is a hash of the image that can be used to identify it
83
87
  # TODO: populate it *after* fetching/execution
@@ -85,22 +89,19 @@ class Env(EnvBase):
85
89
 
86
90
  def __post_init__(self) -> None:
87
91
  self.check()
92
+ self.runtime_manager = RuntimeManager(self)
93
+ if self.settings.runtime == Runtime.APPTAINER:
94
+ self.runtime_manager = RuntimeManagerApptainer(self)
88
95
 
89
96
  # The decorator ensures that the decorated method is only called once
90
97
  # in case multiple environments of the same kind are created.
91
98
  @EnvBase.once
92
99
  def check(self) -> None:
100
+ # TODO: if we don't get the tag, we should assume :latest
101
+ # TODO: normalize tag to always use : instead of # as formerly with singularity
93
102
  self._check_service()
94
103
 
95
104
  def _check_service(self) -> None:
96
- if self.spec.image_uri == "":
97
- raise WorkflowError("Image URI is empty")
98
-
99
- # TODO: if we don't get the tag, we should assume :latest
100
-
101
- if self.settings.runtime not in Runtime.all():
102
- raise WorkflowError("Invalid container kind")
103
-
104
105
  # this assumes that the choices are the same as the command names. If
105
106
  # this is not the case, we need to add a mapping.
106
107
  self._check_executable()
@@ -111,28 +112,17 @@ class Env(EnvBase):
111
112
  raise WorkflowError(f"{cmd} is not available in PATH")
112
113
 
113
114
  def decorate_shellcmd(self, cmd: str) -> str:
114
- # TODO pass more options here (user etc)
115
- tmpdir = tempfile.gettempdir()
116
-
117
- mountpoints = (
118
- f" -v {getcwd()!r}:{getcwd()!r}" # Mount host directory to container
119
- f" -v {str(self.source_cache)!r}:{str(self.source_cache)!r}" # Mount host cache to container
120
- f" -v {tmpdir!r}:{tmpdir!r}" # always mount the temporary directory
115
+ return self.runtime_manager.decorate_shellcmd(cmd)
116
+
117
+ def contains_executable(self, executable: str) -> bool:
118
+ return (
119
+ self.run_cmd(
120
+ self.decorate_shellcmd(f"which {executable}"),
121
+ check=True,
122
+ capture_output=True,
123
+ ).returncode
124
+ == 0
121
125
  )
122
- for mountpoint in self.settings.mountpoints:
123
- mountpoints += f" -v {mountpoint!r}"
124
-
125
- decorated_cmd = (
126
- f"{self.settings.runtime} run"
127
- " --rm" # Remove container after execution
128
- f" -w {getcwd()!r}" # Working directory inside container
129
- f" {mountpoints}"
130
- f" {self.spec.image_uri}" # Container image
131
- " /bin/sh" # Shell executable
132
- f" -c {shlex.quote(cmd)}" # The command to execute
133
- )
134
-
135
- return decorated_cmd
136
126
 
137
127
  def record_hash(self, hash_object) -> None:
138
128
  # Update given hash such that it changes whenever the environment
@@ -149,7 +139,68 @@ class Env(EnvBase):
149
139
  # hide those for clarity. In case of containers, it is also valid to
150
140
  # return the container URI as a "software".
151
141
  # Return an empty tuple () if no software can be reported.
152
- # TODO: implement.
153
- # Get container URI + hash (assuming we've already executd and fetched the image,
154
- # so that we can get the hash for the image plus the tag)
155
- return ()
142
+ return [SoftwareReport(name=self.spec.image_uri)]
143
+
144
+
145
+ @dataclass
146
+ class RuntimeManager:
147
+ env: Env
148
+
149
+ def options(self) -> str:
150
+ return "--rm"
151
+
152
+ def workdir_option(self) -> str:
153
+ return "-w"
154
+
155
+ def mount_option(self) -> str:
156
+ return "-v"
157
+
158
+ def image_uri(self) -> str:
159
+ return self.env.spec.image_uri
160
+
161
+ def subcommand(self) -> str:
162
+ return "run"
163
+
164
+ def mountpoints(self) -> str:
165
+ mountpoints = ""
166
+ # always mount the temporary directory
167
+ for source, mountpoint in [
168
+ (self.env.tempdir, "/tmp"),
169
+ (self.env.tempdir, self.env.tempdir),
170
+ (getcwd(), getcwd()),
171
+ ]:
172
+ mountpoints += f" {self.mount_option()} {str(source)!r}:{str(mountpoint)!r}"
173
+ for mountpoint in self.env.settings.mountpoints:
174
+ mountpoints += f" {self.mount_option()} {mountpoint!r}"
175
+ return mountpoints
176
+
177
+ def decorate_shellcmd(self, cmd: str) -> str:
178
+ mountpoints = self.mountpoints()
179
+ return (
180
+ f"{self.env.settings.runtime} {self.subcommand()}"
181
+ f" {self.options()}"
182
+ f" {self.workdir_option()} {getcwd()!r}" # Working directory inside container
183
+ f" {mountpoints}"
184
+ f" {self.image_uri()}" # Container image
185
+ " /bin/sh" # Shell executable
186
+ f" -c {shlex.quote(cmd)}" # The command to execute
187
+ )
188
+
189
+
190
+ class RuntimeManagerApptainer(RuntimeManager):
191
+ def subcommand(self) -> str:
192
+ return "exec"
193
+
194
+ def options(self) -> str:
195
+ return ""
196
+
197
+ def workdir_option(self) -> str:
198
+ return "--cwd"
199
+
200
+ def mount_option(self) -> str:
201
+ return "--bind"
202
+
203
+ def image_uri(self) -> str:
204
+ if re.match(r"[a-z\.]+://", super().image_uri()):
205
+ return super().image_uri()
206
+ return f"docker://{super().image_uri()}"
@@ -30,6 +30,10 @@ from snakemake_software_deployment_plugin_container import (
30
30
  class TestBase(TestSoftwareDeploymentBase):
31
31
  test_container = "alpine:latest"
32
32
 
33
+ def get_contained_executable(self) -> str:
34
+ # just provide something that is available inside of the container
35
+ return "sh"
36
+
33
37
  def get_env_spec(self) -> EnvSpecBase:
34
38
  # If the software deployment provider does not support deployable environments,
35
39
  # this method should return an existing environment spec that can be used
@@ -49,6 +53,31 @@ class TestBase(TestSoftwareDeploymentBase):
49
53
  return "/bin/true"
50
54
 
51
55
 
56
+ class TestApptainerContainer(TestBase):
57
+ # TODO reactivate apptainer tests, they currently fail in CI with
58
+ # ERROR : Could not write info to setgroups: Permission denied
59
+ # ERROR : Error while waiting event for user namespace mappings: no event received
60
+ __test__ = False
61
+
62
+ def get_settings(
63
+ self,
64
+ ) -> Optional[SoftwareDeploymentSettingsBase]:
65
+ return Settings(runtime=Runtime.APPTAINER)
66
+
67
+
68
+ class TestApptainerContainerWithScheme(TestBase):
69
+ # TODO reactivate apptainer tests, they currently fail in CI with
70
+ # ERROR : Could not write info to setgroups: Permission denied
71
+ # ERROR : Error while waiting event for user namespace mappings: no event received
72
+ __test__ = False
73
+ test_container = "docker://alpine:latest"
74
+
75
+ def get_settings(
76
+ self,
77
+ ) -> Optional[SoftwareDeploymentSettingsBase]:
78
+ return Settings(runtime=Runtime.APPTAINER)
79
+
80
+
52
81
  class TestUDockerContainer(TestBase):
53
82
  __test__ = True # activate automatic testing
54
83
 
@@ -1,7 +0,0 @@
1
- [flake8]
2
- # Recommend matching the black line length (default 88),
3
- # rather than using the flake8 default of 79:
4
- max-line-length = 88
5
- extend-ignore =
6
- # See https://github.com/PyCQA/pycodestyle/issues/373
7
- E203,