Skip to content

New course: Nextflow Triathlon: plain Nextflow + nf-core + Seqera platform - #951

Draft
vdauwera wants to merge 38 commits into
masterfrom
gvda_triathlon
Draft

New course: Nextflow Triathlon: plain Nextflow + nf-core + Seqera platform#951
vdauwera wants to merge 38 commits into
masterfrom
gvda_triathlon

Conversation

@vdauwera

@vdauwera vdauwera commented May 8, 2026

Copy link
Copy Markdown
Collaborator

UPDATED Aug with new plan:

1. Reorganized courses around Users vs. Developers

Instead of beginner vs advanced:

  • Users = Nextflow Run, Run nf-core, Run with Seqera (aka the Nextflow Triathlon)
  • Developers = Hello Nextflow, Build with nf-core, Side Quests, Nextflow for Science

Home page catalog redesigned to match:

  • Cards now read "For users" / "For developers" instead of "Introductory/Advanced track".
  • Users card adds a "Configure execution" entry — marked coming soon, not a real course yet (placeholder "Nextflow Dot Config").
  • Developers card: Side Quests and Nextflow for Science now show a single "Browse available/all use cases" entry
    linking to their overview page, instead of listing every sub-course individually.

Site-wide nav menu changes:

  • Sidebar now groups courses under non-clickable "Users" and "Developers" labels:
  • The old "Training Collections" section (Architect's Toolkit, Nextflow Triathlon) was retired (see note in point 3); old URLs redirect.
  • New "Setup & Help" group for Training Environment and other help items.
  • Every course landing page now reads "Overview" in the sidebar (instead of repeating the course title).

2. New "Users" track details

The branch introduces (via the former "Nextflow Triathlon" work) three new streamlined 'getting started' courses aimed at people who need to run pipelines, not develop them — no prior coding assumed. They were originally one long lesson each; now split into multiple parts for pacing. This may still need some refinement (including shoving the code explanation bits into collapsible 'more info' sections). The goal is for each to take roughly one hour to teach.

  • Nextflow Run: Part 1: Running basics / Part 2: Configuration basics
  • Run nf-core: Part 1: Find & try demo / Part 2: Configure execution / Part 3: Run a production pipeline
  • Run with Seqera: Part 1: Use from the web interface / Part 2: Use from the CLI

3. Training Collections retired + Side Quests table reorganized

The table on the Side Quests page now shows logical groupings, with clear subheader rows.

The "Training Collections" section wasn't really working as it was. We could bring it back in some form if we have multiple collections to showcase, but the reorganized table of Side Quests hopefully makes it mostly unnecessary.

We could potentially create a section with dedicated landing pages for standard multi-course trainings like we run at summits or sessions.

@vdauwera vdauwera self-assigned this May 8, 2026
@netlify

netlify Bot commented May 8, 2026

Copy link
Copy Markdown

Deploy Preview for nextflow-training ready!

Name Link
🔨 Latest commit 7c07451
🔍 Latest deploy log https://app.netlify.com/projects/nextflow-training/deploys/6a7ef0a94a8a640008118d90
😎 Deploy Preview https://deploy-preview-951--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.

@vdauwera vdauwera changed the title First pass of the triathlon course New course: Nextflow Triathlon: plain Nextflow + nf-core + Seqera platform May 8, 2026
@github-actions

github-actions Bot commented May 8, 2026

Copy link
Copy Markdown
Contributor

Nextflow linting complete!

⚠️ 34 files had 47 warnings
✅ 183 files had no errors
🔧 131 files would be changed by auto-formatting

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

View all 47 issues
Type Location Message
Warning hello-nf-core/solutions/composable-hello/hello.nf:36:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part1/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:30:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part1/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nextflow_pipeline/main.nf:43:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nfcore_pipeline/main.nf:20:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nfschema_plugin/main.nf:72:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part1/workflows/hello.nf:68:17 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-part2/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:30:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part2/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nextflow_pipeline/main.nf:43:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nfcore_pipeline/main.nf:20:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nfschema_plugin/main.nf:72:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part2/workflows/hello.nf:45:55 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part2/workflows/hello.nf:77:17 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-part3/modules/local/cowpy/main.nf:30:9 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-part3/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:30:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part3/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nextflow_pipeline/main.nf:43:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nfcore_pipeline/main.nf:20:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nfschema_plugin/main.nf:72:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part3/workflows/hello.nf:74:17 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-part4/modules/local/cowpy/main.nf:30:9 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-part4/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:30:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part4/subworkflows/local/utils_nfcore_hello_pipeline/main.nf:33:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nextflow_pipeline/main.nf:43:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nfcore_pipeline/main.nf:20:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nfschema_plugin/main.nf:72:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-part4/workflows/hello.nf:74:17 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nextflow_pipeline/main.nf:43:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nfcore_pipeline/main.nf:20:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nfschema_plugin/main.nf:72:5 Emit name should be omitted when there is only one emit
Warning hello-nf-core/solutions/core-hello-start/workflows/hello.nf:18:5 Parameter was not used -- prefix with _ to suppress warning
Warning hello-nf-core/solutions/core-hello-start/workflows/hello.nf:45:9 Variable was declared but not used
Warning hello-nf-core/solutions/core-hello-start/workflows/hello.nf:54:5 Emit name should be omitted when there is only one emit
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/metadata/2.4/main.nf:42:22 Parameter was not used -- prefix with _ to suppress warning
Warning side-quests/solutions/metadata/3.2/main.nf:42:22 Parameter was not used -- prefix with _ to suppress warning
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/hello-config.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/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
@@ -6,7 +6,7 @@ conda.enabled = true
 */
 process {
     memory = 1.GB
-    withName: 'cowpy' {
+    withName: cowpy {
         memory = 2.GB
         cpus = 2
     }
@@ -32,11 +32,7 @@ profiles {
     univ_hpc {
         process.executor = 'slurm'
         conda.enabled = true
-        process.resourceLimits = [
-            memory: 750.GB,
... (truncated)
hello-nf-core/solutions/composable-hello/hello.nf
View
@@ -14,9 +14,7 @@ include { collectGreetings } from './modules/collectGreetings.nf'
 include { cowpy } from './modules/cowpy.nf'
 
 workflow HELLO {
-
     take:
-    // channel of greetings
     greeting_ch
 
     main:
hello-nf-core/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)
hello-nf-core/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()
hello-nf-core/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}'
     """
 }
hello-nf-core/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}
     """
 }
hello-nf-core/solutions/composable-hello/modules/sayHello.nf
View
@@ -13,6 +13,6 @@ process sayHello {
 
     script:
     """
-    echo '$greeting' > '$greeting-output.txt'
+    echo '${greeting}' > '${greeting}-output.txt'
     """
 }
hello-nf-core/solutions/core-hello-part1/conf/base.config
View
@@ -11,13 +11,13 @@
 process {
 
     // TODO nf-core: Check the defaults for all processes
-    cpus   = { 1      * task.attempt }
-    memory = { 6.GB   * task.attempt }
-    time   = { 4.h    * task.attempt }
+    cpus = { 1 * task.attempt }
+    memory = { 6.GB * task.attempt }
+    time = { 4.h * task.attempt }
 
     errorStrategy = { task.exitStatus in ((130..145) + 104 + (175..177)) ? 'retry' : 'finish' }
-    maxRetries    = 1
-    maxErrors     = '-1'
+    maxRetries = 1
... (truncated)
hello-nf-core/solutions/core-hello-part1/conf/modules.config
View
@@ -12,10 +12,5 @@
 
 process {
 
-    publishDir = [
-        path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" },
-        mode: params.publish_dir_mode,
-        saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
-    ]
-
+    publishDir = [path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }]
 }
hello-nf-core/solutions/core-hello-part1/conf/test.config
View
@@ -11,21 +11,17 @@
 */
 
 process {
-    resourceLimits = [
-        cpus: 2,
-        memory: '4.GB',
-        time: '1.h'
-    ]
+    resourceLimits = [cpus: 2, memory: '4.GB', time: '1.h']
 }
 
 params {
-    config_profile_name        = 'Test profile'
+    config_profile_name = 'Test profile'
... (truncated)
hello-nf-core/solutions/core-hello-part1/conf/test_full.config
View
@@ -11,7 +11,7 @@
 */
 
 params {
-    config_profile_name        = 'Full test profile'
+    config_profile_name = 'Full test profile'
     config_profile_description = 'Full test dataset to check pipeline function'
 
     // Input data for full size test
hello-nf-core/solutions/core-hello-part1/main.nf
View
@@ -13,9 +13,9 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
 
-include { HELLO  } from './workflows/hello'
+include { HELLO } from './workflows/hello'
 include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_hello_pipeline'
-include { PIPELINE_COMPLETION     } from './subworkflows/local/utils_nfcore_hello_pipeline'
+include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_hello_pipeline'
 /*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     NAMED WORKFLOWS FOR PIPELINE
@@ -26,7 +26,6 @@ include { PIPELINE_COMPLETION     } from './subworkflows/local/utils_nfcore_hell
 // WORKFLOW: Run main analysis pipeline depending on type of input
 //
... (truncated)
hello-nf-core/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()
hello-nf-core/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}'
     """
 }
hello-nf-core/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)
hello-nf-core/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'
     """
 }
hello-nf-core/solutions/core-hello-part1/nextflow.config
View
@@ -11,30 +11,30 @@ params {
 
     // TODO nf-core: Specify your pipeline's command line flags
     // Input options
-    input                      = null
+    input = null
 
     // Boilerplate options
-    outdir                       = null
-    publish_dir_mode             = 'copy'
-    monochrome_logs              = false
-    help                         = false
-    help_full                    = false
-    show_hidden                  = false
-    version                      = false
... (truncated)
hello-nf-core/solutions/core-hello-part1/subworkflows/local/utils_nfcore_hello_pipeline/main.nf
View
@@ -8,13 +8,13 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
 
-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'
-include { UTILS_NFCORE_PIPELINE     } from '../../nf-core/utils_nfcore_pipeline'
-include { UTILS_NEXTFLOW_PIPELINE   } from '../../nf-core/utils_nextflow_pipeline'
+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'
... (truncated)
hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
View
@@ -10,9 +10,9 @@
 
 workflow UTILS_NEXTFLOW_PIPELINE {
     take:
-    print_version        // boolean: print version
-    dump_parameters      // boolean: dump parameters
-    outdir               //    path: base directory used to publish pipeline results
+    print_version // boolean: print version
+    dump_parameters // boolean: dump parameters
+    outdir //    path: base directory used to publish pipeline results
     check_conda_channels // boolean: check conda channels
 
     main:
@@ -72,10 +72,10 @@ def getWorkflowVersion() {
 //
... (truncated)
hello-nf-core/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)
hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
View
@@ -125,12 +125,12 @@ def paramsSummaryMultiqc(summary_params) {
         }
 
     def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String
-    yaml_file_text     += "description: ' - this information is collected when the pipeline is started.'\n"
-    yaml_file_text     += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
-    yaml_file_text     += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
-    yaml_file_text     += "plot_type: 'html'\n"
-    yaml_file_text     += "data: |\n"
-    yaml_file_text     += "${summary_section}"
+    yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n"
+    yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
+    yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
+    yaml_file_text += "plot_type: 'html'\n"
+    yaml_file_text += "data: |\n"
... (truncated)
hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
hello-nf-core/solutions/core-hello-part1/workflows/hello.nf(truncated)
hello-nf-core/solutions/core-hello-part2/conf/base.config(truncated)
hello-nf-core/solutions/core-hello-part2/conf/modules.config(truncated)
hello-nf-core/solutions/core-hello-part2/conf/test.config(truncated)
hello-nf-core/solutions/core-hello-part2/conf/test_full.config(truncated)
hello-nf-core/solutions/core-hello-part2/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/modules/local/collectGreetings.nf(truncated)
hello-nf-core/solutions/core-hello-part2/modules/local/convertToUpper.nf(truncated)
hello-nf-core/solutions/core-hello-part2/modules/local/cowpy.nf(truncated)
hello-nf-core/solutions/core-hello-part2/modules/local/sayHello.nf(truncated)
hello-nf-core/solutions/core-hello-part2/modules/nf-core/find/concatenate/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part2/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
hello-nf-core/solutions/core-hello-part2/workflows/hello.nf(truncated)
hello-nf-core/solutions/core-hello-part3/conf/base.config(truncated)
hello-nf-core/solutions/core-hello-part3/conf/modules.config(truncated)
hello-nf-core/solutions/core-hello-part3/conf/test.config(truncated)
hello-nf-core/solutions/core-hello-part3/conf/test_full.config(truncated)
hello-nf-core/solutions/core-hello-part3/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/local/collectGreetings.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/local/convertToUpper.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/local/cowpy.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/local/cowpy/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/local/sayHello.nf(truncated)
hello-nf-core/solutions/core-hello-part3/modules/nf-core/find/concatenate/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part3/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
hello-nf-core/solutions/core-hello-part3/workflows/hello.nf(truncated)
hello-nf-core/solutions/core-hello-part4/conf/base.config(truncated)
hello-nf-core/solutions/core-hello-part4/conf/modules.config(truncated)
hello-nf-core/solutions/core-hello-part4/conf/test.config(truncated)
hello-nf-core/solutions/core-hello-part4/conf/test_full.config(truncated)
hello-nf-core/solutions/core-hello-part4/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/local/collectGreetings.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/local/convertToUpper.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/local/cowpy.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/local/cowpy/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/local/sayHello.nf(truncated)
hello-nf-core/solutions/core-hello-part4/modules/nf-core/find/concatenate/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-part4/subworkflows/nf-core/utils_nfschema_plugin/main.nf(truncated)
hello-nf-core/solutions/core-hello-part4/workflows/hello.nf(truncated)
hello-nf-core/solutions/core-hello-start/conf/base.config(truncated)
hello-nf-core/solutions/core-hello-start/conf/modules.config(truncated)
hello-nf-core/solutions/core-hello-start/conf/test.config(truncated)
hello-nf-core/solutions/core-hello-start/conf/test_full.config(truncated)
hello-nf-core/solutions/core-hello-start/main.nf(truncated)
hello-nf-core/solutions/core-hello-start/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-start/subworkflows/local/utils_nfcore_hello_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nextflow_pipeline/main.nf(truncated)
hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config(truncated)
hello-nf-core/solutions/core-hello-start/subworkflows/nf-core/utils_nfcore_pipeline/main.nf(truncated)

vdauwera and others added 19 commits May 8, 2026 17:48
Adds the complete nextflow-triathlon/ working directory with scripts
(1-hello.nf, 2-inputs.nf, main.nf), modules, data files, nextflow.config,
and a solutions/ subdirectory with symlinks for self-contained testing.

Rewrites 01_run_basics.md into four sections: Hello World, Process multiple
inputs, Run a multi-step pipeline, and Configure the pipeline. The config
section introduces nextflow.config structure and profiles, setting learners
up for the nf-core pipeline demo in Part 2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Part 1 exercises now live under nextflow-triathlon/basics/, and Parts 2/3
nf-core runs use nextflow-triathlon/nf-core/. This prevents the triathlon
nextflow.config from overriding params.input when running nf-core pipelines
from the same directory.

Also adds laptop.config (withLabel overrides capping memory to 6 GB) for
local development, and updates rnaseq docs to reflect the current pipeline
version (3.26.0, revision e7ca46272c).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rewrite sections 4.2 and 4.3 to:
- Show the memory failure when running rnaseq without config overrides
- Explain nf-core process labels and the withLabel: fix via laptop.config
- Transition to Seqera Platform as the path to real-scale analysis
- Add link to Seqera academic program

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Comment out withName: 'cowpy' block in nextflow.config to prevent
  selector warning when running scripts without the cowpy process
- Add -with-report section and executor note to 01_run_basics.md
- Fix inline code formatting in headings (work/, -resume)
- Update nf-core/demo pull revision hash and directory listing in 02_run_nfcore.md
- Remove solutions/ directory from basics/ (not needed for this tutorial)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nd CLI-first workflow

- Add section 1: sign up, Community Showcase, compute options (own infra vs Seqera Compute)
- Simplify section 2 launch form with test profile pre-filled; fold form details into info admonition
- Add tw CLI install instructions; fix tw launch to use workspace pipeline name
- Restructure section 4 as CLI-first: tw pipelines add, verify in Launchpad, then launch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add .seqera_config stub with comments pointing to where values are found in Seqera UI
- Rewrite section 3.3 to use config file for token and workspace ID
- Add tw --version expected output and recap sentence
- Add tip about TOWER_COMPUTE_ENV and link to tw CLI reference docs
- Add recap sentences after tw runs list and tw pipelines add outputs
- Fix .seqera_config path consistency throughout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update all path references in orientation, Part 1, Part 2, and Part 3 docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update references in mkdocs.yml, index.md, and 00_orientation.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update references in mkdocs.yml and index.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Part 1: add output block code snippet and recap sentence; fold nextflow.config into collapsed admonition
- Part 2: replace sections 3.1.3-3.1.4 with brief validation note; fold laptop.config into collapsed admonition
- Part 3: address tw --version output, compute env tip, and workspace recap TODOs
- index.md: comment out unfinished video section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The index_page template requires a <!-- additional_information --> marker
to split summary content from course overview. Its absence caused the
Netlify build to error out.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Part 1: add -ansi-log false run to show per-call output; fix output
  block in 1.4.4 to show 1-hello.nf; update main.nf publish paths from
  'main' to 'full_pipeline'; fix nextflow.config admonition type
- Part 2: rewrite 4.2 memory error explanation with base.config context;
  improve 3.2.1/3.2.2 with touch/run instructions, command output
  admonitions, and -resume flag; add .command.sh admonition for ext.args;
  replace ls with tree for conf/ listing; fix laptop.config admonition
  type; convert TODO to tip admonition for academic program

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… triathlon Parts 1-3

Part 1 (01_run_nextflow.md):
- Fix output filename (Hello World!-output.txt, not Hello-output.txt)
- Update all console output hashes and revision IDs to match actual runs
- Fix section 1.4.4 output block (was showing main.nf instead of 1-hello.nf)
- Fix duplicate section 2.1 numbering (renumber to 2.1-2.4)
- Fix resume command typo (csv-resume → csv -resume) and remove stray -ansi-log false
- Add hl_lines to process output blocks, channel construction, container directive, and chaining

Part 2 (02_run_nfcore.md):
- Fix nf-core/demo asset tree path (pipelines/ → /workspaces/.nextflow/assets/)

Part 3 (03_run_seqera.md):
- Add explanation in 4.2 that input/outdir appear red (required, no defaults)
- Rewrite 4.3 as web interface launch with manual parameter entry
- Add new 4.4: CLI launch using -p test + --params-file for outdir
- Explain why tw launch requires --params-file instead of individual flags
- Update intro and summary to reflect two-path launch approach

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace "Course structure" with "Get ready to work" section matching other courses
- Set working directory to triathlon/ + code . to focus VSCode
- Add tree output showing full triathlon/ structure including .seqera_config
- Simplify Part 1 tip to relative cd basics
- Update Part 2 tip to include relative cd ../nf-core option

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update tip in section 4.4 to demonstrate passing --params-file and
--profile to tw pipelines add, so defaults are saved with the pipeline
registration rather than specified at launch time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
vdauwera and others added 4 commits July 18, 2026 16:21
…g Collection

Replaces the Nextflow Run course with Triathlon Part 1, extracts a new
standalone nf-core Run course from Hello nf-core's demo-pipeline lesson
(extended with a pull-and-run nf-core/rnaseq section from Triathlon
Part 2), adds a new Seqera Platform side quest from Triathlon Part 3,
and ties the three together in a new "Nextflow Triathlon" Training
Collection. The old Nextflow Run course is retired to a browsable but
unlisted archive path; the standalone Triathlon course and its exercise
code are removed now that their content has been redistributed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add non-clickable sidebar group labels (Users/Developers) via a custom
  nav.html override, driven by extra.nav_group_labels in mkdocs.yml
- Move Help under Home; add new Run with Seqera course (moved out of
  Side Quests) under the Users group
- Rename nf-core Run -> Run nf-core, Run on Seqera -> Run with Seqera,
  and Hello nf-core -> Build with nf-core for clarity
- Flatten Training Collections into a Learning Paths label, then retire
  it entirely: fold Architect's Toolkit into a "Suggested path" section
  on the Side Quests index, drop Nextflow Triathlon (now redundant with
  the Users course ordering), and add redirects for the old URLs
- Sync the corresponding renames/labels across all translated mkdocs.yml
  and content files where the old names were embedded as literal terms
- Introduce a generic nav_title_overrides mechanism in mkdocs_hooks.py so
  a section's sidebar title can differ from its index page's own title
- Move Training Environment out of Help into its own top-level item, then
  group it with the version/help reference pages under a new "Setup & Help"
  label at the bottom of the nav
- Rename each course section's first sub-item to "Overview" (Nextflow Run,
  Run nf-core, Run with Seqera, Hello Nextflow, Build with nf-core,
  Nextflow for Science, Side Quests) to avoid repeating the section name,
  without changing the underlying page's own title
- Restructure the Side Quests catalog into a single HTML table with
  colspan category-separator rows, with matching CSS for the header/
  category row styling
- Sync all of the above to translated mkdocs.yml files, using each
  language's own already-translated titles where they exist
- Extend nav_title_overrides usage to Nextflow for Science and Side Quests
  so their first sub-item reads "Overview" too, and add a matching
  nav_child_title_overrides mechanism so that label can be translated
  per language (it was previously always English, set once in the shared
  nav list)
- Reorder the Side Quests nav to match the catalog table's categories,
  and add a nav-item.html override so non-clickable category separators
  can be injected into a nested nav list, not just the top-level one
  (new nav_section_separators config, reusing the existing group-label
  styling)
- Sync all of the above to translated mkdocs.yml files
vdauwera and others added 8 commits August 8, 2026 03:11
The redirects plugin (enabled earlier for the retired Training Collections
URLs) was only present because the local Docker preview image happens to
bundle it via its squidfunk/mkdocs-material base image. Neither the
Netlify preview build (_scripts/docs.py, via its uv inline deps) nor the
production docs.yml workflow installed it, so both failed with
"Config value 'plugins': The redirects plugin is not installed" the
moment mkdocs.yml enabled it. Reproduced the Netlify build locally via
uv run docs.py build-all and confirmed all 11 languages now build clean.
Covers content this branch moves that is currently live on master:
the old Nextflow Run course (now archived), the Hello nf-core lessons
renumbered down by one, and the demo lesson extracted into the new
nf-core Run course. Verified each target resolves with no plugin
warnings and spot-checked one end-to-end in the preview.
Resolves the 8 real conflicts from ~3 months of independent master work
overlapping with this branch's restructuring:

- docs/en/docs/hello_nf-core/01_rewrite_hello.md,
  docs/en/docs/hello_nf-core/03_make_module.md,
  docs/en/docs/nfcore_run/01_run_demo.md: these are rename conflicts from
  the Hello nf-core lesson renumbering and the demo lesson's extraction
  into the new Run nf-core course. Kept this branch's part numbering and
  file structure, but adopted master's `channel.topic` (lowercase)
  correction, which matches the capitalization used everywhere else in
  that file.
- hello-nf-core/solutions/core-hello-part1/subworkflows/nf-core/
  utils_nfcore_pipeline/tests/main.nf.test(.snap): rename-detection
  misses; content is byte-identical to what's already at the renamed
  location, so resolved as-is.
- hello-nf-core/solutions/core-hello-part{2,4}/modules.json and
  core-hello-part1/modules.json (resurrected from part5 via a
  modify/delete conflict): master bumped the utils_nfcore_pipeline and
  utils_nfschema_plugin subworkflow pins; adopted those newer git_sha
  values and normalized formatting to the 4-space style used by sibling
  modules.json files elsewhere in the repo. Removed the resurrected
  core-hello-part5/modules.json since that directory was intentionally
  renamed to core-hello-part1 on this branch.

Verified with `uv run docs.py build-all` (the same command Netlify/CI
use) that all 11 languages still build cleanly after the merge.
When resolving the merge conflict in this file, I kept our branch's
projectDir/launchDir/workDir values (correct: launchDir/workDir should
say nfcore-run, not hello-nf-core, since this course was extracted into
its own directory). But projectDir doesn't depend on which course
directory the student is in - it reflects Nextflow's pipeline cache
layout, which master had already updated to the current
.repos/<repo>/clones/<sha> format everywhere else in this same file
(including the configFiles line two lines below, which auto-merged
without conflict). Picking "ours" for projectDir left it mismatched
against that auto-merged configFiles line, a mismatch that didn't exist
on either side before the merge. Updated projectDir to match.
…rses into parts

- Replace homepage's Introductory/Advanced track cards with For users/For
  developers cards matching the nav_group_labels grouping, and add the
  previously-missing Run with Seqera entry
- Split Nextflow Run into Part 1 (run steps) and Part 2 (configure the
  pipeline)
- Split Run nf-core into Part 1 (find and try), Part 2 (configure
  execution), and Part 3 (run a production pipeline)
- Split Run with Seqera into Part 1 (web interface) and Part 2 (CLI and
  registering a new pipeline)
- Update mkdocs.yml nav and each course's Lesson plan table accordingly

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Split the users card into Run pipelines / Configure execution (new
  coming-soon Nextflow Dot Config entry), and the developers card into
  Write pipelines / Nextflow for Science, with icons matching each
  section (play, tune, wrench, microscope)
- Replace the enumerated genomics/RNAseq/imaging course list under
  Nextflow for Science with a single browse-all-use-cases entry, and
  reuse the same pattern for Side Quests
- Reorder mkdocs.yml nav so Side Quests precedes Nextflow for Science,
  matching the new developers card order
- Fix extra.css: the catalog admonition type set font-size: 0.8rem on
  its container (1.25x every other admonition type's 0.64rem base),
  inflating its title to 16px/bold instead of the 12.8px/normal used
  by sibling course entries; removed the override and reset
  font-weight to normal like the courses type

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Extend the existing Overview nav-label pattern to the Genomics, RNAseq,
and Imaging landing pages, and sync the translated Overview word into
each language's nav_child_title_overrides, matching the mechanism from
the earlier "Sync Overview labels" change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adding an Overview child label to each sub-course made the nav-rename
hook reuse that child's title for the section itself, since there was
no nav_title_overrides entry for those index pages (the same reason
the top-level Nextflow for Science section needed one). Add the
missing entries, in English and in each language's mkdocs.yml, reusing
each page's own already-translated frontmatter title.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vdauwera

vdauwera commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator Author

See updated branch description above

@vdauwera
vdauwera marked this pull request as ready for review August 10, 2026 13:10
vdauwera and others added 2 commits August 11, 2026 18:47
Wraps the code-explanation sections in collapsible "Optional: Code
walkthrough" blocks so the main narrative stays focused on running
pipelines and observing results, with the code deep-dives available
on demand. Adds a custom "optional" admonition type (icon + styling)
to support this. Also fills in the modules/containers TBD content in
section 3 with a diagram, real captured output, and a short note on
why containers (and Conda) are used.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The modules.svg figure now sits next to the "Using process modules"
explanation inside the collapsible walkthrough, rather than in the
required main flow, keeping the diagram alongside the detail it
illustrates.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vdauwera
vdauwera marked this pull request as draft August 11, 2026 17:03
vdauwera and others added 4 commits August 11, 2026 20:05
… Config

The remote-repositories content belongs with running pipelines, not
configuring them, so it becomes Part 3 of Nextflow Run instead of the
first lesson of Nextflow Dot Config.

Nextflow Dot Config is rebuilt as a 3-part course adapted from the
archived Nextflow Run configuration chapter (sections 1-6), scoped to
avoid duplicating what Nextflow Run's Part 2 already covers:

- Part 1: run-specific config files, parameter files, outputDir,
  per-process output organization, workflow.output.mode
- Part 2: Docker/Conda switching, execution platforms, resource
  profiling and per-process resource overrides, resourceLimits
- Part 3: authoring and combining profiles, nextflow config inspection

Adds a nextflow-config/ working directory (seeded from Nextflow Run's
end state) and every exercise was run for real. This caught a genuine
current-version behavior the archived docs got wrong: outputDir
interpolating params.batch does not follow profile-specific parameter
overrides, since it's resolved once at config-parse time before
profiles are applied. That's now documented as a tested warning.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…le with Seqera

The initial rename updated the top-level nav keys and frontmatter
titles but missed the nav_title_overrides entries (which actually
control the sidebar label and take precedence over the nav key), the
courses' own H1/intro text, and every cross-reference to these course
names from other courses' pages.

Also fixes an unrelated pre-existing mismatch: the orientation page
linked to "Part 1: Run with Seqera" when the lesson's actual title is
"Part 1: Launch pipelines from the web interface".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants