Skip to content
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
1cf5326
Add seqera sched poc [ci fast]
pditommaso Jan 16, 2026
dc7b44f
fix(nf-seqera): Handle exceptions in killTask to allow proper error p…
pditommaso Jan 17, 2026
f1f28cf
Add support for machine info [ci fast]
pditommaso Jan 17, 2026
59f5b85
Add keep-alive and session handling to SeqeraBatchSubmitter [ci fast]
pditommaso Jan 18, 2026
b2aedaf
Add session name support [ci fast]
pditommaso Jan 18, 2026
b260e5a
Add requirements [ci skip]
pditommaso Jan 26, 2026
863f82d
Add settings [ci skip]
pditommaso Jan 26, 2026
9e8687e
Update docs [ci fast]
pditommaso Jan 26, 2026
0066efe
Add executor name constant and trace record test [ci fast]
pditommaso Jan 26, 2026
3226762
Merge branch 'master' into sched
pditommaso Jan 27, 2026
846b617
Add nf-seqera to distribution and fix batch submission error handling…
pditommaso Jan 27, 2026
428ddc9
Improve SeqeraBatchSubmitter error handling
pditommaso Jan 27, 2026
e4351c0
Minor change [ci skip]
pditommaso Jan 27, 2026
4e0e299
Set task error with ProcessException when Seqera task fails without e…
pditommaso Jan 28, 2026
c42de21
fix(nf-seqera): Remove @ConfigOption from machineRequirement to fix c…
fntlnz Jan 28, 2026
3499d2d
Add EBS disk support to Seqera executor [ci fast]
pditommaso Jan 29, 2026
de4bab1
Add DiskAllocation support to Seqera executor [ci fast]
pditommaso Jan 30, 2026
4b7bf4d
Add diskAllocation documentation for Seqera executor [ci skip]
pditommaso Jan 30, 2026
8a58f9f
Add container validation for Seqera executor
pditommaso Feb 4, 2026
03c801e
Add labels support to Seqera executor for cost tracking
pditommaso Feb 4, 2026
9810fcc
Fix config validation warnings for Seqera executor options [ci fast]
pditommaso Feb 5, 2026
96d06fe
Add autoLabels setting and Labels helper for Seqera executor [ci skip]
pditommaso Feb 6, 2026
0fa7dfb
Add Platform workflowId to SeqeraExecutor session labels (#6818) [ci …
pditommaso Feb 9, 2026
35c4d24
Add snapshots support to nf-seqera (#6776) [ci skip]
fntlnz Feb 11, 2026
bb13d1f
Bump sched-client:0.21.0-SNAPSHOT
pditommaso Feb 11, 2026
918356e
Merge branch 'master' into sched
pditommaso Feb 11, 2026
6b322a6
Bump groovy 4.0.30
pditommaso Feb 11, 2026
4a40b7b
[ci fast] Add inputFiles profiling and rename InputFilesComputer to I…
pditommaso Feb 12, 2026
5a79ab4
feat: Add predictionModel config to nf-seqera executor
pditommaso Feb 12, 2026
c619a70
Bump sched-client:0.23.0-SNAPSHOT [ci fast]
pditommaso Feb 12, 2026
97e250f
Lazy Seqera run creation to ensure workflowId is available [ci fast]
pditommaso Feb 13, 2026
320dd38
Sched client [ci fast]
pditommaso Feb 13, 2026
8873623
Add debug info [ci fast]
pditommaso Feb 13, 2026
e312ba9
Add granted resource getters to SeqeraTaskHandler trace record [ci fast]
pditommaso Feb 14, 2026
9d9766d
[ci fast] Fix S3 delete throwing DirectoryNotEmptyException due to ev…
pditommaso Feb 13, 2026
8918d59
Remove time [ci skip]
pditommaso Feb 14, 2026
d25747f
Revert resources retrofitting [ci fast]
pditommaso Feb 15, 2026
b7a5d7a
Fix res limits [ci fast]
pditommaso Feb 16, 2026
0355467
Add workflowUrl to Seqera executor requests
pditommaso Feb 17, 2026
a873d44
Bump sched-client to 0.28.0-SNAPSHOT [ci fast]
pditommaso Feb 17, 2026
2462991
Merge branch 'master' into sched
pditommaso Feb 18, 2026
1022018
Add support for watchUrl in trace/create endpoint [ci fast]
pditommaso Feb 18, 2026
d20fad5
Add Javadoc to SeqeraExecutor and SeqeraTaskHandler classes [ci fast]
pditommaso Feb 19, 2026
5360c21
Add taskEnvironment setting to Seqera executor config [ci fast]
pditommaso Feb 19, 2026
f52470a
[ci fast] Fix S3ObjectSummaryLookup causing unbounded pagination on l…
pditommaso Feb 19, 2026
caf9636
Add platformUrl to Seqera executor client config [ci fast]
pditommaso Feb 22, 2026
a7bb8b0
Add support for ECS AGS [ci fast]
pditommaso Feb 23, 2026
948e19b
Merge branch 'master' into sched [ci fast]
pditommaso Feb 23, 2026
29955b5
Merge branch 'master' into sched [ci fast]
pditommaso Feb 23, 2026
25cdd49
Bump version [ci fast]
pditommaso Feb 23, 2026
6320e06
Add machineTypes [ci fast]
pditommaso Feb 25, 2026
6aedf36
Add tests for logStreamId and nf-seqera auto-loading [ci fast]
pditommaso Feb 27, 2026
e3a335b
Bump sched-client 0.35.0-SNAPSHOT [ci skip]
pditommaso Feb 27, 2026
66c6ac2
Update packing.gradle [ci skip]
pditommaso Feb 27, 2026
b084b0d
Add docs migration banner (#6853)
christopher-hakkaart Feb 24, 2026
c7f7025
docs: Update migration note for plugin registry (#6702)
bentsherman Feb 24, 2026
2b05e15
Update "Working with files" docs page (#6801)
bentsherman Feb 24, 2026
5e8515b
Add note about using config settings as variables in strict syntax do…
bentsherman Feb 24, 2026
5aea38f
Fix docs banner (#6861)
christopher-hakkaart Feb 25, 2026
f4aaf0d
Report actual GCP zone in Google Batch trace records (#6855)
pditommaso Feb 25, 2026
2fd9669
docs: clarify path name for staged task inputs (#6869)
LarytheLord Feb 26, 2026
d3687d8
Add devcontainer (#6792)
PeterKneale Feb 26, 2026
e59f8a1
Fix vertical alignment in timeline report (#6794)
PeterKneale Feb 26, 2026
f4bdadc
Ensure main script is first in the WorkflowRun lineage record (#6845)
jorgee Feb 26, 2026
e02b877
Add whitespace rules to .editorconfig (#5606)
ewels Feb 26, 2026
591bcf8
docs: Update your first script to use outputs (#6500)
christopher-hakkaart Feb 26, 2026
738bcf5
Update AWS CLI install docs to bypass conda install TOS prompt (#6685)
rzelle-lallemand Feb 27, 2026
107f82d
Clarify onError and onComplete handler descriptions (#6709) [ci fast]
colinbrislawn Feb 27, 2026
e090c57
Use explicit memory units for LSF executor (#5217)
bentsherman Feb 27, 2026
9c9a3ae
Treat LSF job status UNKWN as HOLD (#5756)
bentsherman Feb 27, 2026
ef6c99f
Allow boolean params to implicitly default to false (#6764)
bentsherman Feb 27, 2026
6e5bf3d
Minor change [ci fast]
pditommaso Feb 27, 2026
363012c
Move seqera config section to alphabetical order [ci skip]
pditommaso Feb 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
26.01.1-edge
26.02.0-edge
75 changes: 75 additions & 0 deletions docs/executor.md
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,81 @@ Resource requests and other job characteristics can be controlled via the follow
- {ref}`process-queue`
- {ref}`process-time`

(seqera-executor)=

## Seqera

:::{versionadded} 26.04.0
:::

:::{warning}
*Preview feature: may change in a future release.*
:::

The `seqera` executor allows you to run your pipeline using the [Seqera](https://seqera.io) cloud infrastructure. It enables the seamless execution of Nextflow pipelines by offloading process executions to the Seqera scheduler service.

The pipeline processes must specify the Docker image to use by defining the `container` directive, either in the pipeline script or the `nextflow.config` file. Additionally, an S3 bucket must be used as the pipeline work directory.

To enable this executor, set `process.executor = 'seqera'` in the `nextflow.config` file.

Resource requests and other job characteristics can be controlled via the following process directives:

- {ref}`process-arch`
- {ref}`process-container`
- {ref}`process-containerOptions`
- {ref}`process-cpus`
- {ref}`process-disk`
- {ref}`process-memory`
- {ref}`process-time`

### Disk support

When the {ref}`process-disk` directive is specified, the Seqera executor provisions storage for the task container. There are two disk allocation strategies:

- **task** (default): A dedicated EBS volume is created for each task at launch time. This provides isolated, high-performance storage with configurable volume type, IOPS, throughput, and encryption.

- **node**: Uses the instance storage attached at the cluster level. This is shared across tasks running on the same node and does not support EBS-specific options.

#### Task allocation (EBS volumes)

By default, a gp3 volume with 325 MiB/s throughput is used (Fusion recommended settings). You can customize the EBS volume configuration:

```groovy
seqera {
executor {
machineRequirement {
diskAllocation = 'task' // Per-task EBS volume (default)
diskType = 'ebs/io1' // Use provisioned IOPS SSD
diskIops = 10000 // Required for io1/io2
diskThroughputMiBps = 500 // Throughput for gp3 volumes
diskEncrypted = true // Enable KMS encryption
}
}
}
```

Supported volume types: `ebs/gp3` (default), `ebs/gp2`, `ebs/io1`, `ebs/io2`, `ebs/st1`, `ebs/sc1`.

#### Node allocation (instance storage)

To use instance storage instead of per-task EBS volumes:

```groovy
seqera {
executor {
machineRequirement {
diskAllocation = 'node' // Use instance storage
}
}
}
```

:::{note}
When using `node` allocation, the EBS-specific options (`diskType`, `diskIops`, `diskThroughputMiBps`, `diskEncrypted`) are not applicable and will cause an error if specified.
:::

See the {ref}`seqera scope <config-seqera>` for the available configuration options.

(slurm-executor)=

## SLURM
Expand Down
76 changes: 76 additions & 0 deletions docs/reference/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -1487,6 +1487,82 @@ The following settings are available:
`singularity.runOptions`
: Specify extra command line options supported by `singularity exec`.

(config-seqera)=

## `seqera`

:::{versionadded} 26.04.0
:::

:::{warning}
*Preview feature: may change in a future release.*
:::

The `seqera` scope allows you to configure the interactions with Seqera services.

### `executor`

The `seqera.executor` scope configures the Seqera scheduler service for the {ref}`seqera-executor`.

The following settings are available:

`seqera.executor.endpoint`
: The Seqera scheduler service endpoint URL (required).

`seqera.executor.region`
: The AWS region for task execution (default: `'eu-central-1'`).

`seqera.executor.autoLabels`
: When `true`, automatically adds workflow metadata labels to the session with the `nextflow.io/` prefix (default: `false`). The following labels are added: `projectName`, `userName`, `runName`, `sessionId`, `resume`, `revision`, `commitId`, `repository`, `manifestName`, `runtimeVersion`. A `seqera.io/runId` label is also added, computed as a SipHash of the session ID and run name.

`seqera.executor.labels`
: Custom labels to apply to AWS resources for cost tracking and resource organization. Labels are propagated to ECS tasks, capacity providers, and EC2 instances. When used together with `autoLabels`, user-defined labels take precedence over auto-generated labels.

`seqera.executor.machineRequirement.arch`
: The CPU architecture for task execution, e.g. `'x86_64'` or `'arm64'`.

`seqera.executor.machineRequirement.provisioning`
: The instance provisioning mode. Can be `'spot'`, `'ondemand'`, or `'spotFirst'`.

`seqera.executor.machineRequirement.maxSpotAttempts`
: The maximum number of spot retry attempts before falling back to on-demand. Only used when `provisioning` is `'spot'` or `'spotFirst'`.

`seqera.executor.machineRequirement.machineFamilies`
: List of acceptable EC2 instance families, e.g. `['m5', 'c5', 'r5']`.

`seqera.executor.machineRequirement.diskAllocation`
: The disk allocation strategy. Can be `'task'` (default) for per-task EBS volumes, or `'node'` for per-node instance storage. When using `'node'` allocation, EBS-specific options (`diskType`, `diskIops`, `diskThroughputMiBps`, `diskEncrypted`) are not applicable.

`seqera.executor.machineRequirement.diskType`
: The EBS volume type for task scratch disk. Supported types: `'ebs/gp3'` (default), `'ebs/gp2'`, `'ebs/io1'`, `'ebs/io2'`, `'ebs/st1'`, `'ebs/sc1'`. Only applicable when `diskAllocation` is `'task'`.

`seqera.executor.machineRequirement.diskThroughputMiBps`
: The throughput in MiB/s for gp3 volumes (125-1000). Default: `325` (Fusion recommended). Only applicable when `diskAllocation` is `'task'`.

`seqera.executor.machineRequirement.diskIops`
: The IOPS for io1/io2/gp3 volumes. Required for io1/io2 volume types. Only applicable when `diskAllocation` is `'task'`.

`seqera.executor.machineRequirement.diskEncrypted`
: Enable KMS encryption for the EBS volume (default: `false`). Only applicable when `diskAllocation` is `'task'`.

`seqera.executor.taskEnvironment`
: Custom environment variables to apply to all tasks submitted by the Seqera executor. These are merged with the Fusion environment variables, with Fusion variables taking precedence. For example: `taskEnvironment = [MY_VAR: 'value']`.

`seqera.executor.retryPolicy.delay`
: The initial delay when a failing HTTP request is retried (default: `'450ms'`).

`seqera.executor.retryPolicy.maxDelay`
: The maximum delay when a failing HTTP request is retried (default: `'90s'`).

`seqera.executor.retryPolicy.maxAttempts`
: The maximum number of retry attempts (default: `10`).

`seqera.executor.retryPolicy.jitter`
: The jitter factor for randomizing retry delays (default: `0.25`).

`seqera.executor.retryPolicy.multiplier`
: The multiplier for exponential backoff (default: `2.0`).

(config-spack)=

## `spack`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ import groovy.transform.ToString
import nextflow.util.MemoryUnit

/**
* Models disk resource request
*
* Models disk resource request with support for cloud-specific options.
*
* @author Ben Sherman <bentshermann@gmail.com>
* @author Paolo Di Tommaso <paolo.ditommaso@gmail.com>
*/
@ToString(includeNames = true, includePackage = false)
@CompileStatic
Expand All @@ -33,6 +34,11 @@ class DiskResource {

final MemoryUnit request
final String type
final Integer iops
final Integer throughput
final Boolean encrypted
final String filesystem
final String mountPath

DiskResource( value ) {
this(request: value)
Expand All @@ -43,10 +49,28 @@ class DiskResource {

if( opts.type )
this.type = opts.type as String
if( opts.iops )
this.iops = opts.iops as Integer
if( opts.throughput )
this.throughput = opts.throughput as Integer
if( opts.encrypted != null )
this.encrypted = opts.encrypted as Boolean
if( opts.filesystem )
this.filesystem = opts.filesystem as String
if( opts.mountPath )
this.mountPath = opts.mountPath as String
}

DiskResource withRequest(MemoryUnit value) {
return new DiskResource(request: value, type: this.type)
return new DiskResource(
request: value,
type: this.type,
iops: this.iops,
throughput: this.throughput,
encrypted: this.encrypted,
filesystem: this.filesystem,
mountPath: this.mountPath
)
}

private static MemoryUnit toMemoryUnit( value ) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2013-2025, Seqera Labs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package nextflow.script

import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString

/**
* Models Seqera Platform metadata for Nextflow execution
*
* @author Paolo Di Tommaso <paolo.ditommaso@gmail.com>
*/
@CompileStatic
@ToString(includeNames = true, includePackage = false)
@EqualsAndHashCode
class PlatformMetadata {

/**
* Volatile because it is written by TowerClient.onFlowCreate on the main thread
* and read by SeqeraExecutor.createRun on the executor thread.
*/
volatile String workflowId

/**
* The Platform watch URL for the current workflow execution.
* Set by TowerClient.onFlowBegin and read by SeqeraExecutor.createRun.
*/
volatile String workflowUrl

PlatformMetadata() {}

PlatformMetadata(String workflowId) {
this.workflowId = workflowId
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import nextflow.exception.WorkflowScriptErrorException
import nextflow.trace.WorkflowStats
import nextflow.util.Duration
import nextflow.util.TestOnly
import org.codehaus.groovy.runtime.InvokerHelper
/**
* Models workflow metadata properties and notification handler
*
Expand Down Expand Up @@ -218,6 +217,12 @@ class WorkflowMetadata {
*/
FusionMetadata fusion

/**
* Metadata specific to Seqera Platform, including:
* <li>workflowId: the Platform-assigned workflow identifier
*/
PlatformMetadata platform

/**
* The list of files that concurred to create the config object
*/
Expand Down Expand Up @@ -497,4 +502,14 @@ class WorkflowMetadata {
session.statsObserver.getStats()
}

PlatformMetadata getPlatform() {
if( platform!=null )
return platform
synchronized (this) {
if( platform!=null )
return platform
platform = new PlatformMetadata()
}
return platform
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ class TraceRecord implements Serializable {
transient private CloudMachineInfo machineInfo
transient private ContainerMeta containerMeta
transient private Integer numSpotInterruptions
transient private String logStreamId

/**
* Convert the given value to a string
Expand Down Expand Up @@ -622,6 +623,14 @@ class TraceRecord implements Serializable {
this.numSpotInterruptions = numSpotInterruptions
}

String getLogStreamId() {
return logStreamId
}

void setLogStreamId(String logStreamId) {
this.logStreamId = logStreamId
}

ContainerMeta getContainerMeta() {
return containerMeta
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ nf-codecommit@0.5.0
nf-console@1.3.0
nf-google@1.26.0
nf-k8s@1.5.0
nf-seqera@0.6.0
nf-tower@1.20.0
nf-wave@1.18.0
Loading
Loading