diff --git a/nf_core/commands_pipelines.py b/nf_core/commands_pipelines.py
index 4b6fa75f3e..23affb1d27 100644
--- a/nf_core/commands_pipelines.py
+++ b/nf_core/commands_pipelines.py
@@ -144,9 +144,12 @@ def pipelines_lint(
ctx.obj["hide_progress"],
)
swf_failed = 0
+ module_failed = 0
if subworkflow_lint_obj is not None:
swf_failed = len(subworkflow_lint_obj.failed)
- if len(lint_obj.failed) + len(module_lint_obj.failed) + swf_failed > 0:
+ if module_lint_obj is not None:
+ module_failed = len(module_lint_obj.failed)
+ if len(lint_obj.failed) + module_failed + swf_failed > 0:
sys.exit(1)
except AssertionError as e:
log.critical(e)
diff --git a/nf_core/pipeline-template/.editorconfig b/nf_core/pipeline-template/.editorconfig
index 5efa586109..5145366e50 100644
--- a/nf_core/pipeline-template/.editorconfig
+++ b/nf_core/pipeline-template/.editorconfig
@@ -11,6 +11,7 @@ indent_style = space
[*.{md,yml,yaml,html,css,scss,js}]
indent_size = 2
+{%- if modules %}
# These files are edited and tested upstream in nf-core/modules
[/modules/nf-core/**]
charset = unset
@@ -24,6 +25,7 @@ end_of_line = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
indent_style = unset
+{%- endif %}
{%- if email %}
[/assets/email*]
diff --git a/nf_core/pipeline-template/main.nf b/nf_core/pipeline-template/main.nf
index 5a7de44a53..6516ebf90e 100644
--- a/nf_core/pipeline-template/main.nf
+++ b/nf_core/pipeline-template/main.nf
@@ -18,6 +18,7 @@
*/
include { {{ short_name|upper }} } from './workflows/{{ short_name }}'
+{%- if modules %}
include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_{{ short_name }}_pipeline'
include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_{{ short_name }}_pipeline'
{%- if igenomes %}
@@ -33,7 +34,7 @@ include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_{{ s
// This is an example of how to use getGenomeAttribute() to fetch parameters
// from igenomes.config using `--genome`
params.fasta = getGenomeAttribute('fasta')
-{% endif %}
+{% endif %}{% endif %}
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NAMED WORKFLOWS FOR PIPELINE
@@ -56,10 +57,10 @@ workflow {{ prefix_nodash|upper }}_{{ short_name|upper }} {
{{ short_name|upper }} (
samplesheet
)
-{%- if multiqc %}
+{%- if multiqc %}{%- if modules %}
emit:
multiqc_report = {{ short_name|upper }}.out.multiqc_report // channel: /path/to/multiqc_report.html
-{%- endif %}
+{%- endif %}{%- endif %}
}
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -71,6 +72,7 @@ workflow {
main:
+ {%- if modules %}
//
// SUBWORKFLOW: Run initialisation tasks
//
@@ -82,14 +84,19 @@ workflow {
params.outdir,
params.input
)
-
+ {% endif %}
//
// WORKFLOW: Run main workflow
//
{{ prefix_nodash|upper }}_{{ short_name|upper }} (
+ {%- if modules %}
PIPELINE_INITIALISATION.out.samplesheet
+ {%- else %}
+ params.input
+ {%- endif %}
)
+ {%- if modules %}
//
// SUBWORKFLOW: Run completion tasks
//
@@ -104,6 +111,7 @@ workflow {
{% if adaptivecard or slackreport %}params.hook_url,{% endif %}
{% if multiqc %}{{ prefix_nodash|upper }}_{{ short_name|upper }}.out.multiqc_report{% endif %}
)
+ {%- endif %}
}
/*
diff --git a/nf_core/pipeline-template/nextflow.config b/nf_core/pipeline-template/nextflow.config
index 8818ec54db..7776bc03f1 100644
--- a/nf_core/pipeline-template/nextflow.config
+++ b/nf_core/pipeline-template/nextflow.config
@@ -66,10 +66,21 @@ params {
validate_params = true
}
-
+{% if modules %}
// Load base.config by default for all pipelines
includeConfig 'conf/base.config'
+{%- else %}
+process {
+ // TODO nf-core: Check the defaults for all processes
+ cpus = { check_max( 1 * task.attempt, 'cpus' ) }
+ memory = { check_max( 6.GB * task.attempt, 'memory' ) }
+ time = { check_max( 4.h * task.attempt, 'time' ) }
+ errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' }
+ maxRetries = 1
+ maxErrors = '-1'
+}
+{% endif %}
{% if nf_core_configs -%}
// Load nf-core custom profiles from different Institutions
try {
@@ -289,7 +300,7 @@ validation {
-\033[2m----------------------------------------------------\033[0m-
"""
afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""}
-* The nf-core framework
+* The nf-core framework
https://doi.org/10.1038/s41587-020-0439-x
* Software dependencies
@@ -302,10 +313,10 @@ validation {
}{% endif %}
}
{% endif -%}
-
+{%- if modules %}
// Load modules.config for DSL2 module specific options
includeConfig 'conf/modules.config'
-
+{% endif %}
// Function to ensure that resource requirements don't go beyond
// a maximum limit
def check_max(obj, type) {
diff --git a/nf_core/pipeline-template/nextflow_schema.json b/nf_core/pipeline-template/nextflow_schema.json
index 39bf0d0da3..c84f652d07 100644
--- a/nf_core/pipeline-template/nextflow_schema.json
+++ b/nf_core/pipeline-template/nextflow_schema.json
@@ -56,6 +56,7 @@
"fa_icon": "fas fa-book",
"help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details."
},
+ {%- if modules %}
"fasta": {
"type": "string",
"format": "file-path",
@@ -66,6 +67,7 @@
"help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.",
"fa_icon": "far fa-file-code"
},
+ {%- endif %}
"igenomes_ignore": {
"type": "boolean",
"description": "Do not load the iGenomes reference config.",
diff --git a/nf_core/pipeline-template/workflows/pipeline.nf b/nf_core/pipeline-template/workflows/pipeline.nf
index 2aef42a864..5b7e0ff143 100644
--- a/nf_core/pipeline-template/workflows/pipeline.nf
+++ b/nf_core/pipeline-template/workflows/pipeline.nf
@@ -4,12 +4,14 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
+{%- if modules %}
{% if fastqc %}include { FASTQC } from '../modules/nf-core/fastqc/main'{% endif %}
{% if multiqc %}include { MULTIQC } from '../modules/nf-core/multiqc/main'{% endif %}
{% if nf_schema %}include { paramsSummaryMap } from 'plugin/nf-schema'{% endif %}
{% if multiqc %}include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline'{% endif %}
include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline'
{% if citations or multiqc %}include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_{{ short_name }}_pipeline'{% endif %}
+{%- endif %}
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -22,6 +24,7 @@ workflow {{ short_name|upper }} {
take:
ch_samplesheet // channel: samplesheet read in from --input
+ {%- if modules %}
main:
ch_versions = Channel.empty()
@@ -98,6 +101,7 @@ workflow {{ short_name|upper }} {
emit:
{%- if multiqc %}multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html{% endif %}
versions = ch_versions // channel: [ path(versions.yml) ]
+{% endif %}
}
/*
diff --git a/nf_core/pipelines/create/templatefeatures.yml b/nf_core/pipelines/create/templatefeatures.yml
index 7388ecc7ba..d72e2cff77 100644
--- a/nf_core/pipelines/create/templatefeatures.yml
+++ b/nf_core/pipelines/create/templatefeatures.yml
@@ -242,6 +242,29 @@ fastqc:
The pipeline will include the FastQC module.
nfcore_pipelines: True
custom_pipelines: True
+modules:
+ skippable_paths:
+ - "conf/base.config"
+ - "conf/modules.config"
+ - "modules.json"
+ - "modules"
+ - "subworkflows"
+ short_description: "Use nf-core components"
+ description: "Include all required files to use nf-core modules and subworkflows"
+ help_text: |
+ It is *recommended* to use this feature if you want to use modules and subworkflows in your pipeline.
+ This will add all required files to use nf-core components or any compatible components from private repos by using `nf-core modules` and `nf-core subworkflows` commands.
+ linting:
+ nfcore_components: False
+ modules_json: False
+ base_config: False
+ modules_config: False
+ files_exist:
+ - "conf/base.config"
+ - "conf/modules.config"
+ - "modules.json"
+ nfcore_pipelines: False
+ custom_pipelines: True
changelog:
skippable_paths:
- "CHANGELOG.md"
diff --git a/nf_core/pipelines/lint/__init__.py b/nf_core/pipelines/lint/__init__.py
index 219cdd8f5c..6d27351b62 100644
--- a/nf_core/pipelines/lint/__init__.py
+++ b/nf_core/pipelines/lint/__init__.py
@@ -9,7 +9,7 @@
import logging
import os
from pathlib import Path
-from typing import List, Tuple, Union
+from typing import List, Optional, Tuple, Union
import git
import rich
@@ -177,7 +177,8 @@ def _load_lint_config(self) -> bool:
# Check if we have any keys that don't match lint test names
if self.lint_config is not None:
for k in self.lint_config:
- if k not in self.lint_tests:
+ if k != "nfcore_components" and k not in self.lint_tests:
+ # nfcore_components is an exception to allow custom pipelines without nf-core components
log.warning(f"Found unrecognised test name '{k}' in pipeline lint config")
is_correct = False
@@ -546,7 +547,7 @@ def run_linting(
md_fn=None,
json_fn=None,
hide_progress: bool = False,
-) -> Tuple[PipelineLint, ComponentLint, Union[ComponentLint, None]]:
+) -> Tuple[PipelineLint, Optional[ComponentLint], Optional[ComponentLint]]:
"""Runs all nf-core linting checks on a given Nextflow pipeline project
in either `release` mode or `normal` mode (default). Returns an object
of type :class:`PipelineLint` after finished.
@@ -591,41 +592,45 @@ def run_linting(
lint_obj._load_lint_config()
lint_obj.load_pipeline_config()
- # Create the modules lint object
- module_lint_obj = nf_core.modules.lint.ModuleLint(pipeline_dir, hide_progress=hide_progress)
- # Create the subworkflows lint object
- try:
- subworkflow_lint_obj = nf_core.subworkflows.lint.SubworkflowLint(pipeline_dir, hide_progress=hide_progress)
- except LookupError:
+ if "nfcore_components" in lint_obj.lint_config and not lint_obj.lint_config["nfcore_components"]:
+ module_lint_obj = None
subworkflow_lint_obj = None
-
- # Verify that the pipeline is correctly configured and has a modules.json file
- module_lint_obj.has_valid_directory()
- module_lint_obj.has_modules_file()
- # Run only the tests we want
- if key:
- # Select only the module lint tests
- module_lint_tests = list(
- set(key).intersection(set(nf_core.modules.lint.ModuleLint.get_all_module_lint_tests(is_pipeline=True)))
- )
- # Select only the subworkflow lint tests
- subworkflow_lint_tests = list(
- set(key).intersection(
- set(nf_core.subworkflows.lint.SubworkflowLint.get_all_subworkflow_lint_tests(is_pipeline=True))
- )
- )
else:
- # If no key is supplied, run the default modules tests
- module_lint_tests = list(("module_changes", "module_version"))
- subworkflow_lint_tests = list(("subworkflow_changes", "subworkflow_version"))
- module_lint_obj.filter_tests_by_key(module_lint_tests)
- if subworkflow_lint_obj is not None:
- subworkflow_lint_obj.filter_tests_by_key(subworkflow_lint_tests)
-
- # Set up files for component linting test
- module_lint_obj.set_up_pipeline_files()
- if subworkflow_lint_obj is not None:
- subworkflow_lint_obj.set_up_pipeline_files()
+ # Create the modules lint object
+ module_lint_obj = nf_core.modules.lint.ModuleLint(pipeline_dir, hide_progress=hide_progress)
+ # Create the subworkflows lint object
+ try:
+ subworkflow_lint_obj = nf_core.subworkflows.lint.SubworkflowLint(pipeline_dir, hide_progress=hide_progress)
+ except LookupError:
+ subworkflow_lint_obj = None
+
+ # Verify that the pipeline is correctly configured and has a modules.json file
+ module_lint_obj.has_valid_directory()
+ module_lint_obj.has_modules_file()
+ # Run only the tests we want
+ if key:
+ # Select only the module lint tests
+ module_lint_tests = list(
+ set(key).intersection(set(nf_core.modules.lint.ModuleLint.get_all_module_lint_tests(is_pipeline=True)))
+ )
+ # Select only the subworkflow lint tests
+ subworkflow_lint_tests = list(
+ set(key).intersection(
+ set(nf_core.subworkflows.lint.SubworkflowLint.get_all_subworkflow_lint_tests(is_pipeline=True))
+ )
+ )
+ else:
+ # If no key is supplied, run the default modules tests
+ module_lint_tests = list(("module_changes", "module_version"))
+ subworkflow_lint_tests = list(("subworkflow_changes", "subworkflow_version"))
+ module_lint_obj.filter_tests_by_key(module_lint_tests)
+ if subworkflow_lint_obj is not None:
+ subworkflow_lint_obj.filter_tests_by_key(subworkflow_lint_tests)
+
+ # Set up files for component linting test
+ module_lint_obj.set_up_pipeline_files()
+ if subworkflow_lint_obj is not None:
+ subworkflow_lint_obj.set_up_pipeline_files()
# Run the pipeline linting tests
try:
@@ -635,13 +640,14 @@ def run_linting(
log.info("Stopping tests...")
return lint_obj, module_lint_obj, subworkflow_lint_obj
- # Run the module lint tests
- if len(module_lint_obj.all_local_components) > 0:
- module_lint_obj.lint_modules(module_lint_obj.all_local_components, local=True)
- if len(module_lint_obj.all_remote_components) > 0:
- module_lint_obj.lint_modules(module_lint_obj.all_remote_components, local=False)
- # Run the subworkflows lint tests
+ if module_lint_obj is not None:
+ # Run the module lint tests
+ if len(module_lint_obj.all_local_components) > 0:
+ module_lint_obj.lint_modules(module_lint_obj.all_local_components, local=True)
+ if len(module_lint_obj.all_remote_components) > 0:
+ module_lint_obj.lint_modules(module_lint_obj.all_remote_components, local=False)
if subworkflow_lint_obj is not None:
+ # Run the subworkflows lint tests
if len(subworkflow_lint_obj.all_local_components) > 0:
subworkflow_lint_obj.lint_subworkflows(subworkflow_lint_obj.all_local_components, local=True)
if len(subworkflow_lint_obj.all_remote_components) > 0:
@@ -649,7 +655,8 @@ def run_linting(
# Print the results
lint_obj._print_results(show_passed)
- module_lint_obj._print_results(show_passed, sort_by=sort_by)
+ if module_lint_obj is not None:
+ module_lint_obj._print_results(show_passed, sort_by=sort_by)
if subworkflow_lint_obj is not None:
subworkflow_lint_obj._print_results(show_passed, sort_by=sort_by)
nf_core.pipelines.lint_utils.print_joint_summary(lint_obj, module_lint_obj, subworkflow_lint_obj)
diff --git a/nf_core/pipelines/lint_utils.py b/nf_core/pipelines/lint_utils.py
index ccab76295f..ff65fb0e56 100644
--- a/nf_core/pipelines/lint_utils.py
+++ b/nf_core/pipelines/lint_utils.py
@@ -22,15 +22,22 @@ def print_joint_summary(lint_obj, module_lint_obj, subworkflow_lint_obj):
swf_passed = 0
swf_warned = 0
swf_failed = 0
+ module_passed = 0
+ module_warned = 0
+ module_failed = 0
if subworkflow_lint_obj is not None:
swf_passed = len(subworkflow_lint_obj.passed)
swf_warned = len(subworkflow_lint_obj.warned)
swf_failed = len(subworkflow_lint_obj.failed)
- nbr_passed = len(lint_obj.passed) + len(module_lint_obj.passed) + swf_passed
+ if module_lint_obj is not None:
+ module_passed = len(module_lint_obj.passed)
+ module_warned = len(module_lint_obj.warned)
+ module_failed = len(module_lint_obj.failed)
+ nbr_passed = len(lint_obj.passed) + module_passed + swf_passed
nbr_ignored = len(lint_obj.ignored)
nbr_fixed = len(lint_obj.fixed)
- nbr_warned = len(lint_obj.warned) + len(module_lint_obj.warned) + swf_warned
- nbr_failed = len(lint_obj.failed) + len(module_lint_obj.failed) + swf_failed
+ nbr_warned = len(lint_obj.warned) + module_warned + swf_warned
+ nbr_failed = len(lint_obj.failed) + module_failed + swf_failed
summary_colour = "red" if nbr_failed > 0 else "green"
table = Table(box=rich.box.ROUNDED, style=summary_colour)
diff --git a/tests/pipelines/__snapshots__/test_create_app.ambr b/tests/pipelines/__snapshots__/test_create_app.ambr
index af88080668..8a0f4dd68d 100644
--- a/tests/pipelines/__snapshots__/test_create_app.ambr
+++ b/tests/pipelines/__snapshots__/test_create_app.ambr
@@ -851,257 +851,257 @@
font-weight: 700;
}
- .terminal-2541420365-matrix {
+ .terminal-2784035137-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2541420365-title {
+ .terminal-2784035137-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2541420365-r1 { fill: #c5c8c6 }
- .terminal-2541420365-r2 { fill: #e3e3e3 }
- .terminal-2541420365-r3 { fill: #989898 }
- .terminal-2541420365-r4 { fill: #e1e1e1 }
- .terminal-2541420365-r5 { fill: #4ebf71;font-weight: bold }
- .terminal-2541420365-r6 { fill: #1e1e1e }
- .terminal-2541420365-r7 { fill: #507bb3 }
- .terminal-2541420365-r8 { fill: #e2e2e2 }
- .terminal-2541420365-r9 { fill: #808080 }
- .terminal-2541420365-r10 { fill: #dde6ed;font-weight: bold }
- .terminal-2541420365-r11 { fill: #001541 }
- .terminal-2541420365-r12 { fill: #0178d4 }
- .terminal-2541420365-r13 { fill: #454a50 }
- .terminal-2541420365-r14 { fill: #e2e3e3;font-weight: bold }
- .terminal-2541420365-r15 { fill: #000000 }
- .terminal-2541420365-r16 { fill: #14191f }
- .terminal-2541420365-r17 { fill: #e4e4e4 }
- .terminal-2541420365-r18 { fill: #7ae998 }
- .terminal-2541420365-r19 { fill: #0a180e;font-weight: bold }
- .terminal-2541420365-r20 { fill: #008139 }
- .terminal-2541420365-r21 { fill: #fea62b;font-weight: bold }
- .terminal-2541420365-r22 { fill: #a7a9ab }
- .terminal-2541420365-r23 { fill: #e2e3e3 }
+ .terminal-2784035137-r1 { fill: #c5c8c6 }
+ .terminal-2784035137-r2 { fill: #e3e3e3 }
+ .terminal-2784035137-r3 { fill: #989898 }
+ .terminal-2784035137-r4 { fill: #e1e1e1 }
+ .terminal-2784035137-r5 { fill: #4ebf71;font-weight: bold }
+ .terminal-2784035137-r6 { fill: #1e1e1e }
+ .terminal-2784035137-r7 { fill: #507bb3 }
+ .terminal-2784035137-r8 { fill: #e2e2e2 }
+ .terminal-2784035137-r9 { fill: #808080 }
+ .terminal-2784035137-r10 { fill: #dde6ed;font-weight: bold }
+ .terminal-2784035137-r11 { fill: #001541 }
+ .terminal-2784035137-r12 { fill: #0178d4 }
+ .terminal-2784035137-r13 { fill: #454a50 }
+ .terminal-2784035137-r14 { fill: #e2e3e3;font-weight: bold }
+ .terminal-2784035137-r15 { fill: #000000 }
+ .terminal-2784035137-r16 { fill: #14191f }
+ .terminal-2784035137-r17 { fill: #e4e4e4 }
+ .terminal-2784035137-r18 { fill: #7ae998 }
+ .terminal-2784035137-r19 { fill: #0a180e;font-weight: bold }
+ .terminal-2784035137-r20 { fill: #008139 }
+ .terminal-2784035137-r21 { fill: #fea62b;font-weight: bold }
+ .terminal-2784035137-r22 { fill: #a7a9ab }
+ .terminal-2784035137-r23 { fill: #e2e3e3 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- nf-core create
+ nf-core create
-
-
-
- ⭘nf-core create — Create a new pipeline with the nf-core pipeline template
-
-
- Template features
-
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Add Github CI testsThe pipeline will Show help
- ▊▁▁▁▁▁▁▁▁▎include several GitHub▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- actions for Continuous
- Integration (CI)
- testing
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Use reference genomesThe pipeline will be Hide help
- ▊▁▁▁▁▁▁▁▁▎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.
- ▅▅
- For more information about reference genomes in nf-core pipelines, see the
-
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Add Github badgesThe README.md file of Show help
- ▊▁▁▁▁▁▁▁▁▎the pipeline will ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- include GitHub badges
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Add configuration The pipeline will Show help
- ▊▁▁▁▁▁▁▁▁▎ filesinclude configuration ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- profiles containing
- custom parameters
- ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- Back Continue
- ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-
- d Toggle dark mode q Quit
+
+
+
+ ⭘nf-core create — Create a new pipeline with the nf-core pipeline template
+
+
+ Template features
+
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Add Github CI testsThe pipeline will Show help
+ ▊▁▁▁▁▁▁▁▁▎include several GitHub▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ actions for Continuous
+ Integration (CI)
+ testing
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Use reference genomesThe pipeline will be Hide help
+ ▊▁▁▁▁▁▁▁▁▎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.
+ ▅▅
+ For more information about reference genomes in nf-core pipelines, see the
+
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Add Github badgesThe README.md file of Show help
+ ▊▁▁▁▁▁▁▁▁▎the pipeline will ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ include GitHub badges
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Add configuration The pipeline will Show help
+ ▊▁▁▁▁▁▁▁▁▎ filesinclude configuration ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ profiles containing
+ custom parameters
+ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ Back Continue
+ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+
+ d Toggle dark mode q Quit
@@ -2233,255 +2233,254 @@
font-weight: 700;
}
- .terminal-1373392807-matrix {
+ .terminal-1508200152-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-1373392807-title {
+ .terminal-1508200152-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-1373392807-r1 { fill: #c5c8c6 }
- .terminal-1373392807-r2 { fill: #e3e3e3 }
- .terminal-1373392807-r3 { fill: #989898 }
- .terminal-1373392807-r4 { fill: #e1e1e1 }
- .terminal-1373392807-r5 { fill: #4ebf71;font-weight: bold }
- .terminal-1373392807-r6 { fill: #1e1e1e }
- .terminal-1373392807-r7 { fill: #507bb3 }
- .terminal-1373392807-r8 { fill: #e2e2e2 }
- .terminal-1373392807-r9 { fill: #808080 }
- .terminal-1373392807-r10 { fill: #dde6ed;font-weight: bold }
- .terminal-1373392807-r11 { fill: #001541 }
- .terminal-1373392807-r12 { fill: #14191f }
- .terminal-1373392807-r13 { fill: #454a50 }
- .terminal-1373392807-r14 { fill: #7ae998 }
- .terminal-1373392807-r15 { fill: #e2e3e3;font-weight: bold }
- .terminal-1373392807-r16 { fill: #0a180e;font-weight: bold }
- .terminal-1373392807-r17 { fill: #000000 }
- .terminal-1373392807-r18 { fill: #008139 }
- .terminal-1373392807-r19 { fill: #fea62b;font-weight: bold }
- .terminal-1373392807-r20 { fill: #a7a9ab }
- .terminal-1373392807-r21 { fill: #e2e3e3 }
+ .terminal-1508200152-r1 { fill: #c5c8c6 }
+ .terminal-1508200152-r2 { fill: #e3e3e3 }
+ .terminal-1508200152-r3 { fill: #989898 }
+ .terminal-1508200152-r4 { fill: #e1e1e1 }
+ .terminal-1508200152-r5 { fill: #4ebf71;font-weight: bold }
+ .terminal-1508200152-r6 { fill: #1e1e1e }
+ .terminal-1508200152-r7 { fill: #507bb3 }
+ .terminal-1508200152-r8 { fill: #e2e2e2 }
+ .terminal-1508200152-r9 { fill: #808080 }
+ .terminal-1508200152-r10 { fill: #dde6ed;font-weight: bold }
+ .terminal-1508200152-r11 { fill: #001541 }
+ .terminal-1508200152-r12 { fill: #454a50 }
+ .terminal-1508200152-r13 { fill: #7ae998 }
+ .terminal-1508200152-r14 { fill: #e2e3e3;font-weight: bold }
+ .terminal-1508200152-r15 { fill: #0a180e;font-weight: bold }
+ .terminal-1508200152-r16 { fill: #000000 }
+ .terminal-1508200152-r17 { fill: #008139 }
+ .terminal-1508200152-r18 { fill: #fea62b;font-weight: bold }
+ .terminal-1508200152-r19 { fill: #a7a9ab }
+ .terminal-1508200152-r20 { fill: #e2e3e3 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- nf-core create
+ nf-core create
-
-
-
- ⭘nf-core create — Create a new pipeline with the nf-core pipeline template
-
-
- Template features
-
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Add Github CI testsThe pipeline will Show help
- ▊▁▁▁▁▁▁▁▁▎include several GitHub▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- actions for Continuous
- Integration (CI)
- testing
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Use reference genomesThe pipeline will be Show help
- ▊▁▁▁▁▁▁▁▁▎configured to use a ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- copy of the most
- common reference
- genome files from ▃▃
- iGenomes
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Add Github badgesThe README.md file of Show help
- ▊▁▁▁▁▁▁▁▁▎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 linters ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
- and CI tests to lint
- your code: pre-commit,
- editor-config and
- prettier.
-
- ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- ▊▎ Include citationsInclude pipeline tools Show help
- ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- Back Continue
- ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-
- d Toggle dark mode q Quit
+
+
+
+ ⭘nf-core create — Create a new pipeline with the nf-core pipeline template
+
+
+ Template features
+
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Add Github CI testsThe pipeline will Show help
+ ▊▁▁▁▁▁▁▁▁▎include several GitHub▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ actions for Continuous
+ Integration (CI)
+ testing
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Use reference genomesThe pipeline will be Show help
+ ▊▁▁▁▁▁▁▁▁▎configured to use a ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ copy of the most
+ common reference
+ genome files from
+ iGenomes
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Add Github badgesThe README.md file of Show help
+ ▊▁▁▁▁▁▁▁▁▎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 linters ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+ and CI tests to lint
+ your code: pre-commit,
+ editor-config and
+ prettier.
+
+ ▊▔▔▔▔▔▔▔▔▎▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ ▊▎ Include citationsInclude pipeline tools Show help
+ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+ Back Continue
+ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+
+ d Toggle dark mode q Quit