piplus2
08/24/2026, 5:26 PMro-crate-metadata.json? I mean, how do you update just what's necessary, but keep the description text? I don't know how to do it easily as the description is just a wall of text. Thanks!Kevin RUE
08/26/2026, 9:04 AMprocess {
queue = { task.time <= 24.h ? 'general' : 'long' }
}
will switch queue based on the job duration,
while profiles can be used to pick specific partitions to submit jobs to (as explained in this ARCC example)
profiles {
bigmem {
process {
resourceLimits = [
cpus: 64,
memory: 4.TB,
time: 168.h
]
queue = 'bigmem'
}
}
}
My question is whether profiles (i.e. resourceLimits) kick in when the queue switches at the process scope, or whether the relevant profiles must be selected at launch, i.e. nextflow -profile general,long,bigmemSzymon Szyszkowski
08/26/2026, 10:25 AMwithLabel: ld_annotation {
cpus = 2
memory = { [8.GB, 24.GB, 48.GB][Math.min(task.attempt - 1, 2)] }
time = 60.m
maxRetries = 2
errorStrategy = { task.exitStatus in [137, 50002] ? 'retry' : 'terminate' }
}
The ld_annotation job is running over the google cloud batch and it sometimes needs retries to get a machine with bigger memory.
When that happens (retry kicks in) and later in the pipeline I encounter another failure on that branch, if I resume, the cache is invalid and the whole branch restarts from the ld_annotation yet again.
Is it something obvious that could explain the cache invalidation on retry? I have never stamped into this problem before, but can see a few folks have lately similar issues github.com/nextflow-io/nextflow/issues/6884 @Evangelos Karatzas FYILea Picard (leapfroggie_)
08/26/2026, 2:22 PMLea Picard (leapfroggie_)
08/26/2026, 3:20 PMprocess_standard_label: Conflicting process labels found: process_high,process_long
I thought process_long was specifically intended to be stacked up with another process label?Andrea Bagnacani
08/27/2026, 12:16 PMSENTIEON_LICSRVR_IP env. variable) I'm unable to replicate the successful tests in the CI. What am I missing?Niklas Schandry
08/31/2026, 8:06 AMEvangelos Karatzas
09/02/2026, 12:36 PMWARN: Unrecognized config option 'validation.defaultIgnoreParams'
WARN: Unrecognized config option 'validation.monochromeLogs'
ERROR ~ No such variable: metaAndrea Bagnacani
09/02/2026, 3:03 PMZoey
09/02/2026, 5:56 PMnf-core/rnaseq v3.11.1 on a combined sample cohort on Seqera. I now want to re-run just the merge/report step without re-doing alignment/quantification (the most time consuming + cost consuming step) as the cohort came from 7 different datasets, so original 1 merged metrics doesn't work. I tried -resume the run with the the updated sample sheet, but looks like it still run from scratch instead of hitting cache.
Alternatively, can I divided merged.gene_counts.tsv into different dataset?
Is there a recommended approach for this kind of partial re-run? Thanks!pontus
09/04/2026, 9:34 AMJunxuan Gao
09/08/2026, 10:37 PMext.singularity_pull_docker_container = true
It looks like the PATH environment variable is supposed to be updated by shell-hook.sh which is called in the ENTRYPOINT section in the Dockerfile, but singularity exec doesn't invoke the ENTRYPOINT section which is translated to %runscript when converting from OCI image to SIF. The native Singularity images don't have this issue because the shell-hook.sh script is invoked in the %environment section.
While this is not a critical issue, it would be nice to be consistent with where and when we update the environment variables and to allow users to run OCI-converted Wave containers with Singularity.Niklas Schandry
09/09/2026, 9:20 AMstaging foreign file , is there any way to tell when it is done with that? As far as I am aware it does not report when it finished, but maybe I am missing somethingAndrea Bagnacani
09/17/2026, 3:41 PMsentieon/rsemcalculateexpression test, updating sentieon/rsemcalculateexpression opened up a bigger question: the linter raised an Invalid 'meta' keys detected: meta.strandedness error, so I tried to make strandedness a parameter. I updated the tests accordingly. However, this module is used in a nf-core subworkflow, which now (understandably) complains about the change in number of parameters.
Is a strandedness value channel even desirable? How would the community approach these issues?George Pligoropoulos
09/18/2026, 8:44 PMworkflow {
main:
printPythonVersions()
def repo_root = projectDir.parent
def cells_channel = channel.fromPath(params.lastpass_export, checkIfExists: true)
.splitCsv()
.flatten()
// .take(params.take_only) //TODO REMOVE DEMO
.view { cell -> "Processing cell: ${cell}" }
def base_tokens = tokenizeLine(params.tokenize_bases_script, repo_root, cells_channel)
.splitText()
.map { line -> line.trim() } // makes the stdout into a channel of lines
.filter { token -> !token.isEmpty() }
.unique()
def case_variants_tokens = case_variants(params.tokenize_cases_script, repo_root, base_tokens)
.splitText().map { line -> line.trim() }
def one_leet_variants_tokens = one_leet_variants(params.one_leet_variants_script, repo_root, base_tokens)
.splitText().map { line -> line.trim() }
def commonAffixesChannel = channel.fromList(get_common_affixes())
def prefixed_tokens = base_tokens.combine(commonAffixesChannel).map { token, affix -> "${affix}${token}" }
def suffixed_tokens = base_tokens.combine(commonAffixesChannel).map { token, affix -> "${token}${affix}" }
def all_candidates_file = base_tokens
.mix(case_variants_tokens)
.mix(one_leet_variants_tokens)
.mix(prefixed_tokens)
.mix(suffixed_tokens)
.filter { candidate -> max_length_filter(candidate) } // Example: filter out candidates longer than 128 characters
.unique()
.collectFile(name: "all_candidates_from_nf.txt", newLine: true)
publish:
all_candidates = all_candidates_file
}
The result of this first experiment would be to burn all of the laptop's resources for 4 hours and then, by spinning hundrends of thousands of tasks, etc. leading to an out of memory.
In a second experiment I tried to redesign the whole thing to work in batches:
workflow {
main:
printPythonVersions()
def repo_root = projectDir.parent
def cells_channel = channel.fromPath(params.lastpass_export, checkIfExists: true)
.splitCsv()
.flatten()
// .take(params.take_only) //TODO REMOVE DEMO
// .view { cell -> "Processing cell: ${cell}" } //too slow in full run
def base_tokens = tokenizeLine(params.tokenize_bases_script, repo_root, cells_channel)
.splitText()
.map { line -> line.trim() } // makes the stdout into a channel of lines
.filter { token -> !token.isEmpty() }
.unique()
def base_batches = base_tokens
.collate(params.batch_size)
.map { batch -> batch.join('\n') + '\n' }
def base_parts = write_batch_parts(base_batches)
// def base_file = base_parts.collectFile(name: 'base_parts_from_nf.txt', newLine: false)
def case_variants_parts = case_variants_batches(params.tokenize_cases_script, repo_root, base_batches)
// def case_variants_file = case_variants_parts.collectFile(name: 'case_variants.txt', newLine: false)
def one_leet_variants_parts = one_leet_variants_batches(params.one_leet_variants_script, repo_root, base_batches)
// one_leet_variants_parts
// .count()
// .view { cnt -> "one_leet_variants_parts count: ${cnt}" }
// def one_leet_variants_file = one_leet_variants_parts.collectFile(name: 'one_leet_variants.txt', newLine: false)
def common_affixes = get_common_affixes()
def prefixed_parts = prefixed_batches(base_batches, common_affixes, true)
// def prefixed_file = prefixed_parts.collectFile(name: 'prefixed_variants.txt', newLine: false)
def suffixed_parts = suffixed_batches(base_batches, common_affixes, false)
// def suffixed_file = suffixed_parts.collectFile(name: 'suffixed_variants.txt', newLine: false)
def all_parts = base_parts
.mix(case_variants_parts)
.mix(one_leet_variants_parts)
.mix(prefixed_parts)
.mix(suffixed_parts)
def all_file = all_parts.collectFile(name: 'all_candidates_from_nf.txt', newLine: false)
all_final = filter_by_length_and_make_unique(all_file)
// Unlike mix(), concat() preserves source order: all items from file1, then all items from file2.
def files =
// base_file
// .concat(case_variants_file)
// .concat(one_leet_variants_file)
// .concat(prefixed_file)
// .concat(suffixed_file)
// .concat(all_file)
all_file
.concat(all_final)
.map { file -> tuple(file.baseName, file) }
count_lines(files)
.view { tpl -> "file name ${tpl[0]} with count: ${tpl[1].trim()}" }
publish:
all_candidates = all_file
pure_candidates = all_final
// basic = base_file
// case_variants = case_variants_file
// one_leet_variants = one_leet_variants_file
// prefixed = prefixed_file
// suffixed = suffixed_file
}
This time it executed for several hours but completed successfully without any issues with batches of count 1000.
This was more of a toy-experiment as the whole thing could have been coded in a single Python file, which made it as fast as complete execution in under 30 minutes and the python was single threaded ....
So the genuine questions from this first experience:
1. Why Nextflow does not manage itself the load that it gets and requires me to engineer it in batches ?
2. In what kind of scenarios to think of nextflow to actually take advantage its capacity to run in parallel ? I understand that splitting the python in mini python scripts might not have been the best idea of all times 🙂Sam Wilkinson
09/24/2026, 11:27 AMWARN: Unrecognized config option 'threadPool.PublishDir.maxThreads' that used to be valid and I'm not sure if it's ignored nowSam Wilkinson
09/24/2026, 11:28 AMSam Wilkinson
09/24/2026, 11:30 AMSam Wilkinson
09/24/2026, 11:39 AMalan.shteyman
09/25/2026, 1:13 PMRyan Gossart
09/29/2026, 10:28 PMAmmar Aziz
10/06/2026, 6:56 AMQuiet Flare
10/15/2026, 1:42 PMpontus
10/23/2026, 11:23 AMcukelarter
10/23/2026, 3:50 PMMaximilian Nuber
10/27/2026, 8:17 AMAmmar Aziz
10/29/2026, 10:06 PMArthur
11/02/2026, 3:36 AMd.house
11/03/2026, 3:47 PMAmmar Aziz
11/04/2026, 4:43 AM