From 2846eab72965148f54704d9c8304d1b9d2dd9282 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 13:51:19 +0100 Subject: [PATCH 01/12] initial syntax changes and bulk modules update --- modules.json | 44 +- modules/nf-core/bcftools/concat/main.nf | 75 +-- modules/nf-core/bcftools/concat/meta.yml | 26 +- .../bcftools/concat/tests/main.nf.test | 15 +- .../bcftools/concat/tests/main.nf.test.snap | 164 +++++-- modules/nf-core/bcftools/merge/main.nf | 81 ++-- modules/nf-core/bcftools/merge/meta.yml | 46 +- .../nf-core/bcftools/merge/tests/bcf.config | 3 - .../bcftools/merge/tests/bcf_gz.config | 3 - .../nf-core/bcftools/merge/tests/main.nf.test | 386 +++++---------- .../bcftools/merge/tests/main.nf.test.snap | 455 +++++++++--------- .../bcftools/merge/tests/nextflow.config | 2 +- .../bcftools/merge/tests/nextflow.gvcf.config | 5 - .../nf-core/bcftools/merge/tests/vcf.config | 3 - .../bcftools/merge/tests/vcf_gz.config | 3 - .../bcftools/merge/tests/vcf_gz_index.config | 3 - .../merge/tests/vcf_gz_index_csi.config | 3 - .../merge/tests/vcf_gz_index_tbi.config | 3 - modules/nf-core/bcftools/sort/main.nf | 74 +-- modules/nf-core/bcftools/sort/meta.yml | 26 +- .../nf-core/bcftools/sort/tests/main.nf.test | 14 +- .../bcftools/sort/tests/main.nf.test.snap | 154 ++++-- .../ensemblvep/download/environment.yml | 4 +- modules/nf-core/ensemblvep/download/main.nf | 17 +- modules/nf-core/ensemblvep/download/meta.yml | 52 +- .../ensemblvep/download/tests/main.nf.test | 8 +- .../download/tests/main.nf.test.snap | 191 ++------ .../ensemblvep/vep/ensemblvep-vep.diff | 25 +- .../nf-core/ensemblvep/vep/environment.yml | 3 +- modules/nf-core/ensemblvep/vep/main.nf | 39 +- modules/nf-core/ensemblvep/vep/meta.yml | 136 +++++- .../nf-core/ensemblvep/vep/tests/main.nf.test | 31 +- .../ensemblvep/vep/tests/main.nf.test.snap | 73 ++- .../ensemblvep/vep/tests/nextflow.config | 2 +- modules/nf-core/minimap2/align/main.nf | 36 +- modules/nf-core/minimap2/align/meta.yml | 26 +- .../nf-core/minimap2/align/tests/main.nf.test | 14 +- .../minimap2/align/tests/main.nf.test.snap | 208 +++++--- modules/nf-core/minimap2/index/main.nf | 12 +- modules/nf-core/minimap2/index/meta.yml | 29 +- .../nf-core/minimap2/index/tests/main.nf.test | 24 +- .../minimap2/index/tests/main.nf.test.snap | 61 ++- modules/nf-core/modkit/pileup/environment.yml | 2 +- modules/nf-core/modkit/pileup/main.nf | 16 +- modules/nf-core/modkit/pileup/meta.yml | 27 +- .../modkit/pileup/tests/main.nf.test.snap | 170 +++++-- modules/nf-core/mosdepth/environment.yml | 3 +- modules/nf-core/mosdepth/main.nf | 25 +- modules/nf-core/mosdepth/meta.yml | 28 +- modules/nf-core/mosdepth/tests/main.nf.test | 68 ++- .../nf-core/mosdepth/tests/main.nf.test.snap | 112 ++++- .../nf-core/mosdepth/tests/nextflow.config | 5 + .../nf-core/mosdepth/tests/quantized.config | 3 - .../nf-core/mosdepth/tests/threshold.config | 3 - modules/nf-core/mosdepth/tests/window.config | 3 - modules/nf-core/multiqc/main.nf | 27 +- modules/nf-core/multiqc/meta.yml | 168 ++++--- modules/nf-core/multiqc/tests/main.nf.test | 129 +++-- .../nf-core/multiqc/tests/main.nf.test.snap | 109 ++++- modules/nf-core/pigz/uncompress/main.nf | 1 - modules/nf-core/pigz/uncompress/meta.yml | 2 +- modules/nf-core/samtools/cat/main.nf | 12 +- modules/nf-core/samtools/cat/meta.yml | 26 +- .../nf-core/samtools/cat/tests/main.nf.test | 28 +- .../samtools/cat/tests/main.nf.test.snap | 142 +++--- modules/nf-core/samtools/faidx/main.nf | 3 +- modules/nf-core/samtools/faidx/meta.yml | 17 +- .../nf-core/samtools/faidx/tests/main.nf.test | 118 ++--- .../samtools/faidx/tests/main.nf.test.snap | 311 +----------- modules/nf-core/samtools/flagstat/main.nf | 12 +- modules/nf-core/samtools/flagstat/meta.yml | 33 +- .../samtools/flagstat/tests/main.nf.test.snap | 40 +- modules/nf-core/samtools/idxstats/main.nf | 12 +- modules/nf-core/samtools/idxstats/meta.yml | 29 +- .../samtools/idxstats/tests/main.nf.test | 10 +- .../samtools/idxstats/tests/main.nf.test.snap | 80 ++- modules/nf-core/samtools/index/main.nf | 12 +- modules/nf-core/samtools/index/meta.yml | 29 +- .../nf-core/samtools/index/tests/main.nf.test | 27 +- .../samtools/index/tests/main.nf.test.snap | 278 ++++------- modules/nf-core/samtools/stats/main.nf | 4 +- modules/nf-core/severus/main.nf | 40 +- modules/nf-core/severus/severus.diff | 88 +--- .../nf-core/severus/tests/main.nf.test.snap | 24 +- modules/nf-core/untar/main.nf | 11 +- modules/nf-core/untar/meta.yml | 28 +- modules/nf-core/untar/tests/main.nf.test | 20 +- modules/nf-core/untar/tests/main.nf.test.snap | 176 +++---- modules/nf-core/unzip/main.nf | 1 - subworkflows/local/prepare_reference_files.nf | 10 +- .../nf-core/bam_stats_samtools/main.nf | 6 - .../bam_stats_samtools/tests/main.nf.test | 9 +- .../tests/main.nf.test.snap | 60 +-- workflows/lrsomatic.nf | 10 +- 94 files changed, 2604 insertions(+), 2582 deletions(-) delete mode 100644 modules/nf-core/bcftools/merge/tests/bcf.config delete mode 100644 modules/nf-core/bcftools/merge/tests/bcf_gz.config delete mode 100644 modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config delete mode 100644 modules/nf-core/bcftools/merge/tests/vcf.config delete mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz.config delete mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index.config delete mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config delete mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/mosdepth/tests/nextflow.config delete mode 100644 modules/nf-core/mosdepth/tests/quantized.config delete mode 100644 modules/nf-core/mosdepth/tests/threshold.config delete mode 100644 modules/nf-core/mosdepth/tests/window.config diff --git a/modules.json b/modules.json index a2a488e3..100cd8a1 100644 --- a/modules.json +++ b/modules.json @@ -13,28 +13,28 @@ }, "bcftools/concat": { "branch": "master", - "git_sha": "345b60fff6a192d55c2a220ae413c57f29b698b7", + "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", "installed_by": ["modules", "vcf_gather_bcftools"] }, "bcftools/merge": { "branch": "master", - "git_sha": "f17049e03697726ace7499d2fe342f892594f6f3", + "git_sha": "3d9c2f4beaa4f62b3f006928fd9095a496d1e5a8", "installed_by": ["modules"] }, "bcftools/sort": { "branch": "master", - "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": ["vcf_gather_bcftools"], + "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", + "installed_by": ["modules", "vcf_gather_bcftools"], "patch": "modules/nf-core/bcftools/sort/bcftools-sort.diff" }, "ensemblvep/download": { "branch": "master", - "git_sha": "0567eee9276d4a358e5f9f01c810a149fbd241f8", + "git_sha": "90cdd21fd96ccbdb3bc90797ca69570d18391055", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "48ca3de1737b0144aa9fe05bea2b681f0ae45a95", + "git_sha": "890fdcff71928fc1470d3e669d4c430c8c770297", "installed_by": ["modules"], "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" }, @@ -51,80 +51,80 @@ }, "minimap2/align": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "5c9f8d5b7671237c906abadc9ff732b301ca15ca", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "14980f759266eec42dac401fcafeb83d6c957b41", "installed_by": ["modules"] }, "modkit/pileup": { "branch": "master", - "git_sha": "e8557b97c1e0e3751c5615e1fdbc5e8671eccc76", + "git_sha": "3d81317a30d1016b533982d6b84df07713ae520a", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", + "git_sha": "6832b69ef7f98c54876d6436360b6b945370c615", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "5bdb098216aaf5df9c3b6343e6204cd932503c16", + "git_sha": "2c73cc8fa92cf48de3da0b643fdf357a8a290b36", "installed_by": ["modules"] }, "pigz/uncompress": { "branch": "master", - "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", + "git_sha": "f84336b7fa91a65aa61d215b8c109fbb8e4b4ac6", "installed_by": ["modules"] }, "samtools/cat": { "branch": "master", - "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1", + "git_sha": "f9edc59be2fe25bb6fc73ca4dfc0d28246f2a2d6", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "9a48bce39a67e2cb34b8f125fc1d50f0ad98b616", + "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", - "git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", - "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", - "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "5cb9a8694da0a0e550921636bb60bc8c56445fd7", + "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df", "installed_by": ["bam_stats_samtools"], "patch": "modules/nf-core/samtools/stats/samtools-stats.diff" }, "severus": { "branch": "master", - "git_sha": "98a699d12b141aeb3d5da5c98ebd69a320ff350d", + "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", "installed_by": ["modules"], "patch": "modules/nf-core/severus/severus.diff" }, "untar": { "branch": "master", - "git_sha": "00ee87ebb541af0008596400ce6d5f66d79d5408", + "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", "installed_by": ["modules"] }, "unzip": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", "installed_by": ["modules"] }, "wget": { @@ -138,7 +138,7 @@ "nf-core": { "bam_stats_samtools": { "branch": "master", - "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index 5415b069..269da8e0 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -1,72 +1,73 @@ process BCFTOOLS_CONCAT { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': - 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' + : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" input: tuple val(meta), path(vcfs), path(tbi) output: - tuple val(meta), path("${prefix}.${extension}") , emit: vcf + tuple val(meta), path("${prefix}.${extension}"), emit: vcf tuple val(meta), path("${prefix}.${extension}.tbi"), emit: tbi, optional: true tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" def tbi_names = tbi.findAll { file -> !(file instanceof List) }.collect { file -> file.name } def create_input_index = vcfs.collect { vcf -> tbi_names.contains(vcf.name + ".tbi") || tbi_names.contains(vcf.name + ".csi") ? "" : "tabix ${vcf}" }.join("\n ") - extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" - def input = vcfs.sort{it.toString()}.join(" ") + extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" + def input = vcfs.sort { vcf -> vcf.toString() }.join(" ") """ ${create_input_index} bcftools concat \\ --output ${prefix}.${extension} \\ - $args \\ - --threads $task.cpus \\ + ${args} \\ + --threads ${task.cpus} \\ ${input} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS """ stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" - def index_extension = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : - args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : - args.contains("--write-index") || args.contains("-W") ? "csi" : - "" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" + def index_extension = args.contains("--write-index=tbi") || args.contains("-W=tbi") + ? "tbi" + : args.contains("--write-index=csi") || args.contains("-W=csi") + ? "csi" + : args.contains("--write-index") || args.contains("-W") + ? "csi" + : "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" def create_index = extension.endsWith(".gz") && index_extension.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index_extension}" : "" """ ${create_cmd} ${prefix}.${extension} ${create_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index 5e14b5a3..1734a8c3 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -67,13 +67,27 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*.csi" + versions_bcftools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool authors: - "@abhi18av" - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test index 9c4e4baf..58e19991 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -37,7 +37,6 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index") { @@ -69,12 +68,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi") { @@ -106,12 +104,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi") { @@ -143,12 +140,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.tbi[0][1].endsWith(".tbi") } ) } - } @@ -177,7 +173,6 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { @@ -209,7 +204,6 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub") { @@ -242,7 +236,6 @@ nextflow_process { { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub") { @@ -275,7 +268,6 @@ nextflow_process { { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub") { @@ -308,7 +300,6 @@ nextflow_process { { assert process.out.tbi[0][1].endsWith(".tbi") } ) } - } diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap index 8d1a6363..5edf5beb 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -20,15 +20,21 @@ [ ], - [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-11-26T16:53:25.503018154" + "timestamp": "2026-01-20T11:59:52.705734505" }, "homo_sapiens - [[vcf1, vcf2], []]": { "content": [ @@ -48,7 +54,11 @@ ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -64,16 +74,20 @@ "test3.vcf:md5,0b4986bbb6bdc9e0ee12ba09e70092e9" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-11-26T16:56:01.364652383" + "timestamp": "2026-01-20T12:00:08.498123366" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { "content": [ @@ -93,7 +107,11 @@ ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -109,16 +127,20 @@ "test3.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T09:52:50.140505" + "timestamp": "2026-01-20T12:00:15.986212097" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub": { "content": [ @@ -143,7 +165,11 @@ ] ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ [ @@ -164,16 +190,20 @@ "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T09:52:55.544079" + "timestamp": "2026-01-20T12:00:24.007593166" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi": { "content": [ @@ -196,15 +226,21 @@ "test3_vcf.vcf.gz.tbi" ] ], - [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-11-26T16:53:33.38516503" + "timestamp": "2026-01-20T12:00:00.937832062" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]]": { "content": [ @@ -224,7 +260,11 @@ ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -240,16 +280,20 @@ "test3.vcf:md5,0b4986bbb6bdc9e0ee12ba09e70092e9" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-11-26T16:55:30.850726912" + "timestamp": "2026-01-20T11:59:37.378838683" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index": { "content": [ @@ -272,15 +316,21 @@ [ ], - [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-11-26T16:53:18.091429133" + "timestamp": "2026-01-20T11:59:45.296771646" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub": { "content": [ @@ -305,7 +355,11 @@ ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -326,16 +380,20 @@ "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T09:53:07.368971" + "timestamp": "2026-01-20T12:00:39.792930532" }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub": { "content": [ @@ -360,7 +418,11 @@ ] ], "3": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ], "csi": [ [ @@ -381,15 +443,19 @@ "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,689f810ab8f069cb75cfebed99a52df8" + "versions_bcftools": [ + [ + "BCFTOOLS_CONCAT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T09:53:01.405995" + "timestamp": "2026-01-20T12:00:31.985353981" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index c560a902..f1acbd3d 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -1,22 +1,20 @@ process BCFTOOLS_MERGE { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': - 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' + : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" input: - tuple val(meta), path(vcfs), path(tbis) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(bed) + tuple val(meta), path(vcfs), path(tbis), path(bed) + tuple val(meta2), path(fasta), path(fai) output: tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: vcf - tuple val(meta), path("*.{csi,tbi}") , emit: index, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*.{csi,tbi}"), emit: index, optional: true + tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: task.ext.when == null || task.ext.when @@ -25,50 +23,51 @@ process BCFTOOLS_MERGE { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input = (vcfs.collect().size() > 1) ? vcfs.sort{ it.name } : vcfs - def regions = bed ? "--regions-file $bed" : "" - def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" + def input = vcfs.collect().size() > 1 ? vcfs.sort { vcf -> vcf.name } : vcfs + def regions = bed ? "--regions-file ${bed}" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" """ bcftools merge \\ - $args \\ - $regions \\ - --threads $task.cpus \\ + ${args} \\ + ${regions} \\ + --threads ${task.cpus} \\ --output ${prefix}.${extension} \\ - $input - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS + ${input} """ stub: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" - def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : - args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : - args.contains("--write-index") || args.contains("-W") ? "csi" : - "" + def extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") + ? "tbi" + : args.contains("--write-index=csi") || args.contains("-W=csi") + ? "csi" + : args.contains("--write-index") || args.contains("-W") + ? "csi" + : "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" """ ${create_cmd} ${prefix}.${extension} ${create_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml index 09af245a..445e5c56 100644 --- a/modules/nf-core/bcftools/merge/meta.yml +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -31,6 +31,11 @@ input: List containing the tbi index files corresponding to the vcfs input files e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] ontologies: [] + - bed: + type: file + description: "(Optional) The bed regions to merge on" + pattern: "*.bed" + ontologies: [] - - meta2: type: map description: | @@ -42,27 +47,12 @@ input: FILE` parameter)" pattern: "*.{fasta,fa}" ontologies: [] - - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - fai: type: file description: "(Optional) The fasta reference file index (only necessary for the `--gvcf FILE` parameter)" pattern: "*.fai" ontologies: [] - - - meta4: - type: map - description: | - Groovy Map containing bed information - e.g. [ id:'genome' ] - - bed: - type: file - description: "(Optional) The bed regions to merge on" - pattern: "*.bed" - ontologies: [] output: vcf: - - meta: @@ -86,13 +76,27 @@ output: description: index of merged output pattern: "*.{csi,tbi}" ontologies: [] + versions_bcftools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bcftools/merge/tests/bcf.config b/modules/nf-core/bcftools/merge/tests/bcf.config deleted file mode 100644 index 4467d07d..00000000 --- a/modules/nf-core/bcftools/merge/tests/bcf.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = '--output-type u --no-version' -} diff --git a/modules/nf-core/bcftools/merge/tests/bcf_gz.config b/modules/nf-core/bcftools/merge/tests/bcf_gz.config deleted file mode 100644 index 280de8db..00000000 --- a/modules/nf-core/bcftools/merge/tests/bcf_gz.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = '--output-type b --no-version' -} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test b/modules/nf-core/bcftools/merge/tests/main.nf.test index 3995fc1a..3a1f1220 100644 --- a/modules/nf-core/bcftools/merge/tests/main.nf.test +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test @@ -2,6 +2,8 @@ nextflow_process { name "Test Process BCFTOOLS_MERGE" script "../main.nf" + config "./nextflow.config" + process "BCFTOOLS_MERGE" tag "modules" @@ -11,9 +13,10 @@ nextflow_process { test("sarscov2 - [vcf, tbi], [], [], []") { - config "./nextflow.config" - when { + params { + args_modules = "--force-samples --force-single --no-version" + } process { """ input[0] = [ @@ -25,11 +28,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -40,18 +42,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf output") { - config "./vcf.config" - when { + params { + args_modules = "--output-type v --no-version" + } process { """ input[0] = [ @@ -63,11 +65,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -78,18 +79,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).md5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output") { - config "./vcf_gz.config" - when { + params { + args_modules = "--output-type z --no-version" + } process { """ input[0] = [ @@ -101,11 +102,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -116,18 +116,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - bcf output") { - config "./bcf.config" - when { + params { + args_modules = "--output-type u --no-version" + } process { """ input[0] = [ @@ -139,11 +139,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -154,18 +153,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, { assert snapshot( file(process.out.vcf.get(0).get(1)).name, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output") { - config "./bcf_gz.config" - when { + params { + args_modules = "--output-type b --no-version" + } process { """ input[0] = [ @@ -177,11 +176,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -192,18 +190,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, { assert snapshot( file(process.out.vcf.get(0).get(1)).name, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index") { - config "./vcf_gz_index.config" - when { + params { + args_modules = "--output-type z --write-index --no-version" + } process { """ input[0] = [ @@ -215,11 +213,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -232,19 +229,18 @@ nextflow_process { { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, file(process.out.index.get(0).get(1)).name, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index") { - config "./vcf_gz_index_csi.config" - when { - + params { + args_modules = "--output-type z --write-index=csi --no-version" + } process { """ input[0] = [ @@ -256,11 +252,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -273,18 +268,18 @@ nextflow_process { { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, file(process.out.index.get(0).get(1)).name, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index") { - config "./vcf_gz_index_tbi.config" - when { + params { + args_modules = "--output-type z --write-index=tbi --no-version" + } process { """ input[0] = [ @@ -296,11 +291,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -313,18 +307,18 @@ nextflow_process { { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, file(process.out.index.get(0).get(1)).name, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], bed") { - config "./nextflow.config" - when { + params { + args_modules = "--force-samples --force-single --no-version" + } process { """ input[0] = [ @@ -336,14 +330,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] - ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + input[1] = [[],[],[]] """ } } @@ -354,18 +344,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).md5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output") { - config "./nextflow.gvcf.config" - when { + params { + args_modules = "--force-samples --no-version --output-type z --gvcf genome.fasta" + } process { """ input[0] = [ @@ -377,20 +367,14 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), - ] + ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [ [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ] - input[2] = [ - [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] ] - input[3] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] - ] """ } } @@ -401,17 +385,18 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - one sample") { - config "./nextflow.config" when { + params { + args_modules = "--force-samples --force-single --no-version" + } process { """ input[0] = [ @@ -421,11 +406,10 @@ nextflow_process { ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -436,19 +420,20 @@ nextflow_process { { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, { assert snapshot( path(process.out.vcf.get(0).get(1)).md5, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - stub") { options "-stub" - config "./nextflow.config" when { + params { + args_modules = "--force-samples --force-single --no-version" + } process { """ input[0] = [ @@ -460,11 +445,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -476,15 +460,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub") { options "-stub" - config "./vcf.config" when { + params { + args_modules = "--output-type v --no-version" + } process { """ input[0] = [ @@ -496,11 +481,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -512,15 +496,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub") { options "-stub" - config "./vcf_gz.config" when { + params { + args_modules = "--output-type z --no-version" + } process { """ input[0] = [ @@ -532,11 +517,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -548,15 +532,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub") { options "-stub" - config "./bcf.config" when { + params { + args_modules = "--output-type u --no-version" + } process { """ input[0] = [ @@ -568,11 +553,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -584,15 +568,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub") { options "-stub" - config "./bcf_gz.config" when { + params { + args_modules = "--output-type b --no-version" + } process { """ input[0] = [ @@ -604,11 +589,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -620,15 +604,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub") { options "-stub" - config "./vcf_gz_index.config" when { + params { + args_modules = "--output-type z --write-index --no-version" + } process { """ input[0] = [ @@ -640,11 +625,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -657,15 +641,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub") { options "-stub" - config "./vcf_gz_index_csi.config" when { + params { + args_modules = "--output-type z --write-index=csi --no-version" + } process { """ input[0] = [ @@ -677,11 +662,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] + ], + [] ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] + input[1] = [[],[],[]] """ } } @@ -694,52 +678,16 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub") { options "-stub" - config "./vcf_gz_index_tbi.config" when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) - ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] - ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] - """ + params { + args_modules = "--output-type z --write-index=tbi --no-version" } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, - { assert process.out.index.get(0).get(1).endsWith("tbi") }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2 - [vcf, tbi], [], [], bed - stub") { - - options "-stub" - config "./nextflow.config" - - when { process { """ input[0] = [ @@ -751,58 +699,10 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), - ] - ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub") { - - options "-stub" - config "./nextflow.gvcf.config" - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) ], - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), - ] - ] - input[1] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ] - input[2] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] - ] - input[3] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + [] ] + input[1] = [[],[],[]] """ } } @@ -811,43 +711,9 @@ nextflow_process { assertAll( { assert process.success }, { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, { assert snapshot(process.out).match() } ) } - - } - - test("sarscov2 - [vcf, tbi], [], [], [] - one sample - stub") { - - options "-stub" - config "./nextflow.config" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) - ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) - ] - ] - input[1] = [[],[]] - input[2] = [[],[]] - input[3] = [[],[]] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, - { assert snapshot(process.out).match() } - ) - } - } } diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap index d340b7b4..9dd09178 100644 --- a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap @@ -3,15 +3,21 @@ "content": [ "e0de448dc8e712956a03ce68d79a0b3a", "test.vcf.gz.tbi", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:16.859885" + "timestamp": "2026-01-20T12:05:01.453191274" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub": { "content": [ @@ -28,7 +34,11 @@ ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ @@ -41,29 +51,39 @@ "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:43.269991" + "timestamp": "2026-01-20T12:05:43.064165277" }, "sarscov2 - [vcf, tbi], [], [], bed": { "content": [ "febdcfb851dcfc83d8248520830aef10", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:21.848388" + "timestamp": "2026-01-20T12:05:09.906419282" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub": { "content": [ @@ -85,7 +105,11 @@ ] ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ [ @@ -103,29 +127,39 @@ "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:21:03.763345" + "timestamp": "2026-01-20T12:06:17.06290054" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf output": { "content": [ "57bb84274f336465d0a0946b532093b0", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:19:47.331149" + "timestamp": "2026-01-20T12:04:14.044948834" }, "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub": { "content": [ @@ -142,7 +176,11 @@ ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ @@ -155,16 +193,20 @@ "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:59.170567" + "timestamp": "2026-01-20T12:06:08.633006073" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub": { "content": [ @@ -186,7 +228,11 @@ ] ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ [ @@ -204,16 +250,20 @@ "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:21:13.022634" + "timestamp": "2026-01-20T12:06:33.897407991" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub": { "content": [ @@ -230,7 +280,11 @@ ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ @@ -243,95 +297,78 @@ "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:48.592261" + "timestamp": "2026-01-20T12:05:51.445673109" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index": { "content": [ "e0de448dc8e712956a03ce68d79a0b3a", "test.vcf.gz.csi", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:11.953139" + "timestamp": "2026-01-20T12:04:53.868676326" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output": { "content": [ "e0de448dc8e712956a03ce68d79a0b3a", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-09-11T14:19:51.935426" - }, - "sarscov2 - [vcf, tbi], [], [], bed - stub": { - "content": [ { - "0": [ + "versions_bcftools": [ [ - { - "id": "test" - }, - "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + "BCFTOOLS_MERGE", + "bcftools", + "1.22" ] - ], - "1": [ - - ], - "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ], - "index": [ - - ], - "vcf": [ - [ - { - "id": "test" - }, - "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:21:18.319666" + "timestamp": "2026-01-20T12:04:22.660557224" }, "sarscov2 - [vcf, tbi], [], [], [] - bcf output": { "content": [ "test.bcf", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:19:56.742352" + "timestamp": "2026-01-20T12:04:30.965022315" }, "sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub": { "content": [ @@ -348,7 +385,11 @@ ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ @@ -361,134 +402,78 @@ "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:53.962449" + "timestamp": "2026-01-20T12:05:59.932077434" }, - "sarscov2 - [vcf, tbi], [], [], [] - one sample - stub": { + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", { - "0": [ + "versions_bcftools": [ [ - { - "id": "test" - }, - "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + "BCFTOOLS_MERGE", + "bcftools", + "1.22" ] - ], - "1": [ - - ], - "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ], - "index": [ - - ], - "vcf": [ - [ - { - "id": "test" - }, - "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:21:29.155018" + "timestamp": "2026-01-20T12:04:46.41923299" }, - "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub": { + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { "content": [ + "645b7f7f9131bfe350a9ec3cf82c17fe", { - "0": [ + "versions_bcftools": [ [ - { - "id": "test" - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "BCFTOOLS_MERGE", + "bcftools", + "1.22" ] - ], - "1": [ - - ], - "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ], - "index": [ - - ], - "vcf": [ - [ - { - "id": "test" - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-09-11T14:21:23.944931" - }, - "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { - "content": [ - "e0de448dc8e712956a03ce68d79a0b3a", - "test.vcf.gz.csi", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:06.894016" - }, - "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { - "content": [ - "645b7f7f9131bfe350a9ec3cf82c17fe", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-09-11T14:20:28.149857" + "timestamp": "2026-01-20T12:05:18.989455751" }, "sarscov2 - [vcf, tbi], [], [], [] - one sample": { "content": [ "2a374cf02f0c32cf607646167e7f153b", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:32.592911" + "timestamp": "2026-01-20T12:05:26.431607458" }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ @@ -505,7 +490,11 @@ ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ @@ -518,16 +507,20 @@ "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:37.830691" + "timestamp": "2026-01-20T12:05:34.692613749" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub": { "content": [ @@ -549,7 +542,11 @@ ] ], "2": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ], "index": [ [ @@ -567,41 +564,57 @@ "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:21:08.5748" + "timestamp": "2026-01-20T12:06:25.137261969" }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ "e0de448dc8e712956a03ce68d79a0b3a", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:19:41.986954" + "timestamp": "2026-01-20T12:04:05.637837157" }, "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output": { "content": [ "test.bcf.gz", - [ - "versions.yml:md5,46d60729adb9ea9a4e4ab722b487a56b" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_MERGE", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:20:01.801297" + "timestamp": "2026-01-20T12:04:38.467108836" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.config b/modules/nf-core/bcftools/merge/tests/nextflow.config index c3f0b715..36f2fa1a 100644 --- a/modules/nf-core/bcftools/merge/tests/nextflow.config +++ b/modules/nf-core/bcftools/merge/tests/nextflow.config @@ -1,5 +1,5 @@ process { withName: BCFTOOLS_MERGE { - ext.args = '--force-samples --force-single --no-version' + ext.args = "${params.args_modules}" } } diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config deleted file mode 100644 index 8c457b71..00000000 --- a/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: BCFTOOLS_MERGE { - ext.args = { "--force-samples --no-version --output-type z --gvcf $fasta" } - } -} diff --git a/modules/nf-core/bcftools/merge/tests/vcf.config b/modules/nf-core/bcftools/merge/tests/vcf.config deleted file mode 100644 index 759222e5..00000000 --- a/modules/nf-core/bcftools/merge/tests/vcf.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = '--output-type v --no-version' -} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz.config b/modules/nf-core/bcftools/merge/tests/vcf_gz.config deleted file mode 100644 index 8b6ad8b4..00000000 --- a/modules/nf-core/bcftools/merge/tests/vcf_gz.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = '--output-type z --no-version' -} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config deleted file mode 100644 index 9f1e9b1d..00000000 --- a/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--output-type z --write-index --no-version" -} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config deleted file mode 100644 index 8308ee1a..00000000 --- a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--output-type z --write-index=csi --no-version" -} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config deleted file mode 100644 index 9be4075b..00000000 --- a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--output-type z --write-index=tbi --no-version" -} diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index 302c7311..e0dfad2d 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -1,20 +1,20 @@ process BCFTOOLS_SORT { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': - 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' + : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" input: tuple val(meta), path(vcf) output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf - tuple val(meta), path("*.tbi") , emit: tbi, optional: true - tuple val(meta), path("*.csi") , emit: csi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*.tbi"), emit: tbi, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: task.ext.when == null || task.ext.when @@ -22,49 +22,51 @@ process BCFTOOLS_SORT { script: def args = task.ext.args ?: '--output-type z' def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" - + def extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" + def max_memory = task.memory ? "--max-mem ${task.memory.toUnit('MB') * 0.9}M" : "" """ bcftools \\ sort \\ - --output ${prefix}.sorted.${extension} \\ + --output ${prefix}.${extension} \\ --temp-dir . \\ - $args \\ - $vcf - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS + ${max_memory} \\ + ${args} \\ + ${vcf} """ stub: def args = task.ext.args ?: '--output-type z' def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : - args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : - args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : - args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : - "vcf" - def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : - args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : - args.contains("--write-index") || args.contains("-W") ? "csi" : - "" + def extension = args.contains("--output-type b") || args.contains("-Ob") + ? "bcf.gz" + : args.contains("--output-type u") || args.contains("-Ou") + ? "bcf" + : args.contains("--output-type z") || args.contains("-Oz") + ? "vcf.gz" + : args.contains("--output-type v") || args.contains("-Ov") + ? "vcf" + : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") + ? "tbi" + : args.contains("--write-index=csi") || args.contains("-W=csi") + ? "csi" + : args.contains("--write-index") || args.contains("-W") + ? "csi" + : "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" """ ${create_cmd} ${prefix}.${extension} ${create_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS """ -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml index c15487c7..1c3f2a54 100644 --- a/modules/nf-core/bcftools/sort/meta.yml +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -58,13 +58,27 @@ output: description: Default VCF file index pattern: "*.csi" ontologies: [] + versions_bcftools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - bcftools: + type: string + description: The tool name + - "bcftools --version | sed '1!d; s/^.*bcftools //'": + type: string + description: The command used to generate the version of the tool authors: - "@Gwennid" maintainers: diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test b/modules/nf-core/bcftools/sort/tests/main.nf.test index 7d580e4f..bda7bace 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test @@ -27,7 +27,6 @@ nextflow_process { { assert snapshot(process.out).match("vcf") } ) } - } test("sarscov2 - vcf_gz_index") { @@ -52,12 +51,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("sarscov2 - vcf_gz_index_csi") { @@ -82,12 +80,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("sarscov2 - vcf_gz_index_tbi") { @@ -112,12 +109,11 @@ nextflow_process { process.out.vcf, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert process.out.tbi[0][1].endsWith(".tbi") } ) } - } test("sarscov2 - vcf - stub") { @@ -139,7 +135,6 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("sarscov2 - vcf_gz_index - stub") { @@ -165,7 +160,6 @@ nextflow_process { { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("sarscov2 - vcf_gz_index_csi - stub") { @@ -191,7 +185,6 @@ nextflow_process { { assert process.out.csi[0][1].endsWith(".csi") } ) } - } test("sarscov2 - vcf_gz_index_tbi - stub") { @@ -217,6 +210,5 @@ nextflow_process { { assert process.out.tbi[0][1].endsWith(".tbi") } ) } - } } diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap index 3cbca56c..9b9e4dc7 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap @@ -22,7 +22,11 @@ ], "3": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -43,16 +47,20 @@ "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:49:07.959267" + "timestamp": "2026-01-20T12:19:24.286732272" }, "vcf": { "content": [ @@ -72,7 +80,11 @@ ], "3": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -88,16 +100,20 @@ "test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" ] ], - "versions": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:35.236174" + "timestamp": "2026-01-20T12:18:38.783455397" }, "sarscov2 - vcf_gz_index": { "content": [ @@ -120,15 +136,21 @@ [ ], - [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:39.95133" + "timestamp": "2026-01-20T12:18:45.081447395" }, "sarscov2 - vcf_gz_index_csi": { "content": [ @@ -151,15 +173,21 @@ [ ], - [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:44.50977" + "timestamp": "2026-01-20T12:18:51.194304667" }, "sarscov2 - vcf_gz_index - stub": { "content": [ @@ -184,7 +212,11 @@ ] ], "3": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ], "csi": [ [ @@ -205,16 +237,20 @@ "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:58.749279" + "timestamp": "2026-01-20T12:19:11.413154111" }, "sarscov2 - vcf_gz_index_csi - stub": { "content": [ @@ -239,7 +275,11 @@ ] ], "3": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ], "csi": [ [ @@ -260,16 +300,20 @@ "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:49:03.283017" + "timestamp": "2026-01-20T12:19:17.770087535" }, "sarscov2 - vcf - stub": { "content": [ @@ -289,7 +333,11 @@ ], "3": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ], "csi": [ @@ -305,16 +353,20 @@ "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:54.113947" + "timestamp": "2026-01-20T12:19:04.409593559" }, "sarscov2 - vcf_gz_index_tbi": { "content": [ @@ -337,14 +389,20 @@ "test_vcf.vcf.gz.tbi" ] ], - [ - "versions.yml:md5,9699a51675cf58ed9d61b4063de92229" - ] + { + "versions_bcftools": [ + [ + "BCFTOOLS_SORT", + "bcftools", + "1.22" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-11T14:48:48.979311" + "timestamp": "2026-01-20T12:18:57.536633502" } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/download/environment.yml b/modules/nf-core/ensemblvep/download/environment.yml index d9ed9b6b..7e60f7f9 100644 --- a/modules/nf-core/ensemblvep/download/environment.yml +++ b/modules/nf-core/ensemblvep/download/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - # renovate: datasource=conda depName=bioconda/ensembl-vep - - bioconda::ensembl-vep=115.2=pl5321h2a3209d_1 + - bioconda::ensembl-vep=115.2 + - bioconda::perl-math-cdf=0.1 diff --git a/modules/nf-core/ensemblvep/download/main.nf b/modules/nf-core/ensemblvep/download/main.nf index f7693216..7e1aeefe 100644 --- a/modules/nf-core/ensemblvep/download/main.nf +++ b/modules/nf-core/ensemblvep/download/main.nf @@ -4,15 +4,16 @@ process ENSEMBLVEP_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4b/4b5a8c173dc9beaa93effec76b99687fc926b1bd7be47df5d6ce19d7d6b4d6b7/data' - : 'community.wave.seqera.io/library/ensembl-vep:115.2--90ec797ecb088e9a'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3d/3da6e21cbf9803529421d7e136d1ebec5ff71ec50e0d996eda2ce11ec2c19bf9/data' + : 'community.wave.seqera.io/library/ensembl-vep_perl-math-cdf:1e13f65f931a6954'}" input: tuple val(meta), val(assembly), val(species), val(cache_version) output: tuple val(meta), path(prefix), emit: cache - path "versions.yml", emit: versions + tuple val("${task.process}"), val('ensemblvep'), eval("vep --help | sed -n '/ensembl-vep/s/.*: //p'"), topic: versions, emit: versions_ensemblvep + tuple val("${task.process}"), val('perl-math-cdf'), eval("perl -MMath::CDF -e 'print \$Math::CDF::VERSION'"), topic: versions, emit: versions_perlmathcdf when: task.ext.when == null || task.ext.when @@ -27,21 +28,11 @@ process ENSEMBLVEP_DOWNLOAD { --ASSEMBLY ${assembly} \\ --CACHE_VERSION ${cache_version} \\ ${args} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS """ stub: prefix = task.ext.prefix ?: 'vep_cache' """ mkdir ${prefix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/ensemblvep/download/meta.yml b/modules/nf-core/ensemblvep/download/meta.yml index df7cf260..ae1b9c6f 100644 --- a/modules/nf-core/ensemblvep/download/meta.yml +++ b/modules/nf-core/ensemblvep/download/meta.yml @@ -1,6 +1,6 @@ name: ensemblvep_download -description: Ensembl Variant Effect Predictor (VEP). The cache downloading options - are controlled through `task.ext.args`. +description: Ensembl Variant Effect Predictor (VEP). The cache downloading + options are controlled through `task.ext.args`. keywords: - annotation - cache @@ -12,7 +12,8 @@ tools: or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html - licence: ["Apache-2.0"] + licence: + - "Apache-2.0" identifier: "" input: - - meta: @@ -44,13 +45,46 @@ output: description: cache pattern: "*" ontologies: [] + versions_ensemblvep: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ensemblvep: + type: string + description: The tool name + - "vep --help | sed -n '/ensembl-vep/s/.*: //p'": + type: eval + description: The command used to generate the version of the tool + versions_perlmathcdf: + - - ${task.process}: + type: string + description: The process the versions were collected from + - perl-math-cdf: + type: string + description: The name of the tool + - perl -MMath::CDF -e 'print \$Math::CDF::VERSION': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - ensemblvep: + type: string + description: The tool name + - "vep --help | sed -n '/ensembl-vep/s/.*: //p'": + type: eval + description: The command used to generate the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - perl-math-cdf: + type: string + description: The name of the tool + - perl -MMath::CDF -e 'print \$Math::CDF::VERSION': + type: eval + description: The expression to obtain the version of the tool authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test b/modules/nf-core/ensemblvep/download/tests/main.nf.test index 496dbeca..0206fe11 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test @@ -10,7 +10,7 @@ nextflow_process { tag "ensemblvep" tag "ensemblvep/download" - test("celegans - download") { + test("ENSEMBLVEP download cache for 115_WBcel235") { when { process { @@ -28,12 +28,12 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } - test("celegans - download - stub") { + test("ENSEMBLVEP download cache for 115_WBcel235 - stub") { options "-stub" @@ -53,7 +53,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap index ee94eef6..e5618485 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap @@ -1,8 +1,8 @@ { - "celegans - download": { + "ENSEMBLVEP download cache for 115_WBcel235": { "content": [ { - "0": [ + "cache": [ [ { "id": "115_WBcel235" @@ -135,157 +135,32 @@ ] ] ], - "1": [ - "versions.yml:md5,9b1253427e49a5cace6f8fe180f22347" - ], - "cache": [ + "versions_ensemblvep": [ [ - { - "id": "115_WBcel235" - }, - [ - [ - [ - [ - "1-1000000.gz:md5,f9cb33a3ddbb1b82597b3af3e9643dd3", - "10000001-11000000.gz:md5,71aa93ae6388be95fa5269be60236b95", - "1000001-2000000.gz:md5,956f858010c1346ee042ef0ea522043b", - "11000001-12000000.gz:md5,30274a3b8244e492cdf1f611a04848db", - "12000001-13000000.gz:md5,b28d20155f72c1261ba4bb08bea3d302", - "13000001-14000000.gz:md5,293a59ed7b397c1817d77412e124df53", - "14000001-15000000.gz:md5,5291aeb2805c8823b44562d875c7905e", - "15000001-16000000.gz:md5,7fd86078be5f3a400635b269a02185ea", - "2000001-3000000.gz:md5,7f6241cf8e3c91e1c882f3cc86d2dc3a", - "3000001-4000000.gz:md5,e77dc4834119301bbe19dc2a4a05348a", - "4000001-5000000.gz:md5,ac34c2980fea824b21e04874847904ad", - "5000001-6000000.gz:md5,3dfdb3bcd812de1e2b69cfca89a1c1f9", - "6000001-7000000.gz:md5,8446c31796e1aee447af2e353b3734a1", - "7000001-8000000.gz:md5,f84e88618cf747c774ddb98d971e2615", - "8000001-9000000.gz:md5,3094317bb21e35067424e9ad957dfcbe", - "9000001-10000000.gz:md5,3883799cae1ed356ecb416550a89ebde" - ], - [ - "1-1000000.gz:md5,c2393dd5d120068d496b8789bee91974", - "10000001-11000000.gz:md5,106ab30775ba5fa950f8df7909a163b2", - "1000001-2000000.gz:md5,beeda6a82ca6800093d96bbf2eaa81f9", - "11000001-12000000.gz:md5,27d27c0245dbbb270b2001ca75b03042", - "12000001-13000000.gz:md5,8eea54682f0ef9e1977527999f6bfe29", - "13000001-14000000.gz:md5,5f4581505ebf8c4488bff65b16f125e0", - "14000001-15000000.gz:md5,00e8035d7e179ee51faa7032db090fad", - "15000001-16000000.gz:md5,c8438ec1765eb98cfca60eb2165f4d70", - "2000001-3000000.gz:md5,cf3f572db267b4a8552b37d1c3a78b2d", - "3000001-4000000.gz:md5,ec7df072bf71748c26e25afc2ea353f1", - "4000001-5000000.gz:md5,9dd91cde9d18bae0c884dff7050abaef", - "5000001-6000000.gz:md5,1be8b286a79eebb80ff0684f5c110407", - "6000001-7000000.gz:md5,a0debd5341d3e5ba986225f0f45d01b9", - "7000001-8000000.gz:md5,fc2d82666540059fea44c14569208b14", - "8000001-9000000.gz:md5,0a75c0b27da2c4ae946fdae5e5d83e59", - "9000001-10000000.gz:md5,172900e4145c9a9aa783f01550f4d8a2" - ], - [ - "1-1000000.gz:md5,d1d97f733248a030e650a9bd1e7f41bc", - "10000001-11000000.gz:md5,429d681ffa8ca9dc23c62cdab4ffc42b", - "1000001-2000000.gz:md5,58be924f576c85b462df995b76074c9d", - "11000001-12000000.gz:md5,f789a4312ddd0bd423b3c55f66af782c", - "12000001-13000000.gz:md5,76a0fdd867ca559eaf5e8fe3e0f8ea94", - "13000001-14000000.gz:md5,867d9a3b7b6a720b634180efebf65658", - "2000001-3000000.gz:md5,e93c4b398494843b309abf71b218c14a", - "3000001-4000000.gz:md5,ff5b0d6680207d23490279c5f62ba33b", - "4000001-5000000.gz:md5,8b5e33878c599de252a931205a034446", - "5000001-6000000.gz:md5,25b9f4a4edafb9572c323ca1783dd7c1", - "6000001-7000000.gz:md5,c52c31d11ab225f7c9793f0c82ce72e6", - "7000001-8000000.gz:md5,a894863e34285ca3b042cd0eeed253c6", - "8000001-9000000.gz:md5,bcce1adf098aa44c0e55a2df2d801449", - "9000001-10000000.gz:md5,b27661dc26cd23c6a9c41cc885187b4f" - ], - [ - "1-1000000.gz:md5,70dfe9bedc7a87a063f9b6f2e48b846b", - "10000001-11000000.gz:md5,767a1bd59613ad669cbb835cc11d06ff", - "1000001-2000000.gz:md5,9e1276159b8a073611f048cf6c4a0738", - "11000001-12000000.gz:md5,93dcc27f1185c7af20489ce5796da68e", - "12000001-13000000.gz:md5,0bc55d7b3f7419adcdbf474b7192c5ba", - "13000001-14000000.gz:md5,2a8c5ee78d9d2b462ec889733f311c19", - "14000001-15000000.gz:md5,68e79d710886838294c8de27ea7c1c00", - "15000001-16000000.gz:md5,d975f06bf6f8f1722c29c7b8cce7095b", - "16000001-17000000.gz:md5,bf59b0b7461b4c97520762754a91e41c", - "17000001-18000000.gz:md5,3174d1bff1351ee17f632c6adec54c90", - "2000001-3000000.gz:md5,22ac8f1975b085ed3f5773bc220ff120", - "3000001-4000000.gz:md5,0a8a89f524f7955f3db2847344e688d9", - "4000001-5000000.gz:md5,648d45d681cc4cbe68db4638665122ca", - "5000001-6000000.gz:md5,dfe8c94f45221ed152874083ec0991e2", - "6000001-7000000.gz:md5,e9c705d31a7c1cac9d02c6a018a0d655", - "7000001-8000000.gz:md5,723513cca5842d5c238dc110075ad8dd", - "8000001-9000000.gz:md5,3703d6fbdad1f21a2c1f40c5d8ad5371", - "9000001-10000000.gz:md5,afb3ba977fc7cd18b47bb5fa6fc85832" - ], - [ - "1-1000000.gz:md5,397d664998c2dbfd56c0af94c385f5ee" - ], - [ - "1-1000000.gz:md5,ce88865c73633b2b57e6f3481a21b3f8", - "10000001-11000000.gz:md5,8f1f45979e56451d44a3887321910d30", - "1000001-2000000.gz:md5,c40b987ac5b22a6674055849e24204ad", - "11000001-12000000.gz:md5,4e5a2ba329951bd2e01738886766e777", - "12000001-13000000.gz:md5,0670c5ee8dbf7c5f497a948071f94026", - "13000001-14000000.gz:md5,24d4532d1e9c0839f750f6dc798beacd", - "14000001-15000000.gz:md5,3a3de4c21b35ae9cd349e4641d8023a8", - "15000001-16000000.gz:md5,d60e0088ed511f809d9f2137fe46731c", - "16000001-17000000.gz:md5,2ee41d67e7cc73cf0e1bf8e47c708436", - "17000001-18000000.gz:md5,87304db95265191a4368c51ee7993801", - "18000001-19000000.gz:md5,b943b2b6865fa97a04fac7e17ac7c789", - "19000001-20000000.gz:md5,4d1338b66252cbc28c9991967cc5805e", - "20000001-21000000.gz:md5,a81d47d38d78d30bb4575f7a65c9707e", - "2000001-3000000.gz:md5,2ff7e93b14741df46621a15840fa5276", - "3000001-4000000.gz:md5,1ff84c0fb7dd85b55a1f32954f3bd625", - "4000001-5000000.gz:md5,4079a7728625d842f231d1f664b50264", - "5000001-6000000.gz:md5,399986007f0bc002054aff687bce85fc", - "6000001-7000000.gz:md5,c97f0d1a323011c5eb59d2c09a12634e", - "7000001-8000000.gz:md5,0973af953b9632efa1813d0c1265902d", - "8000001-9000000.gz:md5,1c9695b7857c8494396edbf68e2d8095", - "9000001-10000000.gz:md5,7e3e78052518c97155260eba1975ec41" - ], - [ - "1-1000000.gz:md5,e5b943beee3102d4bbcf931618e4516f", - "10000001-11000000.gz:md5,2258cce59acc40383eba19df4adab977", - "1000001-2000000.gz:md5,48ffa67b4638d76f54feffeaf3ceb919", - "11000001-12000000.gz:md5,810e31cc6ef2995163dc4a249c73f131", - "12000001-13000000.gz:md5,0bf858719d427d5dcff6640dd0126ec0", - "13000001-14000000.gz:md5,f337fe31c4cf04d2b61c8cc4e65b3d31", - "14000001-15000000.gz:md5,51fa13d1ceefd98a6a093a41d565aa08", - "15000001-16000000.gz:md5,eaa3a4f3c8e447a78f482f8ff94ee488", - "16000001-17000000.gz:md5,95d704615bf688dea4fcf8916ea35326", - "17000001-18000000.gz:md5,356290a920138412ac131046246fe606", - "2000001-3000000.gz:md5,b32d23dedc91e0f05047cb3f75ab9679", - "3000001-4000000.gz:md5,304b9eb63522e575fb97a7c18e602c93", - "4000001-5000000.gz:md5,d2fa3e7f01321332dc5a65feef9defc0", - "5000001-6000000.gz:md5,d150eec8b35ccf2e136fdc6e7bd17481", - "6000001-7000000.gz:md5,fde4ba9ba1cbe463b65afd45f64d0809", - "7000001-8000000.gz:md5,40a5fe0f827dc040e851c5769896d4f5", - "8000001-9000000.gz:md5,0112761790ef2e78c5515bb3f9923277", - "9000001-10000000.gz:md5,f2d25d2a55f146875f0e5d51d3108341" - ], - "chr_synonyms.txt:md5,8a7e0941aa4f0e676ab5594f0226b2b5", - "info.txt:md5,33ccb74a030a9a345051628c337cb8af" - ] - ] - ] + "ENSEMBLVEP_DOWNLOAD", + "ensemblvep", + "115.2" ] ], - "versions": [ - "versions.yml:md5,9b1253427e49a5cace6f8fe180f22347" + "versions_perlmathcdf": [ + [ + "ENSEMBLVEP_DOWNLOAD", + "perl-math-cdf", + "" + ] ] } ], + "timestamp": "2026-02-13T13:36:59.060515944", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-29T09:49:32.824496" + "nf-test": "0.9.4", + "nextflow": "26.01.1" + } }, - "celegans - download - stub": { + "ENSEMBLVEP download cache for 115_WBcel235 - stub": { "content": [ { - "0": [ + "cache": [ [ { "id": "115_WBcel235" @@ -295,28 +170,26 @@ ] ] ], - "1": [ - "versions.yml:md5,9b1253427e49a5cace6f8fe180f22347" - ], - "cache": [ + "versions_ensemblvep": [ [ - { - "id": "115_WBcel235" - }, - [ - - ] + "ENSEMBLVEP_DOWNLOAD", + "ensemblvep", + "115.2" ] ], - "versions": [ - "versions.yml:md5,9b1253427e49a5cace6f8fe180f22347" + "versions_perlmathcdf": [ + [ + "ENSEMBLVEP_DOWNLOAD", + "perl-math-cdf", + "" + ] ] } ], + "timestamp": "2026-02-13T13:37:10.696285488", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-29T09:49:47.366588" + "nf-test": "0.9.4", + "nextflow": "26.01.1" + } } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff index 716edbbe..f4675ea2 100644 --- a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff +++ b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff @@ -11,34 +11,21 @@ Changes in 'ensemblvep/vep/main.nf': conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container -@@ -15,14 +15,16 @@ - path cache - tuple val(meta2), path(fasta) +@@ -15,6 +15,8 @@ + tuple val(meta2), path(cache) + tuple val(meta3), path(fasta) path extra_files + path custom_vep + path custom_vep_tbi output: -- tuple val(meta), path("*.vcf.gz"), emit: vcf, optional: true -- tuple val(meta), path("*.vcf.gz.tbi"), emit: tbi, optional: true -- tuple val(meta), path("*.tab.gz"), emit: tab, optional: true -- tuple val(meta), path("*.json.gz"), emit: json, optional: true -- path "*.html", emit: report, optional: true -- path "versions.yml", emit: versions -+ tuple val(meta), path("*.vcf.gz"), emit: vcf, optional: true -+ tuple val(meta), path("*.vcf.gz.tbi"), emit: tbi, optional: true -+ tuple val(meta), path("*.tab.gz"), emit: tab, optional: true -+ tuple val(meta), path("*.json.gz"), emit: json, optional: true -+ path "*.html", emit: report, optional: true -+ path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when -@@ -36,6 +38,7 @@ + tuple val(meta), path("${prefix}.vcf.gz"), emit: vcf, optional: true +@@ -38,6 +40,8 @@ def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta ${fasta}" : "" def create_index = file_extension == "vcf" ? "tabix ${args2} ${prefix}.${file_extension}.gz" : "" + args = args.replaceAll(/--custom file=[^,]+/, "--custom file=${custom_vep}") ++ """ vep \\ -i ${vcf} \\ diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml index d8e22f70..7e60f7f9 100644 --- a/modules/nf-core/ensemblvep/vep/environment.yml +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::ensembl-vep=114.2 + - bioconda::ensembl-vep=115.2 + - bioconda::perl-math-cdf=0.1 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index 9daaadab..6a9d676e 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -4,27 +4,29 @@ process ENSEMBLVEP_VEP { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://depot.galaxyproject.org/singularity/ensembl-vep:114.2--pl5321h2a3209d_0' - : 'biocontainers/ensembl-vep:114.2--pl5321h2a3209d_0'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3d/3da6e21cbf9803529421d7e136d1ebec5ff71ec50e0d996eda2ce11ec2c19bf9/data' + : 'community.wave.seqera.io/library/ensembl-vep_perl-math-cdf:1e13f65f931a6954'}" input: tuple val(meta), path(vcf), path(custom_extra_files) val genome val species val cache_version - path cache - tuple val(meta2), path(fasta) + tuple val(meta2), path(cache) + tuple val(meta3), path(fasta) path extra_files path custom_vep path custom_vep_tbi output: - tuple val(meta), path("*.vcf.gz"), emit: vcf, optional: true - tuple val(meta), path("*.vcf.gz.tbi"), emit: tbi, optional: true - tuple val(meta), path("*.tab.gz"), emit: tab, optional: true - tuple val(meta), path("*.json.gz"), emit: json, optional: true - path "*.html", emit: report, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.vcf.gz"), emit: vcf, optional: true + tuple val(meta), path("${prefix}.vcf.gz.tbi"), emit: tbi, optional: true + tuple val(meta), path("${prefix}.tab.gz"), emit: tab, optional: true + tuple val(meta), path("${prefix}.json.gz"), emit: json, optional: true + tuple val(meta), val("${task.process}"), val('ensemblvep'), path("*.html"), topic: multiqc_files, emit: report, optional: true + tuple val("${task.process}"), val('ensemblvep'), eval("vep --help | sed -n '/ensembl-vep/s/.*: //p'"), topic: versions, emit: versions_ensemblvep + tuple val("${task.process}"), val('tabix'), eval("tabix -h 2>&1 | grep -oP 'Version:\\s*\\K[^\\s]+'"), topic: versions, emit: versions_tabix + tuple val("${task.process}"), val('perl-math-cdf'), eval("perl -MMath::CDF -e 'print \\\$Math::CDF::VERSION'"), topic: versions, emit: versions_perlmathcdf when: task.ext.when == null || task.ext.when @@ -34,11 +36,12 @@ process ENSEMBLVEP_VEP { def args2 = task.ext.args2 ?: '' def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json") ? 'json' : args.contains("--tab") ? 'tab' : 'vcf' def compress_cmd = args.contains("--compress_output") ? '' : '--compress_output bgzip' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta ${fasta}" : "" def create_index = file_extension == "vcf" ? "tabix ${args2} ${prefix}.${file_extension}.gz" : "" args = args.replaceAll(/--custom file=[^,]+/, "--custom file=${custom_vep}") + """ vep \\ -i ${vcf} \\ @@ -54,27 +57,15 @@ process ENSEMBLVEP_VEP { --fork ${task.cpus} ${create_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') - END_VERSIONS """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json") ? 'json' : args.contains("--tab") ? 'tab' : 'vcf' def create_index = file_extension == "vcf" ? "touch ${prefix}.${file_extension}.gz.tbi" : "" """ echo "" | gzip > ${prefix}.${file_extension}.gz ${create_index} touch ${prefix}_summary.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/ensemblvep/vep/meta.yml b/modules/nf-core/ensemblvep/vep/meta.yml index 7d91a7d0..daa62526 100644 --- a/modules/nf-core/ensemblvep/vep/meta.yml +++ b/modules/nf-core/ensemblvep/vep/meta.yml @@ -1,6 +1,6 @@ name: ensemblvep_vep -description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled - through `task.ext.args`. +description: Ensembl Variant Effect Predictor (VEP). The output-file-format is + controlled through `task.ext.args`. keywords: - annotation - vcf @@ -13,7 +13,8 @@ tools: or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html - licence: ["Apache-2.0"] + licence: + - "Apache-2.0" identifier: "" input: - - meta: @@ -44,12 +45,17 @@ input: type: integer description: | which version of the cache to annotate with - - cache: - type: file - description: | - path to VEP cache (optional) - ontologies: [] - - meta2: + type: map + description: | + Groovy Map containing cache information + e.g. [ id:'test' ] + - cache: + type: file + description: | + path to VEP cache (optional) + ontologies: [] + - - meta3: type: map description: | Groovy Map containing fasta reference information @@ -71,19 +77,19 @@ output: type: map description: | Map with sample information - - "*.vcf.gz": + - ${prefix}.vcf.gz: type: file description: | annotated vcf (optional) pattern: "*.vcf.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 tbi: - - meta: type: map description: | Map with sample information - - "*.vcf.gz.tbi": + - ${prefix}.vcf.gz.tbi: type: file description: | annotated vcf index (optional) @@ -94,38 +100,116 @@ output: type: map description: | Map with sample information - - "*.tab.gz": + - ${prefix}.tab.gz: type: file description: | tab file with annotated variants (optional) pattern: "*.ann.tab.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 json: - - meta: type: map description: | Map with sample information - - "*.json.gz": + - ${prefix}.json.gz: type: file description: | json file with annotated variants (optional) pattern: "*.ann.json.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 report: - - "*.html": - type: file - description: VEP report file - pattern: "*.html" - ontologies: [] + - - meta: + type: map + description: | + Map with sample information + - ${task.process}: + type: string + description: The process + - ensemblvep: + type: string + description: The tool name + - "*.html": + type: file + description: VEP report file + pattern: "*.html" + ontologies: [] + versions_ensemblvep: + - - ${task.process}: + type: string + description: The process + - ensemblvep: + type: string + description: The tool name + - "vep --help | sed -n '/ensembl-vep/s/.*: //p'": + type: eval + description: The command used to generate the version of the tool + versions_tabix: + - - ${task.process}: + type: string + description: The process + - tabix: + type: string + description: The tool name + - tabix -h 2>&1 | grep -oP 'Version:\s*\K[^\s]+': + type: eval + description: The expression to obtain the version of the tool + versions_perlmathcdf: + - - ${task.process}: + type: string + description: The process + - perl-math-cdf: + type: string + description: The tool name + - perl -MMath::CDF -e 'print \\$Math::CDF::VERSION': + type: eval + description: The expression to obtain the version of the tool +topics: + multiqc_files: + - - meta: + type: string + description: | + Map with sample information + - ${task.process}: + type: string + description: The process + - ensemblvep: + type: string + description: The tool name + - "*.html": + type: file + description: VEP report file + pattern: "*.html" + ontologies: [] versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process + - ensemblvep: + type: string + description: The tool name + - "vep --help | sed -n '/ensembl-vep/s/.*: //p'": + type: eval + description: The command used to generate the version of the tool + - - ${task.process}: + type: string + description: The process + - tabix: + type: string + description: The tool name + - tabix -h 2>&1 | grep -oP 'Version:\s*\K[^\s]+': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process + - perl-math-cdf: + type: string + description: The tool name + - perl -MMath::CDF -e 'print \\$Math::CDF::VERSION': + type: eval + description: The expression to obtain the version of the tool authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test index 4a62ffd5..63d91155 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -16,9 +16,12 @@ nextflow_process { when { process { """ - vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/113_WBcel235/')).collect() + vep_cache = channel.of([ + [ id:'115_WBcel235' ], + file('s3://annotation-cache/vep_cache/115_WBcel235/') + ]).collect() - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [] @@ -27,7 +30,7 @@ nextflow_process { input[2] = params.vep_species input[3] = params.vep_cache_version input[4] = vep_cache - input[5] = Channel.value([ + input[5] = channel.value([ [id:"fasta"], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) @@ -40,9 +43,9 @@ nextflow_process { assert process.success assertAll( { assert snapshot( - process.out.versions, - path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, - file(process.out.tbi.get(0).get(1)).name + file(process.out.vcf[0][1]).name + ",variantsMD5:" + path(process.out.vcf[0][1]).vcf.variantsMD5, + file(process.out.tbi[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -55,9 +58,12 @@ nextflow_process { when { process { """ - vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/113_WBcel235/')).collect() + vep_cache = channel.of([ + [ id:'115_WBcel235' ], + file('s3://annotation-cache/vep_cache/115_WBcel235/') + ]).collect() - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [] @@ -66,7 +72,7 @@ nextflow_process { input[2] = params.vep_species input[3] = params.vep_cache_version input[4] = vep_cache - input[5] = Channel.value([ + input[5] = channel.value([ [id:"fasta"], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) @@ -78,8 +84,11 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out.versions).match() }, - { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v114.2") } + { assert snapshot( + file(process.out.tab[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() }, + { assert path(process.out.tab[0][1]).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v115.2") } ) } } diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap index bd80e401..6f834d3e 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap @@ -1,28 +1,69 @@ { "test_ensemblvep_vep_fasta_tab_gz": { "content": [ - [ - "versions.yml:md5,01653f5a713b20d56ed2468a2dab959a" - ] + "test.tab.gz", + { + "versions_ensemblvep": [ + [ + "ENSEMBLVEP_VEP", + "ensemblvep", + "115.2" + ] + ], + "versions_perlmathcdf": [ + [ + "ENSEMBLVEP_VEP", + "perl-math-cdf", + "0.1" + ] + ], + "versions_tabix": [ + [ + "ENSEMBLVEP_VEP", + "tabix", + "1.21" + ] + ] + } ], + "timestamp": "2026-02-06T12:47:57.03116265", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-21T13:16:46.760065318" + "nf-test": "0.9.3", + "nextflow": "25.10.3" + } }, "test_ensemblvep_vep_fasta_vcf - stub (not really but linting complains otherwise)": { "content": [ - [ - "versions.yml:md5,01653f5a713b20d56ed2468a2dab959a" - ], - "d41d8cd98f00b204e9800998ecf8427e", - "test.vcf.gz.tbi" + "test.vcf.gz,variantsMD5:d41d8cd98f00b204e9800998ecf8427e", + "test.vcf.gz.tbi", + { + "versions_ensemblvep": [ + [ + "ENSEMBLVEP_VEP", + "ensemblvep", + "115.2" + ] + ], + "versions_perlmathcdf": [ + [ + "ENSEMBLVEP_VEP", + "perl-math-cdf", + "0.1" + ] + ], + "versions_tabix": [ + [ + "ENSEMBLVEP_VEP", + "tabix", + "1.21" + ] + ] + } ], + "timestamp": "2026-02-06T12:47:34.421995264", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-21T13:16:00.65871573" + "nf-test": "0.9.3", + "nextflow": "25.10.3" + } } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/vep/tests/nextflow.config b/modules/nf-core/ensemblvep/vep/tests/nextflow.config index f1f66774..8e68fe24 100644 --- a/modules/nf-core/ensemblvep/vep/tests/nextflow.config +++ b/modules/nf-core/ensemblvep/vep/tests/nextflow.config @@ -1,5 +1,5 @@ params { - vep_cache_version = "113" + vep_cache_version = "115" vep_genome = "WBcel235" vep_species = "caenorhabditis_elegans" } diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf index 453d4566..df55071a 100644 --- a/modules/nf-core/minimap2/align/main.nf +++ b/modules/nf-core/minimap2/align/main.nf @@ -20,7 +20,7 @@ process MINIMAP2_ALIGN { tuple val(meta), path("*.paf") , optional: true, emit: paf tuple val(meta), path("*.bam") , optional: true, emit: bam tuple val(meta), path("*.bam.${bam_index_extension}"), optional: true, emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val("minimap2"), eval("minimap2 --version"), topic: versions, emit: versions_minimap2 when: task.ext.when == null || task.ext.when @@ -38,25 +38,17 @@ process MINIMAP2_ALIGN { def bam_input = "${reads.extension}".matches('sam|bam|cram') def samtools_reset_fastq = bam_input ? "samtools reset --threads ${task.cpus-1} $args3 $reads | samtools fastq --threads ${task.cpus-1} $args4 |" : '' def query = bam_input ? "-" : reads - def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) - + def target = reference ?: (bam_input ? error("Error: minimap2/align BAM input mode requires reference") : reads) """ $samtools_reset_fastq \\ minimap2 \\ - $args \\ - -t $task.cpus \\ - $target \\ - $query \\ - $cigar_paf \\ - $set_cigar_bam \\ - $bam_output - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + ${args} \\ + -t ${task.cpus} \\ + ${target} \\ + ${query} \\ + ${cigar_paf} \\ + ${set_cigar_bam} \\ + ${bam_output} """ stub: @@ -64,15 +56,11 @@ process MINIMAP2_ALIGN { def output_file = bam_format ? "${prefix}.bam" : "${prefix}.paf" def bam_index = bam_index_extension ? "touch ${prefix}.bam.${bam_index_extension}" : "" def bam_input = "${reads.extension}".matches('sam|bam|cram') - def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) - + if(bam_input && !reference) { + error("Error: minimap2/align BAM input mode requires reference!") + } """ touch $output_file ${bam_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - END_VERSIONS """ } diff --git a/modules/nf-core/minimap2/align/meta.yml b/modules/nf-core/minimap2/align/meta.yml index b501526e..40bb20ad 100644 --- a/modules/nf-core/minimap2/align/meta.yml +++ b/modules/nf-core/minimap2/align/meta.yml @@ -85,13 +85,27 @@ output: description: BAM alignment index pattern: "*.bam.*" ontologies: [] + versions_minimap2: + - - ${task.process}: + type: string + description: The process name + - minimap2: + type: string + description: The tool name + - minimap2 --version: + type: eval + description: The tool version +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process name + - minimap2: + type: string + description: The tool name + - minimap2 --version: + type: eval + description: The tool version authors: - "@heuermh" - "@sofstam" diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test b/modules/nf-core/minimap2/align/tests/main.nf.test index 4072c171..34597d6f 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test +++ b/modules/nf-core/minimap2/align/tests/main.nf.test @@ -36,7 +36,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -71,7 +71,7 @@ nextflow_process { bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), file(process.out.index[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -108,7 +108,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -142,7 +142,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -176,7 +176,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -211,7 +211,7 @@ nextflow_process { bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), file(process.out.index[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -438,4 +438,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test.snap b/modules/nf-core/minimap2/align/tests/main.nf.test.snap index 89f20336..93e0eb3b 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test.snap +++ b/modules/nf-core/minimap2/align/tests/main.nf.test.snap @@ -9,15 +9,21 @@ ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", "test.bam.bai", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:23.829797899" + "timestamp": "2026-01-22T15:02:10.851485367" }, "sarscov2 - bam, fasta, true, 'bai', false, false - stub": { "content": [ @@ -44,7 +50,11 @@ ] ], "3": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ], "bam": [ [ @@ -67,16 +77,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:54.665655242" + "timestamp": "2026-01-22T15:02:56.708796666" }, "sarscov2 - fastq, fasta, true, 'bai', false, false - stub": { "content": [ @@ -103,7 +117,11 @@ ] ], "3": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ], "bam": [ [ @@ -126,16 +144,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:38.492212433" + "timestamp": "2026-01-22T15:02:32.614463827" }, "sarscov2 - fastq, fasta, false, [], false, false - stub": { "content": [ @@ -156,7 +178,11 @@ ], "3": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ], "bam": [ @@ -173,16 +199,20 @@ "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:43.879647142" + "timestamp": "2026-01-22T15:02:40.02163098" }, "sarscov2 - fastq, fasta, true, [], false, false - stub": { "content": [ @@ -203,7 +233,11 @@ ], "3": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ], "bam": [ [ @@ -220,16 +254,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:33.262333471" + "timestamp": "2026-01-22T15:02:25.102539679" }, "sarscov2 - [fastq1, fastq2], fasta, true, false, false": { "content": [ @@ -240,15 +278,21 @@ "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" ], "1bc392244f228bf52cf0b5a8f6a654c9", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:07.571731983" + "timestamp": "2026-01-22T15:01:46.456636022" }, "sarscov2 - fastq, fasta, true, [], false, false": { "content": [ @@ -259,15 +303,21 @@ "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" ], "f194745c0ccfcb2a9c0aee094a08750", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:47:56.497792473" + "timestamp": "2026-01-22T15:01:30.525133177" }, "sarscov2 - fastq, fasta, true, 'bai', false, false": { "content": [ @@ -279,15 +329,21 @@ ], "f194745c0ccfcb2a9c0aee094a08750", "test.bam.bai", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:01.888544427" + "timestamp": "2026-01-22T15:01:38.84829029" }, "sarscov2 - bam, fasta, true, [], false, false": { "content": [ @@ -298,15 +354,21 @@ "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:18.376062313" + "timestamp": "2026-01-22T15:02:02.351060285" }, "sarscov2 - bam, fasta, true, [], false, false - stub": { "content": [ @@ -327,7 +389,11 @@ ], "3": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ], "bam": [ [ @@ -344,16 +410,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,231f31609e2b72661af6a11b7aee3cfe" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:49.268693724" + "timestamp": "2026-01-22T15:02:47.579634041" }, "sarscov2 - fastq, [], true, false, false": { "content": [ @@ -463,14 +533,20 @@ "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" ], "16c1c651f8ec67383bcdee3c55aed94f", - [ - "versions.yml:md5,660fcf8ff66d4dce2045ffa0e325eed8" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.29-r1283" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:48:12.942360555" + "timestamp": "2026-01-22T15:01:54.090788633" } } \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/main.nf b/modules/nf-core/minimap2/index/main.nf index 56cb0efd..dd81eab0 100644 --- a/modules/nf-core/minimap2/index/main.nf +++ b/modules/nf-core/minimap2/index/main.nf @@ -12,7 +12,7 @@ process MINIMAP2_INDEX { output: tuple val(meta), path("*.mmi"), emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val("minimap2"), eval("minimap2 --version"), topic: versions, emit: versions_minimap2 when: task.ext.when == null || task.ext.when @@ -25,20 +25,10 @@ process MINIMAP2_INDEX { -d ${fasta.baseName}.mmi \\ $args \\ $fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - END_VERSIONS """ stub: """ touch ${fasta.baseName}.mmi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - END_VERSIONS """ } diff --git a/modules/nf-core/minimap2/index/meta.yml b/modules/nf-core/minimap2/index/meta.yml index 0d6a2d86..6985fb0c 100644 --- a/modules/nf-core/minimap2/index/meta.yml +++ b/modules/nf-core/minimap2/index/meta.yml @@ -10,7 +10,8 @@ tools: A versatile pairwise aligner for genomic and spliced nucleotide sequences. homepage: https://github.com/lh3/minimap2 documentation: https://github.com/lh3/minimap2#uguide - licence: ["MIT"] + licence: + - "MIT" identifier: "" input: - - meta: @@ -35,13 +36,27 @@ output: description: Minimap2 fasta index. pattern: "*.mmi" ontologies: [] + versions_minimap2: + - - ${task.process}: + type: string + description: The name of the process + - minimap2: + type: string + description: The name of the tool + - minimap2 --version: + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - minimap2: + type: string + description: The name of the tool + - minimap2 --version: + type: eval + description: The expression to obtain the version of the tool authors: - "@yuukiiwa" - "@drpatelh" diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test b/modules/nf-core/minimap2/index/tests/main.nf.test index 97840ff7..79b7cc55 100644 --- a/modules/nf-core/minimap2/index/tests/main.nf.test +++ b/modules/nf-core/minimap2/index/tests/main.nf.test @@ -29,4 +29,26 @@ nextflow_process { } -} \ No newline at end of file + test("minimap2 index - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test.snap b/modules/nf-core/minimap2/index/tests/main.nf.test.snap index dbb32049..a3ec750b 100644 --- a/modules/nf-core/minimap2/index/tests/main.nf.test.snap +++ b/modules/nf-core/minimap2/index/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,2c3e19022653b28d77646b2e9cc9bdb3" + [ + "MINIMAP2_INDEX", + "minimap2", + "2.29-r1283" + ] ], "index": [ [ @@ -21,15 +25,60 @@ "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" ] ], - "versions": [ - "versions.yml:md5,2c3e19022653b28d77646b2e9cc9bdb3" + "versions_minimap2": [ + [ + "MINIMAP2_INDEX", + "minimap2", + "2.29-r1283" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T16:12:10.625322" + }, + "minimap2 index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "MINIMAP2_INDEX", + "minimap2", + "2.29-r1283" + ] + ], + "index": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_minimap2": [ + [ + "MINIMAP2_INDEX", + "minimap2", + "2.29-r1283" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-04-22T14:50:37.213379742" + "timestamp": "2026-02-09T16:12:15.244242" } } \ No newline at end of file diff --git a/modules/nf-core/modkit/pileup/environment.yml b/modules/nf-core/modkit/pileup/environment.yml index 67c67438..62b97863 100644 --- a/modules/nf-core/modkit/pileup/environment.yml +++ b/modules/nf-core/modkit/pileup/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - ont-modkit=0.6.0 + - ont-modkit=0.6.1 diff --git a/modules/nf-core/modkit/pileup/main.nf b/modules/nf-core/modkit/pileup/main.nf index 462f8973..e610efb7 100644 --- a/modules/nf-core/modkit/pileup/main.nf +++ b/modules/nf-core/modkit/pileup/main.nf @@ -4,8 +4,8 @@ process MODKIT_PILEUP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ont-modkit:0.6.0--hcdda2d0_0': - 'biocontainers/ont-modkit:0.6.0--hcdda2d0_0' }" + 'https://depot.galaxyproject.org/singularity/ont-modkit:0.6.1--hcdda2d0_0': + 'biocontainers/ont-modkit:0.6.1--hcdda2d0_0' }" input: tuple val(meta), path(bam), path(bai) @@ -15,7 +15,7 @@ process MODKIT_PILEUP { output: tuple val(meta), path("*.bed.gz") , emit: bedgz , optional: true tuple val(meta), path("*.log") , emit: log , optional: true - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('modkit'), eval("modkit --version | sed 's/modkit //'"), emit: versions_modkit, topic: versions when: task.ext.when == null || task.ext.when @@ -48,11 +48,6 @@ process MODKIT_PILEUP { else mv ${prefix}.tmp ${prefix}.bed.gz fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - modkit: \$( modkit --version | sed 's/mod_kit //' ) - END_VERSIONS """ stub: @@ -63,10 +58,5 @@ process MODKIT_PILEUP { echo | gzip > ${prefix}.bed.gz touch ${prefix}.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - modkit: \$( modkit --version | sed 's/mod_kit //' ) - END_VERSIONS """ } diff --git a/modules/nf-core/modkit/pileup/meta.yml b/modules/nf-core/modkit/pileup/meta.yml index 3d7d9fd5..262a1067 100644 --- a/modules/nf-core/modkit/pileup/meta.yml +++ b/modules/nf-core/modkit/pileup/meta.yml @@ -79,13 +79,28 @@ output: description: File for debug logs to be written to pattern: "*.log" ontologies: [] + versions_modkit: + - - ${task.process}: + type: string + description: The name of the process + - modkit: + type: string + description: The name of the tool + - modkit --version | sed 's/modkit //': + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - modkit: + type: string + description: The name of the tool + - modkit --version | sed 's/modkit //': + type: eval + description: The expression to obtain the version of the tool authors: - "@Michal-Babins" - "@fellen31" diff --git a/modules/nf-core/modkit/pileup/tests/main.nf.test.snap b/modules/nf-core/modkit/pileup/tests/main.nf.test.snap index 3f30af70..55ba8d79 100644 --- a/modules/nf-core/modkit/pileup/tests/main.nf.test.snap +++ b/modules/nf-core/modkit/pileup/tests/main.nf.test.snap @@ -14,7 +14,11 @@ ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -27,16 +31,20 @@ "log": [ ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2025-12-11T14:18:34.613472799" + "timestamp": "2026-01-22T11:46:15.943030058" }, "[bam, bai], [fasta, fai], [] - stub": { "content": [ @@ -58,7 +66,11 @@ ] ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -76,8 +88,12 @@ "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], @@ -85,7 +101,7 @@ "nf-test": "0.9.3", "nextflow": "25.04.2" }, - "timestamp": "2025-12-19T09:56:52.060201127" + "timestamp": "2026-01-22T11:46:32.126118262" }, "[bam, bai], [fasta, fai], [], phased": { "content": [ @@ -106,7 +122,11 @@ ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -123,16 +143,20 @@ "log": [ ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2025-12-11T14:18:42.290304403" + "timestamp": "2026-01-22T11:46:20.026595076" }, "[bam, bai], [fasta, fai], [], phased - stub": { "content": [ @@ -154,7 +178,11 @@ ] ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -172,8 +200,12 @@ "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], @@ -181,7 +213,7 @@ "nf-test": "0.9.3", "nextflow": "25.04.2" }, - "timestamp": "2025-12-19T09:57:00.458022339" + "timestamp": "2026-01-22T11:46:40.051078689" }, "[bam, bai], [fasta, fai], []": { "content": [ @@ -198,7 +230,11 @@ ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -211,16 +247,20 @@ "log": [ ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2025-12-11T14:18:26.964056871" + "timestamp": "2026-01-22T11:46:11.978364755" }, "[bam, bai], [], []": { "content": [ @@ -237,7 +277,11 @@ ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -250,16 +294,20 @@ "log": [ ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2025-12-11T14:18:19.273553787" + "timestamp": "2026-01-22T11:46:07.765200083" }, "[bam, bai], [fasta, fai], bed, phased": { "content": [ @@ -280,7 +328,11 @@ ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -297,16 +349,20 @@ "log": [ ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2025-12-11T14:18:50.043853179" + "timestamp": "2026-01-22T11:46:24.273720433" }, "[bam, bai], [fasta, fai], bed, phased - stub": { "content": [ @@ -328,7 +384,11 @@ ] ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -346,8 +406,12 @@ "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], @@ -355,7 +419,7 @@ "nf-test": "0.9.3", "nextflow": "25.04.2" }, - "timestamp": "2025-12-19T09:57:04.868976217" + "timestamp": "2026-01-22T11:46:44.034301557" }, "[bam, bai], [], [] - stub": { "content": [ @@ -377,7 +441,11 @@ ] ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -395,8 +463,12 @@ "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], @@ -404,7 +476,7 @@ "nf-test": "0.9.3", "nextflow": "25.04.2" }, - "timestamp": "2025-12-19T09:56:47.829913052" + "timestamp": "2026-01-22T11:46:28.153658113" }, "[bam, bai], [fasta, fai], bed - stub": { "content": [ @@ -426,7 +498,11 @@ ] ], "2": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ], "bedgz": [ [ @@ -444,8 +520,12 @@ "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e6cca757b0a2786ae34eaa213d95edc3" + "versions_modkit": [ + [ + "MODKIT_PILEUP", + "modkit", + "0.6.1" + ] ] } ], @@ -453,6 +533,6 @@ "nf-test": "0.9.3", "nextflow": "25.04.2" }, - "timestamp": "2025-12-19T09:56:56.290093996" + "timestamp": "2026-01-22T11:46:36.173040315" } } \ No newline at end of file diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml index 97c93721..1c7f3ee8 100644 --- a/modules/nf-core/mosdepth/environment.yml +++ b/modules/nf-core/mosdepth/environment.yml @@ -5,6 +5,5 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/mosdepth - - mosdepth=0.3.11=h0ec343a_1 - # renovate: datasource=conda depName=bioconda/htslib - htslib=1.22.1 + - mosdepth=0.3.11=h0ec343a_1 diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index 72ba5e48..63739bfa 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -24,7 +24,7 @@ process MOSDEPTH { tuple val(meta), path('*.quantized.bed.gz.csi') , optional:true, emit: quantized_csi tuple val(meta), path('*.thresholds.bed.gz') , optional:true, emit: thresholds_bed tuple val(meta), path('*.thresholds.bed.gz.csi'), optional:true, emit: thresholds_csi - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('mosdepth'), eval("mosdepth --version | sed 's/mosdepth //g'"), topic: versions, emit: versions_mosdepth when: task.ext.when == null || task.ext.when @@ -34,11 +34,11 @@ process MOSDEPTH { def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--fasta ${fasta}" : "" def interval = bed ? "--by ${bed}" : "" - if (bed && args.contains("--by")) { + if (bed && (args.contains("--by") || args.contains("-b "))) { error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" } - if (!bed && args.contains("--thresholds")) { - error "'--thresholds' can only be specified in conjunction with '--by'" + if (args.contains("--thresholds") && !(bed || args.contains("--by") || args.contains("-b "))) { + error "'--thresholds' can only be specified in conjunction with '--by' or an input bed file" } """ @@ -49,15 +49,17 @@ process MOSDEPTH { $args \\ $prefix \\ $bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//') - END_VERSIONS """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + if (bed && (args.contains("--by") || args.contains("-b "))) { + error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" + } + if (args.contains("--thresholds") && !(bed || args.contains("--by") || args.contains("-b "))) { + error "'--thresholds' can only be specified in conjunction with '--by' or an input bed file" + } """ touch ${prefix}.global.dist.txt touch ${prefix}.region.dist.txt @@ -71,10 +73,5 @@ process MOSDEPTH { touch ${prefix}.quantized.bed.gz.csi echo "" | gzip > ${prefix}.thresholds.bed.gz touch ${prefix}.thresholds.bed.gz.csi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index af1ea44a..04c8bfe1 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -178,13 +178,28 @@ output: description: Index file for BED file with threshold coverage pattern: "*.{thresholds.bed.gz.csi}" ontologies: [] + versions_mosdepth: + - - ${task.process}: + type: string + description: The process the versions were collected from + - mosdepth: + type: string + description: The tool name + - "mosdepth --version | sed 's/mosdepth //g'": + type: string + description: The command used to generate the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - mosdepth: + type: string + description: The tool name + - "mosdepth --version | sed 's/mosdepth //g'": + type: string + description: The command used to generate the version of the tool authors: - "@joseespinosa" - "@drpatelh" @@ -192,6 +207,5 @@ authors: - "@matthdsm" maintainers: - "@joseespinosa" - - "@drpatelh" - "@ramprasadn" - "@matthdsm" diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index 0b3c860d..b05dde5b 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -7,10 +7,14 @@ nextflow_process { tag "modules" tag "modules_nfcore" tag "mosdepth" + config "./nextflow.config" test("homo_sapiens - bam, bai, []") { when { + params { + module_args = "" + } process { """ input[0] = [ @@ -25,9 +29,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -36,6 +40,9 @@ nextflow_process { test("homo_sapiens - bam, bai, bed") { when { + params { + module_args = "" + } process { """ input[0] = [ @@ -50,9 +57,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -61,6 +68,9 @@ nextflow_process { test("homo_sapiens - cram, crai, []") { when { + params { + module_args = "" + } process { """ input[0] = [ @@ -78,9 +88,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -89,6 +99,9 @@ nextflow_process { test("homo_sapiens - cram, crai, bed") { when { + params { + module_args = "" + } process { """ input[0] = [ @@ -106,9 +119,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -116,8 +129,10 @@ nextflow_process { test("homo_sapiens - bam, bai, [] - window") { - config "./window.config" when { + params { + module_args = "--by 100" + } process { """ input[0] = [ @@ -132,9 +147,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -142,8 +157,10 @@ nextflow_process { test("homo_sapiens - bam, bai, [] - quantized") { - config "./quantized.config" when { + params { + module_args = "--quantize 0:1:4:100:200" + } process { """ input[0] = [ @@ -158,9 +175,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -168,8 +185,10 @@ nextflow_process { test("homo_sapiens - bam, bai, bed - thresholds") { - config "./threshold.config" when { + params { + module_args = "--thresholds 1,10,20,30" + } process { """ input[0] = [ @@ -184,9 +203,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } @@ -194,8 +213,10 @@ nextflow_process { test("homo_sapiens - bam, bai, bed - fail") { - config "./window.config" when { + params { + module_args = "--by 100" + } process { """ input[0] = [ @@ -210,9 +231,7 @@ nextflow_process { } then { - assertAll( - { assert process.failed } - ) + assert process.failed } } @@ -221,6 +240,9 @@ nextflow_process { options "-stub" when { + params { + module_args = "" + } process { """ input[0] = [ @@ -235,9 +257,9 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match()} ) } diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap index a063dd9f..c27fcc79 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test.snap +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -39,7 +39,11 @@ ] ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ [ @@ -221,8 +225,12 @@ "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -260,7 +268,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ [ @@ -394,8 +406,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -433,7 +449,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ @@ -555,8 +575,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -594,7 +618,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ [ @@ -728,8 +756,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -767,7 +799,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ [ @@ -901,8 +937,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -940,7 +980,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ @@ -1038,8 +1082,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -1077,7 +1125,11 @@ ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ @@ -1175,8 +1227,12 @@ "thresholds_csi": [ ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], @@ -1226,7 +1282,11 @@ ] ], "12": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ], "2": [ [ @@ -1372,8 +1432,12 @@ "test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3" ] ], - "versions": [ - "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb" + "versions_mosdepth": [ + [ + "MOSDEPTH", + "mosdepth", + "0.3.11" + ] ] } ], diff --git a/modules/nf-core/mosdepth/tests/nextflow.config b/modules/nf-core/mosdepth/tests/nextflow.config new file mode 100644 index 00000000..b21c05b5 --- /dev/null +++ b/modules/nf-core/mosdepth/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: "MOSDEPTH" { + ext.args = params.module_args + } +} diff --git a/modules/nf-core/mosdepth/tests/quantized.config b/modules/nf-core/mosdepth/tests/quantized.config deleted file mode 100644 index c208a4ce..00000000 --- a/modules/nf-core/mosdepth/tests/quantized.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--quantize 0:1:4:100:200" -} diff --git a/modules/nf-core/mosdepth/tests/threshold.config b/modules/nf-core/mosdepth/tests/threshold.config deleted file mode 100644 index 3302da60..00000000 --- a/modules/nf-core/mosdepth/tests/threshold.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--thresholds 1,10,20,30" -} diff --git a/modules/nf-core/mosdepth/tests/window.config b/modules/nf-core/mosdepth/tests/window.config deleted file mode 100644 index 7f0d08d6..00000000 --- a/modules/nf-core/mosdepth/tests/window.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--by 100" -} diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 3b0e975b..5376aea1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,25 +1,21 @@ process MULTIQC { + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data' : - 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data' + : 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b'}" input: - path multiqc_files, stageAs: "?/*" - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - path(replace_names) - path(sample_names) + tuple val(meta), path(multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) output: - path "*.html" , emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions + tuple val(meta), path("*.html"), emit: report + tuple val(meta), path("*_data"), emit: data + tuple val(meta), path("*_plots"), emit: plots, optional: true // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions when: task.ext.when == null || task.ext.when @@ -27,8 +23,7 @@ process MULTIQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' - def config = multiqc_config ? "--config ${multiqc_config}" : '' - def extra_config = extra_multiqc_config ? "--config ${extra_multiqc_config}" : '' + def config = multiqc_config ? multiqc_config instanceof List ? "--config ${multiqc_config.join(' --config ')}" : "--config ${multiqc_config}" : "" def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' def replace = replace_names ? "--replace-names ${replace_names}" : '' def samples = sample_names ? "--sample-names ${sample_names}" : '' @@ -38,7 +33,6 @@ process MULTIQC { ${args} \\ ${config} \\ ${prefix} \\ - ${extra_config} \\ ${logo} \\ ${replace} \\ ${samples} \\ @@ -50,6 +44,7 @@ process MULTIQC { mkdir multiqc_data touch multiqc_data/.stub mkdir multiqc_plots + touch multiqc_plots/.stub touch multiqc_report.html """ } diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index f790cab0..ef434a9a 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,6 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into - a single report +description: Aggregate results from bioinformatics analyses across many samples + into a single report keywords: - QC - bioinformatics tools @@ -12,67 +12,81 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - ontologies: [] - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections - in multiqc_config. - pattern: "*.{yml,yaml}" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" - ontologies: [] - - replace_names: - type: file - description: | - Optional two-column sample renaming file. First column a set of - patterns, second column a set of corresponding replacements. Passed via - MultiQC's `--replace-names` option. - pattern: "*.{tsv}" - ontologies: - - edam: http://edamontology.org/format_3475 # TSV - - sample_names: - type: file - description: | - Optional TSV file with headers, passed to the MultiQC --sample_names - argument. - pattern: "*.{tsv}" - ontologies: - - edam: http://edamontology.org/format_3475 # TSV -output: - report: - - "*.html": + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - multiqc_files: type: file - description: MultiQC report file - pattern: ".html" + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC ontologies: [] - data: - - "*_data": - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - plots: - - "*_plots": + - multiqc_config: type: file - description: Plots created by MultiQC - pattern: "*_data" + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" ontologies: [] + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 +output: + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*.html": + type: file + description: MultiQC report file + pattern: ".html" + ontologies: [] + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_plots" + ontologies: [] versions: - - ${task.process}: type: string @@ -95,25 +109,25 @@ maintainers: - "@jfy133" containers: conda: - linux_amd64: - lock_file: https://wave.seqera.io/v1alpha1/builds/bd-d58f60e4deb769bf_1/condalock - linux_arm64: - lock_file: https://wave.seqera.io/v1alpha1/builds/bd-193776baee4194db_1/condalock + linux/amd64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-ee7739d47738383b_1/condalock + linux/arm64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-58d7dee710ab3aa8_1/condalock docker: - linux_amd64: - build_id: bd-d58f60e4deb769bf_1 - name: community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf - scanId: sc-d76ac07493e940b4_6 - linux_arm64: - build_id: bd-193776baee4194db_1 - name: community.wave.seqera.io/library/multiqc:1.32--193776baee4194db - scanId: sc-86caded0bff8246e_3 + linux/amd64: + build_id: bd-ee7739d47738383b_1 + name: community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b + scanId: sc-6ddec592dcadd583_4 + linux/arm64: + build_id: bd-58d7dee710ab3aa8_1 + name: community.wave.seqera.io/library/multiqc:1.33--58d7dee710ab3aa8 + scanId: sc-a04c42273e34c55c_2 singularity: - linux_amd64: - build_id: bd-e649ffa094d1ef4a_1 - name: oras://community.wave.seqera.io/library/multiqc:1.32--e649ffa094d1ef4a - https: https://community.wave.seqera.io/v2/library/multiqc/blobs/sha256:8c6c120d559d7ee04c7442b61ad7cf5a9e8970be5feefb37d68eeaa60c1034eb - linux_arm64: - build_id: bd-aee0064f5570ef22_1 - name: oras://community.wave.seqera.io/library/multiqc:1.32--aee0064f5570ef22 - https: https://community.wave.seqera.io/v2/library/multiqc/blobs/sha256:f02c59ebf6e9a00aa954ee8188a4ecc5c743e18f40b9215a242f67606a00f9cf + linux/amd64: + build_id: bd-e3576ddf588fa00d_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--e3576ddf588fa00d + linux/arm64: + build_id: bd-2537ca5f8445e3c2_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/78/78b89e91d89e9cc99ad5ade5be311f347838cb2acbfb4f13bc343b170be09ce4/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--2537ca5f8445e3c2 diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index d1ae8b06..0e422eaa 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -15,25 +15,28 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } - } test("sarscov2 single-end [fastqc] - custom prefix") { @@ -42,24 +45,28 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/custom_prefix.html" }, - { assert process.out.data[0] ==~ ".*/custom_prefix_data" } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } - } test("sarscov2 single-end [fastqc] [config]") { @@ -67,22 +74,60 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true), + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + file(process.out.plots[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } + ) + } + } + + test("sarscov2 single-end [fastqc] [multiple configs]") { + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [ + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true), + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true) + ], + [], + [], + [] + ]) + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + file(process.out.plots[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } } @@ -94,25 +139,23 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.findAll { key, val -> key.startsWith("versions")} ).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index d72d35b7..c022701f 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -1,6 +1,9 @@ { - "sarscov2 single-end [fastqc]": { + "sarscov2 single-end [fastqc] [multiple configs]": { "content": [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", { "versions": [ [ @@ -13,35 +16,81 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T20:21:35.851707" + }, + "sarscov2 single-end [fastqc]": { + "content": [ + "multiqc_report.html", + "multiqc_data", + { + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:10:43.020315838" + "timestamp": "2026-02-26T15:10:36.019680076" }, "sarscov2 single-end [fastqc] - stub": { "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - { - "versions": [ + { + "data": [ + [ + { + "id": "FASTQC" + }, [ - "MULTIQC", - "multiqc", - "1.33" + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - } - ] + ], + "plots": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "report": [ + [ + { + "id": "FASTQC" + }, + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } ], "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:11:14.131950776" + "timestamp": "2026-02-26T15:14:39.789193051" }, "sarscov2 single-end [fastqc] [config]": { "content": [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", { "versions": [ [ @@ -53,9 +102,29 @@ } ], "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T15:21:29.116129274" + }, + "sarscov2 single-end [fastqc] - custom prefix": { + "content": [ + "custom_prefix.html", + "custom_prefix_data", + { + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:11:07.15692209" + "timestamp": "2026-02-26T15:10:43.419877592" } } \ No newline at end of file diff --git a/modules/nf-core/pigz/uncompress/main.nf b/modules/nf-core/pigz/uncompress/main.nf index db712811..51162836 100644 --- a/modules/nf-core/pigz/uncompress/main.nf +++ b/modules/nf-core/pigz/uncompress/main.nf @@ -36,7 +36,6 @@ process PIGZ_UNCOMPRESS { """ stub: - def args = task.ext.args ?: '' uncompressed_filename = zip.toString() - '.gz' """ touch $uncompressed_filename diff --git a/modules/nf-core/pigz/uncompress/meta.yml b/modules/nf-core/pigz/uncompress/meta.yml index cddd0a3b..bbc6a945 100644 --- a/modules/nf-core/pigz/uncompress/meta.yml +++ b/modules/nf-core/pigz/uncompress/meta.yml @@ -10,7 +10,7 @@ tools: description: "Parallel implementation of the gzip algorithm." homepage: "https://zlib.net/pigz/" documentation: "https://zlib.net/pigz/pigz.pdf" - + licence: ["Zlib"] identifier: "" input: - - meta: diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf index 824d6911..6df7aa76 100644 --- a/modules/nf-core/samtools/cat/main.nf +++ b/modules/nf-core/samtools/cat/main.nf @@ -13,7 +13,7 @@ process SAMTOOLS_CAT { output: tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools when: @@ -29,11 +29,6 @@ process SAMTOOLS_CAT { $args \\ -o ${prefix}.${file_type} \\ $input_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -41,10 +36,5 @@ process SAMTOOLS_CAT { def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() """ touch ${prefix}.${file_type} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/samtools/cat/meta.yml b/modules/nf-core/samtools/cat/meta.yml index a2ac0e21..3c4e2fbb 100644 --- a/modules/nf-core/samtools/cat/meta.yml +++ b/modules/nf-core/samtools/cat/meta.yml @@ -51,13 +51,27 @@ output: description: Concatenated CRAM file pattern: "*.{cram}" ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@matthdsm" maintainers: diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test b/modules/nf-core/samtools/cat/tests/main.nf.test index dad80b83..7910f65d 100644 --- a/modules/nf-core/samtools/cat/tests/main.nf.test +++ b/modules/nf-core/samtools/cat/tests/main.nf.test @@ -14,22 +14,18 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map + input[0] = [ + [id: 'test'], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] - ]) + ] """ } } then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, - { assert snapshot(process.out.cram).match("bams_cram") }, - { assert snapshot(process.out.versions).match("bams_versions") } - ) + assert process.success + assert snapshot(process.out).match() } } @@ -40,22 +36,18 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map + input[0] = [ + [id: 'test'], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] - ]) + ] """ } } then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, - { assert snapshot(process.out.cram).match("bams_stub_cram") }, - { assert snapshot(process.out.versions).match("bams_stub_versions") } - ) + assert process.success + assert snapshot(process.out).match() } } } diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap index 2143309a..1b341c7b 100644 --- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/cat/tests/main.nf.test.snap @@ -1,70 +1,96 @@ { - "bams_stub_cram": { + "bams_stub": { "content": [ - [ - - ] + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + "SAMTOOLS_CAT", + "samtools", + "1.22.1" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_CAT", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-02-02T16:45:42.587418" + "timestamp": "2026-02-04T14:52:02.961050797" }, - "bams_stub_versions": { + "bams": { "content": [ - [ - "versions.yml:md5,99695cce7873f354da5dd8660522cb4f" - ] + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,ceee7822994e89e29d42cad03be8d54b" + ] + ], + "1": [ + + ], + "2": [ + [ + "SAMTOOLS_CAT", + "samtools", + "1.22.1" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,ceee7822994e89e29d42cad03be8d54b" + ] + ], + "cram": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_CAT", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-10T13:02:09.79415" - }, - "bams_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:37.965199" - }, - "bams_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:37.96805" - }, - "bams_stub_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:42.583881" - }, - "bams_versions": { - "content": [ - [ - "versions.yml:md5,99695cce7873f354da5dd8660522cb4f" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-09-10T13:02:05.668116" + "timestamp": "2026-02-04T14:51:56.905803472" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 57a03497..97bfb578 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -8,8 +8,7 @@ process SAMTOOLS_FAIDX { 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: - tuple val(meta), path(fasta) - tuple val(meta2), path(fai) + tuple val(meta), path(fasta), path(fai) val get_sizes output: diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index 163c3015..80aae1da 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -1,5 +1,6 @@ name: samtools_faidx -description: Index FASTA file, and optionally generate a file of chromosome sizes +description: Index FASTA file, and optionally generate a file of chromosome + sizes keywords: - index - fasta @@ -14,7 +15,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -27,11 +29,6 @@ input: description: FASTA file pattern: "*.{fa,fasta}" ontologies: [] - - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - fai: type: file description: FASTA index file @@ -40,7 +37,6 @@ input: - get_sizes: type: boolean description: use cut to get the sizes of the index (true) or not (false) - output: fa: - - meta: @@ -94,9 +90,8 @@ output: type: string description: The tool name - "samtools version | sed '1!d;s/.* //'": - type: string + type: eval description: The command used to generate the version of the tool - topics: versions: - - ${task.process}: @@ -106,7 +101,7 @@ topics: type: string description: The tool name - "samtools version | sed '1!d;s/.* //'": - type: string + type: eval description: The command used to generate the version of the tool authors: - "@drpatelh" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test index 02ba5040..9a86db86 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -18,10 +18,12 @@ nextflow_process { } process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [[],[]] - input[2] = false + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = false """ } } @@ -29,7 +31,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -42,10 +44,12 @@ nextflow_process { } process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] - input[1] = [[],[]] - input[2] = false + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = false """ } } @@ -53,7 +57,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -66,11 +70,12 @@ nextflow_process { } process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] - input[2] = false + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = false """ } } @@ -78,7 +83,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -92,11 +97,12 @@ nextflow_process { } process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] - input[2] = false + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = false """ } } @@ -104,7 +110,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -118,10 +124,12 @@ nextflow_process { } process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [[],[]] - input[2] = false + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = false """ } } @@ -129,7 +137,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -142,12 +150,12 @@ nextflow_process { } process { """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ]) - input[1] = [[],[]] - input[2] = true + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = true """ } } @@ -155,7 +163,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -168,12 +176,12 @@ nextflow_process { } process { """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) - ]) - input[1] = [[],[]] - input[2] = true + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = true """ } } @@ -181,7 +189,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -196,12 +204,12 @@ nextflow_process { } process { """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ]) - input[1] = [[],[]] - input[2] = true + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = true """ } } @@ -209,7 +217,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -224,12 +232,12 @@ nextflow_process { } process { """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) - ]) - input[1] = [[],[]] - input[2] = true + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = true """ } } @@ -237,7 +245,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 565d20e7..41697444 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -2,39 +2,13 @@ "test_samtools_faidx": { "content": [ { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], "fai": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" ] @@ -56,47 +30,13 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:02:40.159309157" + "timestamp": "2026-02-10T15:39:12.541649151" }, "test_samtools_faidx_get_sizes_bgzip - stub": { "content": [ { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], @@ -135,42 +75,13 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:03:39.550619177" + "timestamp": "2026-02-10T15:41:44.040426987" }, "test_samtools_faidx_get_sizes": { "content": [ { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], @@ -204,52 +115,20 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:03:16.844965756" + "timestamp": "2026-02-10T15:47:03.653912015" }, "test_samtools_faidx_bgzip": { "content": [ { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" - ] - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], "fai": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" ] @@ -257,8 +136,7 @@ "gzi": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" ] @@ -277,43 +155,17 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:02:47.301476131" + "timestamp": "2026-02-10T15:50:04.023566795" }, "test_samtools_faidx_fasta": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" ] @@ -338,42 +190,13 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T09:44:40.559583279" + "timestamp": "2026-02-10T15:39:23.529404162" }, "test_samtools_faidx_get_sizes - stub": { "content": [ { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], @@ -407,43 +230,17 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:03:31.989929281" + "timestamp": "2026-02-10T15:41:39.039834304" }, "test_samtools_faidx_stub_fasta": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -468,46 +265,20 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T09:44:48.295693103" + "timestamp": "2026-02-10T15:39:28.961701609" }, "test_samtools_faidx_stub_fai": { "content": [ { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], "fai": [ [ { - "id": "test", - "single_end": false + "id": "test" }, "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -529,47 +300,13 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:03:09.784289542" + "timestamp": "2026-02-10T15:39:34.471028474" }, "test_samtools_faidx_get_sizes_bgzip": { "content": [ { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "3": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" - ] - ], - "4": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" - ] - ], "fa": [ ], @@ -608,8 +345,8 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2025-12-23T14:03:24.814967939" + "timestamp": "2026-02-10T15:39:45.439016495" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf index f148f56b..0cfb7e87 100644 --- a/modules/nf-core/samtools/flagstat/main.nf +++ b/modules/nf-core/samtools/flagstat/main.nf @@ -12,7 +12,7 @@ process SAMTOOLS_FLAGSTAT { output: tuple val(meta), path("*.flagstat"), emit: flagstat - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -25,11 +25,6 @@ process SAMTOOLS_FLAGSTAT { --threads ${task.cpus} \\ $bam \\ > ${prefix}.flagstat - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -48,10 +43,5 @@ process SAMTOOLS_FLAGSTAT { 850000 + 0 with mate mapped to a different chr 50000 + 0 with mate mapped to a different chr (mapQ>=5) END_FLAGSTAT - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml index ebbc15f2..8caa1bcc 100644 --- a/modules/nf-core/samtools/flagstat/meta.yml +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -1,6 +1,6 @@ name: samtools_flagstat -description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG - type +description: Counts the number of alignments in a BAM/CRAM/SAM file for each + FLAG type keywords: - stats - mapping @@ -17,7 +17,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -47,13 +48,27 @@ output: description: File containing samtools flagstat output pattern: "*.{flagstat}" ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap index 0a0a9b15..f5c882da 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -12,7 +12,11 @@ ] ], "1": [ - "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc" + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ], "flagstat": [ [ @@ -23,16 +27,20 @@ "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], - "versions": [ - "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc" + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-15T15:02:00.813612" + "timestamp": "2026-02-03T11:14:30.820969684" }, "BAM": { "content": [ @@ -47,7 +55,11 @@ ] ], "1": [ - "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc" + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ], "flagstat": [ [ @@ -58,15 +70,19 @@ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" ] ], - "versions": [ - "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc" + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-15T15:01:55.232954" + "timestamp": "2026-02-03T11:14:25.581619424" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf index 9181a1a5..d5b70a7f 100644 --- a/modules/nf-core/samtools/idxstats/main.nf +++ b/modules/nf-core/samtools/idxstats/main.nf @@ -12,7 +12,7 @@ process SAMTOOLS_IDXSTATS { output: tuple val(meta), path("*.idxstats"), emit: idxstats - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process SAMTOOLS_IDXSTATS { --threads ${task.cpus-1} \\ $bam \\ > ${prefix}.idxstats - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -39,10 +34,5 @@ process SAMTOOLS_IDXSTATS { """ touch ${prefix}.idxstats - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml index 96d42746..fd153841 100644 --- a/modules/nf-core/samtools/idxstats/meta.yml +++ b/modules/nf-core/samtools/idxstats/meta.yml @@ -17,7 +17,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -47,13 +48,27 @@ output: description: File containing samtools idxstats output pattern: "*.{idxstats}" ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test index 5fd1fc78..c990cd55 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test @@ -25,7 +25,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.idxstats, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -47,7 +50,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.idxstats, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } }} diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap index d3e785e0..19a54c7c 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap @@ -1,72 +1,56 @@ { "bam - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,6da44e5235401559cea62052bdc0197b" - ], - "idxstats": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_IDXSTATS", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,6da44e5235401559cea62052bdc0197b" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-10T13:47:35.796569" + "timestamp": "2026-02-02T16:21:46.333090477" }, "bam": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" - ] - ], - "1": [ - "versions.yml:md5,6da44e5235401559cea62052bdc0197b" - ], - "idxstats": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + "SAMTOOLS_IDXSTATS", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,6da44e5235401559cea62052bdc0197b" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-10T13:47:31.86415" + "timestamp": "2026-02-02T16:21:41.063422521" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index a77ad821..e2a0e56d 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -14,7 +14,7 @@ process SAMTOOLS_INDEX { tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.csi") , optional:true, emit: csi tuple val(meta), path("*.crai"), optional:true, emit: crai - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process SAMTOOLS_INDEX { -@ ${task.cpus} \\ $args \\ $input - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -40,10 +35,5 @@ process SAMTOOLS_INDEX { "crai" : args.contains("-c") ? "csi" : "bai" """ touch ${input}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 1bed6bca..c6d4ce25 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -14,7 +14,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -60,13 +61,27 @@ output: description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index ca34fb5c..c96cec86 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -23,7 +23,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -43,7 +46,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.crai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -67,7 +73,7 @@ nextflow_process { { assert process.success }, { assert snapshot( file(process.out.csi[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -89,7 +95,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -110,7 +119,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.crai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -133,7 +145,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.csi, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 3836c6bf..afc8a1ff 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,250 +1,156 @@ { "csi - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ], - "bai": [ - - ], - "crai": [ - - ], - "csi": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:38.25787" + "timestamp": "2026-01-28T17:52:10.030187" }, "crai - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - - ], - "1": [ - - ], - "2": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "3": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ], - "bai": [ - - ], - "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:34.496412" + "timestamp": "2026-01-28T17:51:59.125484" }, "bai - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ], - "bai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "crai": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:25.934431" + "timestamp": "2026-01-28T17:51:47.277042" }, "csi": { "content": [ "test.paired_end.sorted.bam.csi", - [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ] + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:22.262088" + "timestamp": "2026-01-28T17:51:35.758735" }, "crai": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], { - "0": [ - - ], - "1": [ - - ], - "2": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "3": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ], - "bai": [ - - ], - "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" - ] - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:18.191664" + "timestamp": "2026-01-28T17:51:26.561965" }, "bai": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" - ], - "bai": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "crai": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-10T14:13:08.51539" + "timestamp": "2026-01-28T17:51:15.299035" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index a1a05510..40dbf661 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -19,11 +19,13 @@ process SAMTOOLS_STATS { task.ext.when == null || task.ext.when script: - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" """ samtools \\ stats \\ + ${args} \\ --threads ${task.cpus} \\ ${reference} \\ ${input} \\ diff --git a/modules/nf-core/severus/main.nf b/modules/nf-core/severus/main.nf index 75770c34..628b5034 100644 --- a/modules/nf-core/severus/main.nf +++ b/modules/nf-core/severus/main.nf @@ -8,25 +8,25 @@ process SEVERUS { 'biocontainers/severus:1.6--pyhdfd78af_0' }" input: - tuple val(meta), path(target_input), path(target_index), path(control_input), path(control_index), path(vcf) + tuple val(meta), path(target_input), path(target_index), path(control_input), path(control_index), path(vcf), path(tbi) tuple val(meta2), path(bed), path(pon_path) output: - tuple val(meta), path("${prefix}/severus.log") , emit: log - tuple val(meta), path("${prefix}/read_qual.txt") , emit: read_qual - tuple val(meta), path("${prefix}/breakpoints_double.csv") , emit: breakpoints_double - tuple val(meta), path("${prefix}/read_alignments") , emit: read_alignments , optional: true - tuple val(meta), path("${prefix}/read_ids.csv") , emit: read_ids , optional: true - tuple val(meta), path("${prefix}/severus_collaped_dup.bed") , emit: collapsed_dup , optional: true - tuple val(meta), path("${prefix}/severus_LOH.bed") , emit: loh , optional: true - tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true + tuple val(meta), path("severus.log") , emit: log + tuple val(meta), path("read_qual.txt") , emit: read_qual + tuple val(meta), path("breakpoints_double.csv") , emit: breakpoints_double + tuple val(meta), path("read_alignments") , emit: read_alignments , optional: true + tuple val(meta), path("read_ids.csv") , emit: read_ids , optional: true + tuple val(meta), path("severus_collaped_dup.bed") , emit: collapsed_dup , optional: true + tuple val(meta), path("severus_LOH.bed") , emit: loh , optional: true + tuple val(meta), path("all_SVs/severus_all.vcf") , emit: all_vcf , optional: true + tuple val(meta), path("all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true + tuple val(meta), path("all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("all_SVs/plots/severus_*.html") , emit: all_plots , optional: true + tuple val(meta), path("somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true + tuple val(meta), path("somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true + tuple val(meta), path("somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true path "versions.yml" , emit: versions when: @@ -50,12 +50,7 @@ process SEVERUS { $pon \\ $control \\ $phasing_vcf \\ - --out-dir ${prefix} - - bgzip ${prefix}/somatic_SVs/severus_somatic.vcf - tabix -p vcf ${prefix}/somatic_SVs/severus_somatic.vcf.gz - bgzip ${prefix}/all_SVs/severus_all.vcf - tabix -p vcf ${prefix}/all_SVs/severus_all.vcf.gz + --out-dir . cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,7 +59,6 @@ process SEVERUS { """ stub: - def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/nf-core/severus/severus.diff b/modules/nf-core/severus/severus.diff index d5e967c7..455c26e3 100644 --- a/modules/nf-core/severus/severus.diff +++ b/modules/nf-core/severus/severus.diff @@ -3,14 +3,8 @@ Changes in component 'nf-core/severus' Changes in 'severus/main.nf': --- modules/nf-core/severus/main.nf +++ modules/nf-core/severus/main.nf -@@ -4,30 +4,32 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/severus:1.3--pyhdfd78af_0': -- 'biocontainers/severus:1.3--pyhdfd78af_0' }" -+ 'https://depot.galaxyproject.org/singularity/severus:1.6--pyhdfd78af_0': -+ 'biocontainers/severus:1.6--pyhdfd78af_0' }" +@@ -8,25 +8,25 @@ + 'biocontainers/severus:1.6--pyhdfd78af_0' }" input: - tuple val(meta), path(target_input), path(target_index), path(control_input), path(control_index), path(vcf) @@ -30,11 +24,10 @@ Changes in 'severus/main.nf': - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true -- tuple val(meta), path("${prefix}/somatic_SVs/severus_all.vcf") , emit: somatic_vcf , optional: true +- tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true -- path "versions.yml" , emit: versions + tuple val(meta), path("severus.log") , emit: log + tuple val(meta), path("read_qual.txt") , emit: read_qual + tuple val(meta), path("breakpoints_double.csv") , emit: breakpoints_double @@ -42,25 +35,23 @@ Changes in 'severus/main.nf': + tuple val(meta), path("read_ids.csv") , emit: read_ids , optional: true + tuple val(meta), path("severus_collaped_dup.bed") , emit: collapsed_dup , optional: true + tuple val(meta), path("severus_LOH.bed") , emit: loh , optional: true -+ tuple val(meta), path("all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true -+ tuple val(meta), path("all_SVs/severus_all.vcf.gz.tbi") , emit: all_tbi , optional: true -+ tuple val(meta), path("all_SVs/breakpoint_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true -+ tuple val(meta), path("all_SVs/breakpoint_clusters.tsv") , emit: all_breakpoints_clusters , optional: true ++ tuple val(meta), path("all_SVs/severus_all.vcf") , emit: all_vcf , optional: true ++ tuple val(meta), path("all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true ++ tuple val(meta), path("all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("all_SVs/plots/severus_*.html") , emit: all_plots , optional: true -+ tuple val(meta), path("somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf //, optional: true -+ tuple val(meta), path("somatic_SVs/severus_somatic.vcf.gz.tbi") , emit: somatic_tbi , optional: true -+ tuple val(meta), path("somatic_SVs/breakpoint_clusters_list.tsv") , emit: somatic_breakpoints_clusters_list, optional: true -+ tuple val(meta), path("somatic_SVs/breakpoint_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true ++ tuple val(meta), path("somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true ++ tuple val(meta), path("somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true ++ tuple val(meta), path("somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true -+ path "versions.yml" , emit: versions + path "versions.yml" , emit: versions when: - task.ext.when == null || task.ext.when -@@ -39,15 +41,23 @@ +@@ -39,15 +39,18 @@ def control = control_input ? "--control-bam ${control_input}" : "" def vntr_bed = bed ? "--vntr-bed ${bed}" : "" def phasing_vcf = vcf ? "--phasing-vcf ${vcf}" : "" + def pon = pon_path && (!control_input) ? "--PON ${pon_path}" : "" ++ """ severus \\ $args \\ @@ -72,66 +63,11 @@ Changes in 'severus/main.nf': $phasing_vcf \\ - --out-dir ${prefix} + --out-dir . -+ -+ bgzip somatic_SVs/severus_somatic.vcf -+ tabix -p vcf somatic_SVs/severus_somatic.vcf.gz -+ bgzip all_SVs/severus_all.vcf -+ tabix -p vcf all_SVs/severus_all.vcf.gz -+ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": -@@ -60,26 +70,28 @@ - prefix = task.ext.prefix ?: "${meta.id}" - - """ -- mkdir -p ${prefix}/all_SVs/plots -- mkdir -p ${prefix}/somatic_SVs/plots -+ mkdir -p all_SVs/plots -+ mkdir -p somatic_SVs/plots - -- touch ${prefix}/severus_collaped_dup.bed -- touch ${prefix}/severus.log -- touch ${prefix}/severus_LOH.bed -- touch ${prefix}/read_alignments -- touch ${prefix}/read_ids.csv -- touch ${prefix}/read_qual.txt -- touch ${prefix}/breakpoints_double.csv -- touch ${prefix}/all_SVs/severus_all.vcf -- touch ${prefix}/all_SVs/breakpoints_clusters_list.tsv -- touch ${prefix}/all_SVs/breakpoints_clusters.tsv -- touch ${prefix}/all_SVs/plots/severus_0.html -- touch ${prefix}/all_SVs/plots/severus_1.html -- touch ${prefix}/somatic_SVs/severus_somatic.vcf -- touch ${prefix}/somatic_SVs/breakpoints_clusters_list.tsv -- touch ${prefix}/somatic_SVs/breakpoints_clusters.tsv -- touch ${prefix}/somatic_SVs/plots/severus_0.html -- touch ${prefix}/somatic_SVs/plots/severus_1.html -+ touch severus_collaped_dup.bed -+ touch severus.log -+ touch severus_LOH.bed -+ touch read_alignments -+ touch read_ids.csv -+ touch read_qual.txt -+ touch breakpoints_double.csv -+ touch all_SVs/severus_all.vcf.gz -+ touch all_SVs/severus_all.vcf.gz.tbi -+ touch all_SVs/breakpoints_clusters_list.tsv -+ touch all_SVs/breakpoints_clusters.tsv -+ touch all_SVs/plots/severus_0.html -+ touch all_SVs/plots/severus_1.html -+ touch somatic_SVs/severus_somatic.vcf.gz -+ touch somatic_SVs/severus_somatic.vcf.gz.tbi -+ touch somatic_SVs/breakpoints_clusters_list.tsv -+ touch somatic_SVs/breakpoints_clusters.tsv -+ touch somatic_SVs/plots/severus_0.html -+ touch somatic_SVs/plots/severus_1.html cat <<-END_VERSIONS > versions.yml "${task.process}": 'modules/nf-core/severus/environment.yml' is unchanged -'modules/nf-core/severus/tests/tags.yml' is unchanged 'modules/nf-core/severus/tests/main.nf.test' is unchanged 'modules/nf-core/severus/tests/main.nf.test.snap' is unchanged 'modules/nf-core/severus/tests/nextflow.config' is unchanged diff --git a/modules/nf-core/severus/tests/main.nf.test.snap b/modules/nf-core/severus/tests/main.nf.test.snap index 16d4466b..a6b09ed1 100644 --- a/modules/nf-core/severus/tests/main.nf.test.snap +++ b/modules/nf-core/severus/tests/main.nf.test.snap @@ -67,7 +67,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,ce1bbdc8006bf77cf0241341b8031034" + "severus_somatic.vcf:md5,d977e35947a1294be9795880c5d7ef14" ] ], [ @@ -81,10 +81,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-10-23T10:30:20.686848066" + "timestamp": "2026-01-26T13:03:25.015885535" }, "homo_sapiens - [ bam, bai, [], [], [] ], [[],[]] - stub": { "content": [ @@ -387,7 +387,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,10d304342aa0adc19bc85b67645c9820" + "severus_somatic.vcf:md5,7d69ee117bd032a31166cf2cf7a3ff8c" ] ], [ @@ -401,10 +401,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-10-23T10:30:16.766604348" + "timestamp": "2026-01-26T13:03:18.532828432" }, "homo_sapiens - [ bam, bai, bam, bai, vcf ], [ bed ]": { "content": [ @@ -438,7 +438,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,d759aea3770c7d074d34c3c469f8ff14" + "severus_somatic.vcf:md5,e8f4f5d77f5a17692ce82cde5cd7c833" ] ], [ @@ -452,9 +452,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-10-23T10:30:24.866674264" + "timestamp": "2026-01-26T13:03:31.514266729" } } \ No newline at end of file diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index e712ebe6..b9c324da 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -12,7 +12,7 @@ process UNTAR { output: tuple val(meta), path("${prefix}"), emit: untar - path "versions.yml", emit: versions + tuple val("${task.process}"), val('untar'), eval('tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//"'), emit: versions_untar, topic: versions when: task.ext.when == null || task.ext.when @@ -43,10 +43,6 @@ process UNTAR { ${args2} fi - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS """ stub: @@ -75,10 +71,5 @@ process UNTAR { fi done fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index 1603e382..571d8078 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -38,13 +38,29 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*/" + versions_untar: + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test index c957517a..fde8db16 100644 --- a/modules/nf-core/untar/tests/main.nf.test +++ b/modules/nf-core/untar/tests/main.nf.test @@ -20,7 +20,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -38,7 +41,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -58,7 +64,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -78,7 +87,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap index ceb91b79..51a414dd 100644 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -1,158 +1,118 @@ { "test_untar_onlyfiles": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" - ] + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:28.231047" + "timestamp": "2026-01-28T17:49:32.000491" }, "test_untar_onlyfiles - stub": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:45.773103" + "timestamp": "2026-01-28T17:49:58.812479" }, "test_untar - stub": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:36.777441" + "timestamp": "2026-01-28T17:49:48.119456" }, "test_untar": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" - ] + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:19.377674" + "timestamp": "2026-01-28T17:49:17.252494" } } \ No newline at end of file diff --git a/modules/nf-core/unzip/main.nf b/modules/nf-core/unzip/main.nf index a0c02109..b977ff6d 100644 --- a/modules/nf-core/unzip/main.nf +++ b/modules/nf-core/unzip/main.nf @@ -35,7 +35,6 @@ process UNZIP { """ stub: - def args = task.ext.args ?: '' if ( archive instanceof List && archive.name.size > 1 ) { error "[UNZIP] error: 7za only accepts a single archive as input. Please check module input." } prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName) """ diff --git a/subworkflows/local/prepare_reference_files.nf b/subworkflows/local/prepare_reference_files.nf index 6bd11959..bf1e3377 100644 --- a/subworkflows/local/prepare_reference_files.nf +++ b/subworkflows/local/prepare_reference_files.nf @@ -69,8 +69,6 @@ workflow PREPARE_REFERENCE_FILES { WGET.out.outfile ) - ch_versions = ch_versions.mix(UNTAR.out.versions) - UNTAR.out.untar.set { downloaded_clair3_models } // @@ -94,28 +92,28 @@ workflow PREPARE_REFERENCE_FILES { if (!ascat_alleles) allele_files = channel.empty() else if (ascat_alleles.endsWith(".zip")) { UNZIP_ALLELES(channel.fromPath(file(ascat_alleles)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) - allele_files = UNZIP_ALLELES.out.unzipped_archive.flatMap { it[1].listFiles() }.collect() + allele_files = UNZIP_ALLELES.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() ch_versions = ch_versions.mix(UNZIP_ALLELES.out.versions) } else allele_files = channel.fromPath(ascat_alleles).collect() if (!ascat_loci) loci_files = channel.empty() else if (ascat_loci.endsWith(".zip")) { UNZIP_LOCI(channel.fromPath(file(ascat_loci)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) - loci_files = UNZIP_LOCI.out.unzipped_archive.flatMap { it[1].listFiles() }.collect() + loci_files = UNZIP_LOCI.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() ch_versions = ch_versions.mix(UNZIP_LOCI.out.versions) } else loci_files = channel.fromPath(ascat_loci).collect() if (!ascat_loci_gc) gc_file = channel.value([]) else if ( ascat_loci_gc.endsWith(".zip") ) { UNZIP_GC(channel.fromPath(file(ascat_loci_gc)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) - gc_file = UNZIP_GC.out.unzipped_archive.flatMap { it[1].listFiles() }.collect() + gc_file = UNZIP_GC.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() ch_versions = ch_versions.mix(UNZIP_GC.out.versions) } else gc_file = channel.fromPath(ascat_loci_gc).collect() if (!ascat_loci_rt) rt_file = channel.value([]) else if (ascat_loci_rt.endsWith(".zip")) { UNZIP_RT(channel.fromPath(file(ascat_loci_rt)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) - rt_file = UNZIP_RT.out.unzipped_archive.flatMap { it[1].listFiles() }.collect() + rt_file = UNZIP_RT.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() ch_versions = ch_versions.mix(UNZIP_RT.out.versions) } else rt_file = channel.fromPath(ascat_loci_rt).collect() } diff --git a/subworkflows/nf-core/bam_stats_samtools/main.nf b/subworkflows/nf-core/bam_stats_samtools/main.nf index 90fcbf80..34e8fe10 100644 --- a/subworkflows/nf-core/bam_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_stats_samtools/main.nf @@ -12,20 +12,14 @@ workflow BAM_STATS_SAMTOOLS { ch_fasta // channel: [ val(meta), path(fasta) ] main: - ch_versions = Channel.empty() - SAMTOOLS_STATS ( ch_bam_bai, ch_fasta ) SAMTOOLS_FLAGSTAT ( ch_bam_bai ) - ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions) SAMTOOLS_IDXSTATS ( ch_bam_bai ) - ch_versions = ch_versions.mix(SAMTOOLS_IDXSTATS.out.versions) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test index 76e7a40a..2f329695 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test @@ -36,8 +36,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } @@ -66,8 +65,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } @@ -96,8 +94,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap index 3c543191..9c8ff1b5 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap @@ -29,10 +29,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" - ], "flagstat": [ [ { @@ -59,18 +55,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:39:28.707989" + "timestamp": "2026-02-03T11:10:30.076183827" }, "test_bam_stats_samtools_single_end - stub": { "content": [ @@ -102,10 +94,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" - ], "flagstat": [ [ { @@ -132,18 +120,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:39:20.473816" + "timestamp": "2026-02-03T11:10:24.379362883" }, "test_bam_stats_samtools_paired_end_cram - stub": { "content": [ @@ -175,10 +159,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" - ], "flagstat": [ [ { @@ -205,18 +185,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:39:37.697552" + "timestamp": "2026-02-03T11:10:35.91658956" }, "test_bam_stats_samtools_single_end": { "content": [ @@ -246,17 +222,13 @@ }, "test.stats:md5,7a05a22bdb17e8df6e8c2d100ff09a31" ] - ], - [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:38:50.143087" + "timestamp": "2026-02-03T11:32:20.243663217" }, "test_bam_stats_samtools_paired_end": { "content": [ @@ -286,17 +258,13 @@ }, "test.stats:md5,a391612b5ef5b181e854ccaad8c8a068" ] - ], - [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:39:01.02311" + "timestamp": "2026-02-03T11:32:26.434187887" }, "test_bam_stats_samtools_paired_end_cram": { "content": [ @@ -326,16 +294,12 @@ }, "test.stats:md5,2b0e31ab01b867a6ff312023ae03838d" ] - ], - [ - "versions.yml:md5,088c14fc7d21fa2e662860d7cbf9a181", - "versions.yml:md5,ade6457ea5ae73a41c505bb22681d0fa" ] ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.0" + "nextflow": "25.10.3" }, - "timestamp": "2025-11-01T02:39:12.503355" + "timestamp": "2026-02-03T11:32:32.441454186" } } \ No newline at end of file diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index a7eb1861..258e8463 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -646,12 +646,12 @@ workflow LRSOMATIC { ) // Collect MultiQC files - ch_multiqc_files = ch_multiqc_files.mix(ch_bam_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_bam_flagstat.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_bam_idxstats.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_stats.collect{it -> it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_flagstat.collect{it -> it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_idxstats.collect{it -> it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_global.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_summary.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_global.collect{it -> it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_summary.collect{it -> it[1]}.ifEmpty([])) MULTIQC ( From ae09ca57d708a348d24822d6e81d2c7d220a03b5 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 15:30:51 +0100 Subject: [PATCH 02/12] manual version bump as instructed --- .nf-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index f15c6cf9..07124956 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -27,7 +27,7 @@ lint: - validation.summary.beforeText - validation.summary.afterText schema_params: false -nf_core_version: 3.5.1 +nf_core_version: 3.5.2 repository_type: pipeline template: author: Jonas Demeulemeester From 9e513a9720617dc17cdd091b2657faa0b9aa66bc Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 15:32:07 +0100 Subject: [PATCH 03/12] mostly channel structure changes to adhere to new module input requirements and removing versioning where it is done with topic channels --- subworkflows/local/prepare_annotation.nf | 17 +++++----- subworkflows/local/prepare_reference_files.nf | 4 +-- subworkflows/local/tumor_normal_happhase.nf | 25 +++++++-------- subworkflows/local/tumor_only_happhase.nf | 7 ++-- workflows/lrsomatic.nf | 32 ++++++------------- 5 files changed, 33 insertions(+), 52 deletions(-) diff --git a/subworkflows/local/prepare_annotation.nf b/subworkflows/local/prepare_annotation.nf index b5503a5d..4d8dca26 100644 --- a/subworkflows/local/prepare_annotation.nf +++ b/subworkflows/local/prepare_annotation.nf @@ -15,9 +15,17 @@ workflow PREPARE_ANNOTATION { ch_versions = channel.empty() ensemblvep_cache = channel.empty() + // + // MODULE: ENSEMBLVEP_DOWNLOAD + // + if (download_vep_cache) { vep_download_info = channel.of([[],vep_genome, vep_species, vep_cache_version]) - ENSEMBLVEP_DOWNLOAD(vep_download_info) + + ENSEMBLVEP_DOWNLOAD ( + vep_download_info + ) + ensemblvep_cache = ENSEMBLVEP_DOWNLOAD.out.cache ch_versions = ch_versions.mix(ENSEMBLVEP_DOWNLOAD.out.versions) @@ -38,13 +46,6 @@ workflow PREPARE_ANNOTATION { ensemblvep_cache = channel.fromPath(file("${vep_cache}/${vep_annotation_cache_key}"), checkIfExists: true).collect() } - - - // - // MODULE: ENSEMBLVEP_DOWNLOAD - // - - emit: vep_cache = ensemblvep_cache versions = ch_versions diff --git a/subworkflows/local/prepare_reference_files.nf b/subworkflows/local/prepare_reference_files.nf index bf1e3377..17f8079d 100644 --- a/subworkflows/local/prepare_reference_files.nf +++ b/subworkflows/local/prepare_reference_files.nf @@ -74,10 +74,8 @@ workflow PREPARE_REFERENCE_FILES { // // MODULE: Index the fasta // - SAMTOOLS_FAIDX ( - ch_prepared_fasta, - [ [:], [] ], + ch_prepared_fasta.map { meta, fasta -> [meta, fasta, []] }, false ) diff --git a/subworkflows/local/tumor_normal_happhase.nf b/subworkflows/local/tumor_normal_happhase.nf index 81d08f91..84fba84c 100644 --- a/subworkflows/local/tumor_normal_happhase.nf +++ b/subworkflows/local/tumor_normal_happhase.nf @@ -220,7 +220,6 @@ workflow TUMOR_NORMAL_HAPPHASE { mixed_hapbams ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions) // Add index to channel mixed_bams_vcf .join(mixed_hapbams) @@ -254,17 +253,19 @@ workflow TUMOR_NORMAL_HAPPHASE { return [ meta, tumor_bam, tumor_bai, normal_bam, normal_bai ] } .join(LONGPHASE_PHASE.out.snv_vcf) + .join(LONGPHASE_PHASE.out.snv_vcf_index) .set{tumor_normal_severus} - // tumor_normal_severus -> meta: [id, paired_data, platform, sex, fiber, basecall_model] - // tumor_bam: haplotagged aligned bam for tumor - // tumor_bai: indexes for tumor bam files - // normal_bam: haplotagged aligned bam files for normal - // normal_bai: indexes for normal bam files - // phased_vcf: phased small variant vcf for normal + // tumor_normal_severus -> meta: [id, paired_data, platform, sex, fiber, basecall_model] + // tumor_bam: haplotagged aligned bam for tumor + // tumor_bai: indexes for tumor bam files + // normal_bam: haplotagged aligned bam files for normal + // normal_bai: indexes for normal bam files + // phased_vcf: phased small variant vcf for normal + // phased_vcf_index: phased small variant vcf index for normal // Get ClairS input channel tumor_normal_severus - .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf -> + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi -> return[meta , tumor_bam, tumor_bai, normal_bam, normal_bai, meta.clairS_model] } .set { clairs_input } @@ -286,22 +287,18 @@ workflow TUMOR_NORMAL_HAPPHASE { // MODULE: BCFTOOLS_CONCAT // - BCFTOOLS_CONCAT( + BCFTOOLS_CONCAT ( clairs_out ) - ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) - // // MODULE: BCFTOOLS_SORT // - BCFTOOLS_SORT( + BCFTOOLS_SORT ( BCFTOOLS_CONCAT.out.vcf ) - ch_versions = ch_versions.mix(BCFTOOLS_SORT.out.versions) - BCFTOOLS_SORT.out.vcf .map { meta, vcf -> def extra = [] diff --git a/subworkflows/local/tumor_only_happhase.nf b/subworkflows/local/tumor_only_happhase.nf index 16b8ce90..f96676b8 100644 --- a/subworkflows/local/tumor_only_happhase.nf +++ b/subworkflows/local/tumor_only_happhase.nf @@ -155,13 +155,12 @@ workflow TUMOR_ONLY_HAPPHASE { haplotagged_bams ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions) - // join information and the phased VCF file haplotagged_bams .join(SAMTOOLS_INDEX.out.bai) .join(LONGPHASE_PHASE.out.snv_vcf) - .map{ meta, hap_bam, hap_bai, vcf -> + .join(LONGPHASE_PHASE.out.snv_vcf_index) + .map{ meta, hap_bam, hap_bai, vcf, tbi -> def new_meta = [id: meta.id, paired_data: meta.paired_data, platform: meta.platform, @@ -171,7 +170,7 @@ workflow TUMOR_ONLY_HAPPHASE { clairS_model: meta.clairS_model, clairSTO_model: meta.clairSTO_model, kinetics: meta.kinetics] - return [new_meta, hap_bam, hap_bai, [], [], vcf] + return [new_meta, hap_bam, hap_bai, [], [], vcf, tbi] } .set{ tumor_only_severus } diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 258e8463..0ef7eae1 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -173,8 +173,6 @@ workflow LRSOMATIC { // ch_cat_ubams -> meta: [id, paired_data, platform, sex, type, fiber, basecall_model] // bam: list of concatenated unaligned bams - ch_versions = ch_versions.mix(SAMTOOLS_CAT.out.versions) - // // MODULE: CRAMINO // @@ -206,7 +204,7 @@ workflow LRSOMATIC { params.download_vep_cache ) ch_versions = ch_versions.mix(PREPARE_ANNOTATION.out.versions) - vep_cache = PREPARE_ANNOTATION.out.vep_cache + vep_cache = PREPARE_ANNOTATION.out.vep_cache.map {cache -> [[:], cache] } } @@ -334,9 +332,6 @@ workflow LRSOMATIC { // ch_minimap_bams -> meta: [id, paired_data, platform, sex, type, fiber,basecall_model] // bam: list of concatenated aligned bams - ch_versions = ch_versions.mix(MINIMAP2_ALIGN.out.versions) - - // ch_minimap_bams into tumor and paired to phase the paired ones on normal // and add index @@ -420,8 +415,6 @@ workflow LRSOMATIC { vep_custom_tbi ) - ch_versions = ch_versions.mix(GERMLINE_VEP.out.versions) - // // MODULE: SOMATIC_VEP // @@ -437,16 +430,16 @@ workflow LRSOMATIC { vep_custom, vep_custom_tbi ) - - ch_versions = ch_versions.mix(SOMATIC_VEP.out.versions) } - ch_versions = ch_versions.mix(TUMOR_ONLY_HAPPHASE.out.versions) // Get Severus input channel TUMOR_NORMAL_HAPPHASE.out.tumor_normal_severus .mix(TUMOR_ONLY_HAPPHASE.out.tumor_only_severus) + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi -> + return [meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi] + } .set { severus_reformat } // Format is [meta, tumor_hapbam, tumor_bai, normal_hapbam, normal_bai, vcf] @@ -480,8 +473,6 @@ workflow LRSOMATIC { vep_custom, vep_custom_tbi ) - - ch_versions = ch_versions.mix(SV_VEP.out.versions) } // @@ -515,8 +506,6 @@ workflow LRSOMATIC { ch_mosdepth_global = MOSDEPTH.out.global_txt ch_mosdepth_summary = MOSDEPTH.out.summary_txt - - ch_versions = ch_versions.mix(MOSDEPTH.out.versions) } // @@ -536,8 +525,6 @@ workflow LRSOMATIC { bam_stats_ch = BAM_STATS_SAMTOOLS.out.stats bam_flagstat_ch = BAM_STATS_SAMTOOLS.out.flagstat bam_idxstats_ch = BAM_STATS_SAMTOOLS.out.idxstats - - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) } // @@ -655,12 +642,11 @@ workflow LRSOMATIC { MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - [], - [] + ch_multiqc_files + .collect() + .combine(ch_multiqc_config.mix(ch_multiqc_custom_config).toList()) + .combine(ch_multiqc_logo.toList()) + .map { files, config, logo -> [[id: 'multiqc'], files, config, logo, [], []] } ) emit: From 3ee366b56365015bd1eb1cae5773bfffc14f75e7 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 15:47:26 +0100 Subject: [PATCH 04/12] added new prefix to fix same output name issue --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 5072b8d6..ce3ec749 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -234,6 +234,7 @@ process { ] } withName: '.*:BCFTOOLS_SORT' { + ext.prefix = { "${meta.id}_sorted" } ext.arge = '--output-type z' publishDir = [ enabled: false From 6fcfadce1f96db71913e1fa525aa1dbac5fd0561 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 15:50:59 +0100 Subject: [PATCH 05/12] fix bam stats output channel structure --- workflows/lrsomatic.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 0ef7eae1..93e41f35 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -522,9 +522,9 @@ workflow LRSOMATIC { ch_fasta ) - bam_stats_ch = BAM_STATS_SAMTOOLS.out.stats - bam_flagstat_ch = BAM_STATS_SAMTOOLS.out.flagstat - bam_idxstats_ch = BAM_STATS_SAMTOOLS.out.idxstats + ch_bam_stats = BAM_STATS_SAMTOOLS.out.stats + ch_bam_flagstat = BAM_STATS_SAMTOOLS.out.flagstat + ch_bam_idxstats = BAM_STATS_SAMTOOLS.out.idxstats } // From 90acf3398fa02cdd8d2af3f89b8e7f3ff07e60ce Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 17:07:20 +0100 Subject: [PATCH 06/12] strict syntax changes --- modules/local/clair3/main.nf | 13 +++--- modules/local/clairs/main.nf | 11 ++--- modules/local/clairsto/main.nf | 25 +++++------- modules/local/cramino/main.nf | 1 - modules/local/fibertoolsrs/fire/main.nf | 1 - .../local/fibertoolsrs/nucleosomes/main.nf | 1 - modules/local/fibertoolsrs/predictm6a/main.nf | 1 - modules/local/fibertoolsrs/qc/main.nf | 1 - modules/local/metaextract/main.nf | 7 ++-- modules/local/vcfsplit/main.nf | 4 -- modules/local/wakhan/main.nf | 1 - subworkflows/local/prepare_reference_files.nf | 4 +- subworkflows/local/tumor_normal_happhase.nf | 16 ++++---- subworkflows/local/tumor_only_happhase.nf | 5 +-- .../utils_nfcore_lrsomatic_pipeline/main.nf | 4 +- workflows/lrsomatic.nf | 40 ++++++++----------- 16 files changed, 54 insertions(+), 81 deletions(-) diff --git a/modules/local/clair3/main.nf b/modules/local/clair3/main.nf index 37121522..6c46353e 100644 --- a/modules/local/clair3/main.nf +++ b/modules/local/clair3/main.nf @@ -13,10 +13,10 @@ process CLAIR3 { tuple val(meta3), path(index) output: - tuple val(meta), path("*merge_output.vcf.gz"), emit: vcf - tuple val(meta), path("*merge_output.vcf.gz.tbi"), emit: tbi - tuple val(meta), path("*phased_merge_output.vcf.gz"), emit: phased_vcf, optional: true - tuple val(meta), path("*phased_merge_output.vcf.gz.tbi"), emit: phased_tbi, optional: true + tuple val(meta), path("${prefix}/*merge_output.vcf.gz"), emit: vcf + tuple val(meta), path("${prefix}/*merge_output.vcf.gz.tbi"), emit: tbi + tuple val(meta), path("${prefix}/*phased_merge_output.vcf.gz"), emit: phased_vcf, optional: true + tuple val(meta), path("${prefix}/*phased_merge_output.vcf.gz.tbi"), emit: phased_tbi, optional: true tuple val("${task.process}"), val('clair3'), eval("run_clair3.sh --version |& sed '1!d ; s/Clair3 v//'"), topic: versions, emit: versions_clair3 when: @@ -25,20 +25,19 @@ process CLAIR3 { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ run_clair3.sh \\ --bam_fn=$bam \\ --ref_fn=$reference \\ --threads=$task.cpus \\ - --output=. \\ + --output=${prefix} \\ --platform=$platform \\ --model=$model \\ $args """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ echo "" | gzip > ${prefix}.phased_merge_output.vcf.gz diff --git a/modules/local/clairs/main.nf b/modules/local/clairs/main.nf index 65489e0c..3a67892b 100644 --- a/modules/local/clairs/main.nf +++ b/modules/local/clairs/main.nf @@ -12,8 +12,8 @@ process CLAIRS { tuple val(meta3), path(index) output: - tuple val(meta), path("*.vcf.gz"), emit: vcfs - tuple val(meta), path("*.vcf.gz.tbi"), emit: tbi + tuple val(meta), path("${prefix}/*.vcf.gz"), emit: vcfs + tuple val(meta), path("${prefix}/*.vcf.gz.tbi"), emit: tbi tuple val("${task.process}"), val('clairs'), eval("/opt/bin/run_clairs --version |& sed '1!d ; s/run_clairs //'"), topic: versions, emit: versions_clairs when: @@ -21,7 +21,7 @@ process CLAIRS { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ /opt/bin/run_clairs \ @@ -30,7 +30,7 @@ process CLAIRS { --ref_fn $reference \\ --threads $task.cpus \\ --platform $model \\ - --output_dir . \\ + --output_dir ${prefix} \\ --output_prefix snvs \\ $args @@ -41,9 +41,6 @@ process CLAIRS { """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ echo "" | gzip > snvs.vcf.gz touch snvs.vcf.gz.tbi diff --git a/modules/local/clairsto/main.nf b/modules/local/clairsto/main.nf index 091a4920..1d19484d 100644 --- a/modules/local/clairsto/main.nf +++ b/modules/local/clairsto/main.nf @@ -17,10 +17,10 @@ process CLAIRSTO { path(gnomad) output: - tuple val(meta), path("indel.vcf.gz"), emit: indel_vcf - tuple val(meta), path("indel.vcf.gz.tbi"), emit: indel_tbi - tuple val(meta), path("snv.vcf.gz"), emit: snv_vcf - tuple val(meta), path("snv.vcf.gz.tbi"), emit: snv_tbi + tuple val(meta), path("${prefix}/indel.vcf.gz"), emit: indel_vcf + tuple val(meta), path("${prefix}/indel.vcf.gz.tbi"), emit: indel_tbi + tuple val(meta), path("${prefix}/snv.vcf.gz"), emit: snv_vcf + tuple val(meta), path("${prefix}/snv.vcf.gz.tbi"), emit: snv_tbi tuple val("${task.process}"), val('clairsto'), eval("run_clairs_to --version |& sed '1!d ; s/run_clairs_to //'"), topic: versions, emit: versions_clairsto when: @@ -28,12 +28,12 @@ process CLAIRSTO { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def conda_prefix = workflow.containerEngine == 'singularity' ? '--conda_prefix /opt/micromamba/envs/clairs-to' : '' - def gnomad = gnomad ?: 'gnomad.r2.1.af-ge-0.001.sites.vcf.gz' - def dbSNP = dbSNP ?: 'dbsnp.b138.non-somatic.sites.vcf.gz' - def onekgenomes = onekgenomes ?: '1000g-pon.sites.vcf.gz' - def colors = colors ?: 'colors-pon.sites.vcf.gz' + def gnomad_arg = gnomad ?: 'gnomad.r2.1.af-ge-0.001.sites.vcf.gz' + def dbSNP_arg = dbSNP ?: 'dbsnp.b138.non-somatic.sites.vcf.gz' + def onekgenomes_arg = onekgenomes ?: '1000g-pon.sites.vcf.gz' + def colors_arg = colors ?: 'colors-pon.sites.vcf.gz' """ @@ -42,17 +42,14 @@ process CLAIRSTO { --ref_fn $reference \\ --platform $model \\ --threads $task.cpus \\ - --output_dir . \\ - --panel_of_normals "${gnomad},${dbSNP},${onekgenomes},${colors}" \\ + --output_dir ${prefix} \\ + --panel_of_normals "${gnomad_arg},${dbSNP_arg},${onekgenomes_arg},${colors_arg}" \\ --panel_of_normals_require_allele_matching 'True,True,False,False' \\ $conda_prefix \\ $args \\ """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ mkdir -p output echo "" | gzip > snv.vcf.gz diff --git a/modules/local/cramino/main.nf b/modules/local/cramino/main.nf index eff34a00..bc255995 100644 --- a/modules/local/cramino/main.nf +++ b/modules/local/cramino/main.nf @@ -26,7 +26,6 @@ process CRAMINO { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_cramino.txt diff --git a/modules/local/fibertoolsrs/fire/main.nf b/modules/local/fibertoolsrs/fire/main.nf index f79bbaf0..1240f0d5 100644 --- a/modules/local/fibertoolsrs/fire/main.nf +++ b/modules/local/fibertoolsrs/fire/main.nf @@ -31,7 +31,6 @@ process FIBERTOOLSRS_FIRE { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_fire.bam diff --git a/modules/local/fibertoolsrs/nucleosomes/main.nf b/modules/local/fibertoolsrs/nucleosomes/main.nf index a23e883a..33a6c5ea 100644 --- a/modules/local/fibertoolsrs/nucleosomes/main.nf +++ b/modules/local/fibertoolsrs/nucleosomes/main.nf @@ -32,7 +32,6 @@ process FIBERTOOLSRS_NUCLEOSOMES { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_nuc.bam diff --git a/modules/local/fibertoolsrs/predictm6a/main.nf b/modules/local/fibertoolsrs/predictm6a/main.nf index f5c20930..5aa174b0 100644 --- a/modules/local/fibertoolsrs/predictm6a/main.nf +++ b/modules/local/fibertoolsrs/predictm6a/main.nf @@ -32,7 +32,6 @@ process FIBERTOOLSRS_PREDICTM6A { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/fibertoolsrs/qc/main.nf b/modules/local/fibertoolsrs/qc/main.nf index 60081f7a..db89d71a 100644 --- a/modules/local/fibertoolsrs/qc/main.nf +++ b/modules/local/fibertoolsrs/qc/main.nf @@ -30,7 +30,6 @@ process FIBERTOOLSRS_QC { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/metaextract/main.nf b/modules/local/metaextract/main.nf index 954449e7..fb3c474d 100644 --- a/modules/local/metaextract/main.nf +++ b/modules/local/metaextract/main.nf @@ -20,9 +20,11 @@ process METAEXTRACT { script: def args = task.ext.args ?: '' def ont = meta.platform == 'ont' + basecall_model = '' + kinetics = '' """ - basecall_model="" - kinetics="" + export basecall_model="${basecall_model}" + export kinetics="${kinetics}" if [ $ont = 'true' ]; then basecall_model=\$(samtools view -H "${bam}" ${args} | awk -F'basecall_model=' '/basecall_model=/ {print \$2; exit}' | awk '{print \$1}' | tr -d '[:space:]') else @@ -32,7 +34,6 @@ process METAEXTRACT { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam diff --git a/modules/local/vcfsplit/main.nf b/modules/local/vcfsplit/main.nf index ae84f17d..df7ce318 100644 --- a/modules/local/vcfsplit/main.nf +++ b/modules/local/vcfsplit/main.nf @@ -22,8 +22,6 @@ process VCFSPLIT { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" """ bcftools view -i 'FILTER="PASS"' $indel_vcf | bgzip -c > indels_pass.vcf.gz @@ -50,8 +48,6 @@ process VCFSPLIT { """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" """ echo "" | gzip > somatic.vcf.gz echo "" | gzip > germline.vcf.gz diff --git a/modules/local/wakhan/main.nf b/modules/local/wakhan/main.nf index d82d0205..85562abe 100644 --- a/modules/local/wakhan/main.nf +++ b/modules/local/wakhan/main.nf @@ -62,7 +62,6 @@ process WAKHAN { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/subworkflows/local/prepare_reference_files.nf b/subworkflows/local/prepare_reference_files.nf index 17f8079d..f2fbb00b 100644 --- a/subworkflows/local/prepare_reference_files.nf +++ b/subworkflows/local/prepare_reference_files.nf @@ -42,7 +42,7 @@ workflow PREPARE_REFERENCE_FILES { // if clair3 model is specified, then download that // otherwise use info in bam header and download that - basecall_meta.map { meta, basecall_model_meta, kinetics_meta -> + basecall_meta.map { meta, basecall_model_meta, _kinetics_meta -> def id_new = basecall_model_meta ? clair3_modelMap.get(basecall_model_meta) : basecall_model_meta def meta_new = [id: id_new] def model = (!meta.clair3_model || meta.clair3_model.toString().trim() in ['', '[]']) ? clair3_modelMap.get(basecall_model_meta) : meta.clair3_model @@ -75,7 +75,7 @@ workflow PREPARE_REFERENCE_FILES { // MODULE: Index the fasta // SAMTOOLS_FAIDX ( - ch_prepared_fasta.map { meta, fasta -> [meta, fasta, []] }, + ch_prepared_fasta.map { meta, fa -> [meta, fa, []] }, false ) diff --git a/subworkflows/local/tumor_normal_happhase.nf b/subworkflows/local/tumor_normal_happhase.nf index 84fba84c..6abe9941 100644 --- a/subworkflows/local/tumor_normal_happhase.nf +++ b/subworkflows/local/tumor_normal_happhase.nf @@ -11,20 +11,18 @@ workflow TUMOR_NORMAL_HAPPHASE { mixed_bams fasta fai - clair3_modelMap - clairs_modelMap downloaded_clair3_models main: ch_versions = channel.empty() - tumor_only_severus = channel.empty() + tumor_normal_severus = channel.empty() somatic_vep = channel.empty() germline_vep = channel.empty() // Branch input bams in normal and tumour mixed_bams - .branch{ meta, bam, bai -> + .branch{ meta, _bam, _bai -> normal: meta.type == "normal" tumor: meta.type == "tumor" } @@ -57,7 +55,7 @@ workflow TUMOR_NORMAL_HAPPHASE { normal_bams_model .combine(downloaded_clair3_models,by:1) - .map {clair3_model, meta_bam, bam, bai, meta_model, model -> + .map {_clair3_model, meta_bam, bam, bai, _meta_model, model -> def platform = (meta_bam.platform == 'pb') ? 'hifi' : meta_bam.platform return [meta_bam, bam, bai, model, platform] } @@ -113,7 +111,7 @@ workflow TUMOR_NORMAL_HAPPHASE { normal_bams .join(CLAIR3.out.vcf) - .map { meta, bam, bai, clair3_model, platform, vcf -> + .map { meta, bam, bai, _clair3_model, _platform, vcf -> def svs = [] def mods = [] return [meta, bam, bai, vcf, svs, mods] @@ -153,7 +151,7 @@ workflow TUMOR_NORMAL_HAPPHASE { normal_bams .join(LONGPHASE_PHASE.out.snv_vcf) - .map { meta, bam, bai, clair3_model, platform, vcf -> + .map { meta, bam, bai, _clair3_model, _platform, vcf -> def new_meta = meta + [type: "normal"] def svs = [] def mods = [] @@ -231,7 +229,7 @@ workflow TUMOR_NORMAL_HAPPHASE { // Group everything back together in one channel mixed_hapbams - .map { meta, bam, bai, vcf, snvs, mods, hapbam, hapbai -> + .map { meta, _bam, _bai, _vcf, _snvs, _mods, hapbam, hapbai -> def new_meta = [id: meta.id, paired_data: meta.paired_data, platform: meta.platform, @@ -265,7 +263,7 @@ workflow TUMOR_NORMAL_HAPPHASE { // Get ClairS input channel tumor_normal_severus - .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi -> + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, _vcf, _tbi -> return[meta , tumor_bam, tumor_bai, normal_bam, normal_bai, meta.clairS_model] } .set { clairs_input } diff --git a/subworkflows/local/tumor_only_happhase.nf b/subworkflows/local/tumor_only_happhase.nf index f96676b8..2e09f750 100644 --- a/subworkflows/local/tumor_only_happhase.nf +++ b/subworkflows/local/tumor_only_happhase.nf @@ -10,7 +10,6 @@ workflow TUMOR_ONLY_HAPPHASE { tumor_bams fasta fai - clairSTO_modelMap dbsnp colors onekgenomes @@ -67,7 +66,7 @@ workflow TUMOR_ONLY_HAPPHASE { // remove model info tumor_bams .join(VCFSPLIT.out.germline_vcf) - .map{ meta, bam, bai, model, snps -> + .map{ meta, bam, bai, _model, snps -> def svs = [] def mods = [] return[meta, bam, bai, snps, svs, mods] @@ -112,7 +111,7 @@ workflow TUMOR_ONLY_HAPPHASE { // remove model info tumor_bams .join(LONGPHASE_PHASE.out.snv_vcf) - .map { meta, bam, bai, model, vcf -> + .map { meta, bam, bai, _model, vcf -> def new_meta = meta + [type: "tumor"] def svs = [] def mods = [] diff --git a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf index d7d151a1..10e20c42 100644 --- a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf @@ -29,10 +29,10 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit validate_params // boolean: Boolean whether to validate parameters against the schema at runtime - monochrome_logs // boolean: Do not use coloured log outputs + _monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved - input // string: Path to input samplesheet + _input // string: Path to input samplesheet help // boolean: Display help message and exit help_full // boolean: Show the full help message show_hidden // boolean: Show hidden parameters in the help message diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 93e41f35..b7c377a3 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -155,7 +155,7 @@ workflow LRSOMATIC { // bam: list of unaligned bams ch_split = ch_samplesheet - .branch { meta, bam -> + .branch { _meta, bam -> single: bam.size() == 1 multiple: bam.size() > 1 } @@ -226,7 +226,7 @@ workflow LRSOMATIC { if (!params.skip_fiber) { if(!params.normal_fiber){ ch_cat_ubams - .branch { meta, bams -> + .branch { meta, _bams -> normal: meta.type == "normal" tumor: meta.type == "tumor" } @@ -239,7 +239,7 @@ workflow LRSOMATIC { ubams = ch_cat_ubams } ubams - .branch{ meta, bams -> + .branch{ meta, _bams -> pacBio: meta.platform == "pb" ont: meta.platform == "ont" } @@ -247,7 +247,7 @@ workflow LRSOMATIC { pacbio_bams = ch_cat_ubams_pacbio_ont_branching.pacBio pacbio_bams - .branch{meta, bams -> + .branch{meta, _bams -> kinetics: meta.kinetics == "true" noKinetics: meta.kinetics == "false" } @@ -266,7 +266,7 @@ workflow LRSOMATIC { .set{fiber_branch} fiber_branch - .branch{ meta, bams -> + .branch{ meta, _bams -> fiber: meta.fiber == "y" nonFiber: meta.fiber == "n" } @@ -337,7 +337,7 @@ workflow LRSOMATIC { ch_minimap_bam .join(MINIMAP2_ALIGN.out.index) - .branch { meta, bams, bais -> + .branch { meta, _bams, _bais -> paired: meta.paired_data tumor_only: !meta.paired_data } @@ -357,8 +357,6 @@ workflow LRSOMATIC { branched_minimap.paired, ch_fasta, ch_fai, - clair3_modelMap, - clairs_modelMap, downloaded_clair3_models ) @@ -374,12 +372,10 @@ workflow LRSOMATIC { onekgenomes = file(params.onekgenomes) gnomad = file(params.gnomad) - TUMOR_ONLY_HAPPHASE ( branched_minimap.tumor_only, ch_fasta, ch_fai, - clairs_modelMap, dbsnp, colors, onekgenomes, @@ -533,7 +529,7 @@ workflow LRSOMATIC { if (!params.skip_ascat) { severus_reformat - .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf -> + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, _vcf -> return [meta, normal_bam, normal_bai, tumor_bam, tumor_bai] } .set { ascat_ch } @@ -603,15 +599,6 @@ workflow LRSOMATIC { // // MODULE: MultiQC // - ch_multiqc_config = channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - channel.fromPath(params.multiqc_config, checkIfExists: true) : - channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - channel.fromPath(params.multiqc_logo, checkIfExists: true) : - channel.empty() - summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) @@ -644,13 +631,18 @@ workflow LRSOMATIC { MULTIQC ( ch_multiqc_files .collect() - .combine(ch_multiqc_config.mix(ch_multiqc_custom_config).toList()) - .combine(ch_multiqc_logo.toList()) - .map { files, config, logo -> [[id: 'multiqc'], files, config, logo, [], []] } + .map { files -> + def multiqc_config_files = [file("$projectDir/assets/multiqc_config.yml", checkIfExists: true)] + if (params.multiqc_config) { + multiqc_config_files += [file(params.multiqc_config, checkIfExists: true)] + } + def multiqc_logo_file = params.multiqc_logo ? [file(params.multiqc_logo, checkIfExists: true)] : [] + [[id: 'multiqc'], files, multiqc_config_files, multiqc_logo_file, [], []] + } ) emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + multiqc_report = MULTIQC.out.report.map { _meta, report -> report } // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] From 39c50535aebc81cb899a0f384e435fb65d95592e Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 17:11:26 +0100 Subject: [PATCH 07/12] remove the outdirs again --- modules/local/clair3/main.nf | 9 ++++----- modules/local/clairs/main.nf | 10 ++++++---- modules/local/clairsto/main.nf | 15 ++++++++------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/modules/local/clair3/main.nf b/modules/local/clair3/main.nf index 6c46353e..12701a5f 100644 --- a/modules/local/clair3/main.nf +++ b/modules/local/clair3/main.nf @@ -13,10 +13,10 @@ process CLAIR3 { tuple val(meta3), path(index) output: - tuple val(meta), path("${prefix}/*merge_output.vcf.gz"), emit: vcf - tuple val(meta), path("${prefix}/*merge_output.vcf.gz.tbi"), emit: tbi - tuple val(meta), path("${prefix}/*phased_merge_output.vcf.gz"), emit: phased_vcf, optional: true - tuple val(meta), path("${prefix}/*phased_merge_output.vcf.gz.tbi"), emit: phased_tbi, optional: true + tuple val(meta), path("*merge_output.vcf.gz"), emit: vcf + tuple val(meta), path("*merge_output.vcf.gz.tbi"), emit: tbi + tuple val(meta), path("*phased_merge_output.vcf.gz"), emit: phased_vcf, optional: true + tuple val(meta), path("*phased_merge_output.vcf.gz.tbi"), emit: phased_tbi, optional: true tuple val("${task.process}"), val('clair3'), eval("run_clair3.sh --version |& sed '1!d ; s/Clair3 v//'"), topic: versions, emit: versions_clair3 when: @@ -25,7 +25,6 @@ process CLAIR3 { script: def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" """ run_clair3.sh \\ --bam_fn=$bam \\ diff --git a/modules/local/clairs/main.nf b/modules/local/clairs/main.nf index 3a67892b..786e819e 100644 --- a/modules/local/clairs/main.nf +++ b/modules/local/clairs/main.nf @@ -12,8 +12,8 @@ process CLAIRS { tuple val(meta3), path(index) output: - tuple val(meta), path("${prefix}/*.vcf.gz"), emit: vcfs - tuple val(meta), path("${prefix}/*.vcf.gz.tbi"), emit: tbi + tuple val(meta), path("*.vcf.gz"), emit: vcfs + tuple val(meta), path("*.vcf.gz.tbi"), emit: tbi tuple val("${task.process}"), val('clairs'), eval("/opt/bin/run_clairs --version |& sed '1!d ; s/run_clairs //'"), topic: versions, emit: versions_clairs when: @@ -21,7 +21,6 @@ process CLAIRS { script: def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" """ /opt/bin/run_clairs \ @@ -30,7 +29,7 @@ process CLAIRS { --ref_fn $reference \\ --threads $task.cpus \\ --platform $model \\ - --output_dir ${prefix} \\ + --output_dir . \\ --output_prefix snvs \\ $args @@ -41,6 +40,9 @@ process CLAIRS { """ stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ echo "" | gzip > snvs.vcf.gz touch snvs.vcf.gz.tbi diff --git a/modules/local/clairsto/main.nf b/modules/local/clairsto/main.nf index 1d19484d..a1448bb5 100644 --- a/modules/local/clairsto/main.nf +++ b/modules/local/clairsto/main.nf @@ -17,10 +17,10 @@ process CLAIRSTO { path(gnomad) output: - tuple val(meta), path("${prefix}/indel.vcf.gz"), emit: indel_vcf - tuple val(meta), path("${prefix}/indel.vcf.gz.tbi"), emit: indel_tbi - tuple val(meta), path("${prefix}/snv.vcf.gz"), emit: snv_vcf - tuple val(meta), path("${prefix}/snv.vcf.gz.tbi"), emit: snv_tbi + tuple val(meta), path("indel.vcf.gz"), emit: indel_vcf + tuple val(meta), path("indel.vcf.gz.tbi"), emit: indel_tbi + tuple val(meta), path("snv.vcf.gz"), emit: snv_vcf + tuple val(meta), path("snv.vcf.gz.tbi"), emit: snv_tbi tuple val("${task.process}"), val('clairsto'), eval("run_clairs_to --version |& sed '1!d ; s/run_clairs_to //'"), topic: versions, emit: versions_clairsto when: @@ -28,21 +28,19 @@ process CLAIRSTO { script: def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" def conda_prefix = workflow.containerEngine == 'singularity' ? '--conda_prefix /opt/micromamba/envs/clairs-to' : '' def gnomad_arg = gnomad ?: 'gnomad.r2.1.af-ge-0.001.sites.vcf.gz' def dbSNP_arg = dbSNP ?: 'dbsnp.b138.non-somatic.sites.vcf.gz' def onekgenomes_arg = onekgenomes ?: '1000g-pon.sites.vcf.gz' def colors_arg = colors ?: 'colors-pon.sites.vcf.gz' - """ /opt/bin/run_clairs_to \ --tumor_bam_fn $tumor_bam \\ --ref_fn $reference \\ --platform $model \\ --threads $task.cpus \\ - --output_dir ${prefix} \\ + --output_dir . \\ --panel_of_normals "${gnomad_arg},${dbSNP_arg},${onekgenomes_arg},${colors_arg}" \\ --panel_of_normals_require_allele_matching 'True,True,False,False' \\ $conda_prefix \\ @@ -50,6 +48,9 @@ process CLAIRSTO { """ stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ mkdir -p output echo "" | gzip > snv.vcf.gz From 699d7e964fe825e31c7a953b64af99c68d82eb7b Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 17:19:14 +0100 Subject: [PATCH 08/12] typo --- modules/local/clair3/main.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/local/clair3/main.nf b/modules/local/clair3/main.nf index 12701a5f..6619ef14 100644 --- a/modules/local/clair3/main.nf +++ b/modules/local/clair3/main.nf @@ -23,14 +23,13 @@ process CLAIR3 { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' """ run_clair3.sh \\ --bam_fn=$bam \\ --ref_fn=$reference \\ --threads=$task.cpus \\ - --output=${prefix} \\ + --output=. \\ --platform=$platform \\ --model=$model \\ $args From 1bacb2aa9a9c93efe20ea29b102bdb4af92ee042 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 17:19:25 +0100 Subject: [PATCH 09/12] linting --- subworkflows/local/prepare_annotation.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/prepare_annotation.nf b/subworkflows/local/prepare_annotation.nf index 4d8dca26..8771680d 100644 --- a/subworkflows/local/prepare_annotation.nf +++ b/subworkflows/local/prepare_annotation.nf @@ -21,11 +21,11 @@ workflow PREPARE_ANNOTATION { if (download_vep_cache) { vep_download_info = channel.of([[],vep_genome, vep_species, vep_cache_version]) - - ENSEMBLVEP_DOWNLOAD ( + + ENSEMBLVEP_DOWNLOAD ( vep_download_info ) - + ensemblvep_cache = ENSEMBLVEP_DOWNLOAD.out.cache ch_versions = ch_versions.mix(ENSEMBLVEP_DOWNLOAD.out.versions) From aa5440304b8b25d7b095fc25fdef1ba08913340a Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 17:20:37 +0100 Subject: [PATCH 10/12] final strict syntax changes --- modules/local/clairs/main.nf | 3 --- modules/local/clairsto/main.nf | 3 --- 2 files changed, 6 deletions(-) diff --git a/modules/local/clairs/main.nf b/modules/local/clairs/main.nf index 786e819e..d683c777 100644 --- a/modules/local/clairs/main.nf +++ b/modules/local/clairs/main.nf @@ -40,9 +40,6 @@ process CLAIRS { """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ echo "" | gzip > snvs.vcf.gz touch snvs.vcf.gz.tbi diff --git a/modules/local/clairsto/main.nf b/modules/local/clairsto/main.nf index a1448bb5..9071487d 100644 --- a/modules/local/clairsto/main.nf +++ b/modules/local/clairsto/main.nf @@ -48,9 +48,6 @@ process CLAIRSTO { """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ mkdir -p output echo "" | gzip > snv.vcf.gz From f224375677e6103a02030a0200ad02ecd1073168 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 19:37:05 +0100 Subject: [PATCH 11/12] severus fix and snapshot update --- modules.json | 116 +++++++++++++++------ modules/nf-core/severus/main.nf | 37 ++++--- modules/nf-core/severus/severus.diff | 56 ++++------ tests/default.nf.test.snap | 146 +++++++++++++++++++++++++-- 4 files changed, 265 insertions(+), 90 deletions(-) diff --git a/modules.json b/modules.json index 100cd8a1..d5dd45a2 100644 --- a/modules.json +++ b/modules.json @@ -8,129 +8,179 @@ "ascat": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/ascat/ascat.diff" }, "bcftools/concat": { "branch": "master", "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": ["modules", "vcf_gather_bcftools"] + "installed_by": [ + "modules", + "vcf_gather_bcftools" + ] }, "bcftools/merge": { "branch": "master", "git_sha": "3d9c2f4beaa4f62b3f006928fd9095a496d1e5a8", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/sort": { "branch": "master", "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": ["modules", "vcf_gather_bcftools"], + "installed_by": [ + "modules", + "vcf_gather_bcftools" + ], "patch": "modules/nf-core/bcftools/sort/bcftools-sort.diff" }, "ensemblvep/download": { "branch": "master", "git_sha": "90cdd21fd96ccbdb3bc90797ca69570d18391055", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ensemblvep/vep": { "branch": "master", "git_sha": "890fdcff71928fc1470d3e669d4c430c8c770297", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" }, "longphase/haplotag": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "longphase/phase": { "branch": "master", "git_sha": "47983538e45e539f783ed8ab0d1c96d39df2af8f", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/longphase/phase/longphase-phase.diff" }, "minimap2/align": { "branch": "master", "git_sha": "5c9f8d5b7671237c906abadc9ff732b301ca15ca", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "14980f759266eec42dac401fcafeb83d6c957b41", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "modkit/pileup": { "branch": "master", "git_sha": "3d81317a30d1016b533982d6b84df07713ae520a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "6832b69ef7f98c54876d6436360b6b945370c615", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "2c73cc8fa92cf48de3da0b643fdf357a8a290b36", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "pigz/uncompress": { "branch": "master", "git_sha": "f84336b7fa91a65aa61d215b8c109fbb8e4b4ac6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/cat": { "branch": "master", "git_sha": "f9edc59be2fe25bb6fc73ca4dfc0d28246f2a2d6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/flagstat": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": ["bam_stats_samtools"] + "installed_by": [ + "bam_stats_samtools" + ] }, "samtools/idxstats": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": ["bam_stats_samtools"] + "installed_by": [ + "bam_stats_samtools" + ] }, "samtools/index": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df", - "installed_by": ["bam_stats_samtools"], + "installed_by": [ + "bam_stats_samtools" + ], "patch": "modules/nf-core/samtools/stats/samtools-stats.diff" }, "severus": { "branch": "master", "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/severus/severus.diff" }, "untar": { "branch": "master", "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "unzip": { "branch": "master", "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "wget": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -139,25 +189,33 @@ "bam_stats_samtools": { "branch": "master", "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/severus/main.nf b/modules/nf-core/severus/main.nf index 628b5034..f191fd0b 100644 --- a/modules/nf-core/severus/main.nf +++ b/modules/nf-core/severus/main.nf @@ -12,21 +12,21 @@ process SEVERUS { tuple val(meta2), path(bed), path(pon_path) output: - tuple val(meta), path("severus.log") , emit: log - tuple val(meta), path("read_qual.txt") , emit: read_qual - tuple val(meta), path("breakpoints_double.csv") , emit: breakpoints_double - tuple val(meta), path("read_alignments") , emit: read_alignments , optional: true - tuple val(meta), path("read_ids.csv") , emit: read_ids , optional: true - tuple val(meta), path("severus_collaped_dup.bed") , emit: collapsed_dup , optional: true - tuple val(meta), path("severus_LOH.bed") , emit: loh , optional: true - tuple val(meta), path("all_SVs/severus_all.vcf") , emit: all_vcf , optional: true - tuple val(meta), path("all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true - tuple val(meta), path("all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true - tuple val(meta), path("all_SVs/plots/severus_*.html") , emit: all_plots , optional: true - tuple val(meta), path("somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true - tuple val(meta), path("somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true - tuple val(meta), path("somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true - tuple val(meta), path("somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true + tuple val(meta), path("${prefix}/severus.log") , emit: log + tuple val(meta), path("${prefix}/read_qual.txt") , emit: read_qual + tuple val(meta), path("${prefix}/breakpoints_double.csv") , emit: breakpoints_double + tuple val(meta), path("${prefix}/read_alignments") , emit: read_alignments , optional: true + tuple val(meta), path("${prefix}/read_ids.csv") , emit: read_ids , optional: true + tuple val(meta), path("${prefix}/severus_collaped_dup.bed") , emit: collapsed_dup , optional: true + tuple val(meta), path("${prefix}/severus_LOH.bed") , emit: loh , optional: true + tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true + tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true path "versions.yml" , emit: versions when: @@ -50,7 +50,12 @@ process SEVERUS { $pon \\ $control \\ $phasing_vcf \\ - --out-dir . + --out-dir ${prefix} + + bgzip ${prefix}/somatic_SVs/severus_somatic.vcf + tabix -p vcf ${prefix}/somatic_SVs/severus_somatic.vcf.gz + bgzip ${prefix}/all_SVs/severus_all.vcf + tabix -p vcf ${prefix}/all_SVs/severus_all.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/severus/severus.diff b/modules/nf-core/severus/severus.diff index 455c26e3..e3b73641 100644 --- a/modules/nf-core/severus/severus.diff +++ b/modules/nf-core/severus/severus.diff @@ -3,7 +3,7 @@ Changes in component 'nf-core/severus' Changes in 'severus/main.nf': --- modules/nf-core/severus/main.nf +++ modules/nf-core/severus/main.nf -@@ -8,25 +8,25 @@ +@@ -8,8 +8,8 @@ 'biocontainers/severus:1.6--pyhdfd78af_0' }" input: @@ -13,40 +13,22 @@ Changes in 'severus/main.nf': + tuple val(meta2), path(bed), path(pon_path) output: -- tuple val(meta), path("${prefix}/severus.log") , emit: log -- tuple val(meta), path("${prefix}/read_qual.txt") , emit: read_qual -- tuple val(meta), path("${prefix}/breakpoints_double.csv") , emit: breakpoints_double -- tuple val(meta), path("${prefix}/read_alignments") , emit: read_alignments , optional: true -- tuple val(meta), path("${prefix}/read_ids.csv") , emit: read_ids , optional: true -- tuple val(meta), path("${prefix}/severus_collaped_dup.bed") , emit: collapsed_dup , optional: true -- tuple val(meta), path("${prefix}/severus_LOH.bed") , emit: loh , optional: true + tuple val(meta), path("${prefix}/severus.log") , emit: log +@@ -19,11 +19,11 @@ + tuple val(meta), path("${prefix}/read_ids.csv") , emit: read_ids , optional: true + tuple val(meta), path("${prefix}/severus_collaped_dup.bed") , emit: collapsed_dup , optional: true + tuple val(meta), path("${prefix}/severus_LOH.bed") , emit: loh , optional: true - tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf") , emit: all_vcf , optional: true -- tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true -- tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true -- tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true ++ tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true -- tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true -- tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true -- tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true -+ tuple val(meta), path("severus.log") , emit: log -+ tuple val(meta), path("read_qual.txt") , emit: read_qual -+ tuple val(meta), path("breakpoints_double.csv") , emit: breakpoints_double -+ tuple val(meta), path("read_alignments") , emit: read_alignments , optional: true -+ tuple val(meta), path("read_ids.csv") , emit: read_ids , optional: true -+ tuple val(meta), path("severus_collaped_dup.bed") , emit: collapsed_dup , optional: true -+ tuple val(meta), path("severus_LOH.bed") , emit: loh , optional: true -+ tuple val(meta), path("all_SVs/severus_all.vcf") , emit: all_vcf , optional: true -+ tuple val(meta), path("all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true -+ tuple val(meta), path("all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true -+ tuple val(meta), path("all_SVs/plots/severus_*.html") , emit: all_plots , optional: true -+ tuple val(meta), path("somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true -+ tuple val(meta), path("somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true -+ tuple val(meta), path("somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true -+ tuple val(meta), path("somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true - path "versions.yml" , emit: versions - - when: -@@ -39,15 +39,18 @@ ++ tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true + tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true +@@ -39,15 +39,23 @@ def control = control_input ? "--control-bam ${control_input}" : "" def vntr_bed = bed ? "--vntr-bed ${bed}" : "" def phasing_vcf = vcf ? "--phasing-vcf ${vcf}" : "" @@ -61,8 +43,12 @@ Changes in 'severus/main.nf': + $pon \\ $control \\ $phasing_vcf \\ -- --out-dir ${prefix} -+ --out-dir . + --out-dir ${prefix} ++ ++ bgzip ${prefix}/somatic_SVs/severus_somatic.vcf ++ tabix -p vcf ${prefix}/somatic_SVs/severus_somatic.vcf.gz ++ bgzip ${prefix}/all_SVs/severus_all.vcf ++ tabix -p vcf ${prefix}/all_SVs/severus_all.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 6a1cd3ce..825e483d 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -24,7 +24,8 @@ "cramino": "1.3.0" }, "GERMLINE_VEP": { - "ensemblvep": 114.2, + "ensemblvep": 115.2, + "perl-math-cdf": 0.1, "tabix": 1.21 }, "LONGPHASE_HAPLOTAG": { @@ -38,12 +39,14 @@ "samtools": 1.21 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283", - "samtools": 1.21 + "minimap2": "2.29-r1283" }, "MOSDEPTH": { "mosdepth": "0.3.11" }, + "SAMTOOLS_CAT": { + "samtools": "1.22.1" + }, "SAMTOOLS_FAIDX": { "samtools": "1.22.1" }, @@ -63,11 +66,13 @@ "severus": 1.6 }, "SOMATIC_VEP": { - "ensemblvep": 114.2, + "ensemblvep": 115.2, + "perl-math-cdf": 0.1, "tabix": 1.21 }, "SV_VEP": { - "ensemblvep": 114.2, + "ensemblvep": 115.2, + "perl-math-cdf": 0.1, "tabix": 1.21 }, "UNTAR": { @@ -100,21 +105,64 @@ "multiqc/multiqc_data/multiqc_citations.txt", "multiqc/multiqc_data/multiqc_data.json", "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/multiqc_data/multiqc_samtools_idxstats.txt", + "multiqc/multiqc_data/multiqc_samtools_stats.txt", "multiqc/multiqc_data/multiqc_software_versions.txt", "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_data/samtools-flagstat-pct-table.txt", + "multiqc/multiqc_data/samtools-flagstat-table.txt", + "multiqc/multiqc_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/multiqc_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/multiqc_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/multiqc_data/samtools-stats-dp.txt", + "multiqc/multiqc_data/samtools_alignment_plot.txt", "multiqc/multiqc_plots", "multiqc/multiqc_plots/pdf", "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-cnt.pdf", "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-pct.pdf", "multiqc/multiqc_plots/pdf/mosdepth-cumcoverage-dist-id.pdf", + "multiqc/multiqc_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/multiqc_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", "multiqc/multiqc_plots/png", "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-cnt.png", "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-pct.png", "multiqc/multiqc_plots/png/mosdepth-cumcoverage-dist-id.png", + "multiqc/multiqc_plots/png/samtools-flagstat-pct-table.png", + "multiqc/multiqc_plots/png/samtools-flagstat-table.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/multiqc_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/multiqc_plots/png/samtools_alignment_plot-pct.png", "multiqc/multiqc_plots/svg", "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-cnt.svg", "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-pct.svg", "multiqc/multiqc_plots/svg/mosdepth-cumcoverage-dist-id.svg", + "multiqc/multiqc_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/multiqc_plots/svg/samtools-flagstat-table.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/multiqc_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/multiqc_plots/svg/samtools_alignment_plot-pct.svg", "multiqc/multiqc_report.html", "pipeline_info", "pipeline_info/lrsomatic_software_mqc_versions.yml", @@ -290,7 +338,69 @@ "sample3/vep/somatic", "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz", "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz.tbi", - "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" + "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html", + "sample4", + "sample4/bamfiles", + "sample4/bamfiles/sample4_normal.bam", + "sample4/bamfiles/sample4_normal.bam.bai", + "sample4/bamfiles/sample4_tumor.bam", + "sample4/bamfiles/sample4_tumor.bam.bai", + "sample4/qc", + "sample4/qc/normal", + "sample4/qc/normal/cramino_aln", + "sample4/qc/normal/cramino_aln/sample4_cramino.txt", + "sample4/qc/normal/cramino_ubam", + "sample4/qc/normal/cramino_ubam/sample4_cramino.txt", + "sample4/qc/normal/mosdepth", + "sample4/qc/normal/mosdepth/sample4.mosdepth.global.dist.txt", + "sample4/qc/normal/mosdepth/sample4.mosdepth.summary.txt", + "sample4/qc/normal/samtools", + "sample4/qc/normal/samtools/sample4.flagstat", + "sample4/qc/normal/samtools/sample4.idxstats", + "sample4/qc/normal/samtools/sample4.stats", + "sample4/qc/tumor", + "sample4/qc/tumor/cramino_aln", + "sample4/qc/tumor/cramino_aln/sample4_cramino.txt", + "sample4/qc/tumor/cramino_ubam", + "sample4/qc/tumor/cramino_ubam/sample4_cramino.txt", + "sample4/qc/tumor/mosdepth", + "sample4/qc/tumor/mosdepth/sample4.mosdepth.global.dist.txt", + "sample4/qc/tumor/mosdepth/sample4.mosdepth.summary.txt", + "sample4/qc/tumor/samtools", + "sample4/qc/tumor/samtools/sample4.flagstat", + "sample4/qc/tumor/samtools/sample4.idxstats", + "sample4/qc/tumor/samtools/sample4.stats", + "sample4/variants", + "sample4/variants/clair3", + "sample4/variants/clair3/merge_output.vcf.gz", + "sample4/variants/clair3/merge_output.vcf.gz.tbi", + "sample4/variants/clairs", + "sample4/variants/clairs/indel.vcf.gz", + "sample4/variants/clairs/indel.vcf.gz.tbi", + "sample4/variants/clairs/snvs.vcf.gz", + "sample4/variants/clairs/snvs.vcf.gz.tbi", + "sample4/variants/severus", + "sample4/variants/severus/all_SVs", + "sample4/variants/severus/all_SVs/severus_all.vcf.gz", + "sample4/variants/severus/breakpoints_double.csv", + "sample4/variants/severus/read_ids.csv", + "sample4/variants/severus/read_qual.txt", + "sample4/variants/severus/severus.log", + "sample4/variants/severus/somatic_SVs", + "sample4/variants/severus/somatic_SVs/severus_somatic.vcf.gz", + "sample4/vep", + "sample4/vep/SVs", + "sample4/vep/SVs/sample4_SV_VEP.vcf.gz", + "sample4/vep/SVs/sample4_SV_VEP.vcf.gz.tbi", + "sample4/vep/SVs/sample4_SV_VEP.vcf.gz_summary.html", + "sample4/vep/germline", + "sample4/vep/germline/sample4_GERMLINE_VEP.vcf.gz", + "sample4/vep/germline/sample4_GERMLINE_VEP.vcf.gz.tbi", + "sample4/vep/germline/sample4_GERMLINE_VEP.vcf.gz_summary.html", + "sample4/vep/somatic", + "sample4/vep/somatic/sample4_SOMATIC_VEP.vcf.gz", + "sample4/vep/somatic/sample4_SOMATIC_VEP.vcf.gz.tbi", + "sample4/vep/somatic/sample4_SOMATIC_VEP.vcf.gz_summary.html" ], [ "sample1_normal.bam:md5,60838033f5f24aa90e16a5babcddd45b", @@ -333,13 +443,29 @@ "sample3.idxstats:md5,1d43b03114bcc9b70d4333e91498efbe", "sample3.stats:md5,b0f46b772514f0de08f1b2d88aa5968f", "breakpoints_double.csv:md5,298a01c868eb493baaaa90ced9a9f17e", - "read_qual.txt:md5,1b4392f3b9071533e9ea77ff9df6c813" + "read_qual.txt:md5,1b4392f3b9071533e9ea77ff9df6c813", + "sample4_normal.bam:md5,1244bbb36a3fd5921f50eaa1933221d9", + "sample4_normal.bam.bai:md5,b5781f18020f89190768cc79cc15bfc9", + "sample4_tumor.bam:md5,f177881083a1dc6918c8206fd1125850", + "sample4_tumor.bam.bai:md5,4b60c72c6e9bce15010a029d854bb5b9", + "sample4.mosdepth.global.dist.txt:md5,431a1e9eb9e396ac0a5a9d8c1cbbc4be", + "sample4.mosdepth.summary.txt:md5,37c50bb51cff8d0a05d55c44bbecfac8", + "sample4.flagstat:md5,0324d26e70952dc7d7525b9b2b3397af", + "sample4.idxstats:md5,a4f00d06210fa9cae6664f4326fe3c61", + "sample4.stats:md5,98260d38e8dd9c4e3a9ef56c15e4e600", + "sample4.mosdepth.global.dist.txt:md5,3830fc5e90f49c2a87b12db0cb327e83", + "sample4.mosdepth.summary.txt:md5,c37156c0a4cfd888069d7af46c59adfc", + "sample4.flagstat:md5,c129f6e33ad95e7e46a3e49b7ef382ce", + "sample4.idxstats:md5,a03565b3c0a3ad7033c4ecd1ba742a8b", + "sample4.stats:md5,1f9d1370ccd44dc1239468d98982d84f", + "breakpoints_double.csv:md5,319b8e3bdfbec8339a8c6f1ceb4384a5", + "read_qual.txt:md5,6c47ff1f1adacd44fa4822c8237c92ac" ] ], "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2026-01-09T17:08:56.493545818" + "timestamp": "2026-03-11T19:35:17.289539787" } } \ No newline at end of file From 678ee267e03c41603f3a53cae0bf4669f4e7fbb0 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Wed, 11 Mar 2026 19:40:21 +0100 Subject: [PATCH 12/12] precommit --- modules.json | 116 +++++++++++++-------------------------------------- 1 file changed, 29 insertions(+), 87 deletions(-) diff --git a/modules.json b/modules.json index d5dd45a2..100cd8a1 100644 --- a/modules.json +++ b/modules.json @@ -8,179 +8,129 @@ "ascat": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/ascat/ascat.diff" }, "bcftools/concat": { "branch": "master", "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": [ - "modules", - "vcf_gather_bcftools" - ] + "installed_by": ["modules", "vcf_gather_bcftools"] }, "bcftools/merge": { "branch": "master", "git_sha": "3d9c2f4beaa4f62b3f006928fd9095a496d1e5a8", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/sort": { "branch": "master", "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": [ - "modules", - "vcf_gather_bcftools" - ], + "installed_by": ["modules", "vcf_gather_bcftools"], "patch": "modules/nf-core/bcftools/sort/bcftools-sort.diff" }, "ensemblvep/download": { "branch": "master", "git_sha": "90cdd21fd96ccbdb3bc90797ca69570d18391055", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", "git_sha": "890fdcff71928fc1470d3e669d4c430c8c770297", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" }, "longphase/haplotag": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "longphase/phase": { "branch": "master", "git_sha": "47983538e45e539f783ed8ab0d1c96d39df2af8f", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/longphase/phase/longphase-phase.diff" }, "minimap2/align": { "branch": "master", "git_sha": "5c9f8d5b7671237c906abadc9ff732b301ca15ca", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "14980f759266eec42dac401fcafeb83d6c957b41", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "modkit/pileup": { "branch": "master", "git_sha": "3d81317a30d1016b533982d6b84df07713ae520a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "6832b69ef7f98c54876d6436360b6b945370c615", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "2c73cc8fa92cf48de3da0b643fdf357a8a290b36", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "pigz/uncompress": { "branch": "master", "git_sha": "f84336b7fa91a65aa61d215b8c109fbb8e4b4ac6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/cat": { "branch": "master", "git_sha": "f9edc59be2fe25bb6fc73ca4dfc0d28246f2a2d6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": [ - "bam_stats_samtools" - ] + "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": [ - "bam_stats_samtools" - ] + "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df", - "installed_by": [ - "bam_stats_samtools" - ], + "installed_by": ["bam_stats_samtools"], "patch": "modules/nf-core/samtools/stats/samtools-stats.diff" }, "severus": { "branch": "master", "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/severus/severus.diff" }, "untar": { "branch": "master", "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "unzip": { "branch": "master", "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "wget": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -189,33 +139,25 @@ "bam_stats_samtools": { "branch": "master", "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +}