Skip to content

chore(nfcore_build): bump nf-core/tools to 4.1.0 - #1014

Merged
FriederikeHanssen merged 3 commits into
fix/nfcore-build-training-fixesfrom
bump/nfcore-build-tools-4.1.0
Oct 14, 2026
Merged

FriederikeHanssen merged 3 commits into
fix/nfcore-build-training-fixesfrom
bump/nfcore-build-tools-4.1.0

Conversation

@FriederikeHanssen

@FriederikeHanssen FriederikeHanssen commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #1012. This bumps nf-core/tools in the Hello nf-core course (nfcore_build) from 4.0.2 to 4.1.0.

It contains only the changes 4.1.0 requires. There are no style or wording edits. Each part was walked through with nf-core/tools 4.1.0 and Nextflow 26.04.4, and every change below was checked against this branch.

Changes

  • .devcontainer/local-features/uv-tools/install.sh: nf-core==4.1.0
  • 00_orientation.md: the required version is now 4.1.0
  • Parts 1, 2 and 4: the nf-core/tools version banner in command output
  • Part 1 §2.1: nf-core pipelines create no longer prints Generated container configs for the pipeline successfully. (the template has no modules/ yet). Removed that line and the matching words in the sentence before it.
  • Part 1 §5.1–5.2: in the 4.1.0 template the input-channel block in utils_nfcore_hello_pipeline/main.nf starts at line 84, not 83. Updated linenums. The content is unchanged.
  • Part 2 §1.3: the note about the modules info "Reinstalling modules…" message now gives 4.1.0 as the version. The message still appears.
  • Part 2 §1.4: nf-core modules install find/concatenate no longer fails with NotADirectoryError on the single-file cowpy.nf local module. It exits cleanly and prints the include statement. Replaced the output block and removed the paragraph about the traceback.

Solutions (nfcore-build/solutions/core-hello-part1 to part4)

These were 4.0.2 scaffolds. I applied the exact 4.0.2 → 4.1.0 template diff, taken from nf-core pipelines create run with both versions:

  • subworkflows/nf-core/utils_nfschema_plugin/: the 4.1.0 version, with the new cli_typecast input and the parameters_schema option keys. tests/nextflow.config keeps fix(nfcore_build): correct Build with nf-core materials for the training environment #1012's nf-schema 2.7.2.
  • subworkflows/local/utils_nfcore_hello_pipeline/main.nf: passes the extra false argument to UTILS_NFSCHEMA_PLUGIN.
  • conf/base.config: the new process_low_memory label.
  • modules.json: new SHAs for utils_nextflow_pipeline and utils_nfschema_plugin.
  • .nf-core.yml: nf_core_version: 4.1.0.
  • docs/output.md and docs/usage.md: template wording.

Docs that show these files:

  • Part 2 §1.4: the modules.json block uses the new SHAs.
  • Part 4 §2.5: the line numbers for utils_nfcore_hello_pipeline/main.nf change from 83 to 84.
  • Part 4 §1.5 and §2.7.2: the validation error now reports utils_nfschema_plugin/main.nf' at line: 72. It was line 68.

Verification

  • Parts 2, 3 and 4 were walked through again on this branch with the updated solutions, using nf-core/tools 4.1.0 and Nextflow 26.04.4.
  • core-hello-part1 to part4 all pass a fresh run and a -resume run with -profile docker,test.
  • nf-schema 2.7.2 accepts cast_cli_params: false. The validation messages are otherwise unchanged.

Not changed

  • Part 3: the module template is byte-identical in 4.0.2 and 4.1.0. The walkthrough found nothing caused by 4.1.0.
  • Part 4: schema build output and validation errors are unchanged.
  • The 4.1.0 template still pins nf-schema 2.5.1, so the step in fix(nfcore_build): correct Build with nf-core materials for the training environment #1012 that switches to 2.7.2 is still needed.
  • Part 2 modules.json formatting: 4.1.0 runs prettier on modules.json only when the pipeline is inside a git repo. Outside one, the output matches the current block. Inside one, the arrays are written on one line with 2-space indentation. I left the block as it is because this depends on the environment.
  • Translations are not updated.

🤖 Generated with Claude Code

Update the devcontainer pin, the required-version text in the
orientation page, and the nf-core/tools banners in lesson output.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@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
✅ 183 files had no errors
🔧 130 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)
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)

FriederikeHanssen and others added 2 commits October 14, 2026 11:08
…/tools 4.1.0

- Part 1 §2.1: pipelines create no longer prints the container-config line
- Part 1 §5.1-5.2: input-channel block starts at line 84 in the 4.1.0 template
- Part 2 §1.4: modules install no longer fails with NotADirectoryError on
  single-file local modules; it now prints the include statement

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Apply the 4.0.2 -> 4.1.0 template changes to core-hello-part1..4:
updated utils_nfschema_plugin subworkflow (cli_typecast input,
parameters_schema option keys), the extra argument passed to it from the
local utils subworkflow, the process_low_memory label, new subworkflow
SHAs in modules.json, and nf_core_version in .nf-core.yml.

Update the docs that show these files: the modules.json SHAs in Part 2,
and the utils_nfcore_hello_pipeline line numbers and the
utils_nfschema_plugin error line in Part 4.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@FriederikeHanssen
FriederikeHanssen marked this pull request as ready for review October 14, 2026 09:49
@FriederikeHanssen
FriederikeHanssen merged commit d47df77 into fix/nfcore-build-training-fixes Oct 14, 2026
6 checks passed
@FriederikeHanssen
FriederikeHanssen deleted the bump/nfcore-build-tools-4.1.0 branch October 14, 2026 09:49
pinin4fjords added a commit that referenced this pull request Oct 14, 2026
…ing environment (#1012)

* fix(nfcore_build): correct Hello nf-core materials for the training environment

Fix bugs and inaccuracies in the Build with nf-core course against the
training image (Nextflow 26.04.4, nf-core/tools 4.0.2), found in Friederike's
walkthrough (#1005-#1011) and re-verified on 4.0.2:

- Demo symlink: Nextflow 26.04 stores pulled pipelines under
  assets/.repos/<org>/<name>/clones/<commit>, so the old assets symlink
  left pipelines/nf-core/demo missing.
- nf-core/demo now ships modules/local/cowpy; update the modules tree.
- Line numbers, highlights and Before blocks that did not match the files
  produced by the 4.0.2 template and the lesson steps.
- modules create: tool name must be lowercase, document the Bioconda
  prompt, and show the generated main.nf as 4.0.2 writes it.
- find/concatenate excerpt now matches the installed module signature.
- Part 4: declare batch in nextflow.config before schema build, and pass
  --batch in the invalid-input test so the output shows only file errors.
- Solutions: part4 validate_params = true, composable-hello docker config,
  and FIND_CONCATENATE include order matching Part 2.

Co-authored-by: Friederike Hanssen <friederike.hanssen@seqera.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(nfcore_build): align solutions with lesson end state and document install traceback

- Solutions part1-4: workflows/hello.nf and the utils_nfcore_hello_pipeline
  subworkflow now match what the 4.0.2 template plus the lesson edits
  produce, so the "start fresh" boxes give files that match the Before
  blocks and line numbers.
- Part 2: show the long traceback that `nf-core modules install` prints
  before NotADirectoryError on 4.0.2, and drop the claim that `info`
  writes no files (it rewrites modules.json).

Co-authored-by: Friederike Hanssen <friederike.hanssen@seqera.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(nfcore_build): have attendees switch their scaffold to nf-schema 2.7.2

The nf-core/tools pipeline template pins nf-schema 2.5.1, which prints
`WARN: Unrecognized config option 'validation.*'` on every run under
Nextflow 26.04. The solutions and the Part 2-4 docs are written against
2.7.2, but nothing told attendees to switch, so their runs never matched
the documented output. Part 1 §2.2 now has them update the pin, the
§5.5 output shows the one-off plugin download, and the stray download
line in Part 3 §1.2.4 is removed.

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

* fix(nfcore_build): clone nf-core/demo for browsing instead of symlinking the asset cache

`nextflow clone` puts the default revision directly at pipelines/nf-core/demo,
so the setup no longer depends on the Nextflow 26.04 per-revision clone
layout. The course only reads the demo code, so the pull is not needed.

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

* docs(nfcore_build): point Part 1 file-explorer instruction at pipelines/nf-core/demo

Co-authored-by: Friederike Hanssen <friederike.hanssen@seqera.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(nfcore_build): bump nf-core/tools to 4.1.0 (#1014)

* chore(nfcore_build): bump nf-core/tools to 4.1.0

Update the devcontainer pin, the required-version text in the
orientation page, and the nf-core/tools banners in lesson output.

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

* fix(nfcore_build): update command output and line numbers for nf-core/tools 4.1.0

- Part 1 §2.1: pipelines create no longer prints the container-config line
- Part 1 §5.1-5.2: input-channel block starts at line 84 in the 4.1.0 template
- Part 2 §1.4: modules install no longer fails with NotADirectoryError on
  single-file local modules; it now prints the include statement

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

* fix(nfcore_build): update solutions to the nf-core/tools 4.1.0 template

Apply the 4.0.2 -> 4.1.0 template changes to core-hello-part1..4:
updated utils_nfschema_plugin subworkflow (cli_typecast input,
parameters_schema option keys), the extra argument passed to it from the
local utils subworkflow, the process_low_memory label, new subworkflow
SHAs in modules.json, and nf_core_version in .nf-core.yml.

Update the docs that show these files: the modules.json SHAs in Part 2,
and the utils_nfcore_hello_pipeline line numbers and the
utils_nfschema_plugin error line in Part 4.

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

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Friederike Hanssen <friederike.hanssen@seqera.io>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants