From 0ad4cf14fd16482c058733ab00ae55524dd5b4c4 Mon Sep 17 00:00:00 2001 From: itrujnara Date: Wed, 18 Jun 2025 15:32:05 +0200 Subject: [PATCH 1/8] Update csvtk/join --- modules.json | 2 +- modules/nf-core/csvtk/join/environment.yml | 9 ++-- modules/nf-core/csvtk/join/main.nf | 4 +- modules/nf-core/csvtk/join/meta.yml | 48 ++++++++++--------- .../csvtk/join/tests/main.nf.test.snap | 20 +++++--- modules/nf-core/csvtk/join/tests/tags.yml | 2 - 6 files changed, 48 insertions(+), 37 deletions(-) delete mode 100644 modules/nf-core/csvtk/join/tests/tags.yml diff --git a/modules.json b/modules.json index 8c7864b..a54ae77 100644 --- a/modules.json +++ b/modules.json @@ -17,7 +17,7 @@ }, "csvtk/join": { "branch": "master", - "git_sha": "614abbf126f287a3068dc86997b2e1b6a93abe20", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["modules"] }, "diamond/cluster": { diff --git a/modules/nf-core/csvtk/join/environment.yml b/modules/nf-core/csvtk/join/environment.yml index 5b6c646..47679f1 100644 --- a/modules/nf-core/csvtk/join/environment.yml +++ b/modules/nf-core/csvtk/join/environment.yml @@ -1,7 +1,8 @@ -name: csvtk_join +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - - conda-forge - bioconda - - defaults + - conda-forge + dependencies: - - bioconda::csvtk=0.30.0 + - bioconda::csvtk=0.31.0 diff --git a/modules/nf-core/csvtk/join/main.nf b/modules/nf-core/csvtk/join/main.nf index 5f3afee..0bd6b2a 100644 --- a/modules/nf-core/csvtk/join/main.nf +++ b/modules/nf-core/csvtk/join/main.nf @@ -4,8 +4,8 @@ process CSVTK_JOIN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/csvtk:0.30.0--h9ee0642_0': - 'biocontainers/csvtk:0.30.0--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/csvtk:0.31.0--h9ee0642_0': + 'biocontainers/csvtk:0.31.0--h9ee0642_0' }" input: tuple val(meta), path(csv) diff --git a/modules/nf-core/csvtk/join/meta.yml b/modules/nf-core/csvtk/join/meta.yml index a75ec40..d8671b1 100644 --- a/modules/nf-core/csvtk/join/meta.yml +++ b/modules/nf-core/csvtk/join/meta.yml @@ -1,5 +1,6 @@ name: csvtk_join -description: Join two or more CSV (or TSV) tables by selected fields into a single table +description: Join two or more CSV (or TSV) tables by selected fields into a single + table keywords: - join - tsv @@ -11,30 +12,33 @@ tools: documentation: http://bioinf.shenwei.me/csvtk tool_dev_url: https://github.com/shenwei356/csvtk licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - csv: - type: file - description: CSV/TSV formatted files - pattern: "*.{csv,tsv}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - csv: + type: file + description: CSV/TSV formatted files + pattern: "*.{csv,tsv}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "version.yml" - csv: - type: file - description: Joined CSV/TSV file - pattern: "*.{csv,tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${out_extension}: + type: file + description: Joined CSV/TSV file + pattern: "*.{csv,tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "version.yml" authors: - "@anoronh4" maintainers: diff --git a/modules/nf-core/csvtk/join/tests/main.nf.test.snap b/modules/nf-core/csvtk/join/tests/main.nf.test.snap index b124788..8ba7b86 100644 --- a/modules/nf-core/csvtk/join/tests/main.nf.test.snap +++ b/modules/nf-core/csvtk/join/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,e76147e4eca968d23543e7007522f1d3" + "versions.yml:md5,b80d80628bb39bba336cff32fe502aac" ], "csv": [ [ @@ -22,11 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,e76147e4eca968d23543e7007522f1d3" + "versions.yml:md5,b80d80628bb39bba336cff32fe502aac" ] } ], - "timestamp": "2024-05-21T15:45:44.045434" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-02T06:18:42.09571517" }, "join - csv - stub": { "content": [ @@ -40,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,e76147e4eca968d23543e7007522f1d3" + "versions.yml:md5,b80d80628bb39bba336cff32fe502aac" ], "csv": [ [ @@ -51,10 +55,14 @@ ] ], "versions": [ - "versions.yml:md5,e76147e4eca968d23543e7007522f1d3" + "versions.yml:md5,b80d80628bb39bba336cff32fe502aac" ] } ], - "timestamp": "2024-05-21T15:45:55.59201" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-02T06:19:00.2453934" } } \ No newline at end of file diff --git a/modules/nf-core/csvtk/join/tests/tags.yml b/modules/nf-core/csvtk/join/tests/tags.yml deleted file mode 100644 index 6c3a0fa..0000000 --- a/modules/nf-core/csvtk/join/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -csvtk/join: - - "modules/nf-core/csvtk/join/**" From b130df35035b9c84671ce31f1a2aba426da951ce Mon Sep 17 00:00:00 2001 From: itrujnara Date: Wed, 18 Jun 2025 15:54:05 +0200 Subject: [PATCH 2/8] Update csvtk/concat --- modules.json | 2 +- modules/nf-core/csvtk/concat/environment.yml | 6 +- modules/nf-core/csvtk/concat/main.nf | 6 +- modules/nf-core/csvtk/concat/meta.yml | 61 ++++++++++--------- .../nf-core/csvtk/concat/tests/main.nf.test | 19 +++--- .../csvtk/concat/tests/main.nf.test.snap | 24 +++++--- modules/nf-core/csvtk/concat/tests/tags.yml | 2 - 7 files changed, 66 insertions(+), 54 deletions(-) delete mode 100644 modules/nf-core/csvtk/concat/tests/tags.yml diff --git a/modules.json b/modules.json index a54ae77..0eadc97 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "csvtk/concat": { "branch": "master", - "git_sha": "cfe2a24902bfdfe8132f11461ffda92d257f9f09", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["modules"] }, "csvtk/join": { diff --git a/modules/nf-core/csvtk/concat/environment.yml b/modules/nf-core/csvtk/concat/environment.yml index ac58390..52d488d 100644 --- a/modules/nf-core/csvtk/concat/environment.yml +++ b/modules/nf-core/csvtk/concat/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "csvtk_concat" channels: - - conda-forge - bioconda - - defaults + - conda-forge dependencies: - - "bioconda::csvtk=0.30.0" + - bioconda::csvtk=0.31.0 diff --git a/modules/nf-core/csvtk/concat/main.nf b/modules/nf-core/csvtk/concat/main.nf index 741ed55..9f17a9b 100644 --- a/modules/nf-core/csvtk/concat/main.nf +++ b/modules/nf-core/csvtk/concat/main.nf @@ -4,11 +4,11 @@ process CSVTK_CONCAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/csvtk:0.30.0--h9ee0642_0' : - 'biocontainers/csvtk:0.30.0--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/csvtk:0.31.0--h9ee0642_0' : + 'biocontainers/csvtk:0.31.0--h9ee0642_0' }" input: - tuple val(meta), path(csv) + tuple val(meta), path(csv, name: 'inputs/csv*/*') val in_format val out_format diff --git a/modules/nf-core/csvtk/concat/meta.yml b/modules/nf-core/csvtk/concat/meta.yml index 5f53229..27ffc1c 100644 --- a/modules/nf-core/csvtk/concat/meta.yml +++ b/modules/nf-core/csvtk/concat/meta.yml @@ -11,38 +11,41 @@ tools: documentation: http://bioinf.shenwei.me/csvtk tool_dev_url: https://github.com/shenwei356/csvtk licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - csv: - type: file - description: CSV/TSV formatted files - pattern: "*.{csv,tsv}" - - in_format: - type: string - description: Input format (csv, tab, or a delimiting character) - pattern: "*" - - out_format: - type: string - description: Output format (csv, tab, or a delimiting character) - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - csv: + type: file + description: CSV/TSV formatted files + pattern: "*.{csv,tsv}" + - - in_format: + type: string + description: Input format (csv, tab, or a delimiting character) + pattern: "*" + - - out_format: + type: string + description: Output format (csv, tab, or a delimiting character) + pattern: "*" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "version.yml" - csv: - type: file - description: Concatenated CSV/TSV file - pattern: "*.{csv,tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${out_extension}: + type: file + description: Concatenated CSV/TSV file + pattern: "*.{csv,tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "version.yml" authors: - "@rpetit3" maintainers: diff --git a/modules/nf-core/csvtk/concat/tests/main.nf.test b/modules/nf-core/csvtk/concat/tests/main.nf.test index 13f2014..b6c1a58 100644 --- a/modules/nf-core/csvtk/concat/tests/main.nf.test +++ b/modules/nf-core/csvtk/concat/tests/main.nf.test @@ -17,9 +17,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - [ file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) ] + [ + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) + ] ] input[1] = "tsv" input[2] = "csv" @@ -45,9 +48,11 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - [ file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) ] + [ + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) + ] ] input[1] = "tsv" input[2] = "csv" @@ -64,4 +69,4 @@ nextflow_process { } -} +} \ No newline at end of file diff --git a/modules/nf-core/csvtk/concat/tests/main.nf.test.snap b/modules/nf-core/csvtk/concat/tests/main.nf.test.snap index 777114b..254d34a 100644 --- a/modules/nf-core/csvtk/concat/tests/main.nf.test.snap +++ b/modules/nf-core/csvtk/concat/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,c04e6be6df50305cd689a92aacec947b" + "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" ], "csv": [ [ @@ -22,11 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,c04e6be6df50305cd689a92aacec947b" + "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" ] } ], - "timestamp": "2024-05-17T12:43:26.787254" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-08T04:46:46.133640633" }, "tsv - concat - csv": { "content": [ @@ -36,25 +40,29 @@ { "id": "test" }, - "test.csv:md5,917fe5d857f04b58e0f49c384d167cec" + "test.csv:md5,bb0ed52999b6b24297bcefb3c29f0a5c" ] ], "1": [ - "versions.yml:md5,c04e6be6df50305cd689a92aacec947b" + "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" ], "csv": [ [ { "id": "test" }, - "test.csv:md5,917fe5d857f04b58e0f49c384d167cec" + "test.csv:md5,bb0ed52999b6b24297bcefb3c29f0a5c" ] ], "versions": [ - "versions.yml:md5,c04e6be6df50305cd689a92aacec947b" + "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" ] } ], - "timestamp": "2024-05-17T12:43:17.930902" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-08T04:46:31.419386462" } } \ No newline at end of file diff --git a/modules/nf-core/csvtk/concat/tests/tags.yml b/modules/nf-core/csvtk/concat/tests/tags.yml deleted file mode 100644 index 0d10e7c..0000000 --- a/modules/nf-core/csvtk/concat/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -csvtk/concat: - - "modules/nf-core/csvtk/concat/**" From db20518ffaa121027795376cb25b41cbac185469 Mon Sep 17 00:00:00 2001 From: itrujnara Date: Fri, 20 Jun 2025 11:04:50 +0200 Subject: [PATCH 3/8] Update tests to work correctly with Conda --- modules/local/plot_orthologs.nf | 4 +- modules/local/stats2csv.nf | 4 +- tests/.nftignore | 4 +- tests/default.nf.test | 50 +++++-- tests/default.nf.test.snap | 224 +------------------------------- tests/offline.nf.test | 48 +++++-- tests/offline.nf.test.snap | 113 +--------------- workflows/reportho.nf | 9 +- 8 files changed, 101 insertions(+), 355 deletions(-) diff --git a/modules/local/plot_orthologs.nf b/modules/local/plot_orthologs.nf index 566115c..23ffc43 100644 --- a/modules/local/plot_orthologs.nf +++ b/modules/local/plot_orthologs.nf @@ -4,8 +4,8 @@ process PLOT_ORTHOLOGS { conda "conda-forge::r-tidyverse=2.0.0 conda-forge::r-reshape2=1.4.4 conda-forge::r-ggvenndiagram=1.5.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/r-ggvenndiagram_r-reshape2_r-tidyverse:3941632557872dac' : - 'community.wave.seqera.io/library/r-ggvenndiagram_r-reshape2_r-tidyverse:6ab82708ae578c26' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/24/241121c567b6ac13fb664276916cc15e5b21b773612e30debf1de3cafe64fd97/data' : + 'community.wave.seqera.io/library/r-ggvenndiagram_r-reshape2_r-tidyverse:b2486480b5e4dea4' }" input: tuple val(meta), path(score_table) diff --git a/modules/local/stats2csv.nf b/modules/local/stats2csv.nf index 68211a3..2d22e05 100644 --- a/modules/local/stats2csv.nf +++ b/modules/local/stats2csv.nf @@ -4,8 +4,8 @@ process STATS2CSV { conda "conda-forge::python=3.11.0 conda-forge::pyyaml=5.4.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-deac90960ddeb4d14fb31faf92c0652d613b3327:10b46d090d02e9e22e206db80d14e994267520c3-0' : - 'biocontainers/mulled-v2-deac90960ddeb4d14fb31faf92c0652d613b3327:10b46d090d02e9e22e206db80d14e994267520c3-0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0d/0d2b6ac1ed316a98eca861b5fbb6d52e11fd960e331a4f356e1dff8e7b544e2a/data' : + 'community.wave.seqera.io/library/python_pyyaml:1d8dd531b5ad400c' }" input: tuple val(meta), path(stats) diff --git a/tests/.nftignore b/tests/.nftignore index 19698f2..6e6ed70 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -21,4 +21,6 @@ pipeline_info/*.{html,json,txt,yml} **/multiqc_sample_*.txt **/*.pdf **/*.svg -pipeline_info/* +pipeline_info/** +report +report/** diff --git a/tests/default.nf.test b/tests/default.nf.test index b73c8dc..a678d0b 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -15,21 +15,35 @@ 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}', 'report', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + + if (!using_conda) { + def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') + } + assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents stable_path - ).match() } + ).match() }, + { assert using_conda || snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), + // All report stable path name, with a relative path + report_stable_name, + // All report files with stable contents + report_stable_path + ).match() } ) } } @@ -47,20 +61,34 @@ 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}', 'report', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + + if (!using_conda) { + def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') + } + assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents stable_path + ).match() }, + { assert using_conda || snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), + // All report stable path name, with a relative path + report_stable_name, + // All report files with stable contents + report_stable_path ).match() } ) } diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 99058ef..1ba578b 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,58 +1,6 @@ { "Params: default - stub": { "content": [ - 27, - { - "DUMP_PARAMS": { - "cat": 8.3 - }, - "FETCH_ENSEMBL_IDMAP": { - "Python": "3.12.9", - "Python Requests": "2.32.3" - }, - "FETCH_INSPECTOR_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OrthoInspector Database": "Eukaryota2023" - }, - "FETCH_OMA_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OMA Database": "All.Jul2024", - "OMA API": 1.1 - }, - "FETCH_PANTHER_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "Panther Database": null - }, - "FETCH_UNIPROT_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "MAKE_HITS_TABLE": { - "Python": "3.11.0" - }, - "MERGE_CSV": { - "csvtk": "0.30.0" - }, - "MERGE_HITS": { - "csvtk": "0.30.0" - }, - "SPLIT_ID_FORMAT": { - "Python": "3.12.9" - }, - "SPLIT_TAXIDS": { - "awk": "5.3.1" - }, - "WRITE_SEQINFO": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "Workflow": { - "nf-core/reportho": "v1.1.0" - } - }, [ "multiqc", "multiqc/multiqc_data", @@ -73,130 +21,13 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.4" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-03-28T11:32:19.67177" + "timestamp": "2025-06-19T14:45:45.851873375" }, "Params: default": { "content": [ - 245, - { - "DIAMOND_CLUSTER": { - "diamond": "2.1.12" - }, - "DUMP_PARAMS": { - "cat": 8.3 - }, - "FETCH_ENSEMBL_IDMAP": { - "Python": "3.12.9", - "Python Requests": "2.32.3" - }, - "FETCH_ENSEMBL_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "FETCH_INSPECTOR_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OrthoInspector Database": "Eukaryota2023" - }, - "FETCH_OMA_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OMA Database": "All.Jul2024", - "OMA API": 1.1 - }, - "FETCH_OMA_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OMA Database": "All.Jul2024", - "OMA API": 1.1 - }, - "FETCH_PANTHER_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "Panther Database": null - }, - "FETCH_REFSEQ_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "FETCH_UNIPROT_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "FILTER_HITS": { - "Python": "3.11.0" - }, - "GROUP_DIAMOND": { - "gawk": "5.3.0" - }, - "MAKE_HITS_TABLE": { - "Python": "3.11.0" - }, - "MAKE_MERGE_TABLE": { - "Python": "3.11.0" - }, - "MAKE_REPORT": { - "Node": "v22.14.0", - "Yarn": "1.22.22", - "React": "19.1.0" - }, - "MAKE_SCORE_TABLE": { - "Python": "3.11.0" - }, - "MAKE_STATS": { - "Python": "3.11.0" - }, - "MERGE_ALL": { - "pigz": "2.3.4" - }, - "MERGE_CSV": { - "csvtk": "0.30.0" - }, - "MERGE_DIAMOND": { - "pigz": "2.3.4" - }, - "MERGE_FASTA_IDS": { - "gawk": "5.3.0" - }, - "MERGE_HITS": { - "csvtk": "0.30.0" - }, - "MERGE_MERGE": { - "csvtk": "0.30.0" - }, - "MERGE_STATS": { - "csvtk": "0.30.0" - }, - "PLOT_ORTHOLOGS": { - "r-base": "4.3.3" - }, - "POSTPROCESS_DIAMOND": { - "gawk": "5.3.0" - }, - "REDUCE_IDMAP": { - "gawk": "5.3.0" - }, - "SPLIT_ID_FORMAT": { - "Python": "3.12.9" - }, - "SPLIT_TAXIDS": { - "awk": "5.3.1" - }, - "STATS2CSV": { - "Python": "3.9.6", - "PyYAML": "5.4.1" - }, - "WRITE_SEQINFO": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "Workflow": { - "nf-core/reportho": "v1.1.0" - } - }, [ "merge", "merge/BicD2", @@ -231,41 +62,6 @@ "multiqc/multiqc_report.html", "pipeline_info", "pipeline_info/nf_core_reportho_software_mqc_versions.yml", - "report", - "report/BicD2", - "report/BicD2/clusters.csv", - "report/BicD2/filtered_hits.txt", - "report/BicD2/id.txt", - "report/BicD2/index.html", - "report/BicD2/jaccard.png", - "report/BicD2/merge_stats.csv", - "report/BicD2/nf-core-logo-square.png", - "report/BicD2/orthostats.yml", - "report/BicD2/params.yml", - "report/BicD2/run.sh", - "report/BicD2/score_table.csv", - "report/BicD2/seq_hits.txt", - "report/BicD2/seq_misses.txt", - "report/BicD2/supports.png", - "report/BicD2/taxid.txt", - "report/BicD2/venn.png", - "report/HBB", - "report/HBB/clusters.csv", - "report/HBB/filtered_hits.txt", - "report/HBB/id.txt", - "report/HBB/index.html", - "report/HBB/jaccard.png", - "report/HBB/merge_stats.csv", - "report/HBB/nf-core-logo-square.png", - "report/HBB/orthostats.yml", - "report/HBB/params.yml", - "report/HBB/run.sh", - "report/HBB/score_table.csv", - "report/HBB/seq_hits.txt", - "report/HBB/seq_misses.txt", - "report/HBB/supports.png", - "report/HBB/taxid.txt", - "report/HBB/venn.png", "score", "score/BicD2", "score/BicD2/BicD2_score_table.csv", @@ -295,23 +91,13 @@ "sequences/HBB/HBB_orthologs.txt" ], [ - "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", - "id.txt:md5,5e567f80b3e124f6cbfd9d78ec056d7e", - "index.html:md5,f65df95dd6ecc78a557b5b0ed9081b92", - "params.yml:md5,8d791aa60015db30655322ca5bc79957", - "run.sh:md5,314e387b677968e93bc66776a09cad8a", - "taxid.txt:md5,d8ce74354d0ddf337bd304faca270ff7", - "id.txt:md5,a366b91927c9eb9d123e04ea6e741741", - "index.html:md5,f65df95dd6ecc78a557b5b0ed9081b92", - "params.yml:md5,fab7fbdf6f2aab87e0ba05e4a53483ef", - "run.sh:md5,314e387b677968e93bc66776a09cad8a", - "taxid.txt:md5,d8ce74354d0ddf337bd304faca270ff7" + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-17T16:45:45.139534134" + "timestamp": "2025-06-20T10:22:01.937649772" } } \ No newline at end of file diff --git a/tests/offline.nf.test b/tests/offline.nf.test index bd5df12..f30650f 100644 --- a/tests/offline.nf.test +++ b/tests/offline.nf.test @@ -30,20 +30,34 @@ 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}', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + + if (!using_conda) { + def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') + } + assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents stable_path + ).match() }, + { assert using_conda || snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), + // All report stable path name, with a relative path + report_stable_name, + // All report files with stable contents + report_stable_path ).match() } ) } @@ -62,20 +76,34 @@ 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}', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + + if (!using_conda) { + def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') + } + assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents stable_path + ).match() }, + { assert using_conda || snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), + // All report stable path name, with a relative path + report_stable_name, + // All report files with stable contents + report_stable_path ).match() } ) } diff --git a/tests/offline.nf.test.snap b/tests/offline.nf.test.snap index a779cf1..2ef75a4 100644 --- a/tests/offline.nf.test.snap +++ b/tests/offline.nf.test.snap @@ -1,58 +1,6 @@ { "Params: default - stub": { "content": [ - 27, - { - "DUMP_PARAMS": { - "cat": 8.3 - }, - "FETCH_ENSEMBL_IDMAP": { - "Python": "3.12.9", - "Python Requests": "2.32.3" - }, - "FETCH_INSPECTOR_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OrthoInspector Database": "Eukaryota2023" - }, - "FETCH_OMA_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "OMA Database": "All.Jul2024", - "OMA API": 1.1 - }, - "FETCH_PANTHER_GROUP_ONLINE": { - "Python": "3.11.0", - "Python Requests": "2.31.0", - "Panther Database": null - }, - "FETCH_UNIPROT_SEQUENCES": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "MAKE_HITS_TABLE": { - "Python": "3.11.0" - }, - "MERGE_CSV": { - "csvtk": "0.30.0" - }, - "MERGE_HITS": { - "csvtk": "0.30.0" - }, - "SPLIT_ID_FORMAT": { - "Python": "3.12.9" - }, - "SPLIT_TAXIDS": { - "awk": "5.3.1" - }, - "WRITE_SEQINFO": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "Workflow": { - "nf-core/reportho": "v1.1.0" - } - }, [ "multiqc", "multiqc/multiqc_data", @@ -73,66 +21,13 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.4" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-04-12T15:55:48.401748" + "timestamp": "2025-06-19T16:33:19.748192579" }, "Params: default": { "content": [ - 27, - { - "DUMP_PARAMS": { - "cat": 8.3 - }, - "FETCH_EGGNOG_GROUP_LOCAL": { - "Python": "3.12.3", - "ripgrep": "14.1.0" - }, - "FETCH_OMA_GROUP_LOCAL": { - "python": "3.12.3", - "ripgrep": "14.1.0" - }, - "FETCH_PANTHER_GROUP_LOCAL": { - "python": "3.12.3", - "ripgrep": "14.1.0" - }, - "FILTER_HITS": { - "Python": "3.11.0" - }, - "MAKE_HITS_TABLE": { - "Python": "3.11.0" - }, - "MAKE_SCORE_TABLE": { - "Python": "3.11.0" - }, - "MAKE_STATS": { - "Python": "3.11.0" - }, - "MERGE_CSV": { - "csvtk": "0.30.0" - }, - "MERGE_HITS": { - "csvtk": "0.30.0" - }, - "MERGE_STATS": { - "csvtk": "0.30.0" - }, - "PLOT_ORTHOLOGS": { - "r-base": "4.3.3" - }, - "STATS2CSV": { - "Python": "3.9.6", - "PyYAML": "5.4.1" - }, - "WRITE_SEQINFO": { - "Python": "3.11.0", - "Python Requests": "2.31.0" - }, - "Workflow": { - "nf-core/reportho": "v1.1.0" - } - }, [ "multiqc", "multiqc/multiqc_data", @@ -186,6 +81,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-16T15:35:09.692317789" + "timestamp": "2025-06-19T16:31:26.180107803" } } \ No newline at end of file diff --git a/workflows/reportho.nf b/workflows/reportho.nf index 43bb0c5..ac269de 100644 --- a/workflows/reportho.nf +++ b/workflows/reportho.nf @@ -106,7 +106,14 @@ workflow REPORTHO { ch_multiqc_files = ch_multiqc_files.mix(SCORE_ORTHOLOGS.out.aggregated_hits.map {it[1]}) ch_multiqc_files = ch_multiqc_files.mix(SCORE_ORTHOLOGS.out.aggregated_merge.map {it[1]}) - if(!params.skip_report) { + if(workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() != 0) { + log.warn( + "The conda/mamba profile is used, so the report will not be generated. " + + "Please use the 'skip_report' parameter to skip this warning." + ) + } + + if(!params.skip_report && workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() == 0) { REPORT ( params.use_centroid, params.min_score, From 436e86077d61f519ec369b5552efccfeeca21b75 Mon Sep 17 00:00:00 2001 From: itrujnara Date: Fri, 20 Jun 2025 11:29:33 +0200 Subject: [PATCH 4/8] Make linter happy --- tests/default.nf.test | 2 +- tests/offline.nf.test | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/default.nf.test b/tests/default.nf.test index a678d0b..902301a 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -64,7 +64,7 @@ nextflow_pipeline { def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}', 'report', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null if (!using_conda) { diff --git a/tests/offline.nf.test b/tests/offline.nf.test index f30650f..a8c2f06 100644 --- a/tests/offline.nf.test +++ b/tests/offline.nf.test @@ -33,7 +33,7 @@ nextflow_pipeline { def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null if (!using_conda) { @@ -79,7 +79,7 @@ nextflow_pipeline { def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}', 'report/**']) // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - + def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null if (!using_conda) { From a7650133a7025071925cc2c709357762b10df5f7 Mon Sep 17 00:00:00 2001 From: itrujnara Date: Fri, 20 Jun 2025 14:26:45 +0200 Subject: [PATCH 5/8] Change Conda check --- tests/default.nf.test | 6 ++++-- tests/offline.nf.test | 21 +++++++++++++++++++-- tests/offline.nf.test.snap | 26 ++++++++++++++++++++------ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/tests/default.nf.test b/tests/default.nf.test index 902301a..6b6137f 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -19,7 +19,8 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + def conda_path = System.getenv('CONDA_PREFIX') + def using_conda = conda_path != null && new File(conda_path).exists() if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) @@ -65,7 +66,8 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + def conda_path = System.getenv('CONDA_PREFIX') + def using_conda = conda_path != null && new File(conda_path).exists() if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) diff --git a/tests/offline.nf.test b/tests/offline.nf.test index a8c2f06..57fb29c 100644 --- a/tests/offline.nf.test +++ b/tests/offline.nf.test @@ -34,7 +34,8 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + def conda_path = System.getenv('CONDA_PREFIX') + def using_conda = conda_path != null && new File(conda_path).exists() if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) @@ -71,6 +72,21 @@ nextflow_pipeline { params { input = "${projectDir}/assets/samplesheet.csv" outdir = "$outputDir" + + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/reportho/testdata/' + + offline_run = true + local_databases = true + oma_path = pipelines_testdata_base_path + 'databases/oma-mini.txt.gz' + oma_uniprot_path = pipelines_testdata_base_path + 'databases/oma-uniprot-mini.txt.gz' + oma_ensembl_path = pipelines_testdata_base_path + 'databases/oma-ensembl-mini.txt.gz' + oma_refseq_path = pipelines_testdata_base_path + 'databases/oma-refseq-mini.txt.gz' + panther_path = pipelines_testdata_base_path + 'databases/AllOrthologs-mini.txt' + eggnog_path = pipelines_testdata_base_path + 'databases/1_members-mini.tsv.gz' + eggnog_idmap_path = pipelines_testdata_base_path + 'databases/latest.Eukaryota-mini.tsv.gz' + skip_merge = true + min_score = 2 + skip_downstream = true } } @@ -80,7 +96,8 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def using_conda = System.getenv('CONDA_DEFAULT_ENV') != null || System.getenv('CONDA_PREFIX') != null + def conda_path = System.getenv('CONDA_PREFIX') + def using_conda = conda_path != null && new File(conda_path).exists() if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) diff --git a/tests/offline.nf.test.snap b/tests/offline.nf.test.snap index 2ef75a4..0ab8d76 100644 --- a/tests/offline.nf.test.snap +++ b/tests/offline.nf.test.snap @@ -9,12 +9,26 @@ "pipeline_info", "pipeline_info/nf_core_reportho_software_mqc_versions.yml", "score", + "score/BicD2", + "score/BicD2/BicD2_score_table.csv", + "score/BicD2/plots", + "score/BicD2/plots/BicD2_jaccard_dark.png", + "score/BicD2/plots/BicD2_jaccard_light.png", + "score/BicD2/plots/BicD2_supports_dark.png", + "score/BicD2/plots/BicD2_supports_light.png", + "score/BicD2/plots/BicD2_venn_dark.png", + "score/BicD2/plots/BicD2_venn_light.png", + "score/HBB", + "score/HBB/HBB_score_table.csv", + "score/HBB/plots", + "score/HBB/plots/HBB_jaccard_dark.png", + "score/HBB/plots/HBB_jaccard_light.png", + "score/HBB/plots/HBB_supports_dark.png", + "score/HBB/plots/HBB_supports_light.png", + "score/HBB/plots/HBB_venn_dark.png", + "score/HBB/plots/HBB_venn_light.png", "score/aggregated_hits.csv", - "sequences", - "sequences/BicD2", - "sequences/BicD2/BicD2_orthologs.txt", - "sequences/HBB", - "sequences/HBB/HBB_orthologs.txt" + "score/aggregated_stats.csv" ], [ @@ -24,7 +38,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-19T16:33:19.748192579" + "timestamp": "2025-06-20T12:37:28.024020702" }, "Params: default": { "content": [ From 3ea35de3f12a0149a1f886b73f71b5203dd56863 Mon Sep 17 00:00:00 2001 From: itrujnara Date: Fri, 20 Jun 2025 15:23:30 +0200 Subject: [PATCH 6/8] Test detecting Conda profile with custom env variable in runners --- .github/workflows/nf-test.yml | 1 + tests/default.nf.test | 4 ++-- tests/offline.nf.test | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 325bc15..e765eb1 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -100,6 +100,7 @@ jobs: uses: ./.github/actions/nf-test env: NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NFT_USING_CONDA: ${{ matrix.profile == 'conda' }} with: profile: ${{ matrix.profile }} shard: ${{ matrix.shard }} diff --git a/tests/default.nf.test b/tests/default.nf.test index 6b6137f..5d669ae 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -20,7 +20,7 @@ nextflow_pipeline { def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() + def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) @@ -67,7 +67,7 @@ nextflow_pipeline { def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() + def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) diff --git a/tests/offline.nf.test b/tests/offline.nf.test index 57fb29c..1161082 100644 --- a/tests/offline.nf.test +++ b/tests/offline.nf.test @@ -35,7 +35,7 @@ nextflow_pipeline { def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() + def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) @@ -97,7 +97,7 @@ nextflow_pipeline { def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() + def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null if (!using_conda) { def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) From 2f52324d34b565e0a82aa878a648a1a339c4093d Mon Sep 17 00:00:00 2001 From: itrujnara Date: Thu, 3 Jul 2025 11:53:45 +0200 Subject: [PATCH 7/8] Remove Conda testing from CI --- .github/workflows/nf-test.yml | 2 +- README.md | 4 + tests/.nftignore | 2 - tests/default.nf.test | 36 +------ tests/default.nf.test.snap | 185 +++++++++++++++++++++++++++++++++- tests/offline.nf.test | 36 +------ tests/offline.nf.test.snap | 110 +++++++++++++++++++- 7 files changed, 303 insertions(+), 72 deletions(-) diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index e765eb1..0920eb1 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -75,7 +75,7 @@ jobs: fail-fast: false matrix: shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} - profile: [conda, docker, singularity] + profile: [docker, singularity] # TODO: add Conda profile back when conda tests are fixed isMain: - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} # Exclude conda and singularity on dev diff --git a/README.md b/README.md index 282fc2d..c6c0aa3 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,10 @@ Steps 3 and 4 can be skipped with `--skip_merge`. > [!NOTE] > 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. +:::warning +Due to an nf-test issue outside our control, the current version of the pipeline is not tested with Conda. Most functionality should work with Conda, but we cannot guarantee it. We will rectify this issue as soon as possible. +::: + First, prepare a samplesheet with your input data that looks as follows: ```csv title="samplesheet_fasta.csv" diff --git a/tests/.nftignore b/tests/.nftignore index 6e6ed70..3a31a8f 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -22,5 +22,3 @@ pipeline_info/*.{html,json,txt,yml} **/*.pdf **/*.svg pipeline_info/** -report -report/** diff --git a/tests/default.nf.test b/tests/default.nf.test index 5d669ae..d294b84 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -19,31 +19,17 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null - - if (!using_conda) { - def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') - } - assertAll( { assert workflow.success}, { assert snapshot( - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() }, - { assert using_conda || snapshot( // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All report stable path name, with a relative path - report_stable_name, + stable_name, // All report files with stable contents - report_stable_path + stable_path ).match() } ) } @@ -66,31 +52,17 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null - - if (!using_conda) { - def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') - } - assertAll( { assert workflow.success}, { assert snapshot( - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() }, - { assert using_conda || snapshot( // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All report stable path name, with a relative path - report_stable_name, + stable_name, // All report files with stable contents - report_stable_path + stable_path ).match() } ) } diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 1ba578b..9f1f0ae 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,6 +1,58 @@ { "Params: default - stub": { "content": [ + 27, + { + "DUMP_PARAMS": { + "cat": 8.3 + }, + "FETCH_ENSEMBL_IDMAP": { + "Python": "3.12.9", + "Python Requests": "2.32.3" + }, + "FETCH_INSPECTOR_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "OrthoInspector Database": "Eukaryota2023" + }, + "FETCH_OMA_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "OMA Database": "All.Jul2024", + "OMA API": 1.1 + }, + "FETCH_PANTHER_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "Panther Database": null + }, + "FETCH_UNIPROT_SEQUENCES": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "MAKE_HITS_TABLE": { + "Python": "3.11.0" + }, + "MERGE_CSV": { + "csvtk": "0.31.0" + }, + "MERGE_HITS": { + "csvtk": "0.31.0" + }, + "SPLIT_ID_FORMAT": { + "Python": "3.12.9" + }, + "SPLIT_TAXIDS": { + "awk": "5.3.1" + }, + "WRITE_SEQINFO": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "Workflow": { + "nf-core/reportho": "v1.1.0" + } + }, [ "multiqc", "multiqc/multiqc_data", @@ -24,10 +76,127 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-19T14:45:45.851873375" + "timestamp": "2025-07-03T11:13:27.950978341" }, "Params: default": { "content": [ + 245, + { + "DIAMOND_CLUSTER": { + "diamond": "2.1.12" + }, + "DUMP_PARAMS": { + "cat": 8.3 + }, + "FETCH_ENSEMBL_IDMAP": { + "Python": "3.12.9", + "Python Requests": "2.32.3" + }, + "FETCH_ENSEMBL_SEQUENCES": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "FETCH_INSPECTOR_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "OrthoInspector Database": "Eukaryota2023" + }, + "FETCH_OMA_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "OMA Database": "All.Jul2024", + "OMA API": 1.1 + }, + "FETCH_OMA_SEQUENCES": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "OMA Database": "All.Jul2024", + "OMA API": 1.1 + }, + "FETCH_PANTHER_GROUP_ONLINE": { + "Python": "3.11.0", + "Python Requests": "2.31.0", + "Panther Database": null + }, + "FETCH_REFSEQ_SEQUENCES": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "FETCH_UNIPROT_SEQUENCES": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "FILTER_HITS": { + "Python": "3.11.0" + }, + "GROUP_DIAMOND": { + "gawk": "5.3.0" + }, + "MAKE_HITS_TABLE": { + "Python": "3.11.0" + }, + "MAKE_MERGE_TABLE": { + "Python": "3.11.0" + }, + "MAKE_REPORT": { + "Node": "v22.14.0", + "Yarn": "1.22.22", + "React": "19.1.0" + }, + "MAKE_SCORE_TABLE": { + "Python": "3.11.0" + }, + "MAKE_STATS": { + "Python": "3.11.0" + }, + "MERGE_ALL": { + "pigz": "2.3.4" + }, + "MERGE_CSV": { + "csvtk": "0.31.0" + }, + "MERGE_DIAMOND": { + "pigz": "2.3.4" + }, + "MERGE_FASTA_IDS": { + "gawk": "5.3.0" + }, + "MERGE_HITS": { + "csvtk": "0.31.0" + }, + "MERGE_MERGE": { + "csvtk": "0.31.0" + }, + "MERGE_STATS": { + "csvtk": "0.31.0" + }, + "PLOT_ORTHOLOGS": { + "r-base": "4.4.3" + }, + "POSTPROCESS_DIAMOND": { + "gawk": "5.3.0" + }, + "REDUCE_IDMAP": { + "gawk": "5.3.0" + }, + "SPLIT_ID_FORMAT": { + "Python": "3.12.9" + }, + "SPLIT_TAXIDS": { + "awk": "5.3.1" + }, + "STATS2CSV": { + "Python": "3.11.0", + "PyYAML": "5.4.1" + }, + "WRITE_SEQINFO": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "Workflow": { + "nf-core/reportho": "v1.1.0" + } + }, [ "merge", "merge/BicD2", @@ -91,13 +260,23 @@ "sequences/HBB/HBB_orthologs.txt" ], [ - "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "id.txt:md5,5e567f80b3e124f6cbfd9d78ec056d7e", + "index.html:md5,f65df95dd6ecc78a557b5b0ed9081b92", + "params.yml:md5,8d791aa60015db30655322ca5bc79957", + "run.sh:md5,314e387b677968e93bc66776a09cad8a", + "taxid.txt:md5,d8ce74354d0ddf337bd304faca270ff7", + "id.txt:md5,a366b91927c9eb9d123e04ea6e741741", + "index.html:md5,f65df95dd6ecc78a557b5b0ed9081b92", + "params.yml:md5,fab7fbdf6f2aab87e0ba05e4a53483ef", + "run.sh:md5,314e387b677968e93bc66776a09cad8a", + "taxid.txt:md5,d8ce74354d0ddf337bd304faca270ff7" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-20T10:22:01.937649772" + "timestamp": "2025-07-03T10:47:06.531877403" } } \ No newline at end of file diff --git a/tests/offline.nf.test b/tests/offline.nf.test index 1161082..91e3b24 100644 --- a/tests/offline.nf.test +++ b/tests/offline.nf.test @@ -34,31 +34,17 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null - - if (!using_conda) { - def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') - } - assertAll( { assert workflow.success}, { assert snapshot( - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() }, - { assert using_conda || snapshot( // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All report stable path name, with a relative path - report_stable_name, + stable_name, // All report files with stable contents - report_stable_path + stable_path ).match() } ) } @@ -96,31 +82,17 @@ nextflow_pipeline { // stable_path: All files in ${params.outdir}/ with stable content def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - def conda_path = System.getenv('CONDA_PREFIX') - def using_conda = conda_path != null && new File(conda_path).exists() || System.getenv('NFT_USING_CONDA') != null - - if (!using_conda) { - def report_stable_name = getAllFilesFromDir("$outputDir/report", relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - def report_stable_path = getAllFilesFromDir("$outputDir/report", ignoreFile: 'tests/.nftignore') - } - assertAll( { assert workflow.success}, { assert snapshot( - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() }, - { assert using_conda || snapshot( // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_reportho_software_mqc_versions.yml"), // All report stable path name, with a relative path - report_stable_name, + stable_name, // All report files with stable contents - report_stable_path + stable_path ).match() } ) } diff --git a/tests/offline.nf.test.snap b/tests/offline.nf.test.snap index 0ab8d76..27a12e6 100644 --- a/tests/offline.nf.test.snap +++ b/tests/offline.nf.test.snap @@ -1,6 +1,59 @@ { "Params: default - stub": { "content": [ + 27, + { + "DUMP_PARAMS": { + "cat": 8.3 + }, + "FETCH_EGGNOG_GROUP_LOCAL": { + "python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FETCH_OMA_GROUP_LOCAL": { + "python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FETCH_PANTHER_GROUP_LOCAL": { + "python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FILTER_HITS": { + "Python": "Python 3.11.0" + }, + "MAKE_HITS_TABLE": { + "Python": "3.11.0" + }, + "MAKE_SCORE_TABLE": { + "Python": "3.11.0" + }, + "MAKE_STATS": { + "Python": "3.11.0" + }, + "MERGE_CSV": { + "csvtk": "0.31.0" + }, + "MERGE_HITS": { + "csvtk": "0.31.0" + }, + "MERGE_STATS": { + "csvtk": "0.31.0" + }, + "PLOT_ORTHOLOGS": { + "r-base": "4.4.3" + }, + "STATS2CSV": { + "Python": "3.11.0", + "PyYAML": "5.4.1" + }, + "WRITE_SEQINFO": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "Workflow": { + "nf-core/reportho": "v1.1.0" + } + }, [ "multiqc", "multiqc/multiqc_data", @@ -38,10 +91,63 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-20T12:37:28.024020702" + "timestamp": "2025-07-03T11:17:15.771676925" }, "Params: default": { "content": [ + 27, + { + "DUMP_PARAMS": { + "cat": 8.3 + }, + "FETCH_EGGNOG_GROUP_LOCAL": { + "Python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FETCH_OMA_GROUP_LOCAL": { + "python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FETCH_PANTHER_GROUP_LOCAL": { + "python": "3.12.3", + "ripgrep": "14.1.0" + }, + "FILTER_HITS": { + "Python": "3.11.0" + }, + "MAKE_HITS_TABLE": { + "Python": "3.11.0" + }, + "MAKE_SCORE_TABLE": { + "Python": "3.11.0" + }, + "MAKE_STATS": { + "Python": "3.11.0" + }, + "MERGE_CSV": { + "csvtk": "0.31.0" + }, + "MERGE_HITS": { + "csvtk": "0.31.0" + }, + "MERGE_STATS": { + "csvtk": "0.31.0" + }, + "PLOT_ORTHOLOGS": { + "r-base": "4.4.3" + }, + "STATS2CSV": { + "Python": "3.11.0", + "PyYAML": "5.4.1" + }, + "WRITE_SEQINFO": { + "Python": "3.11.0", + "Python Requests": "2.31.0" + }, + "Workflow": { + "nf-core/reportho": "v1.1.0" + } + }, [ "multiqc", "multiqc/multiqc_data", @@ -95,6 +201,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-06-19T16:31:26.180107803" + "timestamp": "2025-07-03T11:15:23.657842333" } } \ No newline at end of file From 58e8494d69f19ee7469d3f42eb384958c9e42dff Mon Sep 17 00:00:00 2001 From: itrujnara Date: Thu, 3 Jul 2025 11:59:46 +0200 Subject: [PATCH 8/8] Fix rocrate linting --- ro-crate-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index f1e5a8d..a3bdb87 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "Stable", "datePublished": "2025-03-27T15:46:06+00:00", - "description": "

\n \n \n \"nf-core/reportho\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/reportho/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/reportho/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/reportho/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/reportho/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/reportho/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.11574565-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.11574565)\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%A524.04.2-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.3.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.3.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/reportho)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23reportho-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/reportho)[![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/reportho** is a bioinformatics pipeline that compares and summarizes orthology predictions for one or a set of query proteins. For each query (or its closest annotated homolog), it fetches ortholog lists from public databases, identifies synonymous identifiers based on sequences, calculates the agreement of the obtained predictions (pairwise and global) and finally generates a consensus list of orthologs with the desired level of confidence. Additionally, it generates a clean, human-readable report of the results.\n\n\n\n![nf-core-reportho tube map](docs/images/reportho_tube_map.svg?raw=true \"nf-core-reportho tube map\")\n\n1. **Obtain Query Information**: identification of Uniprot ID and taxon ID for the query (or its closest homolog if the fasta file is used as input instead of the Uniprot ID).\n2. **Fetch Orthologs**: fetching of ortholog predictions from public databases, either through API or from local snapshot.\n\nSteps 3 and 4 can be skipped with `--skip_merge`.\n\n3. **Fetch Sequences**: fetching of sequences of identified orthologs.\n4. **Merge Synonymous Identifiers**: identification of synonymous identifiers based on sequence identity.\n5. **Compare and Assemble**: calculation of agreement statistics, creation of ortholog lists, selection of the consensus list.\n6. **Generate Report**: human-readable HTML report generation.\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```csv title=\"samplesheet_fasta.csv\"\nid,fasta\nBicD2,data/bicd2.fasta\nHBB,data/hbb.fasta\n```\n\nor if you know the UniProt ID of the protein you can provide it directly:\n\n```csv title=\"samplesheet.csv\"\nid,query\nBicD2,Q8TD16\nHBB,P68871\n```\n\n> [!NOTE]\n> If you provide both a FASTA file and a UniProt ID only the latter will be used.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/reportho \\\n -profile \\\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/reportho/usage) and the [parameter documentation](https://nf-co.re/reportho/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/reportho/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/reportho/output).\n\n## Report image\n\nThe code to create the image producing the pipeline report is available under [this](https://github.com/itrujnara/orthologs-report) GitHub repository.\n\n## Credits\n\nnf-core/reportho was originally written by Igor Trujnara ([@itrujnara](https://github.com/itrujnara)).\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- Luisa Santus ([@luisas](https://github.com/luisas))\n- Alessio Vignoli ([@alessiovignoli](https://github.com/alessiovignoli))\n- Jose Espinosa-Carrasco ([@JoseEspinosa](https://github.com/JoseEspinosa))\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 `#reportho` channel](https://nfcore.slack.com/channels/reportho) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/reportho for your analysis, please cite it using the following doi: [10.5281/zenodo.11574565](https://doi.org/10.5281/zenodo.11574565)\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", + "description": "

\n \n \n \"nf-core/reportho\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/reportho/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/reportho/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/reportho/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/reportho/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/reportho/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.11574565-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.11574565)\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%A524.04.2-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.3.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.3.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/reportho)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23reportho-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/reportho)[![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/reportho** is a bioinformatics pipeline that compares and summarizes orthology predictions for one or a set of query proteins. For each query (or its closest annotated homolog), it fetches ortholog lists from public databases, identifies synonymous identifiers based on sequences, calculates the agreement of the obtained predictions (pairwise and global) and finally generates a consensus list of orthologs with the desired level of confidence. Additionally, it generates a clean, human-readable report of the results.\n\n\n\n![nf-core-reportho tube map](docs/images/reportho_tube_map.svg?raw=true \"nf-core-reportho tube map\")\n\n1. **Obtain Query Information**: identification of Uniprot ID and taxon ID for the query (or its closest homolog if the fasta file is used as input instead of the Uniprot ID).\n2. **Fetch Orthologs**: fetching of ortholog predictions from public databases, either through API or from local snapshot.\n\nSteps 3 and 4 can be skipped with `--skip_merge`.\n\n3. **Fetch Sequences**: fetching of sequences of identified orthologs.\n4. **Merge Synonymous Identifiers**: identification of synonymous identifiers based on sequence identity.\n5. **Compare and Assemble**: calculation of agreement statistics, creation of ortholog lists, selection of the consensus list.\n6. **Generate Report**: human-readable HTML report generation.\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\n:::warning\nDue to an nf-test issue outside our control, the current version of the pipeline is not tested with Conda. Most functionality should work with Conda, but we cannot guarantee it. We will rectify this issue as soon as possible.\n:::\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n```csv title=\"samplesheet_fasta.csv\"\nid,fasta\nBicD2,data/bicd2.fasta\nHBB,data/hbb.fasta\n```\n\nor if you know the UniProt ID of the protein you can provide it directly:\n\n```csv title=\"samplesheet.csv\"\nid,query\nBicD2,Q8TD16\nHBB,P68871\n```\n\n> [!NOTE]\n> If you provide both a FASTA file and a UniProt ID only the latter will be used.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/reportho \\\n -profile \\\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/reportho/usage) and the [parameter documentation](https://nf-co.re/reportho/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/reportho/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/reportho/output).\n\n## Report image\n\nThe code to create the image producing the pipeline report is available under [this](https://github.com/itrujnara/orthologs-report) GitHub repository.\n\n## Credits\n\nnf-core/reportho was originally written by Igor Trujnara ([@itrujnara](https://github.com/itrujnara)).\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- Luisa Santus ([@luisas](https://github.com/luisas))\n- Alessio Vignoli ([@alessiovignoli](https://github.com/alessiovignoli))\n- Jose Espinosa-Carrasco ([@JoseEspinosa](https://github.com/JoseEspinosa))\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 `#reportho` channel](https://nfcore.slack.com/channels/reportho) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/reportho for your analysis, please cite it using the following doi: [10.5281/zenodo.11574565](https://doi.org/10.5281/zenodo.11574565)\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": [ { "@id": "main.nf"