diff --git a/.nf-core.yml b/.nf-core.yml index d1036ec..e26e630 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -11,4 +11,4 @@ template: name: pairgenomealign org: nf-core outdir: . - version: 2.2.2dev + version: 2.2.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6010d90..d03eca0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.2.2](https://github.com/nf-core/pairgenomealign/releases/tag/2.2.2) "Juicy" - [January 30th 2026] + +### `Fixed` + +- Conforms to [nf-core template version `3.5.1`](https://nf-co.re/blog/2025/tools-3_5_0) ([#95](https://github.com/nf-core/pairgenomealign/issues/95), [#98](https://github.com/nf-core/pairgenomealign/issues/98)). +- Fixed nf-core logo ([#90](https://github.com/nf-core/pairgenomealign/issues/90)). +- Adjusted process requirements to `test_full` case ([#61](https://github.com/nf-core/pairgenomealign/issues/61)). +- Set an icon in the `--targetName` option in the documentation ([#92](https://github.com/nf-core/pairgenomealign/issues/92)). +- Fixed a bug of `last/train` records the wrong value for percent identity ([#96](https://github.com/nf-core/pairgenomealign/issues/96)). +- Merged output channels in `last/dotplot` ([#100](https://github.com/nf-core/pairgenomealign/issues/100)) +- Created missing `meta.yml` for subworkflows ([#101](https://github.com/nf-core/pairgenomealign/issues/101)). +- Exclude PNG files from pipeline test, because not reproducible in conda. + +### `Dependencies` + +| Dependency | Old version | New version | +| -------------- | ----------- | ----------- | +| `assemblyscan` | 0.4.1 | 1.0.0 | +| `MultiQC` | 1.30 | 1.33 | + ## [v2.2.1](https://github.com/nf-core/pairgenomealign/releases/tag/2.2.1) "C’est quoi ça?" - [August 5th 2025] ### `Fixed` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 57c02a3..8e56d09 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,5 +1,5 @@ report_comment: > - This report has been generated by the nf-core/pairgenomealign analysis pipeline. For information about how to interpret these results, please see the documentation. + This report has been generated by the nf-core/pairgenomealign analysis pipeline. For information about how to interpret these results, please see the documentation. report_section_order: "nf-core-pairgenomealign-methods-description": order: -1000 diff --git a/conf/modules.config b/conf/modules.config index 596c46f..399da5a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -15,7 +15,6 @@ process { publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] withName: 'ASSEMBLYSCAN' { @@ -51,7 +50,6 @@ process { ext.prefix = { "${meta.id}.m2o_aln" } ext.args = { "-m${params.last_split_mismap}" } } - withName: 'ALIGNMENT_SPLIT_O2O' { ext.prefix = { "${meta.id}.o2o_aln" } ext.args = { "--reverse -m${params.last_split_mismap}" } @@ -118,7 +116,6 @@ process { publishDir = [ path: { "${params.outdir}/multiqc" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -126,7 +123,6 @@ process { publishDir = [ path: { "${params.outdir}/multiqc/assemblyscan_plot_data" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -140,7 +136,7 @@ process { publishDir = [ path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, - saveAs: { filename -> (filename.equals('versions.yml') || filename.endsWith('.sizes')) ? null : filename } + saveAs: { filename -> (filename.endsWith('.sizes')) ? null : filename } ] } diff --git a/docs/images/pairgenomealign-tubemap.png b/docs/images/pairgenomealign-tubemap.png index ed502a6..6bbc860 100644 Binary files a/docs/images/pairgenomealign-tubemap.png and b/docs/images/pairgenomealign-tubemap.png differ diff --git a/docs/images/pairgenomealign-tubemap.svg b/docs/images/pairgenomealign-tubemap.svg index 41c5c7d..749a2ec 100644 --- a/docs/images/pairgenomealign-tubemap.svg +++ b/docs/images/pairgenomealign-tubemap.svg @@ -8,16 +8,16 @@ version="1.1" id="svg1" sodipodi:docname="pairgenomealign-tubemap.svg" - inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" inkscape:export-filename="pairgenomealign-tubemap.png" inkscape:export-xdpi="121.55262" inkscape:export-ydpi="121.55262" + xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" - xmlns:svg="http://www.w3.org/2000/svg"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - last/dotplot - last/dotplot - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - samtools + id="tspan17">samtools / + id="tspan19">/ bgzip - bgzipsamtools + id="tspan23">samtools / + id="tspan25">/ dict - dictExport - - - - - v2.2 - - - - - - - - - - - - - - - - - - - nf- - core / - - - - - - - pairgenome - align - - - - - Export - - - - - - - - - - - One-to-one - One-to-one - - - Many-to-one - Many-to-one - - - Outputs - Outputs - - - modules - modules - - - One-to-many - One-to-many - - - Target genome - Target genome - - - - Query genome(s) - - Query genome(s) - Inputs - Inputs - - - - Many-to-many - - - Many-to-manyOptional / Alternative - Optional / Alternative - - - - - + sodipodi:nodetypes="cc" />nf-core/pairgenomealignv2.2 diff --git a/modules.json b/modules.json index f40306f..e3fc973 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "last/dotplot": { "branch": "master", - "git_sha": "d92ad4055433d66d3e3eb4fd8d729d6ae9f75693", + "git_sha": "1f966905b442fa623130663471eac3b9c5d35527", "installed_by": ["modules"] }, "last/lastal": { @@ -27,7 +27,7 @@ }, "last/mafconvert": { "branch": "master", - "git_sha": "d92ad4055433d66d3e3eb4fd8d729d6ae9f75693", + "git_sha": "1f966905b442fa623130663471eac3b9c5d35527", "installed_by": ["modules"] }, "last/split": { @@ -76,12 +76,12 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2", + "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", + "git_sha": "fdc08b8b1ae74f56686ce21f7ea11ad11990ce57", "installed_by": ["subworkflows"] } } diff --git a/modules/local/multiqc_assemblyscan_plot_data/main.nf b/modules/local/multiqc_assemblyscan_plot_data/main.nf index 730cfc1..6e29149 100644 --- a/modules/local/multiqc_assemblyscan_plot_data/main.nf +++ b/modules/local/multiqc_assemblyscan_plot_data/main.nf @@ -15,7 +15,7 @@ process MULTIQC_ASSEMBLYSCAN_PLOT_DATA { output: path ("*_mqc.tsv") , emit: tsv - path "versions.yml", emit: versions + tuple val("${task.process}"), val('jq'), eval("jq --version 2>&1 | sed 's/jq-//'"), emit: versions_jq, topic: versions when: task.ext.when == null || task.ext.when @@ -53,11 +53,6 @@ process MULTIQC_ASSEMBLYSCAN_PLOT_DATA { printf "\$(basename \$i .json)\t" >> contig_length_mqc.tsv jq -r '[.total_contig_length, .min_contig_length, .max_contig_length, .total_contig, .contigs_greater_1k, .contigs_greater_10k] | @tsv' \$i >> contig_length_mqc.tsv done - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - jq: \$(jq --version 2>&1 | sed 's/jq-//') - END_VERSIONS """ stub: @@ -66,10 +61,5 @@ process MULTIQC_ASSEMBLYSCAN_PLOT_DATA { """ touch gc_summary_mqc.tsv touch contig_length_mqc.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - jq: \$(jq --version 2>&1 | sed 's/jq-//') - END_VERSIONS """ } diff --git a/modules/nf-core/last/dotplot/main.nf b/modules/nf-core/last/dotplot/main.nf index 7ec7204..71d9acf 100644 --- a/modules/nf-core/last/dotplot/main.nf +++ b/modules/nf-core/last/dotplot/main.nf @@ -14,8 +14,7 @@ process LAST_DOTPLOT { val(filter) output: - tuple val(meta), path("*.gif"), optional:true, emit: gif - tuple val(meta), path("*.png"), optional:true, emit: png + tuple val(meta), path("*.{gif,png}"), emit: plot // last-dotplot has no --version option so let's use lastal from the same suite tuple val("${task.process}"), val('last'), eval("lastal --version | sed 's/lastal //'"), emit: versions_last, topic: versions diff --git a/modules/nf-core/last/dotplot/meta.yml b/modules/nf-core/last/dotplot/meta.yml index ce19b4c..584ebd5 100644 --- a/modules/nf-core/last/dotplot/meta.yml +++ b/modules/nf-core/last/dotplot/meta.yml @@ -50,27 +50,16 @@ input: type: boolean description: Remove isolated alignments using the `maf-linked` software. output: - gif: + plot: - - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*.gif": + - "*.{gif,png}": type: file - description: Pairwise alignment dot plot image, in GIF format. - pattern: "*.gif" - ontologies: [] - png: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.png": - type: file - description: Pairwise alignment dot plot image, in PNG format. - pattern: "*.png" + description: Pairwise alignment dot plot image, in GIF or PNG format. + pattern: "*.{gif,png}" ontologies: [] versions_last: - - "${task.process}": diff --git a/modules/nf-core/last/dotplot/tests/main.nf.test b/modules/nf-core/last/dotplot/tests/main.nf.test index 6efb5d8..ef9ad36 100644 --- a/modules/nf-core/last/dotplot/tests/main.nf.test +++ b/modules/nf-core/last/dotplot/tests/main.nf.test @@ -36,7 +36,7 @@ nextflow_process { { assert snapshot( process.out.findAll { key, val -> key.startsWith('versions') } ).match() }, - { assert file(process.out.png.get(0).get(1)).exists() } + { assert file(process.out.plot.get(0).get(1)).exists() } ) } @@ -69,7 +69,7 @@ nextflow_process { { assert snapshot( process.out.findAll { key, val -> key.startsWith('versions') } ).match() }, - { assert file(process.out.png.get(0).get(1)).exists() } + { assert file(process.out.plot.get(0).get(1)).exists() } ) } diff --git a/modules/nf-core/last/dotplot/tests/main.nf.test.snap b/modules/nf-core/last/dotplot/tests/main.nf.test.snap index c2a6c2e..ba653f6 100644 --- a/modules/nf-core/last/dotplot/tests/main.nf.test.snap +++ b/modules/nf-core/last/dotplot/tests/main.nf.test.snap @@ -11,25 +11,19 @@ ] ], "1": [ - - ], - "2": [ [ "LAST_DOTPLOT", "last", "1611" ] ], - "gif": [ + "plot": [ [ { "id": "test" }, "test.gif:md5,cec730f1d060a82553cefe2311708bad" ] - ], - "png": [ - ], "versions_last": [ [ @@ -41,18 +35,15 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-09T16:28:15.129985153" + "timestamp": "2026-01-21T11:30:29.921535429" }, "sarscov2 - contigs - genome - png - stub": { "content": [ { "0": [ - - ], - "1": [ [ { "id": "test" @@ -60,17 +51,14 @@ "test.png:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "2": [ + "1": [ [ "LAST_DOTPLOT", "last", "1611" ] ], - "gif": [ - - ], - "png": [ + "plot": [ [ { "id": "test" @@ -88,10 +76,10 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-09T16:28:21.728106176" + "timestamp": "2026-01-21T11:31:00.80436435" }, "sarscov2 - contigs - genome - png - filter": { "content": [ diff --git a/modules/nf-core/last/mafconvert/main.nf b/modules/nf-core/last/mafconvert/main.nf index 418710d..d504ff1 100644 --- a/modules/nf-core/last/mafconvert/main.nf +++ b/modules/nf-core/last/mafconvert/main.nf @@ -15,18 +15,7 @@ process LAST_MAFCONVERT { tuple val(meta5), path(dict) output: - tuple val(meta), path("*.axt.gz"), optional:true, emit: axt_gz - tuple val(meta), path("*.bam"), optional:true, emit: bam - tuple val(meta), path("*.bed.gz"), optional:true, emit: bed_gz - tuple val(meta), path("*.blast.gz"), optional:true, emit: blast_gz - tuple val(meta), path("*.blasttab.gz"), optional:true, emit: blasttab_gz - tuple val(meta), path("*.chain.gz"), optional:true, emit: chain_gz - tuple val(meta), path("*.cram"), optional:true, emit: cram - tuple val(meta), path("*.gff.gz"), optional:true, emit: gff_gz - tuple val(meta), path("*.html.gz"), optional:true, emit: html_gz - tuple val(meta), path("*.psl.gz"), optional:true, emit: psl_gz - tuple val(meta), path("*.sam.gz"), optional:true, emit: sam_gz - tuple val(meta), path("*.tab.gz"), optional:true, emit: tab_gz + tuple val(meta), path("*.{axt.gz,bam,bed.gz,blast.gz,blasttab.gz,chain.gz,cram,gff.gz,html.gz,psl.gz,sam.gz,tab.gz}"), emit: alignment // last-dotplot has no --version option so let's use lastal from the same suite tuple val("${task.process}"), val('last'), eval("lastal --version | sed 's/lastal //'"), emit: versions_last, topic: versions diff --git a/modules/nf-core/last/mafconvert/meta.yml b/modules/nf-core/last/mafconvert/meta.yml index 5245c2c..8e90468 100644 --- a/modules/nf-core/last/mafconvert/meta.yml +++ b/modules/nf-core/last/mafconvert/meta.yml @@ -73,149 +73,18 @@ input: pattern: "*.dict" ontologies: [] output: - axt_gz: + alignment: - - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*.axt.gz": + - "*.{axt.gz,bam,bed.gz,blast.gz,blasttab.gz,chain.gz,cram,gff.gz,html.gz,psl.gz,sam.gz,tab.gz}": type: file - description: Gzipped pairwise alignment in Axt (Blastz) format - (optional) - pattern: "*.axt.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - bam: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.bam": - type: file - description: Pairwise alignment in BAM format (optional) - pattern: "*.bam" + description: Pairwise alignment exported to Axt, BAM, BED, BLAST, Chain, + CRAM, GFF, HTML PSL, SAM or Tab format. + pattern: "*.{axt.gz,bam,bed.gz,blast.gz,blasttab.gz,chain.gz,cram,gff.gz,html.gz,psl.gz,sam.gz,tab.gz}" ontologies: [] - bed_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.bed.gz": - type: file - description: Gzipped pairwise alignment in BED format (optional) - pattern: "*.bed.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - blast_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.blast.gz": - type: file - description: Gzipped pairwise alignment in blast format (optional) - pattern: "*.blast.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - blasttab_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.blasttab.gz": - type: file - description: Gzipped pairwise alignment in blasttab format (optional) - pattern: "*.blasttab.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - chain_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.chain.gz": - type: file - description: Gzipped pairwise alignment in UCSC chain format (optional) - pattern: "*.chain.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - cram: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.cram": - type: file - description: Pairwise alignment in CRAM format (optional) - pattern: "*.cram" - ontologies: [] - gff_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.gff.gz": - type: file - description: Gzipped pairwise alignment in GFF format (optional) - pattern: "*.gff.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - html_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.html.gz": - type: file - description: Gzipped pairwise alignment in HTML format (optional) - pattern: "*.html.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - psl_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.psl.gz": - type: file - description: Gzipped pairwise alignment in PSL (BLAT) format (optional) - pattern: "*.psl.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - sam_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.sam.gz": - type: file - description: Gzipped pairwise alignment in SAM format (optional) - pattern: "*.sam.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format - tab_gz: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.tab.gz": - type: file - description: Gzipped pairwise alignment in TAB format (optional) - pattern: "*.tab.gz" - ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format versions_last: - - "${task.process}": type: string diff --git a/modules/nf-core/last/mafconvert/tests/main.nf.test b/modules/nf-core/last/mafconvert/tests/main.nf.test index 4144f4f..801eea7 100644 --- a/modules/nf-core/last/mafconvert/tests/main.nf.test +++ b/modules/nf-core/last/mafconvert/tests/main.nf.test @@ -85,7 +85,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - process.out.bam.collect { bam(it[1]).getReadsMD5() }, + process.out.alignment.collect { bam(it[1]).getReadsMD5() }, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -124,7 +124,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - process.out.cram.collect { cram(it[1], it[1].replaceAll(/[^\/]+\.cram$/, 'genome.fasta')).getReadsMD5() }, + process.out.alignment.collect { cram(it[1], it[1].replaceAll(/[^\/]+\.cram$/, 'genome.fasta')).getReadsMD5() }, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) diff --git a/modules/nf-core/last/mafconvert/tests/main.nf.test.snap b/modules/nf-core/last/mafconvert/tests/main.nf.test.snap index fa2f7c1..47fdf92 100644 --- a/modules/nf-core/last/mafconvert/tests/main.nf.test.snap +++ b/modules/nf-core/last/mafconvert/tests/main.nf.test.snap @@ -3,40 +3,6 @@ "content": [ { "0": [ - - ], - "1": [ - - ], - "10": [ - - ], - "11": [ - - ], - "12": [ - [ - "LAST_MAFCONVERT", - "last", - "1611" - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - - ], - "7": [ [ { "id": "contigs.genome" @@ -44,52 +10,20 @@ "contigs.genome.gff.gz:md5,f34ea8242bbc9b4d7eefa04e0fcf8c32" ] ], - "8": [ - - ], - "9": [ - - ], - "axt_gz": [ - - ], - "bam": [ - - ], - "bed_gz": [ - - ], - "blast_gz": [ - - ], - "blasttab_gz": [ - - ], - "chain_gz": [ - - ], - "cram": [ - + "1": [ + [ + "LAST_MAFCONVERT", + "last", + "1611" + ] ], - "gff_gz": [ + "alignment": [ [ { "id": "contigs.genome" }, "contigs.genome.gff.gz:md5,f34ea8242bbc9b4d7eefa04e0fcf8c32" ] - ], - "html_gz": [ - - ], - "psl_gz": [ - - ], - "sam_gz": [ - - ], - "tab_gz": [ - ], "versions_last": [ [ @@ -101,55 +35,15 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-14T09:53:28.310645869" + "timestamp": "2026-01-21T17:42:43.204622402" }, "sarscov2 - psl": { "content": [ { "0": [ - - ], - "1": [ - - ], - "10": [ - - ], - "11": [ - - ], - "12": [ - [ - "LAST_MAFCONVERT", - "last", - "1611" - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - - ], - "7": [ - - ], - "8": [ - - ], - "9": [ [ { "id": "contigs.genome" @@ -157,46 +51,20 @@ "contigs.genome.psl.gz:md5,515d3cff55d159309bedd38f47dd034b" ] ], - "axt_gz": [ - - ], - "bam": [ - - ], - "bed_gz": [ - - ], - "blast_gz": [ - - ], - "blasttab_gz": [ - - ], - "chain_gz": [ - - ], - "cram": [ - - ], - "gff_gz": [ - - ], - "html_gz": [ - + "1": [ + [ + "LAST_MAFCONVERT", + "last", + "1611" + ] ], - "psl_gz": [ + "alignment": [ [ { "id": "contigs.genome" }, "contigs.genome.psl.gz:md5,515d3cff55d159309bedd38f47dd034b" ] - ], - "sam_gz": [ - - ], - "tab_gz": [ - ], "versions_last": [ [ @@ -208,26 +76,10 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-14T09:52:54.743230439" - }, - "versions": { - "content": [ - [ - [ - "LAST_MAFCONVERT", - "last", - "1611" - ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-14T09:53:10.998252717" + "timestamp": "2026-01-21T17:40:38.220178767" }, "sarscov2 - cram": { "content": [ @@ -254,12 +106,6 @@ "content": [ { "0": [ - - ], - "1": [ - - ], - "10": [ [ { "id": "contigs.genome" @@ -267,80 +113,20 @@ "contigs.genome.sam.gz:md5,2e4b7e9f0abf633d9ea25a8d30c53918" ] ], - "11": [ - - ], - "12": [ + "1": [ [ "LAST_MAFCONVERT", "last", "1611" ] ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - - ], - "7": [ - - ], - "8": [ - - ], - "9": [ - - ], - "axt_gz": [ - - ], - "bam": [ - - ], - "bed_gz": [ - - ], - "blast_gz": [ - - ], - "blasttab_gz": [ - - ], - "chain_gz": [ - - ], - "cram": [ - - ], - "gff_gz": [ - - ], - "html_gz": [ - - ], - "psl_gz": [ - - ], - "sam_gz": [ + "alignment": [ [ { "id": "contigs.genome" }, "contigs.genome.sam.gz:md5,2e4b7e9f0abf633d9ea25a8d30c53918" ] - ], - "tab_gz": [ - ], "versions_last": [ [ @@ -352,55 +138,15 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-14T09:53:02.920638581" + "timestamp": "2026-01-21T17:40:59.179564331" }, "sarscov2 - psl - stub": { "content": [ { "0": [ - - ], - "1": [ - - ], - "10": [ - - ], - "11": [ - - ], - "12": [ - [ - "LAST_MAFCONVERT", - "last", - "1611" - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - - ], - "7": [ - - ], - "8": [ - - ], - "9": [ [ { "id": "contigs.genome" @@ -408,46 +154,20 @@ "contigs.genome.psl.gz:md5,f50b84b1db4b83ba62ec1deacc69c260" ] ], - "axt_gz": [ - - ], - "bam": [ - - ], - "bed_gz": [ - - ], - "blast_gz": [ - - ], - "blasttab_gz": [ - - ], - "chain_gz": [ - - ], - "cram": [ - - ], - "gff_gz": [ - - ], - "html_gz": [ - + "1": [ + [ + "LAST_MAFCONVERT", + "last", + "1611" + ] ], - "psl_gz": [ + "alignment": [ [ { "id": "contigs.genome" }, "contigs.genome.psl.gz:md5,f50b84b1db4b83ba62ec1deacc69c260" ] - ], - "sam_gz": [ - - ], - "tab_gz": [ - ], "versions_last": [ [ @@ -459,10 +179,10 @@ } ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-14T09:53:36.479204045" + "timestamp": "2026-01-21T17:43:09.113538425" }, "sarscov2 - bam": { "content": [ diff --git a/nextflow.config b/nextflow.config index 5a59a0a..53cc6ec 100644 --- a/nextflow.config +++ b/nextflow.config @@ -280,13 +280,21 @@ manifest { contribution: ['contributor'], orcid: '' ], + [ + name: 'Takahiro Fujita', + affiliation: 'Suntory Global Innovation Center Limited', + email: 'takahiro-fujita@suntory.co.jp', + github: 'takiifujita-ui', + contribution: ['contributor'], + orcid: '' + ], ] homePage = 'https://github.com/nf-core/pairgenomealign' description = """Pairwise alignment pipeline (genome to genome or reads to genome)""" mainScript = 'main.nf' defaultBranch = 'master' nextflowVersion = '!>=25.04.0' - version = '2.2.2dev' + version = '2.2.2' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 14df07b..8e285c0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -34,7 +34,8 @@ "type": "string", "default": "target", "help_text": "By default the _target_ genome is named `target` and this name is concatenated with the sample IDs using `___` as a separator to construct alignment file names. Use this option to provide a more informative name for the target genome.", - "description": "Target genome name." + "description": "Target genome name.", + "fa_icon": "fas fa-file-signature" }, "skip_assembly_qc": { "type": "boolean", diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 04e3dd3..9d3a6f3 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,8 +21,8 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2026-01-20T04:49:23+00:00", + "creativeWorkStatus": "Stable", + "datePublished": "2026-01-22T02:11:21+00:00", "description": "

\n \n \n \"nf-core/pairgenomealign\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/pairgenomealign)\n[![GitHub Actions CI Status](https://github.com/nf-core/pairgenomealign/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/pairgenomealign/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pairgenomealign/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pairgenomealign/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pairgenomealign/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.13910535-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.13910535)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/pairgenomealign)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pairgenomealign-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pairgenomealign)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/pairgenomealign** is a bioinformatics pipeline that aligns one or more _query_ genomes to a _target_ genome, and plots pairwise representations.\n\n![Tubemap workflow summary](docs/images/pairgenomealign-tubemap.png \"Tubemap workflow summary\")\n\nThe main steps of the pipeline are:\n\n1. Genome QC ([`assembly-scan`](https://github.com/rpetit3/assembly-scan)).\n2. Genome indexing ([`lastdb`](https://gitlab.com/mcfrith/last/-/blob/main/doc/lastdb.rst)).\n3. Genome pairwise alignments ([`lastal`](https://gitlab.com/mcfrith/last/-/blob/main/doc/lastal.rst)).\n4. Alignment plotting ([`last-dotplot`](https://gitlab.com/mcfrith/last/-/blob/main/doc/last-dotplot.rst)).\n5. Alignment export to various formats with [`maf-convert`](https://gitlab.com/mcfrith/last/-/blob/main/doc/maf-convert.rst), plus [`Samtools`](https://www.htslib.org/) for SAM/BAM/CRAM.\n\nThe pipeline can generate four kinds of outputs, called _many-to-many_, _many-to-one_, _one-to-many_ and _one-to-one_, depending on whether sequences of one genome are allowed match the other genome multiple times or not.\n\nThese alignments are output in [MAF](https://genome.ucsc.edu/FAQ/FAQformat.html#format5) format, and optional line plot representations are output in PNG format.\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.csv`:\n\n```csv\nsample,fasta\nquery_1,path-to-query-genome-file-one.fasta\nquery_2,path-to-query-genome-file-two.fasta\n```\n\nEach row represents a fasta file, this can also contain multiple rows to accomodate multiple query genomes in fasta format.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/pairgenomealign \\\n -profile \\\n --target sequencefile.fa \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pairgenomealign/usage) and the [parameter documentation](https://nf-co.re/pairgenomealign/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/pairgenomealign/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/pairgenomealign/output).\n\n## Credits\n\n`nf-core/pairgenomealign` was originally written by [charles-plessy](https://github.com/charles-plessy); the original versions are available at .\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Mahdi Mohammed](https://github.com/U13bs1125) ported the original pipeline to _nf-core_ template 2.14.x.\n- [Martin Frith](https://github.com/mcfrith/), the author of LAST, gave us extensive feedback and advices.\n- [Michael Mansfield](https://github.com/mjmansfi) tested the pipeline and provided critical comments.\n- [Aleksandra Bliznina](https://github.com/aleksandrabliznina) contributed to the creation of the initial `last/*` modules.\n- [Jiashun Miao](https://github.com/miaojiashun) and [Huyen Pham](https://github.com/ngochuyenpham) tested the pipeline on vertebrate genomes.\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pairgenomealign` channel](https://nfcore.slack.com/channels/pairgenomealign) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use this pipeline, please cite:\n\n> **Extreme genome scrambling in marine planktonic Oikopleura dioica cryptic species.**\n> Charles Plessy, Michael J. Mansfield, Aleksandra Bliznina, Aki Masunaga, Charlotte West, Yongkai Tan, Andrew W. Liu, Jan Gra\u0161i\u010d, Mar\u00eda Sara del R\u00edo Pisula, Gaspar S\u00e1nchez-Serna, Marc Fabrega-Torrus, Alfonso Ferr\u00e1ndez-Rold\u00e1n, Vittoria Roncalli, Pavla Navratilova, Eric M. Thompson, Takeshi Onuma, Hiroki Nishida, Cristian Ca\u00f1estro, Nicholas M. Luscombe.\n> _Genome Res._ 2024. 34: 426-440; doi: [10.1101/2023.05.09.539028](https://doi.org/10.1101/gr.278295.123). PubMed ID: [38621828](https://pubmed.ncbi.nlm.nih.gov/38621828/)\n\n[OIST research news article](https://www.oist.jp/news-center/news/2024/4/25/oikopleura-who-species-identity-crisis-genome-community)\n\nAnd also please cite the [LAST papers](https://gitlab.com/mcfrith/last/-/blob/main/doc/last-papers.rst).\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { @@ -102,7 +102,7 @@ }, "mentions": [ { - "@id": "#b6ef7aeb-4050-4bd6-98c9-986d260042b9" + "@id": "#414f09f0-f838-4317-8cd9-d5f53d9cbba0" } ], "name": "nf-core/pairgenomealign" @@ -138,7 +138,7 @@ } ], "dateCreated": "", - "dateModified": "2026-01-20T13:49:23Z", + "dateModified": "2026-01-22T11:11:21Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -173,10 +173,10 @@ }, "url": [ "https://github.com/nf-core/pairgenomealign", - "https://nf-co.re/pairgenomealign/dev/" + "https://nf-co.re/pairgenomealign/2.2.2/" ], "version": [ - "2.2.2dev" + "2.2.2" ] }, { @@ -192,11 +192,11 @@ "version": "!>=25.04.0" }, { - "@id": "#b6ef7aeb-4050-4bd6-98c9-986d260042b9", + "@id": "#414f09f0-f838-4317-8cd9-d5f53d9cbba0", "@type": "TestSuite", "instance": [ { - "@id": "#ccfe157b-c4ae-4b32-8909-9e3f4c412941" + "@id": "#c5f8b536-dce7-4565-bd4d-b8f9addad115" } ], "mainEntity": { @@ -205,7 +205,7 @@ "name": "Test suite for nf-core/pairgenomealign" }, { - "@id": "#ccfe157b-c4ae-4b32-8909-9e3f4c412941", + "@id": "#c5f8b536-dce7-4565-bd4d-b8f9addad115", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pairgenomealign", "resource": "repos/nf-core/pairgenomealign/actions/workflows/nf-test.yml", diff --git a/subworkflows/local/fasta_bgzip_index_dict_samtools/meta.yml b/subworkflows/local/fasta_bgzip_index_dict_samtools/meta.yml index b440a02..58e9c18 100644 --- a/subworkflows/local/fasta_bgzip_index_dict_samtools/meta.yml +++ b/subworkflows/local/fasta_bgzip_index_dict_samtools/meta.yml @@ -43,12 +43,27 @@ output: Channel containing sequence dictionary files Structure: [ val(meta), path(dict) ] pattern: "*.dict" - - versions: - type: file - description: | - File containing software versions - Structure: [ path(versions.yml) ] - pattern: "versions.yml" + - versions_samtools: + - - "${task.process}": + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | head -n 1 | sed 's/^.*samtools //'": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - "${task.process}": + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | head -n 1 | sed 's/^.*samtools //'": + type: eval + description: The expression to obtain the version of the tool authors: - "@charles-plessy" maintainers: diff --git a/subworkflows/local/pairalign_m2m/meta.yml b/subworkflows/local/pairalign_m2m/meta.yml new file mode 100644 index 0000000..88e955f --- /dev/null +++ b/subworkflows/local/pairalign_m2m/meta.yml @@ -0,0 +1,70 @@ +name: pairalign_m2m +description: | + Performs many-to-many pairwise genome alignment using LAST and generates multiple alignment views (M2M, M2O, O2M, O2O). + This subworkflow indexes the target genome, trains alignment parameters, performs many-to-many alignment, + and derives many-to-one, one-to-many, and one-to-one alignments through split operations. + Optionally generates dotplots for each alignment type with filtering options. +keywords: + - alignment + - genomics + - LAST + - pairwise alignment + - many-to-many + - dotplot +components: + - last/lastdb + - last/train + - last/lastal + - last/split + - last/dotplot +input: + - ch_target: + type: channel + description: | + The target genome file + Structure: [meta, fasta] + - ch_queries: + type: channel + description: | + Query genome sequences from samplesheet + Structure: [meta, fasta] + - ch_target_bed: + type: channel + description: | + BED file with positions of poly-N stretches in target genome + Structure: [meta, bed] + - ch_queries_bed: + type: channel + description: | + BED files with positions of poly-N stretches in query genomes + Structure: [meta, bed] +output: + - multiqc: + type: channel + description: | + MultiQC compatible files from training and split operations + Structure: [file] + - m2m: + type: channel + description: | + Many-to-many alignment in MAF format + Structure: [meta, maf] + - m2o: + type: channel + description: | + Many-to-one alignment in MAF format + Structure: [meta, maf] + - o2m: + type: channel + description: | + One-to-many alignment in MAF format + Structure: [meta, maf] + - o2o: + type: channel + description: | + One-to-one alignment in MAF format + Structure: [meta, maf] +authors: + - "@charles-plessy" +maintainers: + - "@charles-plessy" diff --git a/subworkflows/local/pairalign_m2o/meta.yml b/subworkflows/local/pairalign_m2o/meta.yml new file mode 100644 index 0000000..13355fe --- /dev/null +++ b/subworkflows/local/pairalign_m2o/meta.yml @@ -0,0 +1,60 @@ +name: pairalign_m2o +description: | + Performs many-to-one pairwise genome alignment using LAST and generates alignment views (M2O, O2O). + This subworkflow indexes the target genome, trains alignment parameters, performs direct many-to-one alignment + using specific parameter modules, and derives one-to-one alignment through split operation. + Optionally generates dotplots for each alignment type with filtering options. +keywords: + - alignment + - genomics + - LAST + - pairwise alignment + - many-to-one + - dotplot +components: + - last/lastdb + - last/train + - last/lastal + - last/split + - last/dotplot +input: + - ch_target: + type: channel + description: | + The target genome file + Structure: [meta, fasta] + - ch_queries: + type: channel + description: | + Query genome sequences from samplesheet + Structure: [meta, fasta] + - ch_target_bed: + type: channel + description: | + BED file with positions of poly-N stretches in target genome + Structure: [meta, bed] + - ch_queries_bed: + type: channel + description: | + BED files with positions of poly-N stretches in query genomes + Structure: [meta, bed] +output: + - multiqc: + type: channel + description: | + MultiQC compatible files from training and split operations + Structure: [file] + - m2o: + type: channel + description: | + Many-to-one alignment in MAF format + Structure: [meta, maf] + - o2o: + type: channel + description: | + One-to-one alignment in MAF format + Structure: [meta, maf] +authors: + - "@charles-plessy" +maintainers: + - "@charles-plessy" diff --git a/subworkflows/local/utils_nfcore_pairgenomealign_pipeline/meta.yml b/subworkflows/local/utils_nfcore_pairgenomealign_pipeline/meta.yml new file mode 100644 index 0000000..b8155c1 --- /dev/null +++ b/subworkflows/local/utils_nfcore_pairgenomealign_pipeline/meta.yml @@ -0,0 +1,101 @@ +name: utils_nfcore_pairgenomealign_pipeline +description: | + Pipeline-specific utility workflows for nf-core/pairgenomealign. + Provides initialization and completion functionality including parameter validation, + input samplesheet parsing, version management, email notifications, and MultiQC report handling. +keywords: + - utility + - pipeline + - initialization + - completion + - validation + - notifications +components: + - utils_nfschema_plugin + - utils_nfcore_pipeline + - utils_nextflow_pipeline +workflows: + - PIPELINE_INITIALISATION: + description: | + Initializes the pipeline by validating parameters, checking configuration, + printing help/version information, and parsing the input samplesheet. + input: + - version: + type: boolean + description: Display version and exit + - validate_params: + type: boolean + description: Validate parameters against schema at runtime + - monochrome_logs: + type: boolean + description: Do not use colored log outputs + - nextflow_cli_args: + type: array + description: List of positional Nextflow CLI arguments + - outdir: + type: string + description: Output directory where results will be saved + - input: + type: string + description: Path to input samplesheet + - help: + type: boolean + description: Display help message and exit + - help_full: + type: boolean + description: Show full help message + - show_hidden: + type: boolean + description: Show hidden parameters in help message + output: + - samplesheet: + type: channel + description: Parsed samplesheet channel + - versions: + type: channel + description: Software versions channel + - PIPELINE_COMPLETION: + description: | + Handles pipeline completion tasks including sending email notifications, + generating completion summaries, and handling pipeline errors. + input: + - email: + type: string + description: Email address for notifications + - email_on_fail: + type: string + description: Email address for failure notifications + - plaintext_email: + type: boolean + description: Send plain-text email instead of HTML + - outdir: + type: path + description: Output directory where results are published + - monochrome_logs: + type: boolean + description: Disable ANSI color codes in log output + - hook_url: + type: string + description: Hook URL for notifications (e.g., Slack) + - multiqc_report: + type: string + description: Path to MultiQC report +functions: + - validateInputParameters: + description: Check and validate pipeline parameters + - validateInputSamplesheet: + description: Validate channels from input samplesheet + - getGenomeAttribute: + description: Get attribute from genome config file + - genomeExistsError: + description: Exit pipeline if incorrect genome key provided + - toolCitationText: + description: Generate tool citations text for MultiQC + - toolBibliographyText: + description: Generate tool bibliography text for MultiQC + - methodsDescriptionText: + description: Generate methods description text for MultiQC report +authors: + - "@charles-plessy" +maintainers: + - "@charles-plessy" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index ee4738c..1df8b76 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -38,7 +38,7 @@ workflow UTILS_NFSCHEMA_PLUGIN { } log.info paramsHelp( help_options, - params.help instanceof String ? params.help : "", + (params.help instanceof String && params.help != "true") ? params.help : "", ) exit 0 } @@ -71,4 +71,3 @@ workflow UTILS_NFSCHEMA_PLUGIN { emit: dummy_emit = true } - diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 8d8c737..f6537cc 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,5 +1,5 @@ plugins { - id "nf-schema@2.5.1" + id "nf-schema@2.6.1" } validation { diff --git a/tests/default.nf.test b/tests/default.nf.test index e9a95c6..736afc0 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -14,9 +14,9 @@ nextflow_pipeline { then { // stable_name: All files + folders in ${params.outdir}/ with a stable name - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}', '**.png']) // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore', ignore: ['**.png']) assertAll( { assert workflow.success}, { assert snapshot( diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index a667c7f..1fb0d70 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -32,23 +32,22 @@ "CUTN_TARGET": { "seqtk": "1.4-r122" }, + "MULTIQC_ASSEMBLYSCAN_PLOT_DATA": { + "jq": "1.7.1" + }, "Workflow": { - "nf-core/pairgenomealign": "v2.2.2dev" + "nf-core/pairgenomealign": "v2.2.2" } }, [ "alignment", - "alignment/target___test1.m2o_plt.png", "alignment/target___test1.o2o_aln.maf.gz", "alignment/target___test1.o2o_aln.tsv", - "alignment/target___test1.o2o_plt.png", "alignment/target___test1.sam.gz", "alignment/target___test1.train", "alignment/target___test1.train.tsv", - "alignment/target___test2.m2o_plt.png", "alignment/target___test2.o2o_aln.maf.gz", "alignment/target___test2.o2o_aln.tsv", - "alignment/target___test2.o2o_plt.png", "alignment/target___test2.sam.gz", "alignment/target___test2.train", "alignment/target___test2.train.tsv", @@ -83,11 +82,6 @@ "multiqc/multiqc_plots/pdf/last_o2o.pdf", "multiqc/multiqc_plots/pdf/train.pdf", "multiqc/multiqc_plots/png", - "multiqc/multiqc_plots/png/base_content_summary_plot-cnt.png", - "multiqc/multiqc_plots/png/base_content_summary_plot-pct.png", - "multiqc/multiqc_plots/png/contigs_length_statistics_plot.png", - "multiqc/multiqc_plots/png/last_o2o.png", - "multiqc/multiqc_plots/png/train.png", "multiqc/multiqc_plots/svg", "multiqc/multiqc_plots/svg/base_content_summary_plot-cnt.svg", "multiqc/multiqc_plots/svg/base_content_summary_plot-pct.svg", @@ -99,17 +93,13 @@ "pipeline_info/nf_core_pairgenomealign_software_mqc_versions.yml" ], [ - "target___test1.m2o_plt.png:md5,e724b83e019743759706e42d51ab987c", "target___test1.o2o_aln.maf.gz:md5,a5bef93ad94cd32e62503bbb993e17cf", "target___test1.o2o_aln.tsv:md5,0400eb0d527a2e69d0ceaeff6e1e072c", - "target___test1.o2o_plt.png:md5,e724b83e019743759706e42d51ab987c", "target___test1.sam.gz:md5,1e7ce899a96c522af7cd716dda2addff", "target___test1.train:md5,0024bdd7f4129fcecebeddc9e844389c", "target___test1.train.tsv:md5,ffa807400265316cdf91de75286c1ac0", - "target___test2.m2o_plt.png:md5,9f969c075068688c8b0d8e45c902efef", "target___test2.o2o_aln.maf.gz:md5,35f2b1fda59aec6a2e7b90bf93d9bd07", "target___test2.o2o_aln.tsv:md5,6f0563aabaae562a5e38bb2e89fb2f79", - "target___test2.o2o_plt.png:md5,5692a7095b111d2470abe0951527f295", "target___test2.sam.gz:md5,8dcdb07614097a2a55f7c3f717eda97e", "target___test2.train:md5,276f08718454c0b7b016b96474055100", "target___test2.train.tsv:md5,4d054581c85f745f4e21e0c436bcb6a6", @@ -129,8 +119,8 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.3" }, - "timestamp": "2026-01-21T10:53:14.857164657" + "timestamp": "2026-01-30T13:33:01.800648879" } } \ No newline at end of file