Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions nf_core/modules/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,10 +322,10 @@ def _replace(match: "re.Match[str]") -> str:
indent = match.group(1)
inner_indent = indent + " "
return (
f"{indent}container \"${{ workflow.containerEngine in ['singularity', 'apptainer'] "
f"{indent}container \"${{workflow.containerEngine in ['singularity', 'apptainer'] "
"&& !task.ext.singularity_pull_docker_container\n"
f"? {inner_indent}'{singularity_image}'\n"
f": {inner_indent}'{docker_image}' }}\""
f"{inner_indent}? '{singularity_image}'\n"
f"{inner_indent}: '{docker_image}'}}\""
)

new_content = re.sub(
Expand Down
24 changes: 24 additions & 0 deletions tests/modules/test_containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,30 @@ def test_get_containers_from_meta_success(self):
assert result is not None
assert result == MetaYmlContainers.model_validate(containers)

def test_update_main_nf_container_matches_nf_core_formatting(self):
"""The rewritten directive must match the formatting used across nf-core/modules.

The ternary operators belong at the start of the indented continuation lines,
and there is no padding inside `${...}`.
"""
singularity = "https://community-cr-prod.seqera.io/blobs/sha256/e6/e613097/data"
docker = "community.wave.seqera.io/library/bpipe_test:0.1.0--abc123"
self.module_containers.containers = MetaYmlContainers(
docker={p: ContainerEntry(name=docker) for p in CONTAINER_PLATFORMS},
singularity={p: ContainerEntry(name=singularity) for p in CONTAINER_PLATFORMS},
)

main_nf = self.bpipe_test_module_path / "main.nf"
self.module_containers.update_main_nf_container(force=True)

expected = (
" container \"${workflow.containerEngine in ['singularity', 'apptainer'] "
"&& !task.ext.singularity_pull_docker_container\n"
f" ? '{singularity}'\n"
f" : '{docker}'}}\""
)
assert expected in main_nf.read_text()

def test_update_containers_in_meta_merges(self):
self._write_meta({"name": "bpipe/test", "containers": {"docker": {"linux/amd64": {"name": "old"}}}})
containers = self._containers_by_system("new")
Expand Down