James Fellows Yates
04/30/2026, 1:33 PMNicolas Vannieuwkerke
04/30/2026, 1:33 PMJames Fellows Yates
04/30/2026, 1:33 PMNicolas Vannieuwkerke
04/30/2026, 1:33 PMNXF_SYNTAX_PARSER=v1Nicolas Vannieuwkerke
04/30/2026, 1:34 PMJames Fellows Yates
04/30/2026, 1:34 PMNicolas Vannieuwkerke
04/30/2026, 1:36 PMNicolas Vannieuwkerke
04/30/2026, 1:36 PMΓmer An
05/01/2026, 11:20 AMparams that are supposed to be integer like params.foo = 10 are passed as strings to the pipeline at runtime. It requires to define them as Integer in the main workflow to restore the functionality. Where is the best way to define this if there are too many params like this?Victor
05/06/2026, 8:43 AMRike Hanssen
05/18/2026, 12:47 PMtest profile, so it validates sth that doesn't need validating. Basically if we could run the validation only if tools.contains('vep') that would be idealJames Fellows Yates
06/04/2026, 8:57 AMUnrecognized config option 'validation.defaultIgnoreParams'
IS that to be expected? Or did I mess up the latest template merge?James Fellows Yates
06/04/2026, 9:23 AMDaniel Lundin
06/10/2026, 3:05 PMERROR ~ Argument of `file()` function cannot be empty
-- Check script 'subworkflows/nf-core/utils_nfschema_plugin/main.nf' at line: 72 or see '.nextflow.log' file for more details
Line 72 is the call to validateParams in:
if(validate_params) {
validateOptions = [:]
if(parameters_schema) {
validateOptions << [parametersSchema: parameters_schema]
}
if(cli_typecast != null) {
validateOptions << [cliTypecast: cli_typecast]
}
validateParameters(validateOptions)
}
I call the utility function like this from the local subworkflow:
UTILS_NFSCHEMA_PLUGIN (
workflow,
validate_params,
null,
help,
help_full,
show_hidden,
before_text,
after_text,
command,
null
)
I.e. with null for parameters_schema.
A couple of println shows that neither of the two `if`s are visited, and validateOptions is [:] when the function is called.
Running the pipeline with --help works.
Tools version 4.0.2, fails both with Nextflow 26.4.03 and 25.10.4.
Doing the same with #C01U1E95JQ5 just works. I can't find any differences between the two.Niklas Schandry
06/17/2026, 1:26 PM[] but after a schema update this seems to be no longer validDaniel Lundin
07/02/2026, 1:37 PMsample,fastq_1,fastq_2
arc00,{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates00_1.fastq.gz' },{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates00_2.fastq.gz' }
arc01,{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates01_1.fastq.gz' },{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates01_2.fastq.gz' }
arc02,{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates02_1.fastq.gz' },{ params.pipelines_testdata_base_path + 'testdata/archaeal_duplicates02_2.fastq.gz' }
I.e., there's no way around needing to hardcode GitHub urls in test sample sheets? Which means that I have to update them before doing a PR to nf-core's repo from my fork?Nicolas Vannieuwkerke
07/07/2026, 9:10 AMNicolas Vannieuwkerke
07/07/2026, 10:53 AMNicolas Vannieuwkerke
07/07/2026, 11:05 AMNicolas Vannieuwkerke
07/07/2026, 12:57 PMNicolas Vannieuwkerke
07/08/2026, 11:16 AMsamplesheetToRecords function which will convert a samplesheet to a list of Record types. However while doing this I'm also finding myself at the point where I need to decide how we want to use record types (especially with the meta map). So my question is: What would you prefer? (please react with the emoji)
Option 1οΈβ£ : All values will be available as a key-value pair in the Record, meaning that meta field and input field will be on the same level. (TBH this is my preferred way of working with records as this allow directly joining on specific meta keys using the join operator without having to do any preprocessing of the channel structure). Example:
[[id:'test', single_end:false], test_R1.fastq.gz, test_R2.fastq.gz]
Would become:
record(id: 'test', single_end:false, fastq_1:test_R1.fastq.gz, fastq_2:test_R2.fastq.gz)
Option 2οΈβ£ : We keep a meta key in the record that contains all meta values. (This would keep our channel structures relatively the same as before) Example:
[[id:'test', single_end:false], test_R1.fastq.gz, test_R2.fastq.gz]
Would become:
record(meta:[id:'test', single_end:false], fastq_1:test_R1.fastq.gz, fastq_2:test_R2.fastq.gz)
Option 3οΈβ£ : If you have a better idea please post it in this thread!Nicolas Vannieuwkerke
08/10/2026, 2:08 PMNicolas Vannieuwkerke
08/10/2026, 2:41 PMNicolas Vannieuwkerke
08/10/2026, 3:55 PMNicolas Vannieuwkerke
08/19/2026, 2:44 PMNicolas Vannieuwkerke
08/20/2026, 3:40 PMNicolas Vannieuwkerke
09/24/2026, 11:15 AMNicolas Vannieuwkerke
09/29/2026, 2:05 PMNiklas Schandry
10/01/2026, 8:47 AMchannel.fromList(samplesheetToList(params.input, "assets/schema_input.json"))
/*
This is a somewhat crucial step, where the samplesheet and params are used to determine per-sample parameters.
This has been greatly simplified thanks to @nvnieuwk
*/
.map { it ->
def meta = it[0]
// Populate everything that has no value with the value from params
return meta.collectEntries { key, val -> key == "group" ? [ key, val ] : [ key, val ?: params.get(key) ] }
}
1. However, I also set defaults in schema_inputs . As I understand, this probably breaks what I want to do, and I should rather remove the defaults from the schema, to ensure that this actually falls back to params? To do this: should I remove defaults? Will I still receive an entry if there is no default and it was not in the samplesheet? Should I set defaults to null ?
2. Something about this that has been bothering me for a while is: I assume that if a user were to set a param.something = true and in the samplesheet would provide something as false, this would actually override the per-sample value false with the param value true, because val ?: params.get(key) would get it from params, since the condition is false. Is there some established pattern to handle this?Jonathan Manning
10/02/2026, 9:29 AM