diff --git a/plugins/nf-seqera/src/main/io/seqera/executor/SeqeraExecutor.groovy b/plugins/nf-seqera/src/main/io/seqera/executor/SeqeraExecutor.groovy index 663c8da391..aac50a20d7 100644 --- a/plugins/nf-seqera/src/main/io/seqera/executor/SeqeraExecutor.groovy +++ b/plugins/nf-seqera/src/main/io/seqera/executor/SeqeraExecutor.groovy @@ -214,7 +214,13 @@ class SeqeraExecutor extends Executor implements ExtensionPoint { @PackageScope void computeRunResourceLabels() { final processMap = session.config.process as Map - this.runResourceLabels = Labels.toStringMap(processMap?.get('resourceLabels')) + final value = processMap?.get('resourceLabels') + if( value instanceof Closure ) { + log.debug "Skipping run-level process.resourceLabels: dynamic (closure) values are only resolved per-task" + this.runResourceLabels = Collections.emptyMap() + return + } + this.runResourceLabels = Labels.toStringMap(value) } SeqeraBatchSubmitter getBatchSubmitter() { diff --git a/plugins/nf-seqera/src/test/io/seqera/executor/SeqeraExecutorTest.groovy b/plugins/nf-seqera/src/test/io/seqera/executor/SeqeraExecutorTest.groovy index 8c66d7030f..4919d12b5c 100644 --- a/plugins/nf-seqera/src/test/io/seqera/executor/SeqeraExecutorTest.groovy +++ b/plugins/nf-seqera/src/test/io/seqera/executor/SeqeraExecutorTest.groovy @@ -175,6 +175,23 @@ class SeqeraExecutorTest extends Specification { executor.runResourceLabels == [:] } + def 'should skip run resource labels when process.resourceLabels is a closure'() { + given: + SysEnv.push([:]) + def executor = new SeqeraExecutor() + def dynamic = { [team: 'a', priority: 7] } + executor.session = Mock(Session) { + getConfig() >> [process: [resourceLabels: dynamic]] + } + + when: + executor.computeRunResourceLabels() + + then: + noExceptionThrown() + executor.runResourceLabels == [:] + } + def 'createRun populates CreateRunRequest.labels with config-level resourceLabels merged with auto-labels'() { given: SysEnv.push([:])