Skip to content

Expanded nf-core material for ASHG 2026 - #1015

Merged
vdauwera merged 25 commits into
masterfrom
gvda-ashg-2026-nfcore
Oct 20, 2026
Merged

vdauwera merged 25 commits into
masterfrom
gvda-ashg-2026-nfcore

Conversation

@vdauwera

@vdauwera vdauwera commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Extends the Use nf-core course to cover the full ASHG 2026 workshop ("Nextflow for Omics: Jumpstart your analyses with nf-core pipelines"): Parts 1–3 = workshop Part 1, Part 4 = workshop Part 2, Parts 5–6 = workshop Part 3.

Deploy preview: https://deploy-preview-1015--nextflow-training.netlify.app

What's new

  • Part 3 (reworked): pin nf-core/rnaseq to a release, fit it to the default 2-CPU Codespace with laptop.config, and cancel a run
  • Part 4 (new): Choose a pipeline. Scenario-based activity: find and evaluate pipelines for one of four human-genetics questions, with hints and worked answers
  • Part 5 (new): Prepare your inputs. Write a samplesheet for local data, generate one for public data with nf-core/fetchngs, and fix validation errors with -preview and -stub
  • Part 6 (new): Scale up and tune compute resources. Run on an 8-core Codespace, read the execution report, and right-size resource allocations
  • Instructor notes: new nfcore-use/INSTRUCTORS.md covering setup, expected errors, timing and known upstream issues (proposed as a convention for other courses)
  • Smaller fixes to Parts 0–2, plus updated overview, orientation and next steps

Testing

  • Parts 3 and 6 run end to end on real Codespaces (2-core and 8-core) with Nextflow 26.04.4; Part 5 commands tested under the default Codespace's limits
  • Every pipeline in Part 4 test-run on Seqera Platform; upstream issues found don't affect what learners run
  • Heading check passes and the site builds with no warnings on the course pages

vdauwera and others added 6 commits October 12, 2026 15:33
…nput validation, resources

Adds lessons for the ASHG 2026 workshop (Parts 2 and 3), with test reads,
broken samplesheets and solutions in nfcore-use/. Part 7 benchmark numbers
and Showcase run links are still TODO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… of Showcase runs

The Showcase only has runs for rnaseq and scrnaseq (an old release); the
nf-co.re Results tab covers every candidate pipeline at its current release,
including execution reports, and needs no account.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fill in Part 7 benchmark result

fetchngs downloads four ~2 MB human RNA-seq runs (GSE206599) and writes an
rnaseq samplesheet that learners curate. Part 7 now reports the tested ~30%
run-time gain from right-sized allocations (mean task concurrency 1.0 -> 1.5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eads via params file)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 5: Prepare your inputs

Resources becomes Part 6. Cross-references, nav, lesson plan and
orientation updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…edisease, with raredisease as the near-miss)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@netlify

netlify Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for nextflow-training ready!

Name Link
🔨 Latest commit 1472c79
🔍 Latest deploy log https://app.netlify.com/projects/nextflow-training/deploys/6ad71d2d45acc8f21a0fda86
😎 Deploy Preview https://deploy-preview-1015--nextflow-training.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Nextflow linting complete!

❌ 1 files had 5 errors
⚠️ 19 files had 29 warnings
✅ 184 files had no errors
🔧 131 files would be changed by auto-formatting

💡 Tip: Click filename locations to go directly to that code.

View all 34 issues
Type Location Message
Error hello-nextflow/solutions/6-hello-config/hello-config.nf:44:16 sayHello is not defined
Error hello-nextflow/solutions/6-hello-config/hello-config.nf:47:16 convertToUpper is not defined
Error hello-nextflow/solutions/6-hello-config/hello-config.nf:50:16 collectGreetings is not defined
Error hello-nextflow/solutions/6-hello-config/hello-config.nf:53:16 collectGreetings is not defined
Error hello-nextflow/solutions/6-hello-config/hello-config.nf:56:16 cowpy is not defined
Warning nfcore-build/solutions/core-hello-part1/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-part1/workflows/hello.nf:61:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-part2/modules/nf-core/find/concatenate/main.nf:19:5 The when section is deprecated -- use conditional logic in the calling workflow, or the process.when config option to disable a process at runtime
Warning nfcore-build/solutions/core-hello-part2/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-part2/workflows/hello.nf:45:55 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-part2/workflows/hello.nf:70:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-part3/modules/local/cowpy/main.nf:17:5 The when section is deprecated -- use conditional logic in the calling workflow, or the process.when config option to disable a process at runtime
Warning nfcore-build/solutions/core-hello-part3/modules/local/cowpy/main.nf:30:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-part3/modules/nf-core/find/concatenate/main.nf:19:5 The when section is deprecated -- use conditional logic in the calling workflow, or the process.when config option to disable a process at runtime
Warning nfcore-build/solutions/core-hello-part3/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-part3/workflows/hello.nf:67:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-part4/modules/local/cowpy/main.nf:17:5 The when section is deprecated -- use conditional logic in the calling workflow, or the process.when config option to disable a process at runtime
Warning nfcore-build/solutions/core-hello-part4/modules/local/cowpy/main.nf:30:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-part4/modules/nf-core/find/concatenate/main.nf:19:5 The when section is deprecated -- use conditional logic in the calling workflow, or the process.when config option to disable a process at runtime
Warning nfcore-build/solutions/core-hello-part4/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-part4/workflows/hello.nf:67:9 Variable was declared but not used
Warning nfcore-build/solutions/core-hello-start/workflows/hello.nf:18:5 Parameter was not used -- prefix with _ to suppress warning
Warning nfcore-build/solutions/core-hello-start/workflows/hello.nf:45:9 Variable was declared but not used
Warning side-quests/solutions/debugging/buggy_workflow.nf:91:44 Implicit closure parameter is deprecated, declare an explicit parameter instead
Warning side-quests/solutions/essential_scripting_patterns/main.nf:59:25 Parameter was not used -- prefix with _ to suppress warning
Warning side-quests/solutions/essential_scripting_patterns/main.nf:63:53 Parameter was not used -- prefix with _ to suppress warning
Warning side-quests/solutions/essential_scripting_patterns/main.nf:68:5 Variable was declared but not used
Warning side-quests/solutions/essential_scripting_patterns/main.nf:69:5 Variable was declared but not used
Warning side-quests/solutions/metadata/1.2/main.nf:5:5 Variable was declared but not used
Warning side-quests/solutions/splitting_and_grouping/main.nf:11:25 Parameter was not used -- prefix with _ to suppress warning
Warning side-quests/solutions/splitting_and_grouping/main.nf:14:25 Parameter was not used -- prefix with _ to suppress warning
Warning side-quests/solutions/splitting_and_grouping/main.nf:29:5 Variable was declared but not used
Warning side-quests/solutions/working_with_files/6/main.nf:10:43 Variable was declared but not used
Warning side-quests/solutions/working_with_files/6/main.nf:30:22 Parameter was not used -- prefix with _ to suppress warning
View formatting changes
FileDiff
hello-nextflow/solutions/1-hello-world/hello-world-2.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     output:
     path 'output.txt'
 
hello-nextflow/solutions/1-hello-world/hello-world-3.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
hello-nextflow/solutions/2-hello-channels/hello-channels-1.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -29,7 +28,7 @@ workflow {
     main:
     // create a channel for inputs
     greeting_ch = channel.of('Hello Channels!')
-                        .view()
+        .view()
     // emit a greeting
... (truncated)
hello-nextflow/solutions/2-hello-channels/hello-channels-2.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -29,7 +28,7 @@ workflow {
     main:
     // create a channel for inputs
     greeting_ch = channel.of('Hello', 'Bonjour', 'Hola')
-                        .view()
+        .view()
     // emit a greeting
... (truncated)
hello-nextflow/solutions/2-hello-channels/hello-channels-3.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -28,12 +27,12 @@ workflow {
 
     main:
     // declare an array of input greetings
-    greetings_array = ['Hello','Bonjour','Hola']
+    greetings_array = ['Hello', 'Bonjour', 'Hola']
     // create a channel for inputs
... (truncated)
hello-nextflow/solutions/2-hello-channels/hello-channels-4.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -29,11 +28,11 @@ workflow {
     main:
     // create a channel for inputs from a CSV file
     greeting_ch = channel.fromPath(params.input)
-                        .view { csv -> "Before splitCsv: $csv" }
-                        .splitCsv()
-                        .view { csv -> "After splitCsv: $csv" }
... (truncated)
hello-nextflow/solutions/3-hello-workflow/hello-workflow-1.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -21,7 +20,6 @@ process sayHello {
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
... (truncated)
hello-nextflow/solutions/3-hello-workflow/hello-workflow-2.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -21,7 +20,6 @@ process sayHello {
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
... (truncated)
hello-nextflow/solutions/3-hello-workflow/hello-workflow-3.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -21,7 +20,6 @@ process sayHello {
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
... (truncated)
hello-nextflow/solutions/3-hello-workflow/hello-workflow-4.nf
View
@@ -4,7 +4,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
@@ -21,7 +20,6 @@ process sayHello {
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
... (truncated)
hello-nextflow/solutions/4-hello-modules/hello-modules-2.nf
View
@@ -7,7 +7,6 @@ include { sayHello } from './modules/sayHello.nf'
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
 
@@ -24,7 +23,6 @@ process convertToUpper {
  * Collect uppercase greetings into a single output file
  */
 process collectGreetings {
-
     input:
     path input_files
... (truncated)
hello-nextflow/solutions/4-hello-modules/hello-modules-3.nf
View
@@ -8,7 +8,6 @@ include { convertToUpper } from './modules/convertToUpper.nf'
  * Collect uppercase greetings into a single output file
  */
 process collectGreetings {
-
     input:
     path input_files
     val batch_name
@@ -38,8 +37,8 @@ workflow {
     main:
     // create a channel for inputs from a CSV file
     greeting_ch = channel.fromPath(params.input)
-                        .splitCsv()
-                        .map { line -> line[0] }
+        .splitCsv()
... (truncated)
hello-nextflow/solutions/4-hello-modules/hello-modules-4.nf
View
@@ -18,8 +18,8 @@ workflow {
     main:
     // create a channel for inputs from a CSV file
     greeting_ch = channel.fromPath(params.input)
-                        .splitCsv()
-                        .map { line -> line[0] }
+        .splitCsv()
+        .map { line -> line[0] }
     // emit a greeting
     sayHello(greeting_ch)
     // convert the greeting to uppercase
hello-nextflow/solutions/4-hello-modules/modules/collectGreetings.nf
View
@@ -2,7 +2,6 @@
  * Collect uppercase greetings into a single output file
  */
 process collectGreetings {
-
     input:
     path input_files
     val batch_name
hello-nextflow/solutions/4-hello-modules/modules/convertToUpper.nf
View
@@ -2,7 +2,6 @@
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
 
hello-nextflow/solutions/4-hello-modules/modules/sayHello.nf
View
@@ -2,7 +2,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
hello-nextflow/solutions/5-hello-containers/hello-containers-2.nf
View
@@ -20,8 +20,8 @@ workflow {
     main:
     // create a channel for inputs from a CSV file
     greeting_ch = channel.fromPath(params.input)
-                        .splitCsv()
-                        .map { line -> line[0] }
+        .splitCsv()
+        .map { line -> line[0] }
     // emit a greeting
     sayHello(greeting_ch)
     // convert the greeting to uppercase
hello-nextflow/solutions/5-hello-containers/modules/collectGreetings.nf
View
@@ -2,7 +2,6 @@
  * Collect uppercase greetings into a single output file
  */
 process collectGreetings {
-
     input:
     path input_files
     val batch_name
hello-nextflow/solutions/5-hello-containers/modules/convertToUpper.nf
View
@@ -2,7 +2,6 @@
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
 
hello-nextflow/solutions/5-hello-containers/modules/sayHello.nf
View
@@ -2,7 +2,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
hello-nextflow/solutions/6-hello-config/modules/collectGreetings.nf
View
@@ -2,7 +2,6 @@
  * Collect uppercase greetings into a single output file
  */
 process collectGreetings {
-
     input:
     path input_files
     val batch_name
hello-nextflow/solutions/6-hello-config/modules/convertToUpper.nf
View
@@ -2,7 +2,6 @@
  * Use a text replacement tool to convert the greeting to uppercase
  */
 process convertToUpper {
-
     input:
     path input_file
 
hello-nextflow/solutions/6-hello-config/modules/sayHello.nf
View
@@ -2,7 +2,6 @@
  * Use echo to print 'Hello World!' to a file
  */
 process sayHello {
-
     input:
     val greeting
 
hello-nextflow/solutions/6-hello-config/nextflow.config
View
@@ -2,19 +2,19 @@ docker.enabled = false
 conda.enabled = true
 
 /*
-* Process settings
-*/
+ * Process settings
+ */
 process {
     memory = 1.GB
-    withName: 'cowpy' {
+    withName: cowpy {
         memory = 2.GB
         cpus = 2
     }
... (truncated)
nfcore-build/solutions/composable-hello/hello.nf
View
@@ -14,7 +14,6 @@ include { collectGreetings } from './modules/collectGreetings.nf'
 include { cowpy } from './modules/cowpy.nf'
 
 workflow HELLO {
-
     take:
     // channel of greetings
     greeting_ch
nfcore-build/solutions/composable-hello/main.nf
View
@@ -9,12 +9,12 @@ params.greeting = 'greetings.csv'
 workflow {
     // create a channel for inputs from a CSV file
     greeting_ch = channel.fromPath(params.greeting)
-                        .splitCsv()
-                        .map { line -> line[0] }
+        .splitCsv()
+        .map { line -> line[0] }
 
     // call the imported workflow on the channel of greetings
     HELLO(greeting_ch)
 
     // view the outputs emitted by the workflow
-    HELLO.out.view { output -> "Output: $output" }
+    HELLO.out.view { output -> "Output: ${output}" }
... (truncated)
nfcore-build/solutions/composable-hello/modules/collectGreetings.nf
View
@@ -10,8 +10,8 @@ process collectGreetings {
     val batch_name
 
     output:
-    path "COLLECTED-${batch_name}-output.txt" , emit: outfile
-    val count_greetings , emit: count
+    path "COLLECTED-${batch_name}-output.txt", emit: outfile
+    val count_greetings, emit: count
 
     script:
     count_greetings = input_files.size()
nfcore-build/solutions/composable-hello/modules/convertToUpper.nf
View
@@ -13,6 +13,6 @@ process convertToUpper {
 
     script:
     """
-    cat $input_file | tr '[a-z]' '[A-Z]' > UPPER-${input_file}
+    cat ${input_file} | tr '[a-z]' '[A-Z]' > UPPER-${input_file}
     """
 }
nfcore-build/solutions/composable-hello/modules/cowpy.nf
View
@@ -15,6 +15,6 @@ process cowpy {
 
     script:
     """
-    cat $input_file | cowpy -c "$character" > cowpy-${input_file}
+    cat ${input_file} | cowpy -c "${character}" > cowpy-${input_file}
     """
 }
nfcore-build/solutions/composable-hello/modules/sayHello.nf
View
@@ -13,6 +13,6 @@ process sayHello {
 
     script:
     """
-    echo '$greeting' > '$greeting-output.txt'
+    echo '${greeting}' > '${greeting}-output.txt'
     """
 }
nfcore-build/solutions/core-hello-part1/conf/base.config
View
@@ -1,23 +1,23 @@
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    core/hello Nextflow base config file
+core/hello Nextflow base config file
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    A 'blank slate' config file, appropriate for general use on most high performance
-    compute environments. Assumes that all software is installed and available on
-    the PATH. Runs in `local` mode - all jobs will be run on the logged in environment.
+A 'blank slate' config file, appropriate for general use on most high performance
+compute environments. Assumes that all software is installed and available on
+the PATH. Runs in `local` mode - all jobs will be run on the logged in environment.
 ----------------------------------------------------------------------------------------
-*/
+ */
... (truncated)
nfcore-build/solutions/core-hello-part1/conf/modules.config
View
@@ -1,21 +1,16 @@
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Config file for defining DSL2 per module options and publishing paths
+Config file for defining DSL2 per module options and publishing paths
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Available keys to override module options:
-        ext.args   = Additional arguments appended to command in module.
-        ext.args2  = Second set of arguments appended to command in module (multi-tool modules).
-        ext.args3  = Third set of arguments appended to command in module (multi-tool modules).
-        ext.prefix = File name prefix for output files.
+Available keys to override module options:
+ext.args   = Additional arguments appended to command in module.
+ext.args2  = Second set of arguments appended to command in module (multi-tool modules).
+ext.args3  = Third set of arguments appended to command in module (multi-tool modules).
... (truncated)
nfcore-build/solutions/core-hello-part1/conf/test.config
View
@@ -1,31 +1,27 @@
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Nextflow config file for running minimal tests
+Nextflow config file for running minimal tests
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Defines input files and everything required to run a fast and simple pipeline test.
+Defines input files and everything required to run a fast and simple pipeline test.
 
-    Use as follows:
-        nextflow run core/hello -profile test,<docker/singularity> --outdir <OUTDIR>
+Use as follows:
+nextflow run core/hello -profile test,<docker/singularity> --outdir <OUTDIR>
 
 ----------------------------------------------------------------------------------------
... (truncated)
nfcore-build/solutions/core-hello-part1/conf/test_full.config
View
@@ -1,17 +1,17 @@
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Nextflow config file for running full-size tests
+Nextflow config file for running full-size tests
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Defines input files and everything required to run a full size pipeline test.
+Defines input files and everything required to run a full size pipeline test.
 
-    Use as follows:
-        nextflow run core/hello -profile test_full,<docker/singularity> --outdir <OUTDIR>
+Use as follows:
+nextflow run core/hello -profile test_full,<docker/singularity> --outdir <OUTDIR>
 
 ----------------------------------------------------------------------------------------
... (truncated)
nfcore-build/solutions/core-hello-part1/main.nf
View
@@ -1,32 +1,31 @@
 #!/usr/bin/env nextflow
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    core/hello
+core/hello
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Github : https://github.com/core/hello
+Github : https://github.com/core/hello
 ----------------------------------------------------------------------------------------
-*/
+ */
 
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
... (truncated)
nfcore-build/solutions/core-hello-part1/modules/local/collectGreetings.nf
View
@@ -10,8 +10,8 @@ process collectGreetings {
     val batch_name
 
     output:
-    path "COLLECTED-${batch_name}-output.txt" , emit: outfile
-    val count_greetings , emit: count
+    path "COLLECTED-${batch_name}-output.txt", emit: outfile
+    val count_greetings, emit: count
 
     script:
     count_greetings = input_files.size()
nfcore-build/solutions/core-hello-part1/modules/local/convertToUpper.nf
View
@@ -13,6 +13,6 @@ process convertToUpper {
 
     script:
     """
-    cat $input_file | tr '[a-z]' '[A-Z]' > UPPER-${input_file}
+    cat ${input_file} | tr '[a-z]' '[A-Z]' > UPPER-${input_file}
     """
 }
nfcore-build/solutions/core-hello-part1/modules/local/cowpy.nf
View
@@ -7,14 +7,14 @@ process cowpy {
     conda 'conda-forge::cowpy==1.1.5'
 
     input:
-        path input_file
-        val character
+    path input_file
+    val character
 
     output:
-        path "cowpy-${input_file}"
+    path "cowpy-${input_file}"
 
     script:
     """
... (truncated)
nfcore-build/solutions/core-hello-part1/modules/local/sayHello.nf
View
@@ -13,6 +13,6 @@ process sayHello {
 
     script:
     """
-    echo '$greeting' > '$greeting-output.txt'
+    echo '${greeting}' > '${greeting}-output.txt'
     """
 }
nfcore-build/solutions/core-hello-part1/nextflow.config
View
@@ -1,40 +1,40 @@
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    core/hello Nextflow config file
+core/hello Nextflow config file
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Default config options for all compute environments
+Default config options for all compute environments
 ----------------------------------------------------------------------------------------
-*/
+ */
 
 // Global default params, used in configs
 params {
 
... (truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/local/utils_nfcore_hello_pipeline/main.nf
View
@@ -4,36 +4,35 @@
 
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS
+IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
+ */
 
-include { UTILS_NFSCHEMA_PLUGIN     } from '../../nf-core/utils_nfschema_plugin'
-include { paramsSummaryMap          } from 'plugin/nf-schema'
-include { samplesheetToList         } from 'plugin/nf-schema'
-include { paramsHelp                } from 'plugin/nf-schema'
-include { completionSummary         } from '../../nf-core/utils_nfcore_pipeline'
... (truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
View
@@ -4,15 +4,15 @@
 
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    SUBWORKFLOW DEFINITION
+SUBWORKFLOW DEFINITION
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
+ */
 
 workflow UTILS_NEXTFLOW_PIPELINE {
     take:
-    print_version        // boolean: print version
-    dump_parameters      // boolean: dump parameters
-    outdir               //    path: base directory used to publish pipeline results
... (truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config
View
@@ -1,9 +1,9 @@
 manifest {
-    name            = 'nextflow_workflow'
-    author          = """nf-core"""
-    homePage        = 'https://127.0.0.1'
-    description     = """Dummy pipeline"""
+    name = 'nextflow_workflow'
+    author = """nf-core"""
+    homePage = 'https://127.0.0.1'
+    description = """Dummy pipeline"""
     nextflowVersion = '!>=23.04.0'
-    version         = '9.9.9'
-    doi             = 'https://doi.org/10.5281/zenodo.5070524'
+    version = '9.9.9'
+    doi = 'https://doi.org/10.5281/zenodo.5070524'
... (truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part1/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
nfcore-build/solutions/core-hello-part1/workflows/hello.nf(truncated)
nfcore-build/solutions/core-hello-part2/conf/base.config(truncated)
nfcore-build/solutions/core-hello-part2/conf/modules.config(truncated)
nfcore-build/solutions/core-hello-part2/conf/test.config(truncated)
nfcore-build/solutions/core-hello-part2/conf/test_full.config(truncated)
nfcore-build/solutions/core-hello-part2/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/modules/local/collectGreetings.nf(truncated)
nfcore-build/solutions/core-hello-part2/modules/local/convertToUpper.nf(truncated)
nfcore-build/solutions/core-hello-part2/modules/local/cowpy.nf(truncated)
nfcore-build/solutions/core-hello-part2/modules/local/sayHello.nf(truncated)
nfcore-build/solutions/core-hello-part2/modules/nf-core/find/concatenate/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part2/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
nfcore-build/solutions/core-hello-part2/workflows/hello.nf(truncated)
nfcore-build/solutions/core-hello-part3/conf/base.config(truncated)
nfcore-build/solutions/core-hello-part3/conf/modules.config(truncated)
nfcore-build/solutions/core-hello-part3/conf/test.config(truncated)
nfcore-build/solutions/core-hello-part3/conf/test_full.config(truncated)
nfcore-build/solutions/core-hello-part3/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/local/collectGreetings.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/local/convertToUpper.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/local/cowpy.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/local/cowpy/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/local/sayHello.nf(truncated)
nfcore-build/solutions/core-hello-part3/modules/nf-core/find/concatenate/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part3/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
nfcore-build/solutions/core-hello-part3/workflows/hello.nf(truncated)
nfcore-build/solutions/core-hello-part4/conf/base.config(truncated)
nfcore-build/solutions/core-hello-part4/conf/modules.config(truncated)
nfcore-build/solutions/core-hello-part4/conf/test.config(truncated)
nfcore-build/solutions/core-hello-part4/conf/test_full.config(truncated)
nfcore-build/solutions/core-hello-part4/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/local/collectGreetings.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/local/convertToUpper.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/local/cowpy.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/local/cowpy/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/local/sayHello.nf(truncated)
nfcore-build/solutions/core-hello-part4/modules/nf-core/find/concatenate/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-part4/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
nfcore-build/solutions/core-hello-part4/workflows/hello.nf(truncated)
nfcore-build/solutions/core-hello-start/conf/base.config(truncated)
nfcore-build/solutions/core-hello-start/conf/modules.config(truncated)
nfcore-build/solutions/core-hello-start/conf/test.config(truncated)
nfcore-build/solutions/core-hello-start/conf/test_full.config(truncated)
nfcore-build/solutions/core-hello-start/main.nf(truncated)
nfcore-build/solutions/core-hello-start/nextflow.config(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
nfcore-build/solutions/core-hello-start/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
nfcore-build/solutions/core-hello-start/workflows/hello.nf(truncated)
nfcore-use/solutions/tuned.config(truncated)
side-quests/solutions/debugging/buggy_workflow.nf(truncated)
side-quests/solutions/essential_scripting_patterns/main.nf(truncated)
side-quests/solutions/essential_scripting_patterns/modules/generate_report.nf(truncated)
side-quests/solutions/metadata/1.2/main.nf(truncated)
side-quests/solutions/metadata/1.3/main.nf(truncated)
side-quests/solutions/metadata/1.4/main.nf(truncated)
side-quests/solutions/metadata/1.5/main.nf(truncated)
side-quests/solutions/metadata/2.1/main.nf(truncated)
side-quests/solutions/metadata/2.2/main.nf(truncated)
side-quests/solutions/metadata/2.3/main.nf(truncated)
side-quests/solutions/metadata/2.4/main.nf(truncated)
side-quests/solutions/metadata/3.2/main.nf(truncated)
side-quests/solutions/workflows_of_workflows/main.nf(truncated)
side-quests/solutions/working_with_files/6/main.nf(truncated)


---

## 1. Pick a scenario and define the goal

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we gamify the grouping? like "draw a card" ?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ooh that might be fun... we could do a few refinements like that

vdauwera and others added 5 commits October 19, 2026 20:45
Learners search the catalog first and open a per-scenario hint if stuck;
the rare disease hint lists both raredisease and longraredisease.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ine sections, pin versions

- laptop.config: cap all labels at 2 CPUs and add a withName override for
  TRIMGALORE, which sets 8 CPUs by name (failed with 'req: 4; avail: 2')
- Part 3: explain the TRIMGALORE override, add 1.4 (cancel with Ctrl+C, -bg + kill),
  a disk-space warning, and optional section 2 (switch to 8-core machine, -resume)
- Pin nf-core/rnaseq -r 3.27.0 and nf-core/fetchngs -r 1.13.0; link docs to tags
- Part 4: describe release status in terms of stability

Tested on GitHub Codespaces (2-core and 8-core) with Nextflow 26.04.4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…w fixes

Part 6
- Use the 8-core run from Part 3 section 2: real requested-vs-used values,
  memory-bound parallelism (max 4 tasks on 8 CPUs), 8-core tuned.config
  (tested: no retries, max 6 concurrent tasks, ~5.5 vs ~6.5 min)
- Tell learners to switch to the 8-core machine for 2.4

Review fixes
- Part 2: integers are also strings on the command line; FASTQC uses
  process_low; custom.config FASTQC override now visible (1 CPU, --threads 1);
  wildcard .command.sh path; --show_hidden note; links to Nextflow Run
- Part 3: precise withName precedence; include laptop.config via snippet;
  real process names; honest timing; machine-type guidance for later parts
- Part 4: pipeline_info cross-ref, AnnotSV note, schema reference
- Part 5: create small_reads.yml; show all fetchngs rows and explain titles
- Admonitions: skippable extras collapsed or folded into prose
- next_steps: new skills; Hello Nextflow suggestion; realistic durations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Learners now switch machine type once, in Part 6: run with default
requests on the 8-core machine, read that run's report, right-size, rerun.
Part 3 ends after cancelling the laptop.config run and points ahead to
Part 6. The default-requests run no longer uses -resume (Part 5 runs in
the same directory would make it resume the wrong session).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vdauwera vdauwera self-assigned this Oct 20, 2026
@vdauwera vdauwera added nf-core environment Devcontainer, codespaces etc improve New feature or request labels Oct 20, 2026
vdauwera and others added 5 commits October 20, 2026 00:44
…e; second review fixes

- fetchngs (12 GB per download task by default) and rnaseq -stub tasks exceeded
  the 2-CPU/7.8 GB default Codespace; add -c laptop.config and explain why
  (verified: both fail without it and complete with it)
- next_steps: drop -resume claim, reorder skills; Part 6/Part 3 memory wording;
  orientation laptop.config use; Part 4 lesson-plan title; Part 3 disk warning
  collapsible; Part 1 cross-reference order; laptop.config header comment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eric over-allocation

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Setup (new codespace, dev site version), machine resources, expected errors
and confusing output per part, suggested timing, known upstream issues.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Part 2 diagram: demo test profile caps at 2 CPUs (was 4)
- Orientation: all three pipelines need Nextflow >=25.10.4; remove the
  nf-core/tools requirement (no nf-core CLI command is used in this course);
  add tree summary line
- Part 2: string-typed CLI values come from the v2 parser (default in 26.04)
- Part 1: note that revision hashes will differ (nf-core/demo is unpinned)
- Part 4: published test results are usually full-size; scrnaseq protocol
  can be auto-detected
- Part 6: fetchngs 12 GB is the default request (capped in Part 5)
- next_steps: add Part 4 and Part 6 concepts to 'What you learned'
- INSTRUCTORS.md: align timings and hint timing with lessons; fetchngs note
- Part 2: unindent diagram include for consistency

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vdauwera and others added 5 commits October 20, 2026 02:38
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Card block is wrapped in prettier-ignore, since prettier rewrites the
indentation that Material grid cards depend on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hand-renaming samples in a fetchngs-generated samplesheet breaks the
link between outputs and archive accessions, so it isn't a practice to
teach. Remove section 3.3, its solution file, and the related summary
wording; keep the takeaway's point about checking strandedness.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vdauwera and others added 3 commits October 20, 2026 03:38
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vdauwera
vdauwera merged commit 5ee9321 into master Oct 20, 2026
9 checks passed
@vdauwera
vdauwera deleted the gvda-ashg-2026-nfcore branch October 20, 2026 07:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

environment Devcontainer, codespaces etc improve New feature or request nf-core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants