From 988ca490fe772b557fcd2e1a721e695e721a1164 Mon Sep 17 00:00:00 2001 From: Martin Beracochea Date: Thu, 30 May 2024 11:49:00 +0100 Subject: [PATCH] Migrate from nf-val to nf-schema. Basic nf-test (real data) --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++++++++++++++++ .gitignore | 2 ++ assets/mgnify_logo.png | Bin 0 -> 5916 bytes assets/multiqc_config.yml | 5 +++-- assets/samplesheet.csv | 3 --- main.nf | 2 +- nextflow.config | 14 +++++++------- nextflow_schema.json | 38 +++++--------------------------------- nf-test.config | 7 +++++++ tests/main.nf.test | 25 +++++++++++++++++++++++++ tests/nextflow.config | 5 +++++ workflows/miassembler.nf | 16 ++++++++-------- 12 files changed, 99 insertions(+), 54 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 assets/mgnify_logo.png delete mode 100644 assets/samplesheet.csv create mode 100644 nf-test.config create mode 100644 tests/main.nf.test create mode 100644 tests/nextflow.config diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..422dcaa --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: nf-test CI +on: + push: + branches: + - dev + pull_request: + release: + types: [published] + +env: + NXF_ANSI_LOG: false + NFTEST_VER: "0.8.4" + +jobs: + test: + name: Run pipeline with test data + runs-on: ubuntu-latest + + steps: + - name: Check out pipeline code + uses: actions/checkout@v4 + + - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4 + with: + distribution: "temurin" + java-version: "17" + + - name: Setup Nextflow + uses: nf-core/setup-nextflow@v2 + + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + + - name: Run pipeline with test data + run: | + nf-test test diff --git a/.gitignore b/.gitignore index 743cd3f..708fd26 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ results/ .pytest_cache/ assets/fetch_tool_credentials.json +.nf-test.log +.nf-test/ diff --git a/assets/mgnify_logo.png b/assets/mgnify_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6112be9062ec35b5fef00300f7bf52ab9e8970 GIT binary patch literal 5916 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 This report has been generated by the ebi-metagenomics/miassembler analysis pipeline. + report_section_order: "ebi-metagenomics-miassembler-methods-description": order: -1000 - software_versions: - order: -1001 "ebi-metagenomics-miassembler-summary": order: -1002 export_plots: true +skip_versions_section: true + top_modules: - fastqc - quast diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index 5f653ab..0000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,3 +0,0 @@ -sample,fastq_1,fastq_2 -SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, diff --git a/main.nf b/main.nf index fd18121..e578af4 100644 --- a/main.nf +++ b/main.nf @@ -15,7 +15,7 @@ nextflow.enable.dsl = 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { validateParameters; paramsHelp; paramsSummaryLog; paramsSummaryMap; } from 'plugin/nf-validation' +include { validateParameters; paramsHelp; paramsSummaryLog; paramsSummaryMap; } from 'plugin/nf-schema' def summary_params = paramsSummaryMap(workflow) diff --git a/nextflow.config b/nextflow.config index 457b942..5ba3d07 100644 --- a/nextflow.config +++ b/nextflow.config @@ -72,18 +72,18 @@ params { max_cpus = 32 max_time = '168.h' // 7 days - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationShowHiddenParams = false - validate_params = true - // Assembler versions spades_version = "3.15.5" megahit_version = "1.2.9" } +validation { + failUnrecognisedParams = true + lenientMode = false + showHiddenParams = false +} + // Load base.config by default for all pipelines includeConfig 'conf/base.config' @@ -192,7 +192,7 @@ singularity.registry = 'quay.io' // Nextflow plugins plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.0.0' } // Export these variables to prevent local Python/R libraries from conflicting with those in the container diff --git a/nextflow_schema.json b/nextflow_schema.json index 4e03e59..cc6bc51 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/ebi-metagenomics/miassembler/master/nextflow_schema.json", "title": "ebi-metagenomics/miassembler pipeline parameters", "description": "Microbiome Informatics metagenomes assembly pipeline", "type": "object", - "definitions": { + "defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -241,47 +241,19 @@ "type": "string", "description": "Custom MultiQC yaml file containing HTML including a methods description.", "fa_icon": "fas fa-cog" - }, - "validate_params": { - "type": "boolean", - "description": "Boolean whether to validate parameters against the schema at runtime", - "default": true, - "fa_icon": "fas fa-check-square", - "hidden": true - }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." } } } }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/defs/input_output_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/defs/max_job_request_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/defs/generic_options" } ] } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 0000000..ac040d5 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,7 @@ +config { + + testsDir "tests" + workDir ".nf-test" + configFile "tests/nextflow.config" + profile "test,docker" +} diff --git a/tests/main.nf.test b/tests/main.nf.test new file mode 100644 index 0000000..32a50cf --- /dev/null +++ b/tests/main.nf.test @@ -0,0 +1,25 @@ +nextflow_pipeline { + + name "Test Workflow EBIMETAGENOMICS_MIASSEMBLER" + script "main.nf" + + test("Should run without failures") { + + when { + params { + outdir = "tests/results" + bwamem2_reference_genomes_folder = "$projectDir/tests/human_phix/bwa2mem" + blast_reference_genomes_folder = "$projectDir/tests/human_phix/blast" + } + } + + then { + with(workflow) { + assert success + assert trace.tasks().size() == 19 + } + } + + } + +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 0000000..c19b1ad --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,5 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ diff --git a/workflows/miassembler.nf b/workflows/miassembler.nf index be4cb8c..e75ff43 100644 --- a/workflows/miassembler.nf +++ b/workflows/miassembler.nf @@ -4,7 +4,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-schema' def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) def citation = '\n' + WorkflowMain.citation(workflow) + '\n' @@ -21,7 +21,7 @@ log.info logo + paramsSummaryLog(workflow) + citation ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.fromPath("$projectDir/assets/mgnify_logo.png") ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* @@ -50,11 +50,11 @@ include { ASSEMBLY_COVERAGE } from '../subworkflows/local/assembly_coverage' // include { FASTQC as FASTQC_BEFORE } from '../modules/nf-core/fastqc/main' include { FASTQC as FASTQC_AFTER } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' -include { SPADES } from '../modules/nf-core/spades/main' -include { MEGAHIT } from '../modules/nf-core/megahit/main' -include { QUAST } from '../modules/nf-core/quast/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' +include { SPADES } from '../modules/nf-core/spades/main' +include { MEGAHIT } from '../modules/nf-core/megahit/main' +include { QUAST } from '../modules/nf-core/quast/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -149,7 +149,7 @@ workflow MIASSEMBLER { SPADES( qc_reads.xspades.map { meta, reads -> [meta, reads, [], []] }, - params.assembler, + params.assembler ?: "metaspades", [], // yml input parameters, which we don't use [] // hmm, not used )