diff --git a/modules.json b/modules.json
index fbaa60c..8d81103 100644
--- a/modules.json
+++ b/modules.json
@@ -7,92 +7,92 @@
"nf-core": {
"bwa/aln": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["fastq_align_bwaaln", "modules"]
},
"bwa/index": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
},
"bwa/sampe": {
"branch": "master",
- "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220",
+ "git_sha": "1e2b7fb7106852388610c0360d234b0829eb980e",
"installed_by": ["fastq_align_bwaaln"]
},
"bwa/samse": {
"branch": "master",
- "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220",
+ "git_sha": "1e2b7fb7106852388610c0360d234b0829eb980e",
"installed_by": ["fastq_align_bwaaln"]
},
"cat/fastq": {
"branch": "master",
- "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e",
+ "git_sha": "02fd5bd7275abad27aad32d5c852e0a9b1b98882",
"installed_by": ["modules"]
},
"custom/dumpsoftwareversions": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93",
"installed_by": ["modules"]
},
"deeptools/bamcoverage": {
"branch": "master",
- "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
},
"fastqc": {
"branch": "master",
- "git_sha": "102cc9b709a6da9f7cee2373563ab1464fca9c0a",
+ "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c",
"installed_by": ["modules"]
},
"gunzip": {
"branch": "master",
- "git_sha": "e06548bfa36ee31869b81041879dd6b3a83b1d57",
+ "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208",
"installed_by": ["modules"]
},
"multiqc": {
"branch": "master",
- "git_sha": "a6e11ac655e744f7ebc724be669dd568ffdc0e80",
+ "git_sha": "9e71d8519dfbfc328c078bba14d4bd4c99e39a94",
"installed_by": ["modules"]
},
"picard/markduplicates": {
"branch": "master",
- "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1",
+ "git_sha": "ec833ac4c29db6005d18baccf3306f557c46b006",
"installed_by": ["bam_markduplicates_picard", "modules"]
},
"samtools/faidx": {
"branch": "master",
- "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe",
+ "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c",
"installed_by": ["modules"]
},
"samtools/flagstat": {
"branch": "master",
- "git_sha": "570ec5bcfe19c49e16c9ca35a7a116563af6cc1c",
+ "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c",
"installed_by": ["bam_stats_samtools"]
},
"samtools/idxstats": {
"branch": "master",
- "git_sha": "e662ab16e0c11f1e62983e21de9871f59371a639",
+ "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c",
"installed_by": ["bam_stats_samtools"]
},
"samtools/index": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c",
"installed_by": ["bam_markduplicates_picard", "fastq_align_bwaaln"]
},
"samtools/stats": {
"branch": "master",
- "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1",
+ "git_sha": "ec833ac4c29db6005d18baccf3306f557c46b006",
"installed_by": ["bam_stats_samtools"]
},
"trimmomatic": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
},
"untar": {
"branch": "master",
- "git_sha": "d0b4fc03af52a1cc8c6fb4493b921b57352b1dd8",
+ "git_sha": "e719354ba77df0a1bd310836aa2039b45c29d620",
"installed_by": ["modules"]
}
}
@@ -101,17 +101,17 @@
"nf-core": {
"bam_markduplicates_picard": {
"branch": "master",
- "git_sha": "dedc0e31087f3306101c38835d051bf49789445a",
+ "git_sha": "0c38be7e652a0b2f3a37681ee4c0dbdf85677647",
"installed_by": ["subworkflows"]
},
"bam_stats_samtools": {
"branch": "master",
- "git_sha": "dedc0e31087f3306101c38835d051bf49789445a",
+ "git_sha": "0c38be7e652a0b2f3a37681ee4c0dbdf85677647",
"installed_by": ["bam_markduplicates_picard"]
},
"fastq_align_bwaaln": {
"branch": "master",
- "git_sha": "dedc0e31087f3306101c38835d051bf49789445a",
+ "git_sha": "cfd937a668919d948f6fcbf4218e79de50c2f36f",
"installed_by": ["subworkflows"]
}
}
diff --git a/modules/nf-core/bwa/aln/environment.yml b/modules/nf-core/bwa/aln/environment.yml
new file mode 100644
index 0000000..c63d9e1
--- /dev/null
+++ b/modules/nf-core/bwa/aln/environment.yml
@@ -0,0 +1,7 @@
+name: bwa_aln
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::bwa=0.7.17
diff --git a/modules/nf-core/bwa/aln/main.nf b/modules/nf-core/bwa/aln/main.nf
index 012e029..a537797 100644
--- a/modules/nf-core/bwa/aln/main.nf
+++ b/modules/nf-core/bwa/aln/main.nf
@@ -2,7 +2,7 @@ process BWA_ALN {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::bwa=0.7.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/bwa:0.7.17--h5bf99c6_8' :
'biocontainers/bwa:0.7.17--h5bf99c6_8' }"
diff --git a/modules/nf-core/bwa/aln/meta.yml b/modules/nf-core/bwa/aln/meta.yml
index f4cc8f3..08eb538 100644
--- a/modules/nf-core/bwa/aln/meta.yml
+++ b/modules/nf-core/bwa/aln/meta.yml
@@ -18,7 +18,6 @@ tools:
documentation: http://bio-bwa.sourceforge.net/
doi: "10.1093/bioinformatics/btp324"
licence: ["GPL-3.0-or-later"]
-
input:
- meta:
type: map
@@ -39,7 +38,6 @@ input:
type: file
description: BWA genome index files
pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}"
-
output:
- meta:
type: map
@@ -54,6 +52,7 @@ output:
type: file
description: Single or paired SA coordinate files
pattern: "*.sai"
-
authors:
- "@jfy133"
+maintainers:
+ - "@jfy133"
diff --git a/modules/nf-core/bwa/aln/tests/main.nf.test b/modules/nf-core/bwa/aln/tests/main.nf.test
new file mode 100644
index 0000000..5d3d728
--- /dev/null
+++ b/modules/nf-core/bwa/aln/tests/main.nf.test
@@ -0,0 +1,90 @@
+nextflow_process {
+
+ name "Test Process BWA_ALN"
+ tag "modules_nfcore"
+ tag "modules"
+ tag "bwa"
+ tag "bwa/aln"
+ script "../main.nf"
+ process "BWA_ALN"
+
+ test("Single-End") {
+
+ setup {
+ run("BWA_INDEX") {
+ script "../../index/main.nf"
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+ }
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+ test("Paired-End") {
+
+ setup {
+ run("BWA_INDEX") {
+ script "../../index/main.nf"
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+ }
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/bwa/aln/tests/main.nf.test.snap b/modules/nf-core/bwa/aln/tests/main.nf.test.snap
new file mode 100644
index 0000000..d9bf16a
--- /dev/null
+++ b/modules/nf-core/bwa/aln/tests/main.nf.test.snap
@@ -0,0 +1,70 @@
+{
+ "Single-End": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.sai:md5,aaaf39b6814c96ca1a5eacc662adf926"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,8b90409bc607b4179956d9c4217eb524"
+ ],
+ "sai": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.sai:md5,aaaf39b6814c96ca1a5eacc662adf926"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,8b90409bc607b4179956d9c4217eb524"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T11:14:33.203898589"
+ },
+ "Paired-End": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.1.sai:md5,aaaf39b6814c96ca1a5eacc662adf926",
+ "test.2.sai:md5,b4f185d9b4cb256dd5c377070a536124"
+ ]
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,8b90409bc607b4179956d9c4217eb524"
+ ],
+ "sai": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.1.sai:md5,aaaf39b6814c96ca1a5eacc662adf926",
+ "test.2.sai:md5,b4f185d9b4cb256dd5c377070a536124"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,8b90409bc607b4179956d9c4217eb524"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T11:14:39.443861611"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/aln/tests/tags.yml b/modules/nf-core/bwa/aln/tests/tags.yml
new file mode 100644
index 0000000..1258ff4
--- /dev/null
+++ b/modules/nf-core/bwa/aln/tests/tags.yml
@@ -0,0 +1,3 @@
+bwa/aln:
+ - modules/nf-core/bwa/aln/**
+ - modules/nf-core/bwa/index/**
diff --git a/modules/nf-core/bwa/index/environment.yml b/modules/nf-core/bwa/index/environment.yml
new file mode 100644
index 0000000..5d3cb32
--- /dev/null
+++ b/modules/nf-core/bwa/index/environment.yml
@@ -0,0 +1,7 @@
+name: bwa_index
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::bwa=0.7.17
diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf
index 8d2e56d..24b5a2e 100644
--- a/modules/nf-core/bwa/index/main.nf
+++ b/modules/nf-core/bwa/index/main.nf
@@ -2,7 +2,7 @@ process BWA_INDEX {
tag "$fasta"
label 'process_single'
- conda "bioconda::bwa=0.7.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/bwa:0.7.17--hed695b0_7' :
'biocontainers/bwa:0.7.17--hed695b0_7' }"
@@ -18,13 +18,14 @@ process BWA_INDEX {
task.ext.when == null || task.ext.when
script:
- def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${fasta.baseName}"
+ def args = task.ext.args ?: ''
"""
mkdir bwa
bwa \\
index \\
$args \\
- -p bwa/${fasta.baseName} \\
+ -p bwa/${prefix} \\
$fasta
cat <<-END_VERSIONS > versions.yml
@@ -34,14 +35,15 @@ process BWA_INDEX {
"""
stub:
+ def prefix = task.ext.prefix ?: "${fasta.baseName}"
"""
mkdir bwa
- touch bwa/genome.amb
- touch bwa/genome.ann
- touch bwa/genome.bwt
- touch bwa/genome.pac
- touch bwa/genome.sa
+ touch bwa/${prefix}.amb
+ touch bwa/${prefix}.ann
+ touch bwa/${prefix}.bwt
+ touch bwa/${prefix}.pac
+ touch bwa/${prefix}.sa
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml
index 2c6cfcd..730628d 100644
--- a/modules/nf-core/bwa/index/meta.yml
+++ b/modules/nf-core/bwa/index/meta.yml
@@ -40,3 +40,6 @@ output:
authors:
- "@drpatelh"
- "@maxulysse"
+maintainers:
+ - "@drpatelh"
+ - "@maxulysse"
diff --git a/modules/nf-core/bwa/index/tests/main.nf.test b/modules/nf-core/bwa/index/tests/main.nf.test
new file mode 100644
index 0000000..5fc8d49
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/main.nf.test
@@ -0,0 +1,33 @@
+nextflow_process {
+
+ name "Test Process BWA_INDEX"
+ tag "modules_nfcore"
+ tag "modules"
+ tag "bwa"
+ tag "bwa/index"
+ script "../main.nf"
+ process "BWA_INDEX"
+
+ test("BWA index") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/bwa/index/tests/main.nf.test.snap b/modules/nf-core/bwa/index/tests/main.nf.test.snap
new file mode 100644
index 0000000..e51ad5b
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/main.nf.test.snap
@@ -0,0 +1,43 @@
+{
+ "BWA index": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ [
+ "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e",
+ "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567",
+ "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da",
+ "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66",
+ "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1"
+ ]
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f"
+ ],
+ "index": [
+ [
+ {
+ "id": "test"
+ },
+ [
+ "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e",
+ "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567",
+ "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da",
+ "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66",
+ "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-17T17:20:20.180927714"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/index/tests/tags.yml b/modules/nf-core/bwa/index/tests/tags.yml
new file mode 100644
index 0000000..28bb483
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/tags.yml
@@ -0,0 +1,2 @@
+bwa/index:
+ - modules/nf-core/bwa/index/**
diff --git a/modules/nf-core/bwa/sampe/environment.yml b/modules/nf-core/bwa/sampe/environment.yml
new file mode 100644
index 0000000..63bbd0b
--- /dev/null
+++ b/modules/nf-core/bwa/sampe/environment.yml
@@ -0,0 +1,9 @@
+name: bwa_sampe
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::bwa=0.7.17
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/bwa/sampe/main.nf b/modules/nf-core/bwa/sampe/main.nf
index 45bfffb..8b0f51d 100644
--- a/modules/nf-core/bwa/sampe/main.nf
+++ b/modules/nf-core/bwa/sampe/main.nf
@@ -2,10 +2,10 @@ process BWA_SAMPE {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::bwa=0.7.17 bioconda::samtools=1.16.1"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:219b6c272b25e7e642ae3ff0bf0c5c81a5135ab4-0' :
- 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:219b6c272b25e7e642ae3ff0bf0c5c81a5135ab4-0' }"
+ 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' :
+ 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' }"
input:
tuple val(meta), path(reads), path(sai)
diff --git a/modules/nf-core/bwa/sampe/meta.yml b/modules/nf-core/bwa/sampe/meta.yml
index 0cefb96..48a0737 100644
--- a/modules/nf-core/bwa/sampe/meta.yml
+++ b/modules/nf-core/bwa/sampe/meta.yml
@@ -19,7 +19,6 @@ tools:
documentation: http://bio-bwa.sourceforge.net/
doi: "10.1093/bioinformatics/btp324"
licence: ["GPL-3.0-or-later"]
-
input:
- meta:
type: map
@@ -43,7 +42,6 @@ input:
type: directory
description: Directory containing BWA index files (amb,ann,bwt,pac,sa) from BWA_INDEX
pattern: "bwa/"
-
output:
- meta:
type: map
@@ -58,6 +56,7 @@ output:
type: file
description: BAM file
pattern: "*.bam"
-
authors:
- "@jfy133"
+maintainers:
+ - "@jfy133"
diff --git a/modules/nf-core/bwa/sampe/tests/main.nf.test b/modules/nf-core/bwa/sampe/tests/main.nf.test
new file mode 100644
index 0000000..8f84d8a
--- /dev/null
+++ b/modules/nf-core/bwa/sampe/tests/main.nf.test
@@ -0,0 +1,73 @@
+nextflow_process {
+
+ name "Test Process BWA_SAMPE"
+ tag "modules_nfcore"
+ tag "modules"
+ tag "bwa"
+ tag "bwa/sampe"
+ tag "bwa/aln"
+ tag "bwa/index"
+ script "../main.nf"
+ process "BWA_SAMPE"
+
+ test("SamPE") {
+
+ setup {
+ run("BWA_INDEX") {
+ script "../../index/main.nf"
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+ run("BWA_ALN") {
+ script "../../aln/main.nf"
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+ }
+
+ when {
+ process {
+ """
+ input[0] = Channel
+ .fromList(
+ [
+ [ id:'test', single_end:false ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ )
+ .collect()
+ .join(BWA_ALN.out.sai)
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/bwa/sampe/tests/main.nf.test.snap b/modules/nf-core/bwa/sampe/tests/main.nf.test.snap
new file mode 100644
index 0000000..43309fe
--- /dev/null
+++ b/modules/nf-core/bwa/sampe/tests/main.nf.test.snap
@@ -0,0 +1,21 @@
+{
+ "SamPE": {
+ "content": [
+ {
+ "0": [
+
+ ],
+ "1": [
+
+ ],
+ "bam": [
+
+ ],
+ "versions": [
+
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T11:35:44.254349331"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/sampe/tests/tags.yml b/modules/nf-core/bwa/sampe/tests/tags.yml
new file mode 100644
index 0000000..dc65276
--- /dev/null
+++ b/modules/nf-core/bwa/sampe/tests/tags.yml
@@ -0,0 +1,4 @@
+bwa/sampe:
+ - modules/nf-core/bwa/aln/**
+ - modules/nf-core/bwa/index/**
+ - modules/nf-core/bwa/sampe/**
diff --git a/modules/nf-core/bwa/samse/environment.yml b/modules/nf-core/bwa/samse/environment.yml
new file mode 100644
index 0000000..d427a73
--- /dev/null
+++ b/modules/nf-core/bwa/samse/environment.yml
@@ -0,0 +1,9 @@
+name: bwa_samse
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::bwa=0.7.17
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/bwa/samse/main.nf b/modules/nf-core/bwa/samse/main.nf
index 38752ed..8de45bf 100644
--- a/modules/nf-core/bwa/samse/main.nf
+++ b/modules/nf-core/bwa/samse/main.nf
@@ -2,10 +2,10 @@ process BWA_SAMSE {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::bwa=0.7.17 bioconda::samtools=1.16.1"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:219b6c272b25e7e642ae3ff0bf0c5c81a5135ab4-0' :
- 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:219b6c272b25e7e642ae3ff0bf0c5c81a5135ab4-0' }"
+ 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' :
+ 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' }"
input:
tuple val(meta), path(reads), path(sai)
diff --git a/modules/nf-core/bwa/samse/meta.yml b/modules/nf-core/bwa/samse/meta.yml
index 1deab21..a366a24 100644
--- a/modules/nf-core/bwa/samse/meta.yml
+++ b/modules/nf-core/bwa/samse/meta.yml
@@ -10,7 +10,6 @@ keywords:
- map
- sam
- bam
-
tools:
- bwa:
description: |
@@ -20,7 +19,6 @@ tools:
documentation: http://bio-bwa.sourceforge.net/
doi: "10.1093/bioinformatics/btp324"
licence: ["GPL-3.0-or-later"]
-
input:
- meta:
type: map
@@ -44,7 +42,6 @@ input:
type: directory
description: Directory containing BWA index files (amb,ann,bwt,pac,sa) from BWA_INDEX
pattern: "bwa/"
-
output:
- meta:
type: map
@@ -59,6 +56,7 @@ output:
type: file
description: BAM file
pattern: "*.bam"
-
authors:
- "@jfy133"
+maintainers:
+ - "@jfy133"
diff --git a/modules/nf-core/bwa/samse/tests/main.nf.test b/modules/nf-core/bwa/samse/tests/main.nf.test
new file mode 100644
index 0000000..dcf8614
--- /dev/null
+++ b/modules/nf-core/bwa/samse/tests/main.nf.test
@@ -0,0 +1,67 @@
+nextflow_process {
+
+ name "Test Process BWA_SAMSE"
+ tag "modules_nfcore"
+ tag "modules"
+ tag "bwa"
+ tag "bwa/samse"
+ tag "bwa/aln"
+ tag "bwa/index"
+ script "../main.nf"
+ process "BWA_SAMSE"
+
+ test("SamSE") {
+
+ setup {
+ run("BWA_INDEX") {
+ script "../../index/main.nf"
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+ run("BWA_ALN") {
+ script "../../aln/main.nf"
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+ }
+
+ when {
+ process {
+ """
+ input[0] = Channel
+ .fromList(
+ [
+ [ id:'test', single_end:false ],
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ )
+ .collect()
+ .join(BWA_ALN.out.sai)
+ input[1] = BWA_INDEX.out.index
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/bwa/samse/tests/main.nf.test.snap b/modules/nf-core/bwa/samse/tests/main.nf.test.snap
new file mode 100644
index 0000000..8526b40
--- /dev/null
+++ b/modules/nf-core/bwa/samse/tests/main.nf.test.snap
@@ -0,0 +1,21 @@
+{
+ "SamSE": {
+ "content": [
+ {
+ "0": [
+
+ ],
+ "1": [
+
+ ],
+ "bam": [
+
+ ],
+ "versions": [
+
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T11:34:27.527894872"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/samse/tests/tags.yml b/modules/nf-core/bwa/samse/tests/tags.yml
new file mode 100644
index 0000000..9abcbd4
--- /dev/null
+++ b/modules/nf-core/bwa/samse/tests/tags.yml
@@ -0,0 +1,4 @@
+bwa/samse:
+ - modules/nf-core/bwa/aln/**
+ - modules/nf-core/bwa/index/**
+ - modules/nf-core/bwa/samse/**
diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml
new file mode 100644
index 0000000..bff93ad
--- /dev/null
+++ b/modules/nf-core/cat/fastq/environment.yml
@@ -0,0 +1,7 @@
+name: cat_fastq
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - conda-forge::sed=4.7
diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf
index 5021e6f..3d96378 100644
--- a/modules/nf-core/cat/fastq/main.nf
+++ b/modules/nf-core/cat/fastq/main.nf
@@ -2,7 +2,7 @@ process CAT_FASTQ {
tag "$meta.id"
label 'process_single'
- conda "conda-forge::sed=4.7"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/ubuntu:20.04' :
'nf-core/ubuntu:20.04' }"
diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml
index 8a39e30..db4ac3c 100644
--- a/modules/nf-core/cat/fastq/meta.yml
+++ b/modules/nf-core/cat/fastq/meta.yml
@@ -34,7 +34,9 @@ output:
type: file
description: File containing software versions
pattern: "versions.yml"
-
authors:
- "@joseespinosa"
- "@drpatelh"
+maintainers:
+ - "@joseespinosa"
+ - "@drpatelh"
diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test
new file mode 100644
index 0000000..dab2e14
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/main.nf.test
@@ -0,0 +1,138 @@
+nextflow_process {
+
+ name "Test Process CAT_FASTQ"
+ script "../main.nf"
+ process "CAT_FASTQ"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "cat"
+ tag "cat/fastq"
+
+ test("test_cat_fastq_single_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("test_cat_fastq_paired_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("test_cat_fastq_single_end_same_name") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("test_cat_fastq_paired_end_same_name") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("test_cat_fastq_single_end_single_file") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap
new file mode 100644
index 0000000..43dfe28
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap
@@ -0,0 +1,169 @@
+{
+ "test_cat_fastq_single_end": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ]
+ }
+ ],
+ "timestamp": "2024-01-17T17:30:39.816981"
+ },
+ "test_cat_fastq_single_end_same_name": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ]
+ }
+ ],
+ "timestamp": "2024-01-17T17:32:35.229332"
+ },
+ "test_cat_fastq_single_end_single_file": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ]
+ }
+ ],
+ "timestamp": "2024-01-17T17:34:00.058829"
+ },
+ "test_cat_fastq_paired_end_same_name": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22",
+ "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5"
+ ]
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22",
+ "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ]
+ }
+ ],
+ "timestamp": "2024-01-17T17:33:33.031555"
+ },
+ "test_cat_fastq_paired_end": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22",
+ "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5"
+ ]
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22",
+ "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,d42d6e24d67004608495883e00bd501b"
+ ]
+ }
+ ],
+ "timestamp": "2024-01-17T17:32:02.270935"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml
new file mode 100644
index 0000000..6ac4361
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/tags.yml
@@ -0,0 +1,2 @@
+cat/fastq:
+ - modules/nf-core/cat/fastq/**
diff --git a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/functions.nf b/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/functions.nf
deleted file mode 100644
index 85628ee..0000000
--- a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/functions.nf
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// Utility functions used in nf-core DSL2 module files
-//
-
-//
-// Extract name of software tool from process name using $task.process
-//
-def getSoftwareName(task_process) {
- return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
-}
-
-//
-// Extract name of module from process name using $task.process
-//
-def getProcessName(task_process) {
- return task_process.tokenize(':')[-1]
-}
-
-//
-// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
-//
-def initOptions(Map args) {
- def Map options = [:]
- options.args = args.args ?: ''
- options.args2 = args.args2 ?: ''
- options.args3 = args.args3 ?: ''
- options.publish_by_meta = args.publish_by_meta ?: []
- options.publish_dir = args.publish_dir ?: ''
- options.publish_files = args.publish_files
- options.suffix = args.suffix ?: ''
- return options
-}
-
-//
-// Tidy up and join elements of a list to return a path string
-//
-def getPathFromList(path_list) {
- def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
- paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
- return paths.join('/')
-}
-
-//
-// Function to save/publish module results
-//
-def saveFiles(Map args) {
- def ioptions = initOptions(args.options)
- def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
-
- // Do not publish versions.yml unless running from pytest workflow
- if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) {
- return null
- }
- if (ioptions.publish_by_meta) {
- def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
- for (key in key_list) {
- if (args.meta && key instanceof String) {
- def path = key
- if (args.meta.containsKey(key)) {
- path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
- }
- path = path instanceof String ? path : ''
- path_list.add(path)
- }
- }
- }
- if (ioptions.publish_files instanceof Map) {
- for (ext in ioptions.publish_files) {
- if (args.filename.endsWith(ext.key)) {
- def ext_list = path_list.collect()
- ext_list.add(ext.value)
- return "${getPathFromList(ext_list)}/$args.filename"
- }
- }
- } else if (ioptions.publish_files == null) {
- return "${getPathFromList(path_list)}/$args.filename"
- }
-}
diff --git a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/main.nf
deleted file mode 100644
index faf2073..0000000
--- a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/main.nf
+++ /dev/null
@@ -1,106 +0,0 @@
-// Import generic module functions
-include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions'
-
-params.options = [:]
-options = initOptions(params.options)
-
-process CUSTOM_DUMPSOFTWAREVERSIONS {
- label 'process_low'
- publishDir "${params.outdir}",
- mode: params.publish_dir_mode,
- saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) }
-
- // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
- conda (params.enable_conda ? "bioconda::multiqc=1.11" : null)
- if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
- container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0"
- } else {
- container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0"
- }
-
- input:
- path versions
-
- output:
- path "software_versions.yml" , emit: yml
- path "software_versions_mqc.yml", emit: mqc_yml
- path "versions.yml" , emit: versions
-
- script:
- """
- #!/usr/bin/env python
-
- import yaml
- import platform
- from textwrap import dedent
-
- def _make_versions_html(versions):
- html = [
- dedent(
- '''\\
-
-
-
-
- Process Name |
- Software |
- Version |
-
-
- '''
- )
- ]
- for process, tmp_versions in sorted(versions.items()):
- html.append("")
- for i, (tool, version) in enumerate(sorted(tmp_versions.items())):
- html.append(
- dedent(
- f'''\\
-
- {process if (i == 0) else ''} |
- {tool} |
- {version} |
-
- '''
- )
- )
- html.append("")
- html.append("
")
- return "\\n".join(html)
-
- module_versions = {}
- module_versions["${getProcessName(task.process)}"] = {
- 'python': platform.python_version(),
- 'yaml': yaml.__version__
- }
-
- with open("$versions") as f:
- workflow_versions = yaml.load(f, Loader=yaml.BaseLoader) | module_versions
-
- workflow_versions["Workflow"] = {
- "Nextflow": "$workflow.nextflow.version",
- "$workflow.manifest.name": "$workflow.manifest.version"
- }
-
- versions_mqc = {
- 'id': 'software_versions',
- 'section_name': '${workflow.manifest.name} Software Versions',
- 'section_href': 'https://github.com/${workflow.manifest.name}',
- 'plot_type': 'html',
- 'description': 'are collected at run time from the software output.',
- 'data': _make_versions_html(workflow_versions)
- }
-
- with open("software_versions.yml", 'w') as f:
- yaml.dump(workflow_versions, f, default_flow_style=False)
- with open("software_versions_mqc.yml", 'w') as f:
- yaml.dump(versions_mqc, f, default_flow_style=False)
-
- with open('versions.yml', 'w') as f:
- yaml.dump(module_versions, f, default_flow_style=False)
- """
-}
diff --git a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/meta.yml
deleted file mode 100644
index 8d4a6ed..0000000
--- a/modules/nf-core/custom/dumpsoftwareversions/dumpsoftwareversions/meta.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: custom_dumpsoftwareversions
-description: Custom module used to dump software versions within the nf-core pipeline template
-keywords:
- - custom
- - version
-tools:
- - custom:
- description: Custom module used to dump software versions within the nf-core pipeline template
- homepage: https://github.com/nf-core/tools
- documentation: https://github.com/nf-core/tools
-
-input:
- - versions:
- type: file
- description: YML file containing software versions
- pattern: "*.yml"
-
-output:
- - yml:
- type: file
- description: Standard YML file containing software versions
- pattern: "software_versions.yml"
- - mqc_yml:
- type: file
- description: MultiQC custom content YML file containing software versions
- pattern: "software_versions_mqc.yml"
- - versions:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
-
-authors:
- - "@drpatelh"
diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml
new file mode 100644
index 0000000..9b3272b
--- /dev/null
+++ b/modules/nf-core/custom/dumpsoftwareversions/environment.yml
@@ -0,0 +1,7 @@
+name: custom_dumpsoftwareversions
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::multiqc=1.19
diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf
index ebc8727..f218761 100644
--- a/modules/nf-core/custom/dumpsoftwareversions/main.nf
+++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf
@@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS {
label 'process_single'
// Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
- conda "bioconda::multiqc=1.14"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.19--pyhdfd78af_0' }"
input:
path versions
diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml
index c32657d..5f15a5f 100644
--- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml
+++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml
@@ -1,4 +1,4 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: custom_dumpsoftwareversions
description: Custom module used to dump software versions within the nf-core pipeline template
keywords:
@@ -16,7 +16,6 @@ input:
type: file
description: YML file containing software versions
pattern: "*.yml"
-
output:
- yml:
type: file
@@ -30,7 +29,9 @@ output:
type: file
description: File containing software versions
pattern: "versions.yml"
-
authors:
- "@drpatelh"
- "@grst"
+maintainers:
+ - "@drpatelh"
+ - "@grst"
diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py
index e55b8d4..da03340 100755
--- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py
+++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py
@@ -4,11 +4,10 @@
"""Provide functions to merge multiple versions.yml files."""
+import yaml
import platform
from textwrap import dedent
-import yaml
-
def _make_versions_html(versions):
"""Generate a tabular HTML output of all versions for MultiQC."""
diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test
new file mode 100644
index 0000000..b1e1630
--- /dev/null
+++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test
@@ -0,0 +1,43 @@
+nextflow_process {
+
+ name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS"
+ script "../main.nf"
+ process "CUSTOM_DUMPSOFTWAREVERSIONS"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "custom"
+ tag "dumpsoftwareversions"
+ tag "custom/dumpsoftwareversions"
+
+ test("Should run without failures") {
+ when {
+ process {
+ """
+ def tool1_version = '''
+ TOOL1:
+ tool1: 0.11.9
+ '''.stripIndent()
+
+ def tool2_version = '''
+ TOOL2:
+ tool2: 1.9
+ '''.stripIndent()
+
+ input[0] = Channel.of(tool1_version, tool2_version).collectFile()
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.versions,
+ file(process.out.mqc_yml[0]).readLines()[0..10],
+ file(process.out.yml[0]).readLines()[0..7]
+ ).match()
+ }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap
new file mode 100644
index 0000000..5f59a93
--- /dev/null
+++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap
@@ -0,0 +1,33 @@
+{
+ "Should run without failures": {
+ "content": [
+ [
+ "versions.yml:md5,76d454d92244589d32455833f7c1ba6d"
+ ],
+ [
+ "data: \"\\n\\n \\n \\n Process Name | \\n \\",
+ " \\ Software | \\n Version | \\n
\\n \\n\\",
+ " \\n\\n\\n CUSTOM_DUMPSOFTWAREVERSIONS | \\n python | \\n\\",
+ " \\ 3.11.7 | \\n
\\n\\n\\n | \\n \\",
+ " \\ yaml | \\n 5.4.1 | \\n
\\n\\n\\n\\",
+ " \\n\\n TOOL1 | \\n tool1 | \\n\\",
+ " \\ 0.11.9 | \\n
\\n\\n\\n\\n\\n TOOL2 | \\n\\",
+ " \\ tool2 | \\n 1.9 | \\n
\\n\\n\\n\\",
+ " \\n\\n Workflow | \\n Nextflow | \\n\\"
+ ],
+ [
+ "CUSTOM_DUMPSOFTWAREVERSIONS:",
+ " python: 3.11.7",
+ " yaml: 5.4.1",
+ "TOOL1:",
+ " tool1: 0.11.9",
+ "TOOL2:",
+ " tool2: '1.9'",
+ "Workflow:"
+ ]
+ ],
+ "timestamp": "2024-01-09T23:01:18.710682"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml
new file mode 100644
index 0000000..405aa24
--- /dev/null
+++ b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml
@@ -0,0 +1,2 @@
+custom/dumpsoftwareversions:
+ - modules/nf-core/custom/dumpsoftwareversions/**
diff --git a/modules/nf-core/deeptools/bamcoverage/environment.yml b/modules/nf-core/deeptools/bamcoverage/environment.yml
new file mode 100644
index 0000000..345ac70
--- /dev/null
+++ b/modules/nf-core/deeptools/bamcoverage/environment.yml
@@ -0,0 +1,8 @@
+name: deeptools_bamcoverage
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::deeptools=3.5.1
+ - bioconda::samtools=1.16.1
diff --git a/modules/nf-core/deeptools/bamcoverage/main.nf b/modules/nf-core/deeptools/bamcoverage/main.nf
index 680fc5b..8aff5d6 100644
--- a/modules/nf-core/deeptools/bamcoverage/main.nf
+++ b/modules/nf-core/deeptools/bamcoverage/main.nf
@@ -2,7 +2,7 @@ process DEEPTOOLS_BAMCOVERAGE {
tag "$meta.id"
label 'process_low'
- conda "bioconda::deeptools=3.5.1 bioconda::samtools=1.16.1"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:62d1ebe2d3a2a9d1a7ad31e0b902983fa7c25fa7-0':
'biocontainers/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:62d1ebe2d3a2a9d1a7ad31e0b902983fa7c25fa7-0' }"
diff --git a/modules/nf-core/deeptools/bamcoverage/meta.yml b/modules/nf-core/deeptools/bamcoverage/meta.yml
index 769592c..e8043e9 100644
--- a/modules/nf-core/deeptools/bamcoverage/meta.yml
+++ b/modules/nf-core/deeptools/bamcoverage/meta.yml
@@ -12,7 +12,6 @@ tools:
tool_dev_url: https://github.com/deeptools/deepTools/
doi: "10.1093/nar/gkw257"
licence: ["GPL v3"]
-
input:
- meta:
type: map
@@ -35,7 +34,6 @@ input:
type: file
description: Index of the reference file (optional, but recommended)
pattern: "*.{fai}"
-
output:
- meta:
type: map
@@ -54,7 +52,9 @@ output:
type: file
description: Bedgraph file
pattern: "*.bedgraph"
-
authors:
- "@FriederikeHanssen"
- "@SusiJo"
+maintainers:
+ - "@FriederikeHanssen"
+ - "@SusiJo"
diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml
new file mode 100644
index 0000000..1787b38
--- /dev/null
+++ b/modules/nf-core/fastqc/environment.yml
@@ -0,0 +1,7 @@
+name: fastqc
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::fastqc=0.12.1
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index 67209f7..9e19a74 100644
--- a/modules/nf-core/fastqc/main.nf
+++ b/modules/nf-core/fastqc/main.nf
@@ -2,7 +2,7 @@ process FASTQC {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::fastqc=0.12.1"
+ 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' }"
@@ -37,7 +37,7 @@ process FASTQC {
cat <<-END_VERSIONS > versions.yml
"${task.process}":
- fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+ fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
END_VERSIONS
"""
@@ -49,7 +49,7 @@ process FASTQC {
cat <<-END_VERSIONS > versions.yml
"${task.process}":
- fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+ fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
END_VERSIONS
"""
}
diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml
index 4da5bb5..ee5507e 100644
--- a/modules/nf-core/fastqc/meta.yml
+++ b/modules/nf-core/fastqc/meta.yml
@@ -50,3 +50,8 @@ authors:
- "@grst"
- "@ewels"
- "@FelixKrueger"
+maintainers:
+ - "@drpatelh"
+ - "@grst"
+ - "@ewels"
+ - "@FelixKrueger"
diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test
index badb671..70edae4 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test
+++ b/modules/nf-core/fastqc/tests/main.nf.test
@@ -1,25 +1,22 @@
nextflow_process {
name "Test Process FASTQC"
- script "modules/nf-core/fastqc/main.nf"
+ script "../main.nf"
process "FASTQC"
- tag "fastqc"
+
+ tag "modules"
tag "modules_nfcore"
+ tag "fastqc"
- test("Single-Read") {
+ test("sarscov2 single-end [fastq]") {
when {
- params {
- outdir = "$outputDir"
- }
process {
"""
- input[0] = [
+ input[0] = Channel.of([
[ id: 'test', single_end:true ],
- [
- file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
- ]
- ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ ])
"""
}
}
@@ -27,14 +24,189 @@ nextflow_process {
then {
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.get(0).get(1) ==~ ".*/test_fastqc.html" },
- { assert path(process.out.html.get(0).get(1)).getText().contains("
File type | Conventional base calls |
") },
- { assert snapshot(process.out.versions).match("versions") },
- { assert process.out.zip.get(0).get(1) ==~ ".*/test_fastqc.zip" }
+
+ { 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(process.out.versions).match("fastqc_versions_single") }
+ )
+ }
+ }
+
+ test("sarscov2 paired-end [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ ])
+ """
+ }
+ }
+
+ then {
+ 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(process.out.versions).match("fastqc_versions_paired") }
)
}
}
+
+ test("sarscov2 interleaved [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ 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(process.out.versions).match("fastqc_versions_interleaved") }
+ )
+ }
+ }
+
+ test("sarscov2 paired-end [bam]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ 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(process.out.versions).match("fastqc_versions_bam") }
+ )
+ }
+ }
+
+ test("sarscov2 multiple [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ]
+ ])
+ """
+ }
+ }
+
+ then {
+ 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(process.out.versions).match("fastqc_versions_multiple") }
+ )
+ }
+ }
+
+ test("sarscov2 custom_prefix") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'mysample', single_end:true ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ 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(process.out.versions).match("fastqc_versions_custom_prefix") }
+ )
+ }
+ }
+
+ test("sarscov2 single-end [fastq] - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id: 'test', single_end:true ],
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.html.collect { file(it[1]).getName() } +
+ process.out.zip.collect { file(it[1]).getName() } +
+ process.out.versions ).match("fastqc_stub") }
+ )
+ }
+ }
+
}
diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap
index 636a32c..86f7c31 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test.snap
+++ b/modules/nf-core/fastqc/tests/main.nf.test.snap
@@ -1,10 +1,88 @@
{
- "versions": {
+ "fastqc_versions_interleaved": {
"content": [
[
"versions.yml:md5,e1cc25ca8af856014824abd842e93978"
]
],
- "timestamp": "2023-10-09T23:40:54+0000"
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:40:07.293713"
+ },
+ "fastqc_stub": {
+ "content": [
+ [
+ "test.html",
+ "test.zip",
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:31:01.425198"
+ },
+ "fastqc_versions_multiple": {
+ "content": [
+ [
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:40:55.797907"
+ },
+ "fastqc_versions_bam": {
+ "content": [
+ [
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:40:26.795862"
+ },
+ "fastqc_versions_single": {
+ "content": [
+ [
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:39:27.043675"
+ },
+ "fastqc_versions_paired": {
+ "content": [
+ [
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:39:47.584191"
+ },
+ "fastqc_versions_custom_prefix": {
+ "content": [
+ [
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:41:14.576531"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml
new file mode 100644
index 0000000..7834294
--- /dev/null
+++ b/modules/nf-core/fastqc/tests/tags.yml
@@ -0,0 +1,2 @@
+fastqc:
+ - modules/nf-core/fastqc/**
diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml
new file mode 100644
index 0000000..25910b3
--- /dev/null
+++ b/modules/nf-core/gunzip/environment.yml
@@ -0,0 +1,7 @@
+name: gunzip
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - conda-forge::sed=4.7
diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf
index 73bf08c..468a6f2 100644
--- a/modules/nf-core/gunzip/main.nf
+++ b/modules/nf-core/gunzip/main.nf
@@ -2,7 +2,7 @@ process GUNZIP {
tag "$archive"
label 'process_single'
- conda "conda-forge::sed=4.7"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/ubuntu:20.04' :
'nf-core/ubuntu:20.04' }"
diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml
index 4cdcdf4..231034f 100644
--- a/modules/nf-core/gunzip/meta.yml
+++ b/modules/nf-core/gunzip/meta.yml
@@ -33,3 +33,7 @@ authors:
- "@joseespinosa"
- "@drpatelh"
- "@jfy133"
+maintainers:
+ - "@joseespinosa"
+ - "@drpatelh"
+ - "@jfy133"
diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test
new file mode 100644
index 0000000..6406008
--- /dev/null
+++ b/modules/nf-core/gunzip/tests/main.nf.test
@@ -0,0 +1,36 @@
+nextflow_process {
+
+ name "Test Process GUNZIP"
+ script "../main.nf"
+ process "GUNZIP"
+ tag "gunzip"
+ tag "modules_nfcore"
+ tag "modules"
+
+ test("Should run without failures") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = Channel.of([
+ [],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)
+ ]
+ )
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap
new file mode 100644
index 0000000..720fd9f
--- /dev/null
+++ b/modules/nf-core/gunzip/tests/main.nf.test.snap
@@ -0,0 +1,31 @@
+{
+ "Should run without failures": {
+ "content": [
+ {
+ "0": [
+ [
+ [
+
+ ],
+ "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84"
+ ],
+ "gunzip": [
+ [
+ [
+
+ ],
+ "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-17T15:35:37.690477896"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml
new file mode 100644
index 0000000..fd3f691
--- /dev/null
+++ b/modules/nf-core/gunzip/tests/tags.yml
@@ -0,0 +1,2 @@
+gunzip:
+ - modules/nf-core/gunzip/**
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
new file mode 100644
index 0000000..7625b75
--- /dev/null
+++ b/modules/nf-core/multiqc/environment.yml
@@ -0,0 +1,7 @@
+name: multiqc
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::multiqc=1.19
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 65d7dd0..1b9f7c4 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -1,10 +1,10 @@
process MULTIQC {
label 'process_single'
- conda "bioconda::multiqc=1.15"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/multiqc:1.15--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.15--pyhdfd78af_0' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.19--pyhdfd78af_0' }"
input:
path multiqc_files, stageAs: "?/*"
@@ -25,12 +25,14 @@ process MULTIQC {
def args = task.ext.args ?: ''
def config = multiqc_config ? "--config $multiqc_config" : ''
def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : ''
+ def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : ''
"""
multiqc \\
--force \\
$args \\
$config \\
$extra_config \\
+ $logo \\
.
cat <<-END_VERSIONS > versions.yml
@@ -41,7 +43,7 @@ process MULTIQC {
stub:
"""
- touch multiqc_data
+ mkdir multiqc_data
touch multiqc_plots
touch multiqc_report.html
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index f93b5ee..45a9bc3 100644
--- a/modules/nf-core/multiqc/meta.yml
+++ b/modules/nf-core/multiqc/meta.yml
@@ -1,5 +1,4 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json
-name: MultiQC
+name: multiqc
description: Aggregate results from bioinformatics analyses across many samples into a single report
keywords:
- QC
@@ -13,7 +12,6 @@ tools:
homepage: https://multiqc.info/
documentation: https://multiqc.info/docs/
licence: ["GPL-3.0-or-later"]
-
input:
- multiqc_files:
type: file
@@ -31,7 +29,6 @@ input:
type: file
description: Optional logo file for MultiQC
pattern: "*.{png}"
-
output:
- report:
type: file
@@ -54,3 +51,8 @@ authors:
- "@bunop"
- "@drpatelh"
- "@jfy133"
+maintainers:
+ - "@abhi18av"
+ - "@bunop"
+ - "@drpatelh"
+ - "@jfy133"
diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test
new file mode 100644
index 0000000..f1c4242
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/main.nf.test
@@ -0,0 +1,84 @@
+nextflow_process {
+
+ name "Test Process MULTIQC"
+ script "../main.nf"
+ process "MULTIQC"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "multiqc"
+
+ test("sarscov2 single-end [fastqc]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true))
+ input[1] = []
+ input[2] = []
+ input[3] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert process.out.report[0] ==~ ".*/multiqc_report.html" },
+ { assert process.out.data[0] ==~ ".*/multiqc_data" },
+ { assert snapshot(process.out.versions).match("multiqc_versions_single") }
+ )
+ }
+
+ }
+
+ test("sarscov2 single-end [fastqc] [config]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true))
+ input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true))
+ input[2] = []
+ input[3] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert process.out.report[0] ==~ ".*/multiqc_report.html" },
+ { assert process.out.data[0] ==~ ".*/multiqc_data" },
+ { assert snapshot(process.out.versions).match("multiqc_versions_config") }
+ )
+ }
+ }
+
+ test("sarscov2 single-end [fastqc] - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true))
+ input[1] = []
+ input[2] = []
+ input[3] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.report.collect { file(it).getName() } +
+ process.out.data.collect { file(it).getName() } +
+ process.out.plots.collect { file(it).getName() } +
+ process.out.versions ).match("multiqc_stub") }
+ )
+ }
+
+ }
+}
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
new file mode 100644
index 0000000..549ba79
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/main.nf.test.snap
@@ -0,0 +1,41 @@
+{
+ "multiqc_versions_single": {
+ "content": [
+ [
+ "versions.yml:md5,14e9a2661241abd828f4f06a7b5c222d"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:43:40.529579"
+ },
+ "multiqc_stub": {
+ "content": [
+ [
+ "multiqc_report.html",
+ "multiqc_data",
+ "multiqc_plots",
+ "versions.yml:md5,14e9a2661241abd828f4f06a7b5c222d"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:45:09.605359"
+ },
+ "multiqc_versions_config": {
+ "content": [
+ [
+ "versions.yml:md5,14e9a2661241abd828f4f06a7b5c222d"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-01-31T17:44:53.535994"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml
new file mode 100644
index 0000000..bea6c0d
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/tags.yml
@@ -0,0 +1,2 @@
+multiqc:
+ - modules/nf-core/multiqc/**
diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml
new file mode 100644
index 0000000..58b795f
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/environment.yml
@@ -0,0 +1,7 @@
+name: picard_markduplicates
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::picard=3.1.1
diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf
index facd7ef..80930cc 100644
--- a/modules/nf-core/picard/markduplicates/main.nf
+++ b/modules/nf-core/picard/markduplicates/main.nf
@@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::picard=3.0.0"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' :
- 'biocontainers/picard:3.0.0--hdfd78af_1' }"
+ 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' :
+ 'biocontainers/picard:3.1.1--hdfd78af_0' }"
input:
tuple val(meta), path(bam)
@@ -30,6 +30,9 @@ process PICARD_MARKDUPLICATES {
} else {
avail_mem = (task.memory.mega*0.8).intValue()
}
+
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+
"""
picard \\
-Xmx${avail_mem}M \\
@@ -48,6 +51,7 @@ process PICARD_MARKDUPLICATES {
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
"""
touch ${prefix}.bam
touch ${prefix}.bam.bai
diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml
index f7693d2..1ab90c0 100644
--- a/modules/nf-core/picard/markduplicates/meta.yml
+++ b/modules/nf-core/picard/markduplicates/meta.yml
@@ -69,3 +69,7 @@ authors:
- "@drpatelh"
- "@projectoriented"
- "@ramprasadn"
+maintainers:
+ - "@drpatelh"
+ - "@projectoriented"
+ - "@ramprasadn"
diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test
new file mode 100644
index 0000000..c5a29b4
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test
@@ -0,0 +1,104 @@
+nextflow_process {
+
+ name "Test Process PICARD_MARKDUPLICATES"
+ script "../main.nf"
+ process "PICARD_MARKDUPLICATES"
+ config "./nextflow.config"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "picard"
+ tag "picard/markduplicates"
+
+ test("sarscov2 [unsorted bam]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(file(process.out.bam[0][1]).name).match("unsorted_bam_name") },
+ { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("unsorted_bam_metrics") },
+ { assert snapshot(process.out.versions).match("unsorted_bam_versions") }
+ )
+ }
+ }
+
+ test("sarscov2 [sorted bam]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(file(process.out.bam[0][1]).name).match("sorted_bam_name") },
+ { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("sorted_bam_metrics") },
+ { assert snapshot(process.out.versions).match("sorted_bam_versions") }
+ )
+ }
+ }
+
+ test("homo_sapiens [cram]") {
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(file(process.out.bam[0][1]).name).match("cram_name") },
+ { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("cram_metrics") },
+ { assert snapshot(process.out.versions).match("cram_versions") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap
new file mode 100644
index 0000000..31c9130
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap
@@ -0,0 +1,74 @@
+{
+ "sorted_bam_versions": {
+ "content": [
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:26:45.092349"
+ },
+ "unsorted_bam_name": {
+ "content": [
+ "test.marked.bam"
+ ],
+ "timestamp": "2024-01-19T10:26:28.100755"
+ },
+ "cram_metrics": {
+ "content": [
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:27:03.253071"
+ },
+ "sorted_bam_metrics": {
+ "content": [
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:26:45.086503"
+ },
+ "cram_name": {
+ "content": [
+ "test.marked.bam"
+ ],
+ "timestamp": "2024-01-19T10:27:03.241617"
+ },
+ "cram_versions": {
+ "content": [
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:27:03.26989"
+ },
+ "unsorted_bam_versions": {
+ "content": [
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:26:28.159071"
+ },
+ "unsorted_bam_metrics": {
+ "content": [
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ]
+ ],
+ "timestamp": "2024-01-19T10:26:28.143979"
+ },
+ "sorted_bam_name": {
+ "content": [
+ "test.marked.bam"
+ ],
+ "timestamp": "2024-01-19T10:26:45.080116"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/picard/markduplicates/tests/nextflow.config b/modules/nf-core/picard/markduplicates/tests/nextflow.config
new file mode 100644
index 0000000..02818dd
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/nextflow.config
@@ -0,0 +1,6 @@
+process {
+ withName: PICARD_MARKDUPLICATES {
+ ext.prefix = { "${meta.id}.marked" }
+ ext.args = '--ASSUME_SORT_ORDER queryname'
+ }
+}
diff --git a/modules/nf-core/picard/markduplicates/tests/tags.yml b/modules/nf-core/picard/markduplicates/tests/tags.yml
new file mode 100644
index 0000000..4f213d6
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/tags.yml
@@ -0,0 +1,2 @@
+picard/markduplicates:
+ - modules/nf-core/picard/markduplicates/**
diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml
new file mode 100644
index 0000000..4807ba5
--- /dev/null
+++ b/modules/nf-core/samtools/faidx/environment.yml
@@ -0,0 +1,8 @@
+name: samtools_faidx
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf
index 59ed308..d346162 100644
--- a/modules/nf-core/samtools/faidx/main.nf
+++ b/modules/nf-core/samtools/faidx/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_FAIDX {
tag "$fasta"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(fasta)
diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml
index 957b25e..e189af2 100644
--- a/modules/nf-core/samtools/faidx/meta.yml
+++ b/modules/nf-core/samtools/faidx/meta.yml
@@ -55,3 +55,7 @@ authors:
- "@drpatelh"
- "@ewels"
- "@phue"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
+ - "@phue"
diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml
new file mode 100644
index 0000000..dd0b5c1
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/environment.yml
@@ -0,0 +1,8 @@
+name: samtools_flagstat
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf
index b75707e..f1893d7 100644
--- a/modules/nf-core/samtools/flagstat/main.nf
+++ b/modules/nf-core/samtools/flagstat/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_FLAGSTAT {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(bam), path(bai)
diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml
index 954225d..9799135 100644
--- a/modules/nf-core/samtools/flagstat/meta.yml
+++ b/modules/nf-core/samtools/flagstat/meta.yml
@@ -47,3 +47,5 @@ output:
pattern: "versions.yml"
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test
new file mode 100644
index 0000000..c8dd8dc
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test
@@ -0,0 +1,36 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_FLAGSTAT"
+ script "../main.nf"
+ process "SAMTOOLS_FLAGSTAT"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/flagstat"
+
+ test("BAM") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.flagstat).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
new file mode 100644
index 0000000..880019f
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
@@ -0,0 +1,16 @@
+{
+ "BAM": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-14T15:49:22.577133"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/flagstat/tests/tags.yml b/modules/nf-core/samtools/flagstat/tests/tags.yml
new file mode 100644
index 0000000..2d2b725
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/flagstat:
+ - modules/nf-core/samtools/flagstat/**
diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml
new file mode 100644
index 0000000..de3ed47
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/environment.yml
@@ -0,0 +1,8 @@
+name: samtools_idxstats
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf
index 83c7c34..00d916b 100644
--- a/modules/nf-core/samtools/idxstats/main.nf
+++ b/modules/nf-core/samtools/idxstats/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_IDXSTATS {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(bam), path(bai)
diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml
index dda87e1..344e92a 100644
--- a/modules/nf-core/samtools/idxstats/meta.yml
+++ b/modules/nf-core/samtools/idxstats/meta.yml
@@ -48,3 +48,5 @@ output:
pattern: "versions.yml"
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test
new file mode 100644
index 0000000..f6c9215
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test
@@ -0,0 +1,36 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_IDXSTATS"
+ script "../main.nf"
+ process "SAMTOOLS_IDXSTATS"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/idxstats"
+
+ test("BAM") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.idxstats).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
new file mode 100644
index 0000000..4c6c12b
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
@@ -0,0 +1,16 @@
+{
+ "BAM": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-14T15:52:19.875194"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/idxstats/tests/tags.yml b/modules/nf-core/samtools/idxstats/tests/tags.yml
new file mode 100644
index 0000000..d3057c6
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/idxstats:
+ - modules/nf-core/samtools/idxstats/**
diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml
new file mode 100644
index 0000000..81f0939
--- /dev/null
+++ b/modules/nf-core/samtools/index/environment.yml
@@ -0,0 +1,8 @@
+name: samtools_index
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf
index 0b20aa4..8ad18fd 100644
--- a/modules/nf-core/samtools/index/main.nf
+++ b/modules/nf-core/samtools/index/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_INDEX {
tag "$meta.id"
label 'process_low'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(input)
diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml
index 8bd2fa6..01a4ee0 100644
--- a/modules/nf-core/samtools/index/meta.yml
+++ b/modules/nf-core/samtools/index/meta.yml
@@ -51,3 +51,7 @@ authors:
- "@drpatelh"
- "@ewels"
- "@maxulysse"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
+ - "@maxulysse"
diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config
new file mode 100644
index 0000000..0ed260e
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config
@@ -0,0 +1,7 @@
+process {
+
+ withName: SAMTOOLS_INDEX {
+ ext.args = '-c'
+ }
+
+}
diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test
new file mode 100644
index 0000000..c76a916
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/main.nf.test
@@ -0,0 +1,87 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_INDEX"
+ script "../main.nf"
+ process "SAMTOOLS_INDEX"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/index"
+
+ test("sarscov2 [BAI]") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.bai).match("bai") },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+
+ test("homo_sapiens [CRAI]") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.crai).match("crai") },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+
+ test("homo_sapiens [CSI]") {
+
+ config "./csi.nextflow.config"
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert path(process.out.csi.get(0).get(1)).exists() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap
new file mode 100644
index 0000000..b3baee7
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap
@@ -0,0 +1,28 @@
+{
+ "crai": {
+ "content": [
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-15T15:17:37.30801"
+ },
+ "bai": {
+ "content": [
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-15T15:17:30.869234"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml
new file mode 100644
index 0000000..e0f58a7
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/index:
+ - modules/nf-core/samtools/index/**
diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml
new file mode 100644
index 0000000..b45ba90
--- /dev/null
+++ b/modules/nf-core/samtools/stats/environment.yml
@@ -0,0 +1,8 @@
+name: samtools_stats
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
+ - bioconda::htslib=1.18
diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf
index 4a2607d..7539140 100644
--- a/modules/nf-core/samtools/stats/main.nf
+++ b/modules/nf-core/samtools/stats/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_STATS {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(input), path(input_index)
diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml
index 90e6345..735ff81 100644
--- a/modules/nf-core/samtools/stats/meta.yml
+++ b/modules/nf-core/samtools/stats/meta.yml
@@ -57,3 +57,7 @@ authors:
- "@drpatelh"
- "@FriederikeHanssen"
- "@ramprasadn"
+maintainers:
+ - "@drpatelh"
+ - "@FriederikeHanssen"
+ - "@ramprasadn"
diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test
new file mode 100644
index 0000000..20c3efe
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/main.nf.test
@@ -0,0 +1,78 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_STATS"
+ script "../main.nf"
+ process "SAMTOOLS_STATS"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/stats"
+
+ test("SAMTOOLS STATS Should run without failures") {
+
+ when {
+ params {
+
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ // define inputs of the process here.
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+
+ ]
+ input[1] = [[],[]]
+ """
+
+ }
+ }
+
+ then {
+ assertAll(
+ {assert process.success},
+ {assert snapshot(process.out).match()}
+ )
+ }
+
+ }
+
+ test("SAMTOOLS CRAM Should run without failures") {
+
+ when {
+ params {
+
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ // define inputs of the process here
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true),
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true)
+
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+
+
+ }
+
+ then {
+ assertAll(
+ {assert process.success},
+ {assert snapshot(process.out).match()}
+ )
+ }
+
+ }
+
+
+}
diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
new file mode 100644
index 0000000..025c83a
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
@@ -0,0 +1,64 @@
+{
+ "SAMTOOLS STATS Should run without failures": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ],
+ "stats": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ]
+ }
+ ],
+ "timestamp": "2023-12-04T11:07:28.26821485"
+ },
+ "SAMTOOLS CRAM Should run without failures": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ],
+ "stats": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ]
+ }
+ ],
+ "timestamp": "2023-12-04T11:07:50.356233402"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml
new file mode 100644
index 0000000..7c28e30
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/stats:
+ - modules/nf-core/samtools/stats/**
diff --git a/modules/nf-core/trimmomatic/environment.yml b/modules/nf-core/trimmomatic/environment.yml
new file mode 100644
index 0000000..91145bb
--- /dev/null
+++ b/modules/nf-core/trimmomatic/environment.yml
@@ -0,0 +1,7 @@
+name: trimmomatic
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::trimmomatic=0.39
diff --git a/modules/nf-core/trimmomatic/main.nf b/modules/nf-core/trimmomatic/main.nf
index 48d8f18..31f7ffd 100644
--- a/modules/nf-core/trimmomatic/main.nf
+++ b/modules/nf-core/trimmomatic/main.nf
@@ -2,7 +2,7 @@ process TRIMMOMATIC {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::trimmomatic=0.39"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/trimmomatic:0.39--hdfd78af_2':
'biocontainers/trimmomatic:0.39--hdfd78af_2' }"
diff --git a/modules/nf-core/trimmomatic/meta.yml b/modules/nf-core/trimmomatic/meta.yml
index 0a6b18b..0486e9f 100644
--- a/modules/nf-core/trimmomatic/meta.yml
+++ b/modules/nf-core/trimmomatic/meta.yml
@@ -4,16 +4,13 @@ keywords:
- trimming
- adapter trimming
- quality trimming
-
tools:
- "trimmomatic":
description: "A flexible read trimming tool for Illumina NGS data"
homepage: "http://www.usadellab.org/cms/?page=trimmomatic"
documentation: "https://github.com/usadellab/Trimmomatic"
-
doi: "10.1093/bioinformatics/btu170"
licence: "['GPL v3']"
-
input:
- meta:
type: map
@@ -25,7 +22,6 @@ input:
description: |
Input FastQ files of size 1 or 2 for single-end and paired-end data, respectively.
pattern: "*.fastq.gz"
-
output:
- meta:
type: map
@@ -52,6 +48,7 @@ output:
type: file
description: File containing software versions
pattern: "versions.yml"
-
authors:
- "@alyssa-ab"
+maintainers:
+ - "@alyssa-ab"
diff --git a/modules/nf-core/trimmomatic/tests/main.nf.test b/modules/nf-core/trimmomatic/tests/main.nf.test
new file mode 100644
index 0000000..fd855f2
--- /dev/null
+++ b/modules/nf-core/trimmomatic/tests/main.nf.test
@@ -0,0 +1,95 @@
+nextflow_process {
+
+ name "Test Process TRIMMOMATIC"
+ script "../main.nf"
+ process "TRIMMOMATIC"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "trimmomatic"
+
+ test("Single-Read") {
+ config "./nextflow_SE.config"
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:true ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert process.out.trimmed_reads != null },
+ { assert process.out.trimmed_reads.get(0).get(1) ==~ ".*.SE.paired.trim.fastq.gz" },
+ { assert snapshot(process.out.versions).match("versions") },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("Paired-Reads") {
+ config "./nextflow_PE.config"
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert process.out.trimmed_reads != null },
+ { assert process.out.trimmed_reads.get(0).get(1).get(0) ==~ ".*.paired.trim_1.fastq.gz" },
+ { assert process.out.trimmed_reads.get(0).get(1).get(1) ==~ ".*.paired.trim_2.fastq.gz" },
+ { assert snapshot(process.out).match() },
+ { assert snapshot(process.out.versions).match("versions") },
+ )
+ }
+ }
+
+ test("No Adaptors") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.failed }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/trimmomatic/tests/main.nf.test.snap b/modules/nf-core/trimmomatic/tests/main.nf.test.snap
new file mode 100644
index 0000000..f1519f0
--- /dev/null
+++ b/modules/nf-core/trimmomatic/tests/main.nf.test.snap
@@ -0,0 +1,180 @@
+{
+ "versions": {
+ "content": [
+ [
+ "versions.yml:md5,14413a048f088a147fb04f3d59c6c604"
+ ]
+ ],
+ "timestamp": "2023-10-18T12:15:39.464478"
+ },
+ "Single-Read": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.SE.paired.trim.fastq.gz:md5,089a57f61d7197566b8a3ce71df79113"
+ ]
+ ],
+ "1": [
+
+ ],
+ "2": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.log:md5,e4c3f619e9b0e26847f8f3e3d9af319b"
+ ]
+ ],
+ "3": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.summary:md5,24c973237557a1439c775ca19a5deaa5"
+ ]
+ ],
+ "4": [
+ "versions.yml:md5,14413a048f088a147fb04f3d59c6c604"
+ ],
+ "log": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.log:md5,e4c3f619e9b0e26847f8f3e3d9af319b"
+ ]
+ ],
+ "summary": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.summary:md5,24c973237557a1439c775ca19a5deaa5"
+ ]
+ ],
+ "trimmed_reads": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.SE.paired.trim.fastq.gz:md5,089a57f61d7197566b8a3ce71df79113"
+ ]
+ ],
+ "unpaired_reads": [
+
+ ],
+ "versions": [
+ "versions.yml:md5,14413a048f088a147fb04f3d59c6c604"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T12:15:39.471788"
+ },
+ "Paired-Reads": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.paired.trim_1.fastq.gz:md5,575355b98cb5ef9071fad8014c702f4a",
+ "test.paired.trim_2.fastq.gz:md5,73fb54874d01b2854640266d12cc534a"
+ ]
+ ]
+ ],
+ "1": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unpaired.trim_1.fastq.gz:md5,2f7b5a15cc4e73a6fb4af1fa01f575cd",
+ "test.unpaired.trim_2.fastq.gz:md5,096ad7f876b6b704ef7f9f2c5af3cf74"
+ ]
+ ]
+ ],
+ "2": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.log:md5,9629761761a34576b3484bf4174f681f"
+ ]
+ ],
+ "3": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.summary:md5,9698e5e5c060bbe64588998fe35f8d71"
+ ]
+ ],
+ "4": [
+ "versions.yml:md5,14413a048f088a147fb04f3d59c6c604"
+ ],
+ "log": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.log:md5,9629761761a34576b3484bf4174f681f"
+ ]
+ ],
+ "summary": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.summary:md5,9698e5e5c060bbe64588998fe35f8d71"
+ ]
+ ],
+ "trimmed_reads": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.paired.trim_1.fastq.gz:md5,575355b98cb5ef9071fad8014c702f4a",
+ "test.paired.trim_2.fastq.gz:md5,73fb54874d01b2854640266d12cc534a"
+ ]
+ ]
+ ],
+ "unpaired_reads": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unpaired.trim_1.fastq.gz:md5,2f7b5a15cc4e73a6fb4af1fa01f575cd",
+ "test.unpaired.trim_2.fastq.gz:md5,096ad7f876b6b704ef7f9f2c5af3cf74"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,14413a048f088a147fb04f3d59c6c604"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-18T12:15:44.677305"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/trimmomatic/tests/nextflow_PE.config b/modules/nf-core/trimmomatic/tests/nextflow_PE.config
new file mode 100644
index 0000000..3f8fdfe
--- /dev/null
+++ b/modules/nf-core/trimmomatic/tests/nextflow_PE.config
@@ -0,0 +1,6 @@
+process {
+
+ withName: TRIMMOMATIC {
+ ext.args = 'ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36'
+ }
+}
diff --git a/modules/nf-core/trimmomatic/tests/nextflow_SE.config b/modules/nf-core/trimmomatic/tests/nextflow_SE.config
new file mode 100644
index 0000000..af777fd
--- /dev/null
+++ b/modules/nf-core/trimmomatic/tests/nextflow_SE.config
@@ -0,0 +1,6 @@
+process {
+
+ withName: TRIMMOMATIC {
+ ext.args = 'ILLUMINACLIP:TruSeq3-SE:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36'
+ }
+}
diff --git a/modules/nf-core/trimmomatic/tests/tags.yml b/modules/nf-core/trimmomatic/tests/tags.yml
new file mode 100644
index 0000000..68c5af6
--- /dev/null
+++ b/modules/nf-core/trimmomatic/tests/tags.yml
@@ -0,0 +1,2 @@
+trimmomatic:
+ - modules/nf-core/trimmomatic/**
diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml
new file mode 100644
index 0000000..0c9cbb1
--- /dev/null
+++ b/modules/nf-core/untar/environment.yml
@@ -0,0 +1,11 @@
+name: untar
+
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+
+dependencies:
+ - conda-forge::grep=3.11
+ - conda-forge::sed=4.7
+ - conda-forge::tar=1.34
diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf
index 61461c3..8a75bb9 100644
--- a/modules/nf-core/untar/main.nf
+++ b/modules/nf-core/untar/main.nf
@@ -2,7 +2,7 @@ process UNTAR {
tag "$archive"
label 'process_single'
- conda "conda-forge::sed=4.7 conda-forge::grep=3.11 conda-forge::tar=1.34"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/ubuntu:20.04' :
'nf-core/ubuntu:20.04' }"
diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml
index db241a6..a9a2110 100644
--- a/modules/nf-core/untar/meta.yml
+++ b/modules/nf-core/untar/meta.yml
@@ -39,3 +39,8 @@ authors:
- "@drpatelh"
- "@matthdsm"
- "@jfy133"
+maintainers:
+ - "@joseespinosa"
+ - "@drpatelh"
+ - "@matthdsm"
+ - "@jfy133"
diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test
new file mode 100644
index 0000000..679e83c
--- /dev/null
+++ b/modules/nf-core/untar/tests/main.nf.test
@@ -0,0 +1,55 @@
+nextflow_process {
+
+ name "Test Process UNTAR"
+ script "../main.nf"
+ process "UNTAR"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "untar"
+
+ test("test_untar") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.untar).match("test_untar") },
+ )
+ }
+
+ }
+
+ test("test_untar_onlyfiles") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.untar).match("test_untar_onlyfiles") },
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap
new file mode 100644
index 0000000..ace4257
--- /dev/null
+++ b/modules/nf-core/untar/tests/main.nf.test.snap
@@ -0,0 +1,34 @@
+{
+ "test_untar_onlyfiles": {
+ "content": [
+ [
+ [
+ [
+
+ ],
+ [
+ "hello.txt:md5,e59ff97941044f85df5297e1c302d260"
+ ]
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-18T11:56:46.878844"
+ },
+ "test_untar": {
+ "content": [
+ [
+ [
+ [
+
+ ],
+ [
+ "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9",
+ "opts.k2d:md5,a033d00cf6759407010b21700938f543",
+ "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c"
+ ]
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-18T11:56:08.16574"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/untar/tests/tags.yml b/modules/nf-core/untar/tests/tags.yml
new file mode 100644
index 0000000..feb6f15
--- /dev/null
+++ b/modules/nf-core/untar/tests/tags.yml
@@ -0,0 +1,2 @@
+untar:
+ - modules/nf-core/untar/**
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/main.nf b/subworkflows/nf-core/bam_markduplicates_picard/main.nf
index 6e3df33..de8130f 100644
--- a/subworkflows/nf-core/bam_markduplicates_picard/main.nf
+++ b/subworkflows/nf-core/bam_markduplicates_picard/main.nf
@@ -26,13 +26,9 @@ workflow BAM_MARKDUPLICATES_PICARD {
ch_bam_bai = PICARD_MARKDUPLICATES.out.bam
.join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true)
.join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true)
- .map {
- meta, bam, bai, csi ->
- if (bai) {
- [ meta, bam, bai ]
- } else {
- [ meta, bam, csi ]
- }
+ .map{meta, bam, bai, csi ->
+ if (bai) [ meta, bam, bai ]
+ else [ meta, bam, csi ]
}
BAM_STATS_SAMTOOLS ( ch_bam_bai, ch_fasta )
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
index b924596..fe63068 100644
--- a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
+++ b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
@@ -6,7 +6,6 @@ keywords:
- bam
- sam
- cram
-
components:
- picard/markduplicates
- samtools/index
@@ -14,7 +13,6 @@ components:
- samtools/idxstats
- samtools/flagstat
- bam_stats_samtools
-
input:
- ch_bam:
description: |
@@ -60,3 +58,6 @@ output:
authors:
- "@dmarron"
- "@drpatelh"
+maintainers:
+ - "@dmarron"
+ - "@drpatelh"
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test
new file mode 100644
index 0000000..d8d2429
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test
@@ -0,0 +1,93 @@
+nextflow_workflow {
+
+ name "Test Workflow BAM_MARKDUPLICATES_PICARD"
+ script "../main.nf"
+ workflow "BAM_MARKDUPLICATES_PICARD"
+
+ tag "picard"
+ tag "picard/markduplicates"
+ tag "subworkflows"
+ tag "subworkflows_nfcore"
+ tag "bam_markduplicates_picard"
+ tag "subworkflows/bam_markduplicates_picard"
+ tag "subworkflows/bam_stats_samtools"
+ tag "bam_stats_samtools"
+ tag "samtools"
+ tag "samtools/flagstat"
+ tag "samtools/idxstats"
+ tag "samtools/index"
+ tag "samtools/stats"
+
+ test("sarscov2 - bam") {
+
+ when {
+ workflow {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end: false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(
+ path(workflow.out.bam[0][1]),
+ path(workflow.out.bai[0][1]),
+ path(workflow.out.flagstat[0][1]),
+ path(workflow.out.idxstats[0][1]),
+ path(workflow.out.stats[0][1]),
+ ).match("sarscov2 - bam") },
+ { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("97") }
+ )
+ }
+ }
+
+ test("homo_sapiens - cram") {
+
+ when {
+ workflow {
+ """
+ input[0] = Channel.of([
+ [ id:'test' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(
+ path(workflow.out.bam[0][1]),
+ path(workflow.out.bai[0][1]),
+ path(workflow.out.flagstat[0][1]),
+ path(workflow.out.idxstats[0][1]),
+ path(workflow.out.stats[0][1]),
+ ).match("homo_sapiens - cram") },
+ { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("0.999986") }
+ )
+ }
+ }
+
+}
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap
new file mode 100644
index 0000000..a208d10
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap
@@ -0,0 +1,22 @@
+{
+ "homo_sapiens - cram": {
+ "content": [
+ "test.bam:md5,6641dc05efa8384a061f378d86d922cd",
+ "test.bam.bai:md5,c41c60d8a94adebe53b6df80b6e90d38",
+ "test.flagstat:md5,93b0ef463df947ede1f42ff60396c34d",
+ "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15",
+ "test.stats:md5,0035ac8900d85e9a790f4c1f48b76947"
+ ],
+ "timestamp": "2023-12-05T17:45:12.484869"
+ },
+ "sarscov2 - bam": {
+ "content": [
+ "test.bam:md5,3091fe6ba1b7530f382fe40b9fd8f45b",
+ "test.bam.bai:md5,4d3ae8d013444b55e17aa0149a2ab404",
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783",
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2",
+ "test.stats:md5,e32e7e49dce1fbe327a89e0fb7bc01b1"
+ ],
+ "timestamp": "2023-12-05T17:43:58.582652"
+ }
+}
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml b/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml
new file mode 100644
index 0000000..10b8527
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/bam_markduplicates_picard:
+ - subworkflows/nf-core/bam_markduplicates_picard/**
diff --git a/subworkflows/nf-core/bam_stats_samtools/meta.yml b/subworkflows/nf-core/bam_stats_samtools/meta.yml
index 87863b1..809bf73 100644
--- a/subworkflows/nf-core/bam_stats_samtools/meta.yml
+++ b/subworkflows/nf-core/bam_stats_samtools/meta.yml
@@ -39,3 +39,5 @@ output:
Structure: [ path(versions.yml) ]
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test
new file mode 100644
index 0000000..c8b21f2
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test
@@ -0,0 +1,108 @@
+nextflow_workflow {
+
+ name "Test Workflow BAM_STATS_SAMTOOLS"
+ script "../main.nf"
+ workflow "BAM_STATS_SAMTOOLS"
+ tag "subworkflows"
+ tag "subworkflows_nfcore"
+ tag "bam_stats_samtools"
+ tag "subworkflows/bam_stats_samtools"
+ tag "samtools"
+ tag "samtools/flagstat"
+ tag "samtools/idxstats"
+ tag "samtools/stats"
+
+ test("test_bam_stats_samtools_single_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:true ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_single_end_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_single_end_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_single_end_idxstats") }
+ )
+ }
+ }
+
+ test("test_bam_stats_samtools_paired_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:true ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success },
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_idxstats") }
+ )
+ }
+ }
+
+ test("test_bam_stats_samtools_paired_end_cram") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'genome' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_cram_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_cram_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_cram_idxstats") }
+ )
+ }
+ }
+
+}
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap
new file mode 100644
index 0000000..8bf0d37
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap
@@ -0,0 +1,128 @@
+{
+ "test_bam_stats_samtools_paired_end_cram_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.flagstat:md5,a53f3d26e2e9851f7d528442bbfe9781"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:26.194017574"
+ },
+ "test_bam_stats_samtools_paired_end_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.stats:md5,49e2b43344ff92bc4c02463a58f7ba4a"
+ ]
+ ]
+ ],
+ "timestamp": "2024-01-18T17:17:27.704335"
+ },
+ "test_bam_stats_samtools_paired_end_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783"
+ ]
+ ]
+ ],
+ "timestamp": "2024-01-18T17:17:27.717482"
+ },
+ "test_bam_stats_samtools_single_end_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:26:10.340046381"
+ },
+ "test_bam_stats_samtools_paired_end_cram_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:26.207052003"
+ },
+ "test_bam_stats_samtools_single_end_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.stats:md5,5a6667d97806e5002731e9cf23674fad"
+ ]
+ ]
+ ],
+ "timestamp": "2023-12-04T11:07:06.676820877"
+ },
+ "test_bam_stats_samtools_paired_end_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ ]
+ ]
+ ],
+ "timestamp": "2024-01-18T17:17:27.726719"
+ },
+ "test_bam_stats_samtools_single_end_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:26:10.349439801"
+ },
+ "test_bam_stats_samtools_paired_end_cram_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,2cf2fe93596ee3d74f946097b204a629"
+ ]
+ ]
+ ],
+ "timestamp": "2023-12-04T11:07:22.30295557"
+ }
+}
\ No newline at end of file
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml b/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml
new file mode 100644
index 0000000..ec2f2d6
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/bam_stats_samtools:
+ - subworkflows/nf-core/bam_stats_samtools/**
diff --git a/subworkflows/nf-core/fastq_align_bwaaln/meta.yml b/subworkflows/nf-core/fastq_align_bwaaln/meta.yml
index ad43398..5ba4665 100644
--- a/subworkflows/nf-core/fastq_align_bwaaln/meta.yml
+++ b/subworkflows/nf-core/fastq_align_bwaaln/meta.yml
@@ -26,7 +26,6 @@ input:
Structure: [ val(meta), path(index) ]
A directory containing bwa aln reference indices as from `bwa index`
Contains files ending in extensions such as .amb, .ann, .bwt etc.
-
output:
- bam:
description: |
@@ -49,3 +48,5 @@ output:
Structure: [ path(versions.yml) ]
authors:
- "@jfy133"
+maintainers:
+ - "@jfy133"