diff --git a/.github/workflows/create-test-lint-wf-template.yml b/.github/workflows/create-test-lint-wf-template.yml index c4eca40fa6..4da8e79024 100644 --- a/.github/workflows/create-test-lint-wf-template.yml +++ b/.github/workflows/create-test-lint-wf-template.yml @@ -44,6 +44,7 @@ jobs: - "template_skip_code_linters.yml" - "template_skip_citations.yml" - "template_skip_gitpod.yml" + - "template_skip_multiqc.yml" runner: # use the runner given by the input if it is dispatched manually, run on github if it is a rerun or on self-hosted by default - ${{ github.event.inputs.runners || github.run_number > 1 && 'ubuntu-latest' || 'self-hosted' }} @@ -117,6 +118,10 @@ jobs: run: | printf "org: my-prefix\nskip: gitpod" > create-test-lint-wf/template_skip_gitpod.yml + - name: Create template skip multiqc + run: | + printf "org: my-prefix\nskip: multiqc" > create-test-lint-wf/template_skip_multiqc.yml + # Create a pipeline from the template - name: create a pipeline from the template ${{ matrix.TEMPLATE }} run: | diff --git a/.prettierignore b/.prettierignore index 2a445d487f..059007ab03 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,8 @@ docs/api/_build testing nf_core/module-template/meta.yml nf_core/pipeline-template/nextflow_schema.json +nf_core/pipeline-template/modules.json +nf_core/pipeline-template/tower.yml # don't run on things handled by ruff *.py *.pyc diff --git a/CHANGELOG.md b/CHANGELOG.md index 765507c4e1..128e6ba428 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - add option to exclude code linters for custom pipeline template ([#3084](https://github.com/nf-core/tools/pull/3084)) - add option to exclude citations for custom pipeline template ([#3101](https://github.com/nf-core/tools/pull/3101)) - add option to exclude gitpod for custom pipeline template ([#3100](https://github.com/nf-core/tools/pull/3100)) +- add option to exclude multiqc from pipeline template ([#3103](https://github.com/nf-core/tools/pull/3103)) ### Linting diff --git a/nf_core/pipeline-template/.github/CONTRIBUTING.md b/nf_core/pipeline-template/.github/CONTRIBUTING.md index e22a664250..2d6ecc174a 100644 --- a/nf_core/pipeline-template/.github/CONTRIBUTING.md +++ b/nf_core/pipeline-template/.github/CONTRIBUTING.md @@ -87,8 +87,10 @@ If you wish to contribute a new step, please use the following coding standards: 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. 8. If applicable, add a new test command in `.github/workflow/ci.yml`. + {%- if multiqc %} 9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. 10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. + {% endif %} ### Default values diff --git a/nf_core/pipeline-template/CITATIONS.md b/nf_core/pipeline-template/CITATIONS.md index c0c0729277..7cf37e5018 100644 --- a/nf_core/pipeline-template/CITATIONS.md +++ b/nf_core/pipeline-template/CITATIONS.md @@ -16,9 +16,10 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +{% if multiqc %}- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> {%- endif %} ## Software packaging/containerisation tools diff --git a/nf_core/pipeline-template/README.md b/nf_core/pipeline-template/README.md index 4efa88d5f6..7718d2e5f8 100644 --- a/nf_core/pipeline-template/README.md +++ b/nf_core/pipeline-template/README.md @@ -45,7 +45,7 @@ 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) + {% if multiqc %}2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)){% endif %} ## Usage diff --git a/nf_core/pipeline-template/assets/sendmail_template.txt b/nf_core/pipeline-template/assets/sendmail_template.txt index 3e59cd2d6d..5257815f7c 100644 --- a/nf_core/pipeline-template/assets/sendmail_template.txt +++ b/nf_core/pipeline-template/assets/sendmail_template.txt @@ -26,6 +26,7 @@ Content-Disposition: inline; filename="{{ name_noslash }}_logo_light.png" join( '\n' ) %> <% +{%- if multiqc %} if (mqcFile){ def mqcFileObj = new File("$mqcFile") if (mqcFileObj.length() < mqcMaxSize){ @@ -48,6 +49,7 @@ ${mqcFileObj. join( '\n' )} """ }} +{%- endif %} %> --nfcoremimeboundary-- diff --git a/nf_core/pipeline-template/conf/modules.config b/nf_core/pipeline-template/conf/modules.config index d203d2b6e6..84972d8e24 100644 --- a/nf_core/pipeline-template/conf/modules.config +++ b/nf_core/pipeline-template/conf/modules.config @@ -22,6 +22,7 @@ process { ext.args = '--quiet' } + {%- if multiqc %} withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ @@ -30,5 +31,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + {%- endif %} } diff --git a/nf_core/pipeline-template/docs/images/mqc_fastqc_adapter.png b/nf_core/pipeline-template/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47ac..0000000000 Binary files a/nf_core/pipeline-template/docs/images/mqc_fastqc_adapter.png and /dev/null differ diff --git a/nf_core/pipeline-template/docs/images/mqc_fastqc_counts.png b/nf_core/pipeline-template/docs/images/mqc_fastqc_counts.png deleted file mode 100755 index cb39ebb80a..0000000000 Binary files a/nf_core/pipeline-template/docs/images/mqc_fastqc_counts.png and /dev/null differ diff --git a/nf_core/pipeline-template/docs/images/mqc_fastqc_quality.png b/nf_core/pipeline-template/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56a..0000000000 Binary files a/nf_core/pipeline-template/docs/images/mqc_fastqc_quality.png and /dev/null differ diff --git a/nf_core/pipeline-template/docs/output.md b/nf_core/pipeline-template/docs/output.md index 53b0e242e5..edd48b83f4 100644 --- a/nf_core/pipeline-template/docs/output.md +++ b/nf_core/pipeline-template/docs/output.md @@ -2,7 +2,7 @@ ## Introduction -This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. +This document describes the output produced by the pipeline. {% if multiqc %}Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline.{% endif %} The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. @@ -13,7 +13,7 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - [FastQC](#fastqc) - Raw read QC -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline + {% if multiqc %}- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline{% endif %} - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -29,15 +29,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: +{%- if multiqc %} ### MultiQC @@ -54,6 +46,7 @@ The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They m [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +{% endif %} ### Pipeline information diff --git a/nf_core/pipeline-template/docs/usage.md b/nf_core/pipeline-template/docs/usage.md index bf637219f8..1dc033eea5 100644 --- a/nf_core/pipeline-template/docs/usage.md +++ b/nf_core/pipeline-template/docs/usage.md @@ -114,7 +114,7 @@ It is a good idea to specify a pipeline version when running the pipeline on you First, go to the [{{ name }} releases page](https://github.com/{{ name }}/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. -This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. {% if multiqc %}For example, at the bottom of the MultiQC reports.{% endif %} To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. diff --git a/nf_core/pipeline-template/main.nf b/nf_core/pipeline-template/main.nf index c13a0d24e1..fddfc5489e 100644 --- a/nf_core/pipeline-template/main.nf +++ b/nf_core/pipeline-template/main.nf @@ -56,10 +56,10 @@ workflow {{ prefix_nodash|upper }}_{{ short_name|upper }} { {{ short_name|upper }} ( samplesheet ) - +{%- if multiqc %} emit: multiqc_report = {{ short_name|upper }}.out.multiqc_report // channel: /path/to/multiqc_report.html - +{%- endif %} } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -101,7 +101,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, - {{ prefix_nodash|upper }}_{{ short_name|upper }}.out.multiqc_report + {%- if multiqc %}{{ prefix_nodash|upper }}_{{ short_name|upper }}.out.multiqc_report{% endif %} ) } diff --git a/nf_core/pipeline-template/modules.json b/nf_core/pipeline-template/modules.json index 9137c59675..eb9391b29a 100644 --- a/nf_core/pipeline-template/modules.json +++ b/nf_core/pipeline-template/modules.json @@ -9,12 +9,13 @@ "branch": "master", "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] - }, + }{%- if multiqc %}, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", "installed_by": ["modules"] } + {%- endif %} } }, "subworkflows": { diff --git a/nf_core/pipeline-template/nextflow.config b/nf_core/pipeline-template/nextflow.config index 00f5ba5514..3a7f544805 100644 --- a/nf_core/pipeline-template/nextflow.config +++ b/nf_core/pipeline-template/nextflow.config @@ -20,13 +20,14 @@ params { igenomes_ignore = false {%- endif %} + {%- if multiqc %} // MultiQC options multiqc_config = null multiqc_title = null multiqc_logo = null max_multiqc_email_size = '25.MB' - {%- if citations %} - multiqc_methods_description = null{% endif %} + {% if citations %}multiqc_methods_description = null{% endif %} + {%- endif %} // Boilerplate options outdir = null diff --git a/nf_core/pipeline-template/nextflow_schema.json b/nf_core/pipeline-template/nextflow_schema.json index 0bd4443675..1c52e2298d 100644 --- a/nf_core/pipeline-template/nextflow_schema.json +++ b/nf_core/pipeline-template/nextflow_schema.json @@ -35,12 +35,13 @@ "fa_icon": "fas fa-envelope", "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" - }, + }{% if multiqc %}, "multiqc_title": { "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", "fa_icon": "fas fa-file-signature" } + {% endif %} } }, {%- if igenomes %} @@ -201,6 +202,7 @@ "fa_icon": "fas fa-remove-format", "hidden": true }, + {%- if multiqc %} "max_multiqc_email_size": { "type": "string", "description": "File size limit when attaching MultiQC reports to summary emails.", @@ -209,6 +211,7 @@ "fa_icon": "fas fa-file-upload", "hidden": true }, + {% endif %} "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", @@ -222,6 +225,7 @@ "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", "hidden": true }, + {%- if multiqc %} "multiqc_config": { "type": "string", "format": "file-path", @@ -239,7 +243,7 @@ "type": "string", "description": "Custom MultiQC yaml file containing HTML including a methods description.", "fa_icon": "fas fa-cog" - },{% endif %} + },{% endif %}{% endif %} "validate_params": { "type": "boolean", "description": "Boolean whether to validate parameters against the schema at runtime", diff --git a/nf_core/pipeline-template/subworkflows/local/utils_nfcore_pipeline_pipeline/main.nf b/nf_core/pipeline-template/subworkflows/local/utils_nfcore_pipeline_pipeline/main.nf index 0c2e1d8b0a..72c9be85eb 100644 --- a/nf_core/pipeline-template/subworkflows/local/utils_nfcore_pipeline_pipeline/main.nf +++ b/nf_core/pipeline-template/subworkflows/local/utils_nfcore_pipeline_pipeline/main.nf @@ -123,7 +123,7 @@ workflow PIPELINE_COMPLETION { outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications - multiqc_report // string: Path to MultiQC report + {% if multiqc %}multiqc_report // string: Path to MultiQC report{% endif %} main: @@ -134,7 +134,11 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { + {%- if multiqc %} completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + {%- else %} + completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, []) + {%- endif %} } completionSummary(monochrome_logs) @@ -206,8 +210,7 @@ def genomeExistsError() { } } {%- endif %} - -{%- if citations %} +{%- if citations or multiqc %} // // Generate methods description for MultiQC // diff --git a/nf_core/pipeline-template/tower.yml b/nf_core/pipeline-template/tower.yml index 787aedfe92..2ddbef770e 100644 --- a/nf_core/pipeline-template/tower.yml +++ b/nf_core/pipeline-template/tower.yml @@ -1,5 +1,7 @@ reports: + {%- if multiqc %} multiqc_report.html: display: "MultiQC HTML report" + {%- endif %} samplesheet.csv: display: "Auto-created samplesheet with collated metadata and FASTQ paths" diff --git a/nf_core/pipeline-template/workflows/pipeline.nf b/nf_core/pipeline-template/workflows/pipeline.nf index 8ce3637e4e..d98c392f0c 100644 --- a/nf_core/pipeline-template/workflows/pipeline.nf +++ b/nf_core/pipeline-template/workflows/pipeline.nf @@ -5,11 +5,11 @@ */ include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' +{% if multiqc %}include { MULTIQC } from '../modules/nf-core/multiqc/main'{% endif %} include { paramsSummaryMap } from 'plugin/nf-validation' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +{% if multiqc %}include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline'{% endif %} include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -{% if citations %}include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_{{ short_name }}_pipeline'{% endif %} +{% if citations or multiqc %}include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_{{ short_name }}_pipeline'{% endif %} /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -25,7 +25,7 @@ workflow {{ short_name|upper }} { main: ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + {% if multiqc %}ch_multiqc_files = Channel.empty(){% endif %} // // MODULE: Run FastQC @@ -33,7 +33,7 @@ workflow {{ short_name|upper }} { FASTQC ( ch_samplesheet ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + {% if multiqc %}ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}){% endif %} ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // @@ -47,6 +47,7 @@ workflow {{ short_name|upper }} { newLine: true ).set { ch_collated_versions } +{% if multiqc %} // // MODULE: MultiQC // @@ -89,9 +90,9 @@ workflow {{ short_name|upper }} { ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList() ) - +{% endif %} emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + {%- if multiqc %}multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html{% endif %} versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/nf_core/pipelines/create/create.py b/nf_core/pipelines/create/create.py index 05a5804ee3..684b13f83a 100644 --- a/nf_core/pipelines/create/create.py +++ b/nf_core/pipelines/create/create.py @@ -103,6 +103,11 @@ def __init__( ], "citations": ["assets/methods_description_template.yml"], "gitpod": [".gitpod.yml"], + "multiqc": [ + "assets/multiqc_config.yml", + "assets/methods_description_template.yml", + "modules/nf-core/multiqc/", + ], } # Get list of files we're skipping with the supplied skip keys self.skip_paths = set(sp for k in skip_paths for sp in skippable_paths[k]) @@ -214,6 +219,7 @@ def obtain_jinja_params_dict(self, features_to_skip, pipeline_dir): "code_linters": {"file": True, "content": True}, "citations": {"file": True, "content": True}, "gitpod": {"file": True, "content": True}, + "multiqc": {"file": True, "content": True}, } # Set the parameters for the jinja template @@ -378,8 +384,8 @@ def render_template(self): # in the github bug report template self.remove_nf_core_in_bug_report_template() - # Update the .nf-core.yml with linting configurations - self.fix_linting() + # Update the .nf-core.yml with linting configurations + self.fix_linting() if self.config: config_fn, config_yml = nf_core.utils.load_tools_config(self.outdir) @@ -429,28 +435,31 @@ def fix_linting(self): """ # Create a lint config short_name = self.jinja_params["short_name"] - lint_config = { - "files_exist": [ - "CODE_OF_CONDUCT.md", - f"assets/nf-core-{short_name}_logo_light.png", - f"docs/images/nf-core-{short_name}_logo_light.png", - f"docs/images/nf-core-{short_name}_logo_dark.png", - ".github/ISSUE_TEMPLATE/config.yml", - ".github/workflows/awstest.yml", - ".github/workflows/awsfulltest.yml", - ], - "files_unchanged": [ - "CODE_OF_CONDUCT.md", - f"assets/nf-core-{short_name}_logo_light.png", - f"docs/images/nf-core-{short_name}_logo_light.png", - f"docs/images/nf-core-{short_name}_logo_dark.png", - ], - "nextflow_config": [ - "manifest.name", - "manifest.homePage", - ], - "multiqc_config": ["report_comment"], - } + if not self.config.is_nfcore: + lint_config = { + "files_exist": [ + "CODE_OF_CONDUCT.md", + f"assets/nf-core-{short_name}_logo_light.png", + f"docs/images/nf-core-{short_name}_logo_light.png", + f"docs/images/nf-core-{short_name}_logo_dark.png", + ".github/ISSUE_TEMPLATE/config.yml", + ".github/workflows/awstest.yml", + ".github/workflows/awsfulltest.yml", + ], + "files_unchanged": [ + "CODE_OF_CONDUCT.md", + f"assets/nf-core-{short_name}_logo_light.png", + f"docs/images/nf-core-{short_name}_logo_light.png", + f"docs/images/nf-core-{short_name}_logo_dark.png", + ], + "nextflow_config": [ + "manifest.name", + "manifest.homePage", + ], + "multiqc_config": ["report_comment"], + } + else: + lint_config = {} # Add GitHub hosting specific configurations if not self.jinja_params["github"]: @@ -509,6 +518,14 @@ def fix_linting(self): if not self.jinja_params["github_badges"] or not self.jinja_params["github"]: lint_config["readme"] = ["nextflow_badge"] + # Add multiqc specific configurations + if not self.jinja_params["multiqc"]: + lint_config.setdefault("files_unchanged", []).extend( + [".github/CONTRIBUTING.md", "assets/sendmail_template.txt"] + ) + lint_config.setdefault("files_exist", []).extend(["assets/multiqc_config.yml"]) + lint_config["multiqc_config"] = False + # If the pipeline is not nf-core if not self.config.is_nfcore: lint_config["files_unchanged"].extend([".github/ISSUE_TEMPLATE/bug_report.yml"]) diff --git a/nf_core/pipelines/create/custompipeline.py b/nf_core/pipelines/create/custompipeline.py index 5f131a7d84..654f29e826 100644 --- a/nf_core/pipelines/create/custompipeline.py +++ b/nf_core/pipelines/create/custompipeline.py @@ -6,7 +6,7 @@ from textual.screen import Screen from textual.widgets import Button, Footer, Header, Markdown, Switch -from nf_core.pipelines.create.utils import PipelineFeature, markdown_genomes +from nf_core.pipelines.create.utils import PipelineFeature, markdown_genomes, markdown_multiqc markdown_ci = """ Nf-core provides a set of Continuous Integration (CI) tests for Github. @@ -122,6 +122,12 @@ def compose(self) -> ComposeResult: "Include the configuration required to use Gitpod.", "gitpod", ), + PipelineFeature( + markdown_multiqc, + "Use multiqc", + "The pipeline will include the MultiQC module which generates an HTML report for quality control.", + "multiqc", + ), classes="features-container", ) yield Center( diff --git a/nf_core/pipelines/create/nfcorepipeline.py b/nf_core/pipelines/create/nfcorepipeline.py index 49cc1f8f86..8319cb044c 100644 --- a/nf_core/pipelines/create/nfcorepipeline.py +++ b/nf_core/pipelines/create/nfcorepipeline.py @@ -6,7 +6,7 @@ from textual.screen import Screen from textual.widgets import Button, Footer, Header, Markdown, Switch -from nf_core.pipelines.create.utils import PipelineFeature, markdown_genomes +from nf_core.pipelines.create.utils import PipelineFeature, markdown_genomes, markdown_multiqc class NfcorePipeline(Screen): @@ -29,6 +29,12 @@ def compose(self) -> ComposeResult: "The pipeline will be configured to use a copy of the most common reference genome files from iGenomes", "igenomes", ), + PipelineFeature( + markdown_multiqc, + "Use multiqc", + "The pipeline will include the MultiQC module which generates an HTML report for quality control.", + "multiqc", + ), classes="features-container", ) yield Center( diff --git a/nf_core/pipelines/create/utils.py b/nf_core/pipelines/create/utils.py index c387960c39..43094ab531 100644 --- a/nf_core/pipelines/create/utils.py +++ b/nf_core/pipelines/create/utils.py @@ -259,3 +259,9 @@ def remove_hide_class(app, widget_id: str) -> None: For more information about reference genomes in nf-core pipelines, see the [nf-core docs](https://nf-co.re/docs/usage/reference_genomes). """ + +markdown_multiqc = """ +MultiQC is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline quality control results can be visualised in the report and further statistics are available in the report data directory. + +The pipeline will include the MultiQC module and will have special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see http://multiqc.info. +""" diff --git a/tests/__snapshots__/test_create_app.ambr b/tests/__snapshots__/test_create_app.ambr index 57e4258ef8..9aad37cc96 100644 --- a/tests/__snapshots__/test_create_app.ambr +++ b/tests/__snapshots__/test_create_app.ambr @@ -851,257 +851,257 @@ font-weight: 700; } - .terminal-3843971496-matrix { + .terminal-2285198722-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3843971496-title { + .terminal-2285198722-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3843971496-r1 { fill: #c5c8c6 } - .terminal-3843971496-r2 { fill: #e3e3e3 } - .terminal-3843971496-r3 { fill: #989898 } - .terminal-3843971496-r4 { fill: #e1e1e1 } - .terminal-3843971496-r5 { fill: #4ebf71;font-weight: bold } - .terminal-3843971496-r6 { fill: #1e1e1e } - .terminal-3843971496-r7 { fill: #0178d4 } - .terminal-3843971496-r8 { fill: #454a50 } - .terminal-3843971496-r9 { fill: #e2e2e2 } - .terminal-3843971496-r10 { fill: #808080 } - .terminal-3843971496-r11 { fill: #e2e3e3;font-weight: bold } - .terminal-3843971496-r12 { fill: #000000 } - .terminal-3843971496-r13 { fill: #e4e4e4 } - .terminal-3843971496-r14 { fill: #14191f } - .terminal-3843971496-r15 { fill: #507bb3 } - .terminal-3843971496-r16 { fill: #dde6ed;font-weight: bold } - .terminal-3843971496-r17 { fill: #001541 } - .terminal-3843971496-r18 { fill: #7ae998 } - .terminal-3843971496-r19 { fill: #0a180e;font-weight: bold } - .terminal-3843971496-r20 { fill: #008139 } - .terminal-3843971496-r21 { fill: #fea62b;font-weight: bold } - .terminal-3843971496-r22 { fill: #a7a9ab } - .terminal-3843971496-r23 { fill: #e2e3e3 } + .terminal-2285198722-r1 { fill: #c5c8c6 } + .terminal-2285198722-r2 { fill: #e3e3e3 } + .terminal-2285198722-r3 { fill: #989898 } + .terminal-2285198722-r4 { fill: #e1e1e1 } + .terminal-2285198722-r5 { fill: #4ebf71;font-weight: bold } + .terminal-2285198722-r6 { fill: #1e1e1e } + .terminal-2285198722-r7 { fill: #0178d4 } + .terminal-2285198722-r8 { fill: #454a50 } + .terminal-2285198722-r9 { fill: #e2e2e2 } + .terminal-2285198722-r10 { fill: #808080 } + .terminal-2285198722-r11 { fill: #e2e3e3;font-weight: bold } + .terminal-2285198722-r12 { fill: #000000 } + .terminal-2285198722-r13 { fill: #e4e4e4 } + .terminal-2285198722-r14 { fill: #14191f } + .terminal-2285198722-r15 { fill: #507bb3 } + .terminal-2285198722-r16 { fill: #dde6ed;font-weight: bold } + .terminal-2285198722-r17 { fill: #001541 } + .terminal-2285198722-r18 { fill: #7ae998 } + .terminal-2285198722-r19 { fill: #0a180e;font-weight: bold } + .terminal-2285198722-r20 { fill: #008139 } + .terminal-2285198722-r21 { fill: #fea62b;font-weight: bold } + .terminal-2285198722-r22 { fill: #a7a9ab } + .terminal-2285198722-r23 { fill: #e2e3e3 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - nf-core create + nf-core create - - - - nf-core create — Create a new pipeline with the nf-core pipeline template - - - Template features - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Use reference The pipeline will  Hide help  - ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - use a copy of the  - most common  - reference genome  - files from  - iGenomes - - - Nf-core pipelines are configured to use a copy of the most common  - reference genome files. - - By selecting this option, your pipeline will include a configuration - file specifying the paths to these files. - - The required code to use these files will also be included in the  - template. When the pipeline user provides an appropriate genome key, - the pipeline will automatically download the required reference ▂▂ - files.▁▁ - - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Add Github CI The pipeline will  Show help  - ▁▁▁▁▁▁▁▁        testsinclude several ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - GitHub actions for - Continuous  - Integration (CI)  - testing - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Add Github badgesThe README.md file Show help  - ▁▁▁▁▁▁▁▁of the pipeline ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - will include  - GitHub badges - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Back  Continue  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -  d Toggle dark mode  q Quit  + + + + nf-core create — Create a new pipeline with the nf-core pipeline template + + + Template features + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Use reference The pipeline will  Hide help  + ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + use a copy of the  + most common  + reference genome  + files from  + iGenomes + + + Nf-core pipelines are configured to use a copy of the most common  + reference genome files. + + By selecting this option, your pipeline will include a configuration + file specifying the paths to these files. + + The required code to use these files will also be included in the  + template. When the pipeline user provides an appropriate genome key,▁▁ + the pipeline will automatically download the required reference ▂▂ + files. + + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Add Github CI The pipeline will  Show help  + ▁▁▁▁▁▁▁▁        testsinclude several ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + GitHub actions for + Continuous  + Integration (CI)  + testing + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Add Github badgesThe README.md file Show help  + ▁▁▁▁▁▁▁▁of the pipeline ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + will include  + GitHub badges + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Back  Continue  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +  d Toggle dark mode  q Quit  @@ -2233,255 +2233,255 @@ font-weight: 700; } - .terminal-1616690770-matrix { + .terminal-3802907671-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1616690770-title { + .terminal-3802907671-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1616690770-r1 { fill: #c5c8c6 } - .terminal-1616690770-r2 { fill: #e3e3e3 } - .terminal-1616690770-r3 { fill: #989898 } - .terminal-1616690770-r4 { fill: #e1e1e1 } - .terminal-1616690770-r5 { fill: #4ebf71;font-weight: bold } - .terminal-1616690770-r6 { fill: #1e1e1e } - .terminal-1616690770-r7 { fill: #507bb3 } - .terminal-1616690770-r8 { fill: #e2e2e2 } - .terminal-1616690770-r9 { fill: #808080 } - .terminal-1616690770-r10 { fill: #dde6ed;font-weight: bold } - .terminal-1616690770-r11 { fill: #001541 } - .terminal-1616690770-r12 { fill: #14191f } - .terminal-1616690770-r13 { fill: #454a50 } - .terminal-1616690770-r14 { fill: #7ae998 } - .terminal-1616690770-r15 { fill: #e2e3e3;font-weight: bold } - .terminal-1616690770-r16 { fill: #0a180e;font-weight: bold } - .terminal-1616690770-r17 { fill: #000000 } - .terminal-1616690770-r18 { fill: #008139 } - .terminal-1616690770-r19 { fill: #fea62b;font-weight: bold } - .terminal-1616690770-r20 { fill: #a7a9ab } - .terminal-1616690770-r21 { fill: #e2e3e3 } + .terminal-3802907671-r1 { fill: #c5c8c6 } + .terminal-3802907671-r2 { fill: #e3e3e3 } + .terminal-3802907671-r3 { fill: #989898 } + .terminal-3802907671-r4 { fill: #e1e1e1 } + .terminal-3802907671-r5 { fill: #4ebf71;font-weight: bold } + .terminal-3802907671-r6 { fill: #1e1e1e } + .terminal-3802907671-r7 { fill: #507bb3 } + .terminal-3802907671-r8 { fill: #e2e2e2 } + .terminal-3802907671-r9 { fill: #808080 } + .terminal-3802907671-r10 { fill: #dde6ed;font-weight: bold } + .terminal-3802907671-r11 { fill: #001541 } + .terminal-3802907671-r12 { fill: #14191f } + .terminal-3802907671-r13 { fill: #454a50 } + .terminal-3802907671-r14 { fill: #7ae998 } + .terminal-3802907671-r15 { fill: #e2e3e3;font-weight: bold } + .terminal-3802907671-r16 { fill: #0a180e;font-weight: bold } + .terminal-3802907671-r17 { fill: #000000 } + .terminal-3802907671-r18 { fill: #008139 } + .terminal-3802907671-r19 { fill: #fea62b;font-weight: bold } + .terminal-3802907671-r20 { fill: #a7a9ab } + .terminal-3802907671-r21 { fill: #e2e3e3 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - nf-core create + nf-core create - - - - nf-core create — Create a new pipeline with the nf-core pipeline template - - - Template features - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Use reference The pipeline will  Show help  - ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - use a copy of the  - most common  - reference genome  - files from  - iGenomes - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Add Github CI The pipeline will  Show help  - ▁▁▁▁▁▁▁▁        testsinclude several ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - GitHub actions for - Continuous  - Integration (CI)  - testing - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Add Github badgesThe README.md file Show help  - ▁▁▁▁▁▁▁▁of the pipeline ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - will include  - GitHub badges - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Add configuration         The pipeline will  Show help ▄▄ - ▁▁▁▁▁▁▁▁        filesinclude ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - configuration  - profiles  - containing custom  - parameters  - requried to run  - nf-core pipelines  - at different  - institutions - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Use code lintersThe pipeline will  Show help  - ▁▁▁▁▁▁▁▁include code ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Back  Continue  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -  d Toggle dark mode  q Quit  + + + + nf-core create — Create a new pipeline with the nf-core pipeline template + + + Template features + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Use reference The pipeline will  Show help  + ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + use a copy of the  + most common  + reference genome  + files from  + iGenomes + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Add Github CI The pipeline will  Show help  + ▁▁▁▁▁▁▁▁        testsinclude several ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + GitHub actions for + Continuous  + Integration (CI)  + testing + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Add Github badgesThe README.md file Show help  + ▁▁▁▁▁▁▁▁of the pipeline ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + will include  + GitHub badges▃▃ + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Add configuration         The pipeline will  Show help  + ▁▁▁▁▁▁▁▁        filesinclude ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + configuration  + profiles  + containing custom  + parameters  + requried to run  + nf-core pipelines  + at different  + institutions + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Use code lintersThe pipeline will  Show help  + ▁▁▁▁▁▁▁▁include code ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Back  Continue  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +  d Toggle dark mode  q Quit  @@ -2511,254 +2511,254 @@ font-weight: 700; } - .terminal-388991162-matrix { + .terminal-157696122-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-388991162-title { + .terminal-157696122-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-388991162-r1 { fill: #c5c8c6 } - .terminal-388991162-r2 { fill: #e3e3e3 } - .terminal-388991162-r3 { fill: #989898 } - .terminal-388991162-r4 { fill: #e1e1e1 } - .terminal-388991162-r5 { fill: #4ebf71;font-weight: bold } - .terminal-388991162-r6 { fill: #1e1e1e } - .terminal-388991162-r7 { fill: #507bb3 } - .terminal-388991162-r8 { fill: #e2e2e2 } - .terminal-388991162-r9 { fill: #808080 } - .terminal-388991162-r10 { fill: #dde6ed;font-weight: bold } - .terminal-388991162-r11 { fill: #001541 } - .terminal-388991162-r12 { fill: #454a50 } - .terminal-388991162-r13 { fill: #7ae998 } - .terminal-388991162-r14 { fill: #e2e3e3;font-weight: bold } - .terminal-388991162-r15 { fill: #0a180e;font-weight: bold } - .terminal-388991162-r16 { fill: #000000 } - .terminal-388991162-r17 { fill: #008139 } - .terminal-388991162-r18 { fill: #fea62b;font-weight: bold } - .terminal-388991162-r19 { fill: #a7a9ab } - .terminal-388991162-r20 { fill: #e2e3e3 } + .terminal-157696122-r1 { fill: #c5c8c6 } + .terminal-157696122-r2 { fill: #e3e3e3 } + .terminal-157696122-r3 { fill: #989898 } + .terminal-157696122-r4 { fill: #e1e1e1 } + .terminal-157696122-r5 { fill: #4ebf71;font-weight: bold } + .terminal-157696122-r6 { fill: #1e1e1e } + .terminal-157696122-r7 { fill: #507bb3 } + .terminal-157696122-r8 { fill: #e2e2e2 } + .terminal-157696122-r9 { fill: #808080 } + .terminal-157696122-r10 { fill: #dde6ed;font-weight: bold } + .terminal-157696122-r11 { fill: #001541 } + .terminal-157696122-r12 { fill: #454a50 } + .terminal-157696122-r13 { fill: #7ae998 } + .terminal-157696122-r14 { fill: #e2e3e3;font-weight: bold } + .terminal-157696122-r15 { fill: #0a180e;font-weight: bold } + .terminal-157696122-r16 { fill: #000000 } + .terminal-157696122-r17 { fill: #008139 } + .terminal-157696122-r18 { fill: #fea62b;font-weight: bold } + .terminal-157696122-r19 { fill: #a7a9ab } + .terminal-157696122-r20 { fill: #e2e3e3 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - nf-core create + nf-core create - - - - nf-core create — Create a new pipeline with the nf-core pipeline template - - - Template features - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -         Use reference The pipeline will  Show help  - ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - use a copy of the  - most common  - reference genome  - files from iGenomes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Back  Continue  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -  d Toggle dark mode  q Quit  + + + + nf-core create — Create a new pipeline with the nf-core pipeline template + + + Template features + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Use reference The pipeline will  Show help  + ▁▁▁▁▁▁▁▁        genomesbe configured to ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + use a copy of the  + most common  + reference genome  + files from iGenomes + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +         Use multiqcThe pipeline will  Show help  + ▁▁▁▁▁▁▁▁include the MultiQC▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + module which  + generates an HTML  + report for quality  + control. + + + + + + + + + + + + + + + + + + + + + + + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Back  Continue  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +  d Toggle dark mode  q Quit  diff --git a/tests/data/pipeline_create_template_skip.yml b/tests/data/pipeline_create_template_skip.yml index 1431114c08..7ae5bba8c4 100644 --- a/tests/data/pipeline_create_template_skip.yml +++ b/tests/data/pipeline_create_template_skip.yml @@ -14,3 +14,4 @@ skip_features: - code_linters - citations - gitpod + - multiqc