@@ -141,9 +141,10 @@ workflow PROTEIN_DESIGN {
141141 // ================================================================
142142 // Prepare Target MSA from Samplesheet
143143 // ================================================================
144+ // Use actual placeholder files in assets/ for k8s compatibility (avoids staging non-existent files)
144145 ch_target_msa = ch_input
145146 .map { meta, design_yaml, structure_files, target_msa, target_sequence, target_template, boltzgen_output_dir ->
146- def msa_file = target_msa ?: file(' NO_MSA' )
147+ def msa_file = target_msa ?: file(" ${ projectDir } /assets/ NO_MSA" , checkIfExists : true )
147148 [meta. id, msa_file]
148149 }
149150
@@ -152,7 +153,7 @@ workflow PROTEIN_DESIGN {
152153 // ================================================================
153154 ch_target_template = ch_input
154155 .map { meta, design_yaml, structure_files, target_msa, target_sequence, target_template, boltzgen_output_dir ->
155- def template_file = target_template ?: file(' NO_TEMPLATE' )
156+ def template_file = target_template ?: file(" ${ projectDir } /assets/ NO_TEMPLATE" , checkIfExists : true )
156157 [meta. id, template_file]
157158 }
158159
@@ -398,30 +399,31 @@ workflow PROTEIN_DESIGN {
398399
399400 // Collect output files from each analysis process
400401 // These will be staged into the consolidation task's work directory
402+ // Use empty lists [] instead of non-existent placeholder files for k8s compatibility
401403
402404 // ipSAE scores (the .txt files, not byres)
403405 ch_ipsae_files = (params. run_ipsae && params. run_proteinmpnn && params. run_boltz2_refold)
404406 ? IPSAE_CALCULATE . out. scores
405407 .map { meta, file -> file }
406408 .collect()
407- .ifEmpty { file( ' NO_IPSAE_FILES ' ) }
408- : Channel . value(file( ' NO_IPSAE_FILES ' ) )
409+ .ifEmpty { [] }
410+ : Channel . value([] )
409411
410412 // Prodigy results (.txt files)
411413 ch_prodigy_files = (params. run_prodigy && params. run_proteinmpnn && params. run_boltz2_refold)
412414 ? PRODIGY_PREDICT . out. results
413415 .map { meta, file -> file }
414416 .collect()
415- .ifEmpty { file( ' NO_PRODIGY_FILES ' ) }
416- : Channel . value(file( ' NO_PRODIGY_FILES ' ) )
417+ .ifEmpty { [] }
418+ : Channel . value([] )
417419
418420 // Foldseek summaries (.tsv files)
419421 ch_foldseek_files = (params. run_foldseek && params. run_proteinmpnn && params. run_boltz2_refold)
420422 ? FOLDSEEK_SEARCH . out. summary
421423 .map { meta, file -> file }
422424 .collect()
423- .ifEmpty { file( ' NO_FOLDSEEK_FILES ' ) }
424- : Channel . value(file( ' NO_FOLDSEEK_FILES ' ) )
425+ .ifEmpty { [] }
426+ : Channel . value([] )
425427
426428 // ====================================================================
427429 // Collect binder sequences from ProteinMPNN for the report
@@ -435,9 +437,9 @@ workflow PROTEIN_DESIGN {
435437 fasta_list. collect { fasta_file -> fasta_file }
436438 }
437439 .collect()
438- .ifEmpty { file( ' NO_SEQUENCE_FILES ' ) }
440+ .ifEmpty { [] }
439441 } else {
440- ch_sequence_files = Channel . value(file( ' NO_SEQUENCE_FILES ' ) )
442+ ch_sequence_files = Channel . value([] )
441443 }
442444
443445 // Run consolidation with staged files
0 commit comments