Line of code Training > nf-core > part 3 > 3.5 fails me

When I run the line nextflow run . --outdir core-hello-results -profile test,docker --validate_params false in Training > nf-core > part 3 > 3.5 I get the error:

Nextflow 25.10.4 is available - Please consider updating your version to it

 N E X T F L O W   ~  version 25.10.2

Launching `./main.nf` [suspicious_swartz] DSL2 - revision: b9e9b3b8de

Input/output options
  input                     : /workspaces/training/hello-nf-core/core-hello/assets/greetings.csv
  outdir                    : core-hello-results

Institutional config options
  config_profile_name       : Test profile
  config_profile_description: Minimal test dataset to check pipeline function

Generic options
  validate_params           : false
  trace_report_suffix       : 2026-04-20_19-57-37

Core Nextflow options
  runName                   : suspicious_swartz
  containerEngine           : docker
  launchDir                 : /workspaces/training/hello-nf-core/core-hello
  workDir                   : /workspaces/training/hello-nf-core/core-hello/work
  projectDir                : /workspaces/training/hello-nf-core/core-hello
  userName                  : root
  profile                   : test,docker
  configFiles               : /workspaces/training/hello-nf-core/core-hello/nextflow.config

!! Only displaying parameters that differ from the pipeline defaults !!
------------------------------------------------------
executor >  local (6)
[b4/48c9a7] process > CORE_HELLO:HELLO:sayHello (3)       [100%] 3 of 3 ✔
[d9/9b3979] process > CORE_HELLO:HELLO:convertToUpper (3) [100%] 3 of 3 ✔
[-        ] process > CORE_HELLO:HELLO:CAT_CAT            -
[-        ] process > CORE_HELLO:HELLO:cowpy              -
ERROR ~ Error executing process > 'CORE_HELLO:HELLO:CAT_CAT (test)'

Caused by:
  
      WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
      Reason:
      This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
      limit when concatenating large numbers of files. The find/concatenate module resolves this
      by staging files into a directory and enumerating them with `find`, and also enforces
      consistent input compression (all gzipped or all uncompressed). Also enables faster, parallel
      decompression with pigz.
      . Expression: false -- Check script 'modules/nf-core/cat/cat/main.nf' at line: 31


Source block:
  def deprecation_message = """
  WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
  Reason:
  This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
executor >  local (6)
[b4/48c9a7] process > CORE_HELLO:HELLO:sayHello (3)       [100%] 3 of 3 ✔
[d9/9b3979] process > CORE_HELLO:HELLO:convertToUpper (3) [100%] 3 of 3 ✔
[-        ] process > CORE_HELLO:HELLO:CAT_CAT            -
[-        ] process > CORE_HELLO:HELLO:cowpy              -
Execution cancelled -- Finishing pending tasks before exit
ERROR ~ Error executing process > 'CORE_HELLO:HELLO:CAT_CAT (test)'

Caused by:
  
      WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
      Reason:
      This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
      limit when concatenating large numbers of files. The find/concatenate module resolves this
      by staging files into a directory and enumerating them with `find`, and also enforces
      consistent input compression (all gzipped or all uncompressed). Also enables faster, parallel
      decompression with pigz.
      . Expression: false -- Check script 'modules/nf-core/cat/cat/main.nf' at line: 31


Source block:
  def deprecation_message = """
  WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
  Reason:
  This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
  limit when concatenating large numbers of files. The find/concatenate module resolves this
  by staging files into a directory and enumerating them with `find`, and also enforces
  consistent input compression (all gzipped or all uncompressed). Also enables faster, parallel
executor >  local (6)
[b4/48c9a7] process > CORE_HELLO:HELLO:sayHello (3)       [100%] 3 of 3 ✔
[d9/9b3979] process > CORE_HELLO:HELLO:convertToUpper (3) [100%] 3 of 3 ✔
[-        ] process > CORE_HELLO:HELLO:CAT_CAT            -
[-        ] process > CORE_HELLO:HELLO:cowpy              -
Execution cancelled -- Finishing pending tasks before exit
-[core/hello] Pipeline completed with errors-
ERROR ~ Error executing process > 'CORE_HELLO:HELLO:CAT_CAT (test)'

Caused by:
  
      WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
      Reason:
      This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
      limit when concatenating large numbers of files. The find/concatenate module resolves this
      by staging files into a directory and enumerating them with `find`, and also enforces
      consistent input compression (all gzipped or all uncompressed). Also enables faster, parallel
      decompression with pigz.
      . Expression: false -- Check script 'modules/nf-core/cat/cat/main.nf' at line: 31


Source block:
  def deprecation_message = """
  WARNING: This module has been deprecated. Please use nf-core/modules/find/concatenate
  
  Reason:
  This module passes all input files as shell arguments, which can exceed the UNIX ARG_MAX
  limit when concatenating large numbers of files. The find/concatenate module resolves this
  by staging files into a directory and enumerating them with `find`, and also enforces
  consistent input compression (all gzipped or all uncompressed). Also enables faster, parallel
  decompression with pigz.
  """
  assert false: deprecation_message
  def file_list = files_in.collect { file -> file.toString() }
  prefix   = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}"

Container:
  quay.io/biocontainers/pigz:2.8

Tip: you can try to figure out what's wrong by changing to the process work dir and showing the script file named `.command.sh`

 -- Check '.nextflow.log' file for details
ERROR ~ Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting

 -- Check '.nextflow.log' file for details

I solved this problem. I think these were the steps that worked:

Step 1:
Install find/concatenate in ./core hello/ with nf-core modules install find/concatenate.

Step 2:
Change core-hello/workflows/hello.nf contents to:
```
/*

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*/

include { paramsSummaryMap } from ‘plugin/nf-schema’

include { softwareVersionsToYAML } from ‘../subworkflows/nf-core/utils_nfcore_pipeline’

include { sayHello } from ‘../modules/local/sayHello.nf’

include { convertToUpper } from ‘../modules/local/convertToUpper.nf’

include { cowpy } from ‘../modules/local/cowpy.nf’

include { FIND_CONCATENATE } from ‘../modules/nf-core/find/concatenate/main’

/*

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RUN MAIN WORKFLOW

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*/

workflow HELLO {

take:

ch_samplesheet // channel: samplesheet read in from --input



main:



ch_versions = channel.empty()



// emit a greeting

sayHello(ch_samplesheet)



// convert the greeting to uppercase

convertToUpper(sayHello.out)



// create metadata map with batch name as the ID

def concatenate_meta = \[ id: params.batch \]



// create a channel with metadata and files in tuple format

ch_for_concatenate = convertToUpper.out.collect().map { files -> tuple(concatenate_meta, files) }



// concatenate the greetings

FIND_CONCATENATE(ch_for_concatenate)



// extract the file from the tuple since cowpy doesn't use metadata yet

ch_for_cowpy = FIND_CONCATENATE.out.file_out.map{ meta, file -> file }



// generate ASCII art of the greetings with cowpy

cowpy(ch_for_cowpy, params.character)



//

// Collate and save software versions

//

def topic_versions = Channel.topic("versions")

    .distinct()

    .branch { entry ->

        versions_file: entry instanceof Path

        versions_tuple: true

    }



def topic_versions_string = topic_versions.versions_tuple

    .map { process, tool, version ->

        \[ process\[process.lastIndexOf(':')+1..-1\], "  ${tool}: ${version}" \]

    }

    .groupTuple(by:0)

    .map { process, tool_versions ->

        tool_versions.unique().sort()

        "${process}:\\n${tool_versions.join('\\n')}"

    }



softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))

    .mix(topic_versions_string)

    .collectFile(

        storeDir: "${params.outdir}/pipeline_info",

        name:  'hello_software\_'  + 'versions.yml',

        sort: true,

        newLine: true

    ).set { ch_collated_versions }




emit:

cowpy_hellos   = cowpy.out

versions       = ch_versions                 // channel: \[ path(versions.yml) \]

}

/*

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

THE END

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*/
```

Hi Martin, thanks for reporting this, I’m going to update the materials accordingly. Nice job solving it yourself!