From ad2d2e4b7803a58aa3750112f14617596fd454ec Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Fri, 9 Jan 2026 18:51:34 +0100 Subject: [PATCH 01/10] add nirvana --- modules/nf-core/nirvana/environment.yml | 7 ++ modules/nf-core/nirvana/main.nf | 43 +++++++++ modules/nf-core/nirvana/meta.yml | 97 ++++++++++++++++++++ modules/nf-core/nirvana/tests/main.nf.test | 101 +++++++++++++++++++++ 4 files changed, 248 insertions(+) create mode 100644 modules/nf-core/nirvana/environment.yml create mode 100644 modules/nf-core/nirvana/main.nf create mode 100644 modules/nf-core/nirvana/meta.yml create mode 100644 modules/nf-core/nirvana/tests/main.nf.test diff --git a/modules/nf-core/nirvana/environment.yml b/modules/nf-core/nirvana/environment.yml new file mode 100644 index 000000000000..45854d1f9210 --- /dev/null +++ b/modules/nf-core/nirvana/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::nirvana=3.18.1 diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf new file mode 100644 index 000000000000..8888fa4011cd --- /dev/null +++ b/modules/nf-core/nirvana/main.nf @@ -0,0 +1,43 @@ +process NIRVANA { + tag "${meta.id}" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0be2df22eec1d7042d164febf61513ff31d5895a6ceecc6c3961364496b0be5a/data' + : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" + + input: + tuple val(meta), path(vcf) + tuple val(meta2), path(reference) + tuple val(meta3), path(cache) + tuple val(meta4), path(supplementary_annotations) + + output: + tuple val(meta), path("*.json.gz"), emit: json + tuple val(meta), path("*.json.gz"), emit: jsi + tuple val("${task.process}"), val('nirvana'), eval("Nirvana -v 2>&1 | awk '{print \$2}' | cut -d'-' -f1"), topic: versions, emit: versions_nirvana + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def sa_command = supplementary_annotations ? "--sd ${supplementary_annotations}" : "" + """ + Nirvana \\ + -i ${vcf} \\ + -r ${reference} \\ + -c ${cache} \\ + ${sa_command} \\ + ${args} \\ + -o ${prefix} + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.json.gz + """ +} diff --git a/modules/nf-core/nirvana/meta.yml b/modules/nf-core/nirvana/meta.yml new file mode 100644 index 000000000000..80c755cb1a60 --- /dev/null +++ b/modules/nf-core/nirvana/meta.yml @@ -0,0 +1,97 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "nirvana" +description: Clinical-grade annotation of genomic variants including SNVs, MNVs, insertions, deletions, indels, and SVs +keywords: + - annotation + - variant annotation + - vcf + - genomics + - clinical annotation +tools: + - "nirvana": + description: "Clinical-grade annotation of genomic variants (SNVs, MNVs, insertions, + deletions, indels, and SVs)" + homepage: "https://illumina.github.io/NirvanaDocumentation/" + documentation: "https://illumina.github.io/NirvanaDocumentation/" + tool_dev_url: "https://github.com/Illumina/Nirvana" + doi: "" + licence: ["GPL v3"] + identifier: biotools:nirvana + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - vcf: + type: file + description: Input VCF file to annotate + pattern: "*.{vcf,vcf.gz}" + ontologies: + - edam: "http://edamontology.org/format_3016" # VCF + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'genome' ]` + - reference: + type: file + description: Compressed Nirvana reference sequence file + pattern: "*.dat" + - - meta3: + type: map + description: | + Groovy Map containing cache information + e.g. `[ id:'cache' ]` + - cache: + type: directory + description: Nirvana cache directory + - - meta4: + type: map + description: | + Groovy Map containing supplementary annotation information + e.g. `[ id:'sa' ]` + - supplementary_annotations: + type: directory + description: Nirvana supplementary annotation directory (optional) + +output: + json: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.json.gz": + type: file + description: Gzip-compressed JSON file with variant annotations + pattern: "*.json.gz" + ontologies: + - edam: "http://edamontology.org/format_3464" # JSON + versions_nirvana: + - - "${task.process}": + type: string + description: The name of the process + - "nirvana": + type: string + description: The name of the tool + - "Nirvana -v 2>&1 | awk '{print $2}' | cut -d'-' -f1": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - nirvana: + type: string + description: The name of the tool + - "Nirvana -v 2>&1 | awk '{print $2}' | cut -d'-' -f1": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@FriederikeHanssen" +maintainers: + - "@FriederikeHanssen" diff --git a/modules/nf-core/nirvana/tests/main.nf.test b/modules/nf-core/nirvana/tests/main.nf.test new file mode 100644 index 000000000000..fe60432991d4 --- /dev/null +++ b/modules/nf-core/nirvana/tests/main.nf.test @@ -0,0 +1,101 @@ +nextflow_process { + + name "Test Process NIRVANA" + script "../main.nf" + process "NIRVANA" + + tag "modules" + tag "modules_nfcore" + tag "nirvana" + tag "untar" + + setup { + run("UNTAR", alias: "UNTAR_CACHE") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'cache' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/nirvana/cache.tar.gz', checkIfExists: true) + ] + """ + } + } + + run("UNTAR", alias: "UNTAR_SA") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'sa' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/nirvana/supplementary_annotations.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + test("sarscov2 - vcf") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'reference' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/SARS-CoV-2.ASM985889v3.dat', checkIfExists: true) + ] + input[2] = UNTAR_CACHE.out.untar + input[3] = UNTAR_SA.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.json[0][1]).linesGzip[0..2], + path(process.out.jsi[0][1]).linesGzip[0..2], + process.out.versions, + path(process.out.versions[0]).yaml + ).match() } + ) + } + + } + + test("sarscov2 - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'reference' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/SARS-CoV-2.ASM985889v3.dat', checkIfExists: true) + ] + input[2] = UNTAR_CACHE.out.untar + input[3] = UNTAR_SA.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} From 72dbc408d0872ddc7f6a2fd44779e877c6353821 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Fri, 9 Jan 2026 19:54:57 +0100 Subject: [PATCH 02/10] adsnapshots --- modules/nf-core/nirvana/main.nf | 8 +- modules/nf-core/nirvana/meta.yml | 14 ++- modules/nf-core/nirvana/tests/main.nf.test | 27 ++-- .../nf-core/nirvana/tests/main.nf.test.snap | 116 ++++++++++++++++++ 4 files changed, 147 insertions(+), 18 deletions(-) create mode 100644 modules/nf-core/nirvana/tests/main.nf.test.snap diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 8888fa4011cd..9f8e0baa7c7f 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -10,12 +10,12 @@ process NIRVANA { input: tuple val(meta), path(vcf) tuple val(meta2), path(reference) - tuple val(meta3), path(cache) + tuple val(meta3), path(cache), val(cache_prefix) tuple val(meta4), path(supplementary_annotations) output: tuple val(meta), path("*.json.gz"), emit: json - tuple val(meta), path("*.json.gz"), emit: jsi + tuple val(meta), path("*.json.gz.jsi"), emit: jsi tuple val("${task.process}"), val('nirvana'), eval("Nirvana -v 2>&1 | awk '{print \$2}' | cut -d'-' -f1"), topic: versions, emit: versions_nirvana when: @@ -24,12 +24,13 @@ process NIRVANA { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def cache_command = cache ? "-c ${cache}/${cache_prefix}" : "" def sa_command = supplementary_annotations ? "--sd ${supplementary_annotations}" : "" """ Nirvana \\ -i ${vcf} \\ -r ${reference} \\ - -c ${cache} \\ + ${cache_command} \\ ${sa_command} \\ ${args} \\ -o ${prefix} @@ -39,5 +40,6 @@ process NIRVANA { def prefix = task.ext.prefix ?: "${meta.id}" """ echo "" | gzip > ${prefix}.json.gz + touch ${prefix}.json.gz.jsi """ } diff --git a/modules/nf-core/nirvana/meta.yml b/modules/nf-core/nirvana/meta.yml index 80c755cb1a60..552f3729217e 100644 --- a/modules/nf-core/nirvana/meta.yml +++ b/modules/nf-core/nirvana/meta.yml @@ -14,7 +14,6 @@ tools: homepage: "https://illumina.github.io/NirvanaDocumentation/" documentation: "https://illumina.github.io/NirvanaDocumentation/" tool_dev_url: "https://github.com/Illumina/Nirvana" - doi: "" licence: ["GPL v3"] identifier: biotools:nirvana @@ -47,6 +46,9 @@ input: - cache: type: directory description: Nirvana cache directory + - cache_prefix: + type: string + description: Prefix for cache files (e.g., 'SARS-CoV-2' for files like SARS-CoV-2.transcripts.ndb) - - meta4: type: map description: | @@ -69,6 +71,16 @@ output: pattern: "*.json.gz" ontologies: - edam: "http://edamontology.org/format_3464" # JSON + jsi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.json.gz.jsi": + type: file + description: JSON index file for the annotations + pattern: "*.json.gz.jsi" versions_nirvana: - - "${task.process}": type: string diff --git a/modules/nf-core/nirvana/tests/main.nf.test b/modules/nf-core/nirvana/tests/main.nf.test index fe60432991d4..277d4a5ba93f 100644 --- a/modules/nf-core/nirvana/tests/main.nf.test +++ b/modules/nf-core/nirvana/tests/main.nf.test @@ -11,24 +11,24 @@ nextflow_process { setup { run("UNTAR", alias: "UNTAR_CACHE") { - script "../../../untar/main.nf" + script "../../untar/main.nf" process { """ input[0] = [ - [ id:'cache' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/nirvana/cache.tar.gz', checkIfExists: true) + [ id:'Cache' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/Cache.tar', checkIfExists: true) ] """ } } run("UNTAR", alias: "UNTAR_SA") { - script "../../../untar/main.nf" + script "../../untar/main.nf" process { """ input[0] = [ - [ id:'sa' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/nirvana/supplementary_annotations.tar.gz', checkIfExists: true) + [ id:'SupplementaryAnnotation' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/SupplementaryAnnotation.tar', checkIfExists: true) ] """ } @@ -48,7 +48,9 @@ nextflow_process { [ id:'reference' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/SARS-CoV-2.ASM985889v3.dat', checkIfExists: true) ] - input[2] = UNTAR_CACHE.out.untar + input[2] = UNTAR_CACHE.out.untar.map { meta, dir -> + [ meta, dir, 'SARS-CoV-2' ] + } input[3] = UNTAR_SA.out.untar """ } @@ -57,12 +59,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - path(process.out.json[0][1]).linesGzip[0..2], - path(process.out.jsi[0][1]).linesGzip[0..2], - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } + { assert snapshot(process.out).match() } ) } @@ -83,7 +80,9 @@ nextflow_process { [ id:'reference' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/nirvana/SARS-CoV-2.ASM985889v3.dat', checkIfExists: true) ] - input[2] = UNTAR_CACHE.out.untar + input[2] = UNTAR_CACHE.out.untar.map { meta, dir -> + [ meta, dir, 'SARS-CoV-2' ] + } input[3] = UNTAR_SA.out.untar """ } diff --git a/modules/nf-core/nirvana/tests/main.nf.test.snap b/modules/nf-core/nirvana/tests/main.nf.test.snap new file mode 100644 index 000000000000..92d5f45c78f7 --- /dev/null +++ b/modules/nf-core/nirvana/tests/main.nf.test.snap @@ -0,0 +1,116 @@ +{ + "sarscov2 - vcf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,b2fbe43d83278deae2e91289872a11a1" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json.gz.jsi:md5,bec56314eb7d352430fd893f3e87b63d" + ] + ], + "2": [ + [ + "NIRVANA", + "nirvana", + "Nirvana 3.18.1" + ] + ], + "jsi": [ + [ + { + "id": "test" + }, + "test.json.gz.jsi:md5,bec56314eb7d352430fd893f3e87b63d" + ] + ], + "json": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,b2fbe43d83278deae2e91289872a11a1" + ] + ], + "versions_nirvana": [ + [ + "NIRVANA", + "nirvana", + "Nirvana 3.18.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-09T19:50:58.066341" + }, + "sarscov2 - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json.gz.jsi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "NIRVANA", + "nirvana", + "Nirvana 3.18.1" + ] + ], + "jsi": [ + [ + { + "id": "test" + }, + "test.json.gz.jsi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions_nirvana": [ + [ + "NIRVANA", + "nirvana", + "Nirvana 3.18.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-09T19:44:31.345294" + } +} \ No newline at end of file From ade1a99fc48c86b6bba26c2724c90a7c85424c9e Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Mon, 12 Jan 2026 09:29:11 +0100 Subject: [PATCH 03/10] use content due to timestamp in file --- modules/nf-core/nirvana/tests/main.nf.test | 10 ++- .../nf-core/nirvana/tests/main.nf.test.snap | 79 +++++++------------ 2 files changed, 39 insertions(+), 50 deletions(-) diff --git a/modules/nf-core/nirvana/tests/main.nf.test b/modules/nf-core/nirvana/tests/main.nf.test index 277d4a5ba93f..4c7a5e0a5531 100644 --- a/modules/nf-core/nirvana/tests/main.nf.test +++ b/modules/nf-core/nirvana/tests/main.nf.test @@ -59,7 +59,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + // Remove creationTime field from JSON and snapshot the rest + { assert snapshot( + path(process.out.json[0][1]).linesGzip.collect { + it.replaceAll(/"creationTime":"[^"]*",?/, '') + } + ).match("json_content") }, + // Just check JSI exists + { assert path(process.out.jsi[0][1]).exists() }, + { assert snapshot(process.out.versions_nirvana).match() } ) } diff --git a/modules/nf-core/nirvana/tests/main.nf.test.snap b/modules/nf-core/nirvana/tests/main.nf.test.snap index 92d5f45c78f7..55c81f3a1850 100644 --- a/modules/nf-core/nirvana/tests/main.nf.test.snap +++ b/modules/nf-core/nirvana/tests/main.nf.test.snap @@ -1,60 +1,41 @@ { + "json_content": { + "content": [ + [ + "{\"header\":{\"annotator\":\"Nirvana 3.18.1\",\"genomeAssembly\":\"SARSCoV2\",\"schemaVersion\":6,\"dataVersion\":\"0.27.66\",\"dataSources\":[{\"name\":\"RefSeq\",\"version\":\"NC_045512.2\",\"description\":\"Severe acute respiratory syndrome coronavirus 2 (SARS-CoV2)\",\"releaseDate\":\"2020-03-20\"},{\"name\":\"alleleFrequency\",\"version\":\"SARS-COV-2_AllFreq.tsv\",\"releaseDate\":\"2020-05-08\"},{\"name\":\"proteinDomains\",\"version\":\"SARS-CoV-2_ProteinDomains.tsv\",\"releaseDate\":\"2020-05-08\"},{\"name\":\"MitochondrialHeteroplasmy\",\"version\":\"20180410\",\"description\":\"Variant read frequency percentiles for the Mitochondrial reference\",\"releaseDate\":\"2020-05-21\"}],\"samples\":[\"test\"]},\"positions\":[", + "{\"chromosome\":\"MT192765.1\",\"position\":197,\"refAllele\":\"G\",\"altAlleles\":[\"T\"],\"quality\":7.3081,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-197-G-T\",\"chromosome\":\"MT192765.1\",\"begin\":197,\"end\":197,\"refAllele\":\"G\",\"altAllele\":\"T\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.197G>T\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":4788,\"refAllele\":\"C\",\"altAlleles\":[\"T\"],\"quality\":7.3081,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-4788-C-T\",\"chromosome\":\"MT192765.1\",\"begin\":4788,\"end\":4788,\"refAllele\":\"C\",\"altAllele\":\"T\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.4788C>T\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":8236,\"refAllele\":\"C\",\"altAlleles\":[\"A\"],\"quality\":7.3081,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-8236-C-A\",\"chromosome\":\"MT192765.1\",\"begin\":8236,\"end\":8236,\"refAllele\":\"C\",\"altAllele\":\"A\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.8236C>A\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":10506,\"refAllele\":\"TTATGACTGTGTCTCTTTTTGTTACATGCACCATATG\",\"altAlleles\":[\"TTATG\"],\"quality\":18.4617,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"0/1\"}],\"variants\":[{\"vid\":\"MT192765.1-10510-NACTGTGTCTCTTTTTGTTACATGCACCATATG-N\",\"chromosome\":\"MT192765.1\",\"begin\":10511,\"end\":10542,\"refAllele\":\"ACTGTGTCTCTTTTTGTTACATGCACCATATG\",\"altAllele\":\"-\",\"variantType\":\"deletion\",\"hgvsg\":\"MT192765.1:g.10511_10542del\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":11037,\"refAllele\":\"T\",\"altAlleles\":[\"C\"],\"quality\":7.3081,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-11037-T-C\",\"chromosome\":\"MT192765.1\",\"begin\":11037,\"end\":11037,\"refAllele\":\"T\",\"altAllele\":\"C\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.11037T>C\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":15009,\"refAllele\":\"G\",\"altAlleles\":[\"A\"],\"quality\":30.4183,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-15009-G-A\",\"chromosome\":\"MT192765.1\",\"begin\":15009,\"end\":15009,\"refAllele\":\"G\",\"altAllele\":\"A\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.15009G>A\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":18807,\"refAllele\":\"T\",\"altAlleles\":[\"C\"],\"quality\":136,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-18807-T-C\",\"chromosome\":\"MT192765.1\",\"begin\":18807,\"end\":18807,\"refAllele\":\"T\",\"altAllele\":\"C\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.18807T>C\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":23813,\"refAllele\":\"T\",\"altAlleles\":[\"C\"],\"quality\":4.3847,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-23813-T-C\",\"chromosome\":\"MT192765.1\",\"begin\":23813,\"end\":23813,\"refAllele\":\"T\",\"altAllele\":\"C\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.23813T>C\"}]},", + "{\"chromosome\":\"MT192765.1\",\"position\":24103,\"refAllele\":\"A\",\"altAlleles\":[\"G\"],\"quality\":30.4183,\"filters\":[\"LowQual\"],\"mappingQuality\":60,\"samples\":[{\"genotype\":\"1/1\"}],\"variants\":[{\"vid\":\"MT192765.1-24103-A-G\",\"chromosome\":\"MT192765.1\",\"begin\":24103,\"end\":24103,\"refAllele\":\"A\",\"altAllele\":\"G\",\"variantType\":\"SNV\",\"hgvsg\":\"MT192765.1:g.24103A>G\"}]}", + "]}" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-12T09:27:01.830246" + }, "sarscov2 - vcf": { "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.json.gz:md5,b2fbe43d83278deae2e91289872a11a1" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.json.gz.jsi:md5,bec56314eb7d352430fd893f3e87b63d" - ] - ], - "2": [ - [ - "NIRVANA", - "nirvana", - "Nirvana 3.18.1" - ] - ], - "jsi": [ - [ - { - "id": "test" - }, - "test.json.gz.jsi:md5,bec56314eb7d352430fd893f3e87b63d" - ] - ], - "json": [ - [ - { - "id": "test" - }, - "test.json.gz:md5,b2fbe43d83278deae2e91289872a11a1" - ] - ], - "versions_nirvana": [ - [ - "NIRVANA", - "nirvana", - "Nirvana 3.18.1" - ] + [ + [ + "NIRVANA", + "nirvana", + "Nirvana 3.18.1" ] - } + ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-09T19:50:58.066341" + "timestamp": "2026-01-12T09:27:01.842455" }, "sarscov2 - vcf - stub": { "content": [ @@ -111,6 +92,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-09T19:44:31.345294" + "timestamp": "2026-01-12T09:27:21.144398" } } \ No newline at end of file From a58237de414aa34d63717622091e8859d2f39392 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Mon, 12 Jan 2026 09:48:28 +0100 Subject: [PATCH 04/10] test with only using the docker container --- modules/nf-core/nirvana/main.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 9f8e0baa7c7f..780a989c45b1 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -3,9 +3,7 @@ process NIRVANA { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0be2df22eec1d7042d164febf61513ff31d5895a6ceecc6c3961364496b0be5a/data' - : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" + container 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70' input: tuple val(meta), path(vcf) From e61dc58d144bc03f85757ac39ae9efa27a22f69e Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Mon, 12 Jan 2026 10:27:10 +0100 Subject: [PATCH 05/10] test oras protocol. somehow dotnet is missing in the singularity container --- modules/nf-core/nirvana/main.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 780a989c45b1..4d6ff11fc0e0 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -3,7 +3,9 @@ process NIRVANA { label 'process_medium' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70' + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'oras://community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70' + : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" input: tuple val(meta), path(vcf) From 1af4b0fbad2c8d999f2fd7292a95a4d89f285dca Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Mon, 12 Jan 2026 10:32:26 +0100 Subject: [PATCH 06/10] use amd oras image --- modules/nf-core/nirvana/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 4d6ff11fc0e0..4f87f20230e1 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -4,7 +4,7 @@ process NIRVANA { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'oras://community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70' + ? 'oras://community.wave.seqera.io/library/nirvana:3.18.1--06981caabc5e08e1' : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" input: From 2b25a5cc904af6080a1d62a87e166e06a1de6fa6 Mon Sep 17 00:00:00 2001 From: Friederike Hanssen Date: Mon, 12 Jan 2026 13:28:07 +0100 Subject: [PATCH 07/10] Update modules/nf-core/nirvana/main.nf Co-authored-by: Adam Talbot <12817534+adamrtalbot@users.noreply.github.com> --- modules/nf-core/nirvana/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 4f87f20230e1..a1c322dd74ed 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -8,7 +8,7 @@ process NIRVANA { : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" input: - tuple val(meta), path(vcf) + tuple val(meta) , path(vcf) tuple val(meta2), path(reference) tuple val(meta3), path(cache), val(cache_prefix) tuple val(meta4), path(supplementary_annotations) From bbaff86b0f31b371b5fa72abaacdb5da3e191395 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Mon, 12 Jan 2026 15:01:08 +0100 Subject: [PATCH 08/10] test with symlink before pushing upstream --- modules/nf-core/nirvana/main.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 4f87f20230e1..fa03e86551fc 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -27,6 +27,9 @@ process NIRVANA { def cache_command = cache ? "-c ${cache}/${cache_prefix}" : "" def sa_command = supplementary_annotations ? "--sd ${supplementary_annotations}" : "" """ + + ln -sf /opt/conda/lib/dotnet/dotnet /opt/conda/bin/dotnet || true + Nirvana \\ -i ${vcf} \\ -r ${reference} \\ From d8b4bec409cebaa2c9e8edab35643eddeaae9a07 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Tue, 13 Jan 2026 10:09:14 +0100 Subject: [PATCH 09/10] test new container --- modules/nf-core/nirvana/main.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index 434ec9a7e4f1..a5399a584326 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -3,9 +3,7 @@ process NIRVANA { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'oras://community.wave.seqera.io/library/nirvana:3.18.1--06981caabc5e08e1' - : 'community.wave.seqera.io/library/nirvana:3.18.1--910f092f78f85c70'}" + container 'community.wave.seqera.io/library/nirvana:3.18.1--51c5bd56fef22808' input: tuple val(meta) , path(vcf) From 4ff25f716c64d4b4c6fd9a00d0fadb11cb09d821 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Tue, 13 Jan 2026 10:18:00 +0100 Subject: [PATCH 10/10] remove symlinking shouldn't be necessary anymore --- modules/nf-core/nirvana/main.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/nf-core/nirvana/main.nf b/modules/nf-core/nirvana/main.nf index a5399a584326..9a62a954b589 100644 --- a/modules/nf-core/nirvana/main.nf +++ b/modules/nf-core/nirvana/main.nf @@ -25,9 +25,6 @@ process NIRVANA { def cache_command = cache ? "-c ${cache}/${cache_prefix}" : "" def sa_command = supplementary_annotations ? "--sd ${supplementary_annotations}" : "" """ - - ln -sf /opt/conda/lib/dotnet/dotnet /opt/conda/bin/dotnet || true - Nirvana \\ -i ${vcf} \\ -r ${reference} \\