diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index f5629527d12e..53b5d61caf0a 100644
--- a/modules/nf-core/fastqc/main.nf
+++ b/modules/nf-core/fastqc/main.nf
@@ -3,28 +3,28 @@ process FASTQC {
label 'process_low'
conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' :
- 'biocontainers/fastqc:0.12.1--hdfd78af_0' }"
+ container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container
+ ? 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0'
+ : 'biocontainers/fastqc:0.12.1--hdfd78af_0'}"
input:
tuple val(meta), path(reads)
output:
- tuple val(meta) , path("*.html") , emit: html
- tuple val(meta) , path("*.zip") , emit: zip
+ tuple val(meta), val("${task.process}"), val('fastqc'), path("*.html"), topic: multiqc_files, emit: html
+ tuple val(meta), val("${task.process}"), val('fastqc'), path("*.zip"), topic: multiqc_files, emit: zip
tuple val("${task.process}"), val('fastqc'), eval('fastqc --version | sed "/FastQC v/!d; s/.*v//"'), emit: versions_fastqc, topic: versions
when:
task.ext.when == null || task.ext.when
script:
- def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
// Make list of old name and new name pairs to use for renaming in the bash while loop
- def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] }
- def rename_to = old_new_pairs*.join(' ').join(' ')
- def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ')
+ def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[reads, "${prefix}.${reads.extension}"]] : reads.withIndex().collect { entry, index -> [entry, "${prefix}_${index + 1}.${entry.extension}"] }
+ def rename_to = old_new_pairs*.join(' ').join(' ')
+ def renamed_files = old_new_pairs.collect { _old_name, new_name -> new_name }.join(' ')
// The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory)
// https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222
diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml
index 49164c88fb6a..ef120680bc4f 100644
--- a/modules/nf-core/fastqc/meta.yml
+++ b/modules/nf-core/fastqc/meta.yml
@@ -16,7 +16,8 @@ tools:
overrepresented sequences.
homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/
- licence: ["GPL-2.0-only"]
+ licence:
+ - "GPL-2.0-only"
identifier: biotools:fastqc
input:
- - meta:
@@ -37,6 +38,12 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
+ - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - fastqc:
+ type: string
+ description: The tool name
- "*.html":
type: file
description: FastQC report
@@ -48,6 +55,12 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
+ - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - fastqc:
+ type: string
+ description: The tool name
- "*.zip":
type: file
description: FastQC report archive
@@ -63,7 +76,6 @@ output:
- fastqc --version | sed "/FastQC v/!d; s/.*v//":
type: eval
description: The expression to obtain the version of the tool
-
topics:
versions:
- - ${task.process}:
@@ -75,6 +87,35 @@ topics:
- fastqc --version | sed "/FastQC v/!d; s/.*v//":
type: eval
description: The expression to obtain the version of the tool
+ multiqc_files:
+ - - meta:
+ type: string
+ description: The name of the process
+ - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - fastqc:
+ type: string
+ description: The tool name
+ - "*.html":
+ type: file
+ description: FastQC report
+ pattern: "*_{fastqc.html}"
+ ontologies: []
+ - - meta:
+ type: string
+ description: The name of the process
+ - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - fastqc:
+ type: string
+ description: The tool name
+ - "*.zip":
+ type: file
+ description: FastQC report archive
+ pattern: "*_{fastqc.zip}"
+ ontologies: []
authors:
- "@drpatelh"
- "@grst"
diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test
index 66c44da9bf2b..d89b287faf05 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test
+++ b/modules/nf-core/fastqc/tests/main.nf.test
@@ -22,15 +22,17 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
// NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it.
// looks like this:
// https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -50,15 +52,15 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
- { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
- { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
- { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
- { assert path(process.out.html[0][1][0]).text.contains("| File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][1]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3][0]).text.contains("| File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][3][1]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -77,12 +79,14 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -101,12 +105,14 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -128,21 +134,17 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
- { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
- { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" },
- { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" },
- { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
- { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
- { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" },
- { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" },
- { assert path(process.out.html[0][1][0]).text.contains("| File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][1]).text.contains("| File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][2]).text.contains("| File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][3]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3][0]).text.contains("| File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][3][1]).text.contains("| File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][3][2]).text.contains("| File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][3][3]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -161,12 +163,14 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("| File type | Conventional base calls |
") },
- { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() }
+ { assert path(process.out.html[0][3]).text.contains("| File type | Conventional base calls |
") },
+ { assert snapshot(
+ process.out.html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match() }
)
}
}
@@ -186,9 +190,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -209,9 +213,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -231,9 +235,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -253,9 +257,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -278,9 +282,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -300,9 +304,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap
index c8ee120f56b6..9fc9e62db826 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test.snap
+++ b/modules/nf-core/fastqc/tests/main.nf.test.snap
@@ -1,6 +1,12 @@
{
"sarscov2 custom_prefix": {
"content": [
+ [
+ "mysample_fastqc.html"
+ ],
+ [
+ "mysample_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -12,45 +18,22 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:14.518503"
+ "timestamp": "2026-02-11T14:33:12.319467851"
},
"sarscov2 single-end [fastq] - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "test",
"single_end": true
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": true
- },
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -67,51 +50,30 @@
"id": "test",
"single_end": true
},
+ "FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:19.309008"
+ "timestamp": "2026-02-11T14:38:23.147388614"
},
"sarscov2 custom_prefix - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
- "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "mysample",
"single_end": true
},
- "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
"mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -128,19 +90,27 @@
"id": "mysample",
"single_end": true
},
+ "FASTQC",
+ "fastqc",
"mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:44.94888"
+ "timestamp": "2026-02-11T14:39:01.896543843"
},
"sarscov2 interleaved [fastq]": {
"content": [
+ [
+ "test_fastqc.html"
+ ],
+ [
+ "test_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -152,13 +122,19 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:38:45.168496"
+ "timestamp": "2026-02-11T14:32:43.093082785"
},
"sarscov2 paired-end [bam]": {
"content": [
+ [
+ "test_fastqc.html"
+ ],
+ [
+ "test_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -170,13 +146,25 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:38:53.268919"
+ "timestamp": "2026-02-11T14:32:52.50059813"
},
"sarscov2 multiple [fastq]": {
"content": [
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html",
+ "test_3_fastqc.html",
+ "test_4_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip",
+ "test_3_fastqc.zip",
+ "test_4_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -188,13 +176,21 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:05.050305"
+ "timestamp": "2026-02-11T14:33:02.862562448"
},
"sarscov2 paired-end [fastq]": {
"content": [
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -206,45 +202,22 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:38:37.2373"
+ "timestamp": "2026-02-11T10:31:19.451776613"
},
"sarscov2 paired-end [fastq] - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "test",
"single_end": false
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -261,51 +234,30 @@
"id": "test",
"single_end": false
},
+ "FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:24.450398"
+ "timestamp": "2026-02-11T14:38:30.061273733"
},
"sarscov2 multiple [fastq] - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "test",
"single_end": false
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -322,19 +274,27 @@
"id": "test",
"single_end": false
},
+ "FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:39.758762"
+ "timestamp": "2026-02-11T14:38:53.737196741"
},
"sarscov2 single-end [fastq]": {
"content": [
+ [
+ "test_fastqc.html"
+ ],
+ [
+ "test_fastqc.zip"
+ ],
{
"versions_fastqc": [
[
@@ -346,45 +306,22 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:38:29.555068"
+ "timestamp": "2026-02-11T14:32:21.756344375"
},
"sarscov2 interleaved [fastq] - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "test",
"single_end": false
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -401,51 +338,30 @@
"id": "test",
"single_end": false
},
+ "FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:29.193136"
+ "timestamp": "2026-02-11T14:38:38.338009706"
},
"sarscov2 paired-end [bam] - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
+ "html": [
[
{
"id": "test",
"single_end": false
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
"FASTQC",
"fastqc",
- "0.12.1"
- ]
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -462,15 +378,17 @@
"id": "test",
"single_end": false
},
+ "FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-10-28T16:39:34.144919"
+ "timestamp": "2026-02-11T14:38:45.842081984"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf
index 04e03c6454c2..8dcc1a428d14 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf
@@ -1,10 +1,10 @@
//
// Read QC, UMI extraction and trimming
//
-include { FASTQC as FASTQC_RAW } from '../../../modules/nf-core/fastqc/main'
-include { FASTQC as FASTQC_TRIM } from '../../../modules/nf-core/fastqc/main'
-include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract/main'
-include { FASTP } from '../../../modules/nf-core/fastp/main'
+include { FASTP } from '../../../modules/nf-core/fastp'
+include { FASTQC as FASTQC_RAW } from '../../../modules/nf-core/fastqc'
+include { FASTQC as FASTQC_TRIM } from '../../../modules/nf-core/fastqc'
+include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract'
//
// Function that parses fastp json output file to get total number of reads after trimming
@@ -37,14 +37,14 @@ def getFastpAdapterSequence(json_file) {
workflow FASTQ_FASTQC_UMITOOLS_FASTP {
take:
- reads // channel: [ val(meta), [ reads ], adapter_fasta ]
- skip_fastqc // boolean: true/false
- with_umi // boolean: true/false
- skip_umi_extract // boolean: true/false
- umi_discard_read // integer: 0, 1 or 2
- skip_trimming // boolean: true/false
+ reads // channel: [ val(meta), [ reads ], adapter_fasta ]
+ skip_fastqc // boolean: true/false
+ with_umi // boolean: true/false
+ skip_umi_extract // boolean: true/false
+ umi_discard_read // integer: 0, 1 or 2
+ skip_trimming // boolean: true/false
save_trimmed_fail // boolean: true/false
- save_merged // boolean: true/false
+ save_merged // boolean: true/false
min_trimmed_reads // integer: > 0
main:
@@ -62,12 +62,11 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP {
adapter_seq = channel.empty()
// Split input channel for reads-only operations
- reads_only = reads.map { meta, reads_files, _adapter_fasta -> [ meta, reads_files ] }
+ reads_only = reads.map { meta, reads_files, _adapter_fasta -> [meta, reads_files] }
if (!skip_fastqc) {
- FASTQC_RAW(
- reads_only
- )
+ FASTQC_RAW(reads_only)
+
fastqc_raw_html = FASTQC_RAW.out.html
fastqc_raw_zip = FASTQC_RAW.out.zip
}
@@ -107,7 +106,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP {
umi_reads_with_adapters,
false,
save_trimmed_fail,
- save_merged
+ save_merged,
)
trim_json = FASTP.out.json
trim_html = FASTP.out.html
@@ -134,9 +133,8 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP {
.set { adapter_seq }
if (!skip_fastqc) {
- FASTQC_TRIM(
- trim_reads
- )
+ FASTQC_TRIM(trim_reads)
+
fastqc_trim_html = FASTQC_TRIM.out.html
fastqc_trim_zip = FASTQC_TRIM.out.zip
}
@@ -144,17 +142,17 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP {
emit:
reads = trim_reads // channel: [ val(meta), [ reads ] ]
- fastqc_raw_html // channel: [ val(meta), [ html ] ]
- fastqc_raw_zip // channel: [ val(meta), [ zip ] ]
- umi_log // channel: [ val(meta), [ log ] ]
- umi_reads // channel: [ val(meta), [ reads ] ]
- adapter_seq // channel: [ val(meta), [ adapter_seq] ]
- trim_json // channel: [ val(meta), [ json ] ]
- trim_html // channel: [ val(meta), [ html ] ]
- trim_log // channel: [ val(meta), [ log ] ]
- trim_reads_fail // channel: [ val(meta), [ fastq.gz ] ]
+ fastqc_raw_html // channel: [ val(meta), process, tool, [ html ] ]
+ fastqc_raw_zip // channel: [ val(meta), process, tool, [ zip ] ]
+ umi_log // channel: [ val(meta), [ log ] ]
+ umi_reads // channel: [ val(meta), [ reads ] ]
+ adapter_seq // channel: [ val(meta), [ adapter_seq] ]
+ trim_json // channel: [ val(meta), [ json ] ]
+ trim_html // channel: [ val(meta), [ html ] ]
+ trim_log // channel: [ val(meta), [ log ] ]
+ trim_reads_fail // channel: [ val(meta), [ fastq.gz ] ]
trim_reads_merged // channel: [ val(meta), [ fastq.gz ] ]
- trim_read_count // channel: [ val(meta), val(count) ]
- fastqc_trim_html // channel: [ val(meta), [ html ] ]
- fastqc_trim_zip // channel: [ val(meta), [ zip ] ]
+ trim_read_count // channel: [ val(meta), val(count) ]
+ fastqc_trim_html // channel: [ val(meta), process, tool, [ html ] ]
+ fastqc_trim_zip // channel: [ val(meta), process, tool, [ zip ] ]
}
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test
index 2daf04102821..467da6284736 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test
@@ -53,14 +53,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -169,12 +169,12 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -225,14 +225,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -283,14 +283,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -341,8 +341,6 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
{ assert !workflow.out.fastqc_trim_html },
{ assert !workflow.out.fastqc_trim_zip },
{ assert !workflow.out.trim_html },
@@ -350,7 +348,9 @@ nextflow_workflow {
{ assert snapshot(
// If we skip trimming then input is output, so not snapshotting
workflow.out.adapter_seq,
- workflow.out.reads.get(0).get(0), // Reads meta map
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.reads[0][0], // Reads meta map
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
workflow.out.trim_reads_merged,
@@ -400,14 +400,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -458,14 +458,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -517,14 +517,14 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert workflow.out.fastqc_raw_html },
- { assert workflow.out.fastqc_raw_zip },
- { assert workflow.out.fastqc_trim_html },
- { assert workflow.out.fastqc_trim_zip },
{ assert workflow.out.trim_html },
{ assert workflow.out.trim_log },
{ assert snapshot(
workflow.out.adapter_seq,
+ workflow.out.fastqc_raw_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_raw_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_trim_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_reads_fail,
@@ -576,7 +576,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -621,7 +621,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -664,9 +664,9 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success },
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -712,7 +712,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -757,7 +757,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -800,8 +800,8 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success },
{ assert snapshot(
workflow.out.adapter_seq,
workflow.out.fastqc_raw_html,
@@ -859,7 +859,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -902,9 +902,9 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success },
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -950,7 +950,7 @@ nextflow_workflow {
then {
assert workflow.success
assertAll(
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap
index 37955fbb9193..2c20989524a4 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap
@@ -10,6 +10,22 @@
"unspecified"
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -43,9 +59,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:18:53.838884403"
+ "timestamp": "2026-02-11T14:43:36.048228098"
},
"sarscov2 paired-end [fastq] | with_umi": {
"content": [
@@ -58,6 +74,14 @@
""
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -85,118 +109,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:18:44.18362126"
+ "timestamp": "2026-02-11T14:43:21.694691754"
},
"sarscov2 paired-end [fastq] | umi_discard_read = 2 - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
-
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 1
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -212,6 +131,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -221,6 +142,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -230,6 +153,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -239,6 +164,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -306,9 +233,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:16.937742298"
+ "timestamp": "2026-02-11T14:45:24.147203186"
},
"sarscov2 paired-end [fastq] | skip_trimming - stub": {
"content": [
@@ -321,6 +248,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -330,6 +259,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -365,12 +296,20 @@
"nf-test": "0.9.3",
"nextflow": "25.10.3"
},
- "timestamp": "2026-02-03T13:20:23.046804125"
+ "timestamp": "2026-02-10T19:22:55.894857041"
},
"sarscov2 paired-end [fastq] | skip_trimming": {
"content": [
[
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
],
{
"id": "test",
@@ -391,9 +330,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:12.020305151"
+ "timestamp": "2026-02-11T14:43:59.551167396"
},
"sarscov2 paired-end [fastq] | umi_discard_read = 2": {
"content": [
@@ -406,6 +345,22 @@
"unspecified"
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -439,124 +394,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:03.546158761"
+ "timestamp": "2026-02-11T14:43:49.365663656"
},
"sarscov2 paired-end [fastq] | min_trimmed_reads = 26 - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 26
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -572,6 +416,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -581,6 +427,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -590,6 +438,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -599,6 +449,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -672,9 +524,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:43.232621634"
+ "timestamp": "2026-02-11T14:46:00.201401055"
},
"sarscov2 paired-end [fastq] | save_trimmed_fail": {
"content": [
@@ -687,6 +539,22 @@
"unspecified"
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -730,9 +598,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:21.78045793"
+ "timestamp": "2026-02-11T14:44:11.543627633"
},
"sarscov2 paired-end [fastq] | skip_fastqc": {
"content": [
@@ -785,82 +653,81 @@
"sarscov2 paired-end [fastq] | save_trimmed_fail - stub": {
"content": [
{
- "0": [
+ "adapter_seq": [
[
{
"id": "test",
"single_end": false
},
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ ""
]
],
- "1": [
+ "fastqc_raw_html": [
[
{
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "10": [
-
- ],
- "11": [
+ "fastqc_raw_zip": [
[
{
"id": "test",
"single_end": false
},
- 1
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
+ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "fastqc_trim_html": [
[
{
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "fastqc_trim_zip": [
[
{
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "2": [
+ "reads": [
[
{
"id": "test",
"single_end": false
},
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
]
],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
+ "trim_html": [
[
{
"id": "test",
"single_end": false
},
- ""
+ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "6": [
+ "trim_json": [
[
{
"id": "test",
@@ -869,113 +736,7 @@
"test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "adapter_seq": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "fastqc_raw_html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "fastqc_raw_zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "fastqc_trim_html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "fastqc_trim_zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "reads": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "trim_html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "trim_json": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "trim_log": [
+ "trim_log": [
[
{
"id": "test",
@@ -1019,94 +780,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:29.76860289"
+ "timestamp": "2026-02-11T14:45:41.491484521"
},
"sarscov2 paired-end [fastq] | skip_fastqc - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
-
- ],
- "10": [
-
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 1
- ]
- ],
- "12": [
-
- ],
- "13": [
-
- ],
- "2": [
-
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -1192,124 +872,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:54.094320651"
+ "timestamp": "2026-02-11T14:44:54.570745009"
},
"sarscov2 paired-end [fastq] | save_merged - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 1
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -1325,6 +894,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1334,6 +905,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1343,6 +916,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1352,6 +927,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1425,9 +1002,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:36.446963981"
+ "timestamp": "2026-02-11T14:45:51.156903793"
},
"sarscov2 paired-end [fastq] | min_trimmed_reads = 26": {
"content": [
@@ -1440,6 +1017,22 @@
"unspecified"
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -1479,9 +1072,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:41.14746713"
+ "timestamp": "2026-02-11T14:44:36.994836206"
},
"sarscov2 paired-end [fastq]": {
"content": [
@@ -1495,150 +1088,61 @@
]
],
[
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7",
- "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39"
- ]
- ]
- ],
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- 198
- ]
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
],
- [
-
- ],
- [
-
- ],
- [
-
- ]
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
- },
- "timestamp": "2026-02-03T13:18:22.011891063"
- },
- "sarscov2 paired-end [fastq] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
-
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 1
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
[
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7",
+ "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39"
]
- ],
- "9": [
-
- ],
+ ]
+ ],
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ 198
+ ]
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
+ },
+ "timestamp": "2026-02-11T14:42:55.981762464"
+ },
+ "sarscov2 paired-end [fastq] - stub": {
+ "content": [
+ {
"adapter_seq": [
[
{
@@ -1654,6 +1158,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1663,6 +1169,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1672,6 +1180,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1681,6 +1191,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1748,9 +1260,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:47.918568452"
+ "timestamp": "2026-02-11T14:44:45.667083742"
},
"sarscov2 paired-end [fastq] | save_merged": {
"content": [
@@ -1763,6 +1275,22 @@
"unspecified"
]
],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -1802,130 +1330,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:19:31.453483505"
+ "timestamp": "2026-02-11T14:44:23.552180268"
},
"sarscov2 paired-end [fastq] | with_umi - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
-
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": true
- },
- 1
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "4": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": true
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -1941,6 +1352,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1950,6 +1363,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1959,6 +1374,8 @@
"id": "test",
"single_end": true
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -1968,6 +1385,8 @@
"id": "test",
"single_end": true
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -2047,118 +1466,13 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:03.594981453"
+ "timestamp": "2026-02-11T14:45:06.09054678"
},
"sarscov2 paired-end [fastq] | skip_umi_extract - stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "10": [
-
- ],
- "11": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 1
- ]
- ],
- "12": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "13": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
- [
- {
- "id": "test",
- "single_end": false
- },
- ""
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "7": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
-
- ],
"adapter_seq": [
[
{
@@ -2174,6 +1488,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -2183,6 +1499,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -2192,6 +1510,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -2201,6 +1521,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -2268,8 +1590,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:20:10.2749087"
+ "timestamp": "2026-02-11T14:45:15.220321082"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf
index 262cbf530c69..adc0e7638520 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf
@@ -2,9 +2,9 @@
// Read QC, UMI extraction and trimming
//
-include { FASTQC } from '../../../modules/nf-core/fastqc/main'
-include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract/main'
-include { TRIMGALORE } from '../../../modules/nf-core/trimgalore/main'
+include { FASTQC } from '../../../modules/nf-core/fastqc'
+include { TRIMGALORE } from '../../../modules/nf-core/trimgalore'
+include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract'
//
// Function that parses TrimGalore log output file to get total number of reads after trimming
@@ -27,12 +27,12 @@ def getTrimGaloreReadsAfterFiltering(log_file) {
workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE {
take:
- reads // channel: [ val(meta), [ reads ] ]
- skip_fastqc // boolean: true/false
- with_umi // boolean: true/false
- skip_umi_extract // boolean: true/false
- skip_trimming // boolean: true/false
- umi_discard_read // integer: 0, 1 or 2
+ reads // channel: [ val(meta), [ reads ] ]
+ skip_fastqc // boolean: true/false
+ with_umi // boolean: true/false
+ skip_umi_extract // boolean: true/false
+ skip_trimming // boolean: true/false
+ umi_discard_read // integer: 0, 1 or 2
min_trimmed_reads // integer: > 0
main:
@@ -40,6 +40,7 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE {
fastqc_zip = channel.empty()
if (!skip_fastqc) {
FASTQC(reads)
+
fastqc_html = FASTQC.out.html
fastqc_zip = FASTQC.out.zip
}
@@ -104,13 +105,13 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE {
emit:
reads = trim_reads // channel: [ val(meta), [ reads ] ]
- fastqc_html // channel: [ val(meta), [ html ] ]
- fastqc_zip // channel: [ val(meta), [ zip ] ]
- umi_log // channel: [ val(meta), [ log ] ]
- umi_reads // channel: [ val(meta), [ reads ] ]
- trim_unpaired // channel: [ val(meta), [ reads ] ]
- trim_html // channel: [ val(meta), [ html ] ]
- trim_zip // channel: [ val(meta), [ zip ] ]
- trim_log // channel: [ val(meta), [ txt ] ]
+ fastqc_html // channel: [ val(meta), process, tool, [ html ] ]
+ fastqc_zip // channel: [ val(meta), process, tool, [ zip ] ]
+ umi_log // channel: [ val(meta), [ log ] ]
+ umi_reads // channel: [ val(meta), [ reads ] ]
+ trim_unpaired // channel: [ val(meta), [ reads ] ]
+ trim_html // channel: [ val(meta), [ html ] ]
+ trim_zip // channel: [ val(meta), [ zip ] ]
+ trim_log // channel: [ val(meta), [ txt ] ]
trim_read_count // channel: [ val(meta), val(count) ]
}
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test
index 1c66c0687be4..8dc8a77b850e 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test
@@ -36,14 +36,15 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
- { assert path(workflow.out.fastqc_html[0][1]).text.contains("| File type | Conventional base calls |
") },
{ assert snapshot(
+ workflow.out.fastqc_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_unpaired,
-).match() }
+ ).match() }
)
}
}
@@ -71,13 +72,15 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
{ assert snapshot(
+ workflow.out.fastqc_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_unpaired,
-).match() }
+ ).match() }
)
}
}
@@ -104,13 +107,15 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
{ assert snapshot(
+ workflow.out.fastqc_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
workflow.out.reads,
workflow.out.trim_read_count,
workflow.out.trim_unpaired,
-).match() }
+ ).match() }
)
}
}
@@ -138,12 +143,14 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
+ { assert !workflow.out.fastqc_html },
+ { assert !workflow.out.fastqc_zip },
{ assert snapshot(
workflow.out.trim_read_count,
workflow.out.trim_unpaired,
-).match() }
+ ).match() }
)
}
}
@@ -170,9 +177,9 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -202,9 +209,9 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
@@ -233,9 +240,9 @@ nextflow_workflow {
}
then {
+ assert workflow.success
assertAll(
- { assert workflow.success},
- { assert snapshot(workflow.out).match() }
+ { assert snapshot(sanitizeOutput(workflow.out)).match() }
)
}
}
diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap
index a22db98bc89e..eafb3f94bed5 100644
--- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap
@@ -2,81 +2,14 @@
"test paired end read with UMI - stub": {
"content": [
{
- "0": [
-
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "4": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ]
- ],
- "5": [
-
- ],
- "6": [
-
- ],
- "7": [
-
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
- [
- {
- "id": "test",
- "single_end": true
- },
- 0
- ]
- ],
"fastqc_html": [
[
{
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -86,6 +19,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -144,76 +79,21 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:45.022632239"
+ "timestamp": "2026-02-11T14:47:05.647721208"
},
"test paired end read without UMI - stub": {
"content": [
{
- "0": [
-
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
-
- ],
- "5": [
-
- ],
- "6": [
-
- ],
- "7": [
-
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- ],
- "9": [
- [
- {
- "id": "test",
- "single_end": false
- },
- 0
- ]
- ],
"fastqc_html": [
[
{
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -223,6 +103,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -269,12 +151,20 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:51.075428076"
+ "timestamp": "2026-02-11T14:47:14.08042154"
},
"test paired end read without UMI": {
"content": [
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -302,12 +192,18 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:22.252381045"
+ "timestamp": "2026-02-11T14:46:37.294916439"
},
"test single end read with UMI": {
"content": [
+ [
+ "test_fastqc.html"
+ ],
+ [
+ "test_fastqc.zip"
+ ],
[
[
{
@@ -332,12 +228,20 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:01.887880112"
+ "timestamp": "2026-02-11T14:46:13.310452258"
},
"test paired end read with UMI": {
"content": [
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
[
[
{
@@ -362,9 +266,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:13.989761245"
+ "timestamp": "2026-02-11T14:46:27.2011909"
},
"test skip all steps": {
"content": [
@@ -384,78 +288,14 @@
"test single end read with UMI - stub": {
"content": [
{
- "0": [
-
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "4": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
- ],
- "5": [
-
- ],
- "6": [
-
- ],
- "7": [
-
- ],
- "8": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "9": [
- [
- {
- "id": "test",
- "single_end": true
- },
- 0
- ]
- ],
"fastqc_html": [
[
{
"id": "test",
"single_end": true
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -465,6 +305,8 @@
"id": "test",
"single_end": true
},
+ "FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -520,8 +362,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:21:36.092099503"
+ "timestamp": "2026-02-11T14:46:54.690152145"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test b/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test
index f19d4979bf35..1717dc6a300c 100644
--- a/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test
@@ -35,8 +35,8 @@ nextflow_workflow {
assertAll(
{ assert workflow.success },
{ assert snapshot(
- file(workflow.out.fastqc_html[0][1]).name,
- file(workflow.out.fastqc_zip[0][1]).name,
+ file(workflow.out.fastqc_html[0][3]).name,
+ file(workflow.out.fastqc_zip[0][3]).name,
workflow.out.seqfu_check,
workflow.out.seqfu_stats,
workflow.out.seqfu_multiqc,
@@ -95,10 +95,8 @@ nextflow_workflow {
assertAll(
{ assert workflow.success },
{ assert snapshot(
- file(workflow.out.fastqc_html[0][1][0]).name,
- file(workflow.out.fastqc_zip[0][1][0]).name,
- file(workflow.out.fastqc_html[0][1][1]).name,
- file(workflow.out.fastqc_zip[0][1][1]).name,
+ workflow.out.fastqc_html[0][3].collect { f -> file(f).name },
+ workflow.out.fastqc_zip[0][3].collect { f -> file(f).name },
workflow.out.seqfu_check,
workflow.out.seqfu_stats,
workflow.out.seqfu_multiqc,
diff --git a/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test.snap
index 0b16d4ceb6c3..cb7a2e74368e 100644
--- a/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_qc_stats/tests/main.nf.test.snap
@@ -8,6 +8,8 @@
"id": "test_single",
"single_end": true
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_single.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -17,6 +19,8 @@
"id": "test_single",
"single_end": true
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_single.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -75,6 +79,8 @@
"id": "test_single",
"single_end": true
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_single.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -84,6 +90,8 @@
"id": "test_single",
"single_end": true
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_single.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -152,9 +160,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:30:28.391994301"
+ "timestamp": "2026-02-11T09:43:56.533348924"
},
"sarscov2 - fastq - single_end - skip all": {
"content": [
@@ -271,16 +279,20 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:30:09.161775877"
+ "timestamp": "2026-02-11T09:43:34.42198883"
},
"sarscov2 - fastq - paired_end": {
"content": [
- "test_paired_1_fastqc.html",
- "test_paired_1_fastqc.zip",
- "test_paired_2_fastqc.html",
- "test_paired_2_fastqc.zip",
+ [
+ "test_paired_1_fastqc.html",
+ "test_paired_2_fastqc.html"
+ ],
+ [
+ "test_paired_1_fastqc.zip",
+ "test_paired_2_fastqc.zip"
+ ],
[
[
{
@@ -333,9 +345,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:30:22.113056749"
+ "timestamp": "2026-02-11T10:40:26.810051472"
},
"sarscov2 - fastq - paired_end - stub": {
"content": [
@@ -346,6 +358,8 @@
"id": "test_paired",
"single_end": false
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_paired.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -355,6 +369,8 @@
"id": "test_paired",
"single_end": false
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_paired.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -413,6 +429,8 @@
"id": "test_paired",
"single_end": false
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_paired.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -422,6 +440,8 @@
"id": "test_paired",
"single_end": false
},
+ "FASTQ_QC_STATS:FASTQC",
+ "fastqc",
"test_paired.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -490,8 +510,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T13:30:34.56299164"
+ "timestamp": "2026-02-11T09:44:03.432690545"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf
index 3b9173de74c1..6c5715f3fc46 100644
--- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf
+++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf
@@ -1,14 +1,14 @@
include { BBMAP_BBSPLIT } from '../../../modules/nf-core/bbmap/bbsplit'
+include { CAT_FASTQ } from '../../../modules/nf-core/cat/fastq'
include { FASTQC as FASTQC_FILTERED } from '../../../modules/nf-core/fastqc'
-include { CAT_FASTQ } from '../../../modules/nf-core/cat/fastq/main'
-include { FQ_LINT } from '../../../modules/nf-core/fq/lint/main'
-include { FQ_LINT as FQ_LINT_AFTER_TRIMMING } from '../../../modules/nf-core/fq/lint/main'
-include { FQ_LINT as FQ_LINT_AFTER_BBSPLIT } from '../../../modules/nf-core/fq/lint/main'
-include { FQ_LINT as FQ_LINT_AFTER_RIBO_REMOVAL } from '../../../modules/nf-core/fq/lint/main'
-include { FASTQ_REMOVE_RRNA } from '../fastq_remove_rrna'
-include { FASTQ_SUBSAMPLE_FQ_SALMON } from '../fastq_subsample_fq_salmon'
+include { FQ_LINT } from '../../../modules/nf-core/fq/lint'
+include { FQ_LINT as FQ_LINT_AFTER_BBSPLIT } from '../../../modules/nf-core/fq/lint'
+include { FQ_LINT as FQ_LINT_AFTER_RIBO_REMOVAL } from '../../../modules/nf-core/fq/lint'
+include { FQ_LINT as FQ_LINT_AFTER_TRIMMING } from '../../../modules/nf-core/fq/lint'
include { FASTQ_FASTQC_UMITOOLS_TRIMGALORE } from '../fastq_fastqc_umitools_trimgalore'
include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../fastq_fastqc_umitools_fastp'
+include { FASTQ_REMOVE_RRNA } from '../fastq_remove_rrna'
+include { FASTQ_SUBSAMPLE_FQ_SALMON } from '../fastq_subsample_fq_salmon'
//
// Function to determine library type by comparing type counts.
@@ -84,45 +84,32 @@ def multiqcTsvFromList(tsv_data, header) {
workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
take:
- // Input channels
- ch_reads // channel: [ val(meta), [ reads ] ]
- ch_fasta // channel: /path/to/genome.fasta
- ch_transcript_fasta // channel: /path/to/transcript.fasta
- ch_gtf // channel: /path/to/genome.gtf
- ch_salmon_index // channel: /path/to/salmon/index/ (optional)
- ch_sortmerna_index // channel: /path/to/sortmerna/index/ (optional)
- ch_bowtie2_index // channel: /path/to/bowtie2/index/ (optional)
- ch_bbsplit_index // channel: /path/to/bbsplit/index/ (optional)
- ch_rrna_fastas // channel: one or more fasta files containing rrna sequences to be passed to SortMeRNA/Bowtie2 (optional)
-
- // Skip options
- skip_bbsplit // boolean: Skip BBSplit for removal of non-reference genome reads.
- skip_fastqc // boolean: true/false
- skip_trimming // boolean: true/false
- skip_umi_extract // boolean: true/false
- skip_linting // boolean: true/false
-
- // Index generation
- make_salmon_index // boolean: Whether to create salmon index before running salmon quant
+ ch_reads // channel: [ val(meta), [ reads ] ]
+ ch_fasta // channel: /path/to/genome.fasta
+ ch_transcript_fasta // channel: /path/to/transcript.fasta
+ ch_gtf // channel: /path/to/genome.gtf
+ ch_salmon_index // channel: /path/to/salmon/index/ (optional)
+ ch_sortmerna_index // channel: /path/to/sortmerna/index/ (optional)
+ ch_bowtie2_index // channel: /path/to/bowtie2/index/ (optional)
+ ch_bbsplit_index // channel: /path/to/bbsplit/index/ (optional)
+ ch_rrna_fastas // channel: one or more fasta files containing rrna sequences to be passed to SortMeRNA/Bowtie2 (optional)
+ skip_bbsplit // boolean: Skip BBSplit for removal of non-reference genome reads.
+ skip_fastqc // boolean: true/false
+ skip_trimming // boolean: true/false
+ skip_umi_extract // boolean: true/false
+ skip_linting // boolean: true/false
+ make_salmon_index // boolean: Whether to create salmon index before running salmon quant
make_sortmerna_index // boolean: Whether to create a sortmerna index before running sortmerna
- make_bowtie2_index // boolean: Whether to create a bowtie2 index before running bowtie2
-
- // Trimming options
- trimmer // string (enum): 'fastp' or 'trimgalore'
- min_trimmed_reads // integer: > 0
- save_trimmed // boolean: true/false
- fastp_merge // boolean: true/false: whether to stitch paired end reads together in FASTP output
-
- // rRNA removal options
- remove_ribo_rna // boolean: true/false: whether to remove rRNA
- ribo_removal_tool // string (enum): 'sortmerna', 'ribodetector', or 'bowtie2'
-
- // UMI options
- with_umi // boolean: true/false: Enable UMI-based read deduplication.
- umi_discard_read // integer: 0, 1 or 2
-
- // Strandedness thresholds
- stranded_threshold // float: The fraction of stranded reads that must be assigned to a strandedness for confident assignment. Must be at least 0.5
+ make_bowtie2_index // boolean: Whether to create a bowtie2 index before running bowtie2
+ trimmer // string (enum): 'fastp' or 'trimgalore'
+ min_trimmed_reads // integer: > 0
+ save_trimmed // boolean: true/false
+ fastp_merge // boolean: true/false: whether to stitch paired end reads together in FASTP output
+ remove_ribo_rna // boolean: true/false: whether to remove rRNA
+ ribo_removal_tool // string (enum): 'sortmerna', 'ribodetector', or 'bowtie2'
+ with_umi // boolean: true/false: Enable UMI-based read deduplication.
+ umi_discard_read // integer: 0, 1 or 2
+ stranded_threshold // float: The fraction of stranded reads that must be assigned to a strandedness for confident assignment. Must be at least 0.5
unstranded_threshold // float: The difference in fraction of stranded reads assigned to 'forward' and 'reverse' below which a sample is classified as 'unstranded'
main:
@@ -136,27 +123,27 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
ch_lint_log_ribo = channel.empty()
// Individual output channels for workflow outputs
- ch_fastqc_raw_html = channel.empty()
- ch_fastqc_raw_zip = channel.empty()
- ch_fastqc_trim_html = channel.empty()
- ch_fastqc_trim_zip = channel.empty()
- ch_trim_html = channel.empty()
- ch_trim_zip = channel.empty()
- ch_trim_log = channel.empty()
- ch_trim_json = channel.empty()
- ch_trim_unpaired = channel.empty()
- ch_umi_log = channel.empty()
- ch_umi_reads = channel.empty()
- ch_bbsplit_stats = channel.empty()
- ch_sortmerna_log = channel.empty()
- ch_ribodetector_log = channel.empty()
- ch_seqkit_stats = channel.empty()
- ch_bowtie2_log = channel.empty()
- ch_bowtie2_index = channel.empty()
- ch_seqkit_prefixed = channel.empty()
- ch_seqkit_converted = channel.empty()
+ ch_fastqc_raw_html = channel.empty()
+ ch_fastqc_raw_zip = channel.empty()
+ ch_fastqc_trim_html = channel.empty()
+ ch_fastqc_trim_zip = channel.empty()
+ ch_trim_html = channel.empty()
+ ch_trim_zip = channel.empty()
+ ch_trim_log = channel.empty()
+ ch_trim_json = channel.empty()
+ ch_trim_unpaired = channel.empty()
+ ch_umi_log = channel.empty()
+ ch_umi_reads = channel.empty()
+ ch_bbsplit_stats = channel.empty()
+ ch_sortmerna_log = channel.empty()
+ ch_ribodetector_log = channel.empty()
+ ch_seqkit_stats = channel.empty()
+ ch_bowtie2_log = channel.empty()
+ ch_bowtie2_index = channel.empty()
+ ch_seqkit_prefixed = channel.empty()
+ ch_seqkit_converted = channel.empty()
ch_fastqc_filtered_html = channel.empty()
- ch_fastqc_filtered_zip = channel.empty()
+ ch_fastqc_filtered_zip = channel.empty()
ch_reads
.branch { meta, fastqs ->
@@ -204,19 +191,19 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
// Capture individual outputs for workflow outputs
ch_fastqc_raw_html = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_html
- ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip
+ ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip
ch_fastqc_trim_html = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_html
- ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip
- ch_trim_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_log
- ch_trim_unpaired = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_unpaired
- ch_umi_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_log
- ch_umi_reads = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_reads
-
- ch_multiqc_files = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip
+ ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip
+ ch_trim_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_log
+ ch_trim_unpaired = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_unpaired
+ ch_umi_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_log
+ ch_umi_reads = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_reads
+
+ ch_multiqc_files = ch_multiqc_files
+ .mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip.map { meta, _process, _tool, file -> [meta, file] })
.mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip)
.mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_log)
.mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_log)
- .mix(ch_multiqc_files)
}
//
@@ -224,7 +211,7 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
//
if (trimmer == 'fastp') {
FASTQ_FASTQC_UMITOOLS_FASTP(
- ch_filtered_reads.map { meta, reads -> tuple(meta, reads, []) }, // Add empty adapter sequence
+ ch_filtered_reads.map { meta, reads -> tuple(meta, reads, []) },
skip_fastqc,
with_umi,
skip_umi_extract,
@@ -238,21 +225,21 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
ch_trim_read_count = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_read_count
// Capture individual outputs for workflow outputs
- ch_fastqc_raw_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_html
- ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip
+ ch_fastqc_raw_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_html
+ ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip
ch_fastqc_trim_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_html
- ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip
- ch_trim_json = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json
- ch_trim_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html
- ch_trim_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_log
- ch_umi_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_log
- ch_umi_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_reads
-
- ch_multiqc_files = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip
- .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip)
+ ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip
+ ch_trim_json = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json
+ ch_trim_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html
+ ch_trim_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_log
+ ch_umi_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_log
+ ch_umi_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_reads
+
+ ch_multiqc_files = ch_multiqc_files
+ .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip.map { meta, _process, _tool, file -> [meta, file] })
+ .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip.map { meta, _process, _tool, file -> [meta, file] })
.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json)
.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_log)
- .mix(ch_multiqc_files)
}
def pass_trimmed_reads = [:]
@@ -329,12 +316,12 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
)
ch_filtered_reads = FASTQ_REMOVE_RRNA.out.reads
- ch_sortmerna_log = FASTQ_REMOVE_RRNA.out.sortmerna_log
+ ch_sortmerna_log = FASTQ_REMOVE_RRNA.out.sortmerna_log
ch_ribodetector_log = FASTQ_REMOVE_RRNA.out.ribodetector_log
- ch_seqkit_stats = FASTQ_REMOVE_RRNA.out.seqkit_stats
- ch_bowtie2_log = FASTQ_REMOVE_RRNA.out.bowtie2_log
- ch_bowtie2_index = FASTQ_REMOVE_RRNA.out.bowtie2_index
- ch_seqkit_prefixed = FASTQ_REMOVE_RRNA.out.seqkit_prefixed
+ ch_seqkit_stats = FASTQ_REMOVE_RRNA.out.seqkit_stats
+ ch_bowtie2_log = FASTQ_REMOVE_RRNA.out.bowtie2_log
+ ch_bowtie2_index = FASTQ_REMOVE_RRNA.out.bowtie2_index
+ ch_seqkit_prefixed = FASTQ_REMOVE_RRNA.out.seqkit_prefixed
ch_seqkit_converted = FASTQ_REMOVE_RRNA.out.seqkit_converted
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_REMOVE_RRNA.out.multiqc_files)
@@ -355,8 +342,8 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
ch_filtered_reads
)
ch_fastqc_filtered_html = FASTQC_FILTERED.out.html
- ch_fastqc_filtered_zip = FASTQC_FILTERED.out.zip
- ch_multiqc_files = ch_multiqc_files.mix(FASTQC_FILTERED.out.zip)
+ ch_fastqc_filtered_zip = FASTQC_FILTERED.out.zip
+ ch_multiqc_files = ch_multiqc_files.mix(FASTQC_FILTERED.out.zip.map { meta, _process, _tool, file -> [meta, file] })
}
// Branch FastQ channels if 'auto' specified to infer strandedness
@@ -403,34 +390,32 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS {
.set { ch_strand_inferred_fastq }
emit:
- reads = ch_strand_inferred_fastq
- trim_read_count = ch_trim_read_count
- multiqc_files = ch_multiqc_files.transpose().map { _meta, file -> file }
-
- // Individual outputs for workflow outputs
- lint_log_raw = ch_lint_log_raw
- lint_log_trimmed = ch_lint_log_trimmed
- lint_log_bbsplit = ch_lint_log_bbsplit
- lint_log_ribo = ch_lint_log_ribo
- fastqc_raw_html = ch_fastqc_raw_html
- fastqc_raw_zip = ch_fastqc_raw_zip
- fastqc_trim_html = ch_fastqc_trim_html
- fastqc_trim_zip = ch_fastqc_trim_zip
- trim_html = ch_trim_html
- trim_zip = ch_trim_zip
- trim_log = ch_trim_log
- trim_json = ch_trim_json
- trim_unpaired = ch_trim_unpaired
- umi_log = ch_umi_log
- umi_reads = ch_umi_reads
- bbsplit_stats = ch_bbsplit_stats
- sortmerna_log = ch_sortmerna_log
- ribodetector_log = ch_ribodetector_log
- seqkit_stats = ch_seqkit_stats
- bowtie2_log = ch_bowtie2_log
- bowtie2_index = ch_bowtie2_index
+ reads = ch_strand_inferred_fastq
+ trim_read_count = ch_trim_read_count
+ multiqc_files = ch_multiqc_files.transpose().map { _meta, file -> file }
+ lint_log_raw = ch_lint_log_raw
+ lint_log_trimmed = ch_lint_log_trimmed
+ lint_log_bbsplit = ch_lint_log_bbsplit
+ lint_log_ribo = ch_lint_log_ribo
+ fastqc_raw_html = ch_fastqc_raw_html
+ fastqc_raw_zip = ch_fastqc_raw_zip
+ fastqc_trim_html = ch_fastqc_trim_html
+ fastqc_trim_zip = ch_fastqc_trim_zip
+ trim_html = ch_trim_html
+ trim_zip = ch_trim_zip
+ trim_log = ch_trim_log
+ trim_json = ch_trim_json
+ trim_unpaired = ch_trim_unpaired
+ umi_log = ch_umi_log
+ umi_reads = ch_umi_reads
+ bbsplit_stats = ch_bbsplit_stats
+ sortmerna_log = ch_sortmerna_log
+ ribodetector_log = ch_ribodetector_log
+ seqkit_stats = ch_seqkit_stats
+ bowtie2_log = ch_bowtie2_log
+ bowtie2_index = ch_bowtie2_index
fastqc_filtered_html = ch_fastqc_filtered_html
fastqc_filtered_zip = ch_fastqc_filtered_zip
- seqkit_prefixed = ch_seqkit_prefixed
- seqkit_converted = ch_seqkit_converted
+ seqkit_prefixed = ch_seqkit_prefixed
+ seqkit_converted = ch_seqkit_converted
}
diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test
index 3f0ee1513dd5..09849096dfa4 100644
--- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test
+++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test
@@ -41,7 +41,6 @@ nextflow_function {
{ assert snapshot(function.result).match() }
)
}
-
}
test("Test Function getSalmonInferredStrandedness forward") {
@@ -77,7 +76,6 @@ nextflow_function {
{ assert snapshot(function.result).match() }
)
}
-
}
test("Test Function getSalmonInferredStrandedness reverse") {
@@ -113,6 +111,5 @@ nextflow_function {
{ assert snapshot(function.result).match() }
)
}
-
}
}
diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test
index 753b67d6785a..d3f9588efb57 100644
--- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test
@@ -123,10 +123,8 @@ nextflow_workflow {
pelines1.join('\n').md5(),
pelines2.join('\n').md5(),
processed_ribo_removal_lint_report,
- file(workflow.out.fastqc_filtered_html[0][1][0]).name,
- file(workflow.out.fastqc_filtered_html[0][1][1]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][0]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][1]).name,
+ workflow.out.fastqc_filtered_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_filtered_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
).match() }
)
}
@@ -213,10 +211,8 @@ nextflow_workflow {
pelines1.join('\n').md5(),
pelines2.join('\n').md5(),
processed_ribo_removal_lint_report.md5(),
- file(workflow.out.fastqc_filtered_html[0][1][0]).name,
- file(workflow.out.fastqc_filtered_html[0][1][1]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][0]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][1]).name,
+ workflow.out.fastqc_filtered_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_filtered_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
).match() }
)
}
@@ -301,10 +297,8 @@ nextflow_workflow {
pelines1.join('\n').md5(),
pelines2.join('\n').md5(),
processed_ribo_removal_lint_report.md5(),
- file(workflow.out.fastqc_filtered_html[0][1][0]).name,
- file(workflow.out.fastqc_filtered_html[0][1][1]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][0]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][1]).name,
+ workflow.out.fastqc_filtered_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_filtered_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
).match() }
)
}
@@ -395,10 +389,8 @@ nextflow_workflow {
pelines1.join('\n').md5(),
pelines2.join('\n').md5(),
processed_ribo_removal_lint_report.md5(),
- file(workflow.out.fastqc_filtered_html[0][1][0]).name,
- file(workflow.out.fastqc_filtered_html[0][1][1]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][0]).name,
- file(workflow.out.fastqc_filtered_zip[0][1][1]).name,
+ workflow.out.fastqc_filtered_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_filtered_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
).match() }
)
}
@@ -503,8 +495,8 @@ nextflow_workflow {
{ assert snapshot(
selines.join('\n').md5(),
processed_ribo_removal_lint_report.md5(),
- file(workflow.out.fastqc_filtered_html[0][1]).name,
- file(workflow.out.fastqc_filtered_zip[0][1]).name,
+ workflow.out.fastqc_filtered_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.fastqc_filtered_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
).match() }
)
}
diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap
index 69a3a21263ca..2392dfd19f7b 100644
--- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap
@@ -4,76 +4,96 @@
"427d190cd40caeff5e2bd1967a21facb",
"5d74b788577eb11cf8c858ca94e2f787",
"\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m fq-lint start\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m validating paired end reads\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m disabled validators: []\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m enabled single read validators: [\"[S003] NameValidator\", \"[S004] CompleteValidator\", \"[S002] AlphabetValidator\", \"[S001] PlusLineValidator\", \"[S005] ConsistentSeqQualValidator\", \"[S006] QualityStringValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m enabled paired read validators: [\"[P001] NamesValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m enabled special validators: [\"[S007] DuplicateNameValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m starting validation (pass 1)\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m read 1127 * 2 records\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m starting validation (pass 2)\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m read 1127 records\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m fq-lint end",
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip"
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ]
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-12T09:05:53.923664771"
+ "timestamp": "2026-02-12T15:07:59.122815005"
},
"homo_sapiens paired-end [fastq] fastp ribodetector": {
"content": [
"5f14496c2cc20412609a0005ac6d10c4",
"888d06ce2b2c67c8b8fc94eae65870ed",
"13bd489c0acd9f79cfa291e982c6ba21",
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip"
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ]
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-12T09:06:16.903127796"
+ "timestamp": "2026-02-12T15:08:26.494865291"
},
"homo_sapiens paired-end [fastq] trimgalore sortmerna": {
"content": [
"d4b38548c21fb1a703204a38df4f6577",
"546d6903d24642870c2ef7bdbc435758",
"42c4b902767edb12752797e908f66d6c",
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip"
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ]
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-12T09:06:33.867211398"
+ "timestamp": "2026-02-12T15:08:50.272644661"
},
"homo_sapiens paired-end [fastq] fastp bowtie2": {
"content": [
"e4b3f501156cf176093c712e7a1bc0e1",
"f79feea1f5d509b4bcfd0a637b5d8558",
"0a6ee69d1a42f5e38ad2d4dfe9faf5a6",
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip"
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ]
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-12T09:06:51.756578633"
+ "timestamp": "2026-02-12T15:09:14.037822812"
},
"homo_sapiens single-end [fastq] fastp bowtie2": {
"content": [
"b423f619ae31c22b2bf99bdcb89bf852",
"5c1e74518dd70e4f1506b4f64da7b5f3",
- "test_se_fastqc.html",
- "test_se_fastqc.zip"
+ [
+ "test_se_fastqc.html"
+ ],
+ [
+ "test_se_fastqc.zip"
+ ]
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-12T09:07:08.160495752"
+ "timestamp": "2026-02-12T15:09:36.85865527"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test b/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test
index 563ec899cffd..c02f40c5e748 100644
--- a/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test
@@ -228,14 +228,10 @@ nextflow_workflow {
{ assert snapshot(
path(workflow.out.reads[0][1][0]).linesGzip.size(),
path(workflow.out.reads[0][1][1]).linesGzip.size(),
- file(workflow.out.pre_stats_fastqc_html[0][1][0]).name,
- file(workflow.out.pre_stats_fastqc_html[0][1][1]).name,
- file(workflow.out.post_stats_fastqc_html[0][1][0]).name,
- file(workflow.out.post_stats_fastqc_html[0][1][1]).name,
- file(workflow.out.pre_stats_fastqc_zip[0][1][0]).name,
- file(workflow.out.pre_stats_fastqc_zip[0][1][1]).name,
- file(workflow.out.post_stats_fastqc_zip[0][1][0]).name,
- file(workflow.out.post_stats_fastqc_zip[0][1][1]).name,
+ workflow.out.pre_stats_fastqc_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.pre_stats_fastqc_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.post_stats_fastqc_html.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
+ workflow.out.post_stats_fastqc_zip.collect().flatten().findAll { !(it instanceof Map) && it.startsWith("/") }.collect { file(it).name },
path(workflow.out.clumpify_log[0][1]).readLines().size(),
workflow.out.versions.collect { path(it).yaml }
).match() }
diff --git a/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test.snap
index ef44fac6bd0a..7fd0007448cb 100644
--- a/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_shortreads_preprocess_qc/tests/main.nf.test.snap
@@ -139,14 +139,22 @@
"content": [
400,
400,
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.html",
- "test_2_fastqc.html",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip",
- "test_1_fastqc.zip",
- "test_2_fastqc.zip",
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
+ [
+ "test_1_fastqc.html",
+ "test_2_fastqc.html"
+ ],
+ [
+ "test_1_fastqc.zip",
+ "test_2_fastqc.zip"
+ ],
41,
[
{
@@ -178,9 +186,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-03T15:12:04.335584164"
+ "timestamp": "2026-02-11T10:41:33.298600818"
},
"sarscov2 - fastq - skip all - single_end": {
"content": [
diff --git a/subworkflows/nf-core/fastq_trim_fastp_fastqc/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_trim_fastp_fastqc/tests/main.nf.test.snap
index 331913ad6704..a1edc75ad7a3 100644
--- a/subworkflows/nf-core/fastq_trim_fastp_fastqc/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_trim_fastp_fastqc/tests/main.nf.test.snap
@@ -199,6 +199,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -208,6 +210,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -223,6 +227,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -232,6 +238,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -274,10 +282,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-10-29T12:30:36.850497"
+ "timestamp": "2026-02-10T19:26:04.97139095"
},
"sarscov2 paired-end [fastq] | skip_fastp": {
"content": [
@@ -390,6 +398,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -399,6 +409,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -408,6 +420,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -417,6 +431,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -426,6 +442,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -435,6 +453,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_RAW",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -444,6 +464,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_TRIM",
+ "fastqc",
"test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -453,6 +475,8 @@
"id": "test",
"single_end": false
},
+ "FASTQ_TRIM_FASTP_FASTQC:FASTQC_TRIM",
+ "fastqc",
"test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
@@ -508,8 +532,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2026-01-23T11:00:12.756883609"
+ "timestamp": "2026-02-10T19:25:50.450039777"
}
}
\ No newline at end of file