add nextflow d30e48d

This commit is contained in:
2026-04-29 23:01:54 +02:00
parent d0b12d668d
commit 97cc9058d3
2840 changed files with 730250 additions and 0 deletions

View File

@@ -0,0 +1 @@
nextflow-merged.mmd

View File

@@ -0,0 +1,17 @@
# Class Diagrams
This directory contains class diagrams of the Nextflow source code, abridged and annotated for relevance and ease of use.
Each node is a class. Fields are selectively documented in order to show only core data structures and the classes that "own" them. Methods are not explicitly documented, but they are mentioned in certain links where appropriate.
Links between classes denote one of the following relationships:
- Inheritance (`A <|-- B`): `B` is a subclass of `A`
- Composition (`A --* B`): `A` contains `B`
- Instantiation (`A --> B : f`): `A` creates instance(s) of `B` at runtime via `A::f()`
Some links are commented out or not included at all, in order to focus on the most important classes and relationships. You can view these "hidden" links by simply uncommenting them, but I have found that their significance is sufficiently clear from the description files.
A separate diagram description is provided for each package. These files are interoperable, which means that you can combine any subset of files into a larger diagram description. The `merge-diagrams.sh` can create a merged file for you automatically, and it includes a sensible default set of packages.
You can use the [Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor/edit) or the [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) to render the diagram in a variety of image formats.

View File

@@ -0,0 +1,35 @@
#!/bin/bash
packages=()
packages+=("nextflow")
# packages+=("nextflow.ast")
packages+=("nextflow.cache")
packages+=("nextflow.cli")
# packages+=("nextflow.cloud.aws")
# packages+=("nextflow.cloud.aws.nio")
# packages+=("nextflow.cloud.azure")
# packages+=("nextflow.cloud.google")
packages+=("nextflow.config")
# packages+=("nextflow.container")
packages+=("nextflow.dag")
# packages+=("nextflow.executor")
# packages+=("nextflow.extension")
# packages+=("nextflow.ga4gh")
# packages+=("nextflow.k8s")
# packages+=("nextflow.plugin")
packages+=("nextflow.processor")
# packages+=("nextflow.scm")
packages+=("nextflow.script")
# packages+=("nextflow.secret")
# packages+=("nextflow.trace")
outfile="nextflow-merged.mmd"
echo "classDiagram" > ${outfile}
for package in "${packages[@]}"; do
echo "${package}"
tail -n +2 "${package}.mmd" >> ${outfile}
echo >> ${outfile}
done

View File

@@ -0,0 +1,7 @@
classDiagram
%%
%% nextflow.ast
%%
ScriptParser --> NextflowDSLImpl : parse
ScriptParser --> NextflowXformImpl : parse
ScriptParser --> OpXformImpl : parse

View File

@@ -0,0 +1,22 @@
classDiagram
%%
%% nextflow.cache
%%
Session --* CacheDB
CacheDB --* CacheStore
CacheStore <|-- DefaultCacheStore
CacheStore <|-- CloudCacheStore
class DefaultCacheStore {
uniqueId : UUID
runName : String
baseDir : Path
}
class CloudCacheStore {
uniqueId : UUID
runName : String
basePath : Path
}

View File

@@ -0,0 +1,29 @@
classDiagram
%%
%% nextflow.cli
%%
class Launcher {
cliOptions : CliOptions
command : CmdBase
}
Launcher --* CliOptions
Launcher --* CmdBase
%% CmdBase <|-- CmdClean
%% CmdBase <|-- CmdClone
%% CmdBase <|-- CmdConfig
CmdBase <|-- CmdConsole
%% CmdBase <|-- CmdDrop
%% CmdBase <|-- CmdFs
CmdBase <|-- CmdHelp
CmdBase <|-- CmdInfo
%% CmdBase <|-- CmdKubeRun
%% CmdBase <|-- CmdList
%% CmdBase <|-- CmdLog
%% CmdBase <|-- CmdNode
%% CmdBase <|-- CmdPlugin
%% CmdBase <|-- CmdPull
CmdBase <|-- CmdRun
%% CmdBase <|-- CmdSecret
%% CmdBase <|-- CmdSelfUpdate
%% CmdBase <|-- CmdView

View File

@@ -0,0 +1,21 @@
classDiagram
%%
%% nextflow.cloud.aws
%%
Executor <|-- AwsBatchExecutor
TaskHandler <|-- AwsBatchTaskHandler
BashWrapperBuilder <|-- AwsBatchScriptLauncher
AwsBatchExecutor --* AwsOptions
AwsOptions --* AwsConfig
AwsConfig --* AwsBatchConfig
AwsConfig --* AwsS3Config
AwsBatchExecutor --> ParallelPollingMonitor : init
AwsBatchExecutor --> AwsBatchTaskHandler : submit
AwsBatchTaskHandler --> AwsBatchScriptLauncher : submit
%% TaskPollingMonitor <|-- ParallelPollingMonitor
SimpleFileCopyStrategy <|-- AwsBatchFileCopyStrategy
AwsBatchScriptLauncher --* AwsBatchFileCopyStrategy

View File

@@ -0,0 +1,33 @@
classDiagram
%%
%% nextflow.cloud.aws.nio
%%
FileSystemProvider <|-- S3FileSystemProvider
S3FileSystemProvider --> S3FileSystem : newFileSystem
class S3FileSystem {
client : S3Client
endpoint : String
}
S3FileSystem --* S3Client
class S3Client {
client : AmazonS3
cannedAcl : CannedAccessControlList
kmsKeyId : String
storageEncryption : SSEAlgorithm
transferManager : TransferManager
transferPool : ExecutorService
uploadChunkSize : Long
uploadMaxThreads : Integer
}
Path <|-- S3Path
class S3Path {
bucket : String
parts : List~String~
fileSystem : S3FileSystem
}
S3Path --* S3FileSystem

View File

@@ -0,0 +1,17 @@
classDiagram
%%
%% nextflow.cloud.azure
%%
Executor <|-- AzBatchExecutor
TaskHandler <|-- AzBatchTaskHandler
BashWrapperBuilder <|-- AzBatchScriptLauncher
AzBatchExecutor --* AzConfig
AzBatchExecutor --> AzBatchService : register
AzBatchExecutor --> TaskPollingMonitor : init
AzBatchExecutor --> AzBatchTaskHandler : submit
AzBatchTaskHandler --> AzBatchScriptLauncher : submit
SimpleFileCopyStrategy <|-- AzFileCopyStrategy
AzBatchScriptLauncher --* AzFileCopyStrategy

View File

@@ -0,0 +1,13 @@
classDiagram
%%
%% nextflow.cloud.google
%%
Executor <|-- GoogleBatchExecutor
TaskHandler <|-- GoogleBatchTaskHandler
BashWrapperBuilder <|-- GoogleBatchScriptLauncher
GoogleBatchExecutor --* BatchConfig
GoogleBatchExecutor --> TaskPollingMonitor : init
GoogleBatchExecutor --> GoogleBatchTaskHandler : submit
GoogleBatchTaskHandler --> GoogleBatchScriptLauncher : submit

View File

@@ -0,0 +1,7 @@
classDiagram
%%
%% nextflow.config
%%
Session --* ConfigMap
CmdRun --> ConfigBuilder : run
ConfigBuilder --> ConfigMap : build

View File

@@ -0,0 +1,16 @@
classDiagram
%%
%% nextflow.container
%%
direction LR
BashWrapperBuilder --> ContainerBuilder : build
ContainerBuilder <|-- CharliecloudBuilder
ContainerBuilder <|-- DockerBuilder
ContainerBuilder <|-- PodmanBuilder
ContainerBuilder <|-- ShifterBuilder
ContainerBuilder <|-- SingularityBuilder
ContainerBuilder <|-- UdockerBuilder
SingularityBuilder <|-- ApptainerBuilder

View File

@@ -0,0 +1,33 @@
classDiagram
%%
%% nextflow.dag
%%
Session --* DAG
class DAG {
vertices : List~Vertex~
edges : List~Edge~
}
DAG "1" --* "*" Vertex
DAG "1" --* "*" Edge
class Vertex {
label : String
type : Type
operators : List~DataflowProcessor~
process : TaskProcessor
}
class Edge {
channel : Object
from : Vertex
to : Vertex
label : String
}
%% DagRenderer <|-- CytoscapeHtmlRenderer
%% DagRenderer <|-- CytoscapeJsRenderer
%% DagRenderer <|-- DotRenderer
%% DagRenderer <|-- GexfRenderer
%% DagRenderer <|-- GraphvizRenderer
%% DagRenderer <|-- MermaidRenderer

View File

@@ -0,0 +1,66 @@
classDiagram
%%
%% nextflow.executor
%%
ExecutorFactory --> Executor : getExecutor
class Executor {
name : String
monitor : TaskMonitor
}
Executor --* TaskMonitor
Executor --> TaskHandler : submit
TaskMonitor <|-- TaskPollingMonitor
class TaskPollingMonitor {
capacity : int
submitRateLimit : RateLimiter
pollIntervalMillis : long
dumpInterval : Duration
}
TaskPollingMonitor <|-- LocalPollingMonitor
class LocalPollingMonitor {
maxCpus : int
maxMemory : long
}
Executor <|-- AbstractGridExecutor
Executor <|-- LocalExecutor
%% Executor <|-- NopeExecutor
%% AbstractGridExecutor <|-- CondorExecutor
%% AbstractGridExecutor <|-- HyperQueueExecutor
%% AbstractGridExecutor <|-- LsfExecutor
%% AbstractGridExecutor <|-- MoabExecutor
%% AbstractGridExecutor <|-- NqsiiExecutor
%% AbstractGridExecutor <|-- OarExecutor
%% AbstractGridExecutor <|-- PbsExecutor
%% AbstractGridExecutor <|-- SgeExecutor
%% AbstractGridExecutor <|-- SlurmExecutor
%% PbsExecutor <|-- PbsProExecutor
%% SgeExecutor <|-- CrgExecutor
%% TaskHandler <|-- CachedTaskHandler
TaskHandler <|-- GridTaskHandler
TaskHandler <|-- LocalTaskHandler
TaskHandler <|-- NativeTaskHandler
%% TaskHandler <|-- NopeTaskHandler
%% TaskHandler <|-- StoredTaskHandler
class BashWrapperBuilder {
bean : TaskBean
copyStrategy : ScriptFileCopyStrategy
}
BashWrapperBuilder --* TaskBean
BashWrapperBuilder --* ScriptFileCopyStrategy
ScriptFileCopyStrategy <|-- SimpleFileCopyStrategy
class SimpleFileCopyStrategy {
stageinMode : String
stageoutMode : String
targetDir : Path
workDir : Path
}

View File

@@ -0,0 +1,30 @@
classDiagram
%%
%% nextflow.extension
%%
direction LR
ChannelEx --> DumpOp : dump
Nextflow --> GroupKey : groupKey
OperatorImpl --> BranchOp : branch
OperatorImpl --> BufferOp : buffer
OperatorImpl --> CollectFileOp : collectFile
OperatorImpl --> CollectOp : collect
OperatorImpl --> CombineOp : combine
OperatorImpl --> ConcatOp : concat
OperatorImpl --> CrossOp : cross
OperatorImpl --> GroupTupleOp : groupTuple
OperatorImpl --> JoinOp : join
OperatorImpl --> MapOp : map
OperatorImpl --> MergeOp : merge
OperatorImpl --> MixOp : mix
OperatorImpl --> MultiMapOp : multiMap
OperatorImpl --> RandomSampleOp : randomSample
OperatorImpl --> SplitOp : splitCsv, splitFasta, splitFastq, splitText
OperatorImpl --> TakeOp : take
OperatorImpl --> ToListOp : toList, toSortedList
OperatorImpl --> TransposeOp : transpose
OperatorImpl --> UntilOp : until
WorkflowBinding --> OpCall : invokeMethod

View File

@@ -0,0 +1,14 @@
classDiagram
%%
%% nextflow.ga4gh
%%
Executor <|-- TesExecutor
%% TaskHandler <|-- TesTaskHandler
%% BashWrapperBuilder <|-- TesBashBuilder
TesExecutor --> TaskPollingMonitor : init
TesExecutor --> TesTaskHandler : submit
TesTaskHandler --> TesBashBuilder : submit
%% ScriptFileCopyStrategy <|-- TesFileCopyStrategy
TesBashBuilder --* TesFileCopyStrategy

View File

@@ -0,0 +1,57 @@
classDiagram
%%
%% nextflow.k8s
%%
Executor <|-- K8sExecutor
TaskHandler <|-- K8sTaskHandler
BashWrapperBuilder <|-- K8sWrapperBuilder
K8sExecutor --> TaskPollingMonitor : init
K8sExecutor --> K8sTaskHandler : submit
K8sExecutor --* K8sClient
K8sTaskHandler --> K8sWrapperBuilder : submit
CmdKubeRun --> K8sDriverLauncher : run
class K8sDriverLauncher {
args : List~String~
cmd : CmdKubeRun
config : ConfigObject
configMapName : String
headCpus : int
headImage : String
headMemory : String
headPreScript : String
paramsFile : String
pipelineName : String
runName : String
}
K8sDriverLauncher --* K8sClient
K8sDriverLauncher --* K8sConfig
K8sClient --* ClientConfig
%% ConfigDiscovery --> ClientConfig : discover
class K8sConfig {
target : Map
podOptions : PodOptions
}
K8sConfig --* PodOptions
class PodOptions {
affinity : Map
annotations : Map
automountServiceAccountToken : boolean
configMaps : Collection~PodMountConfig~
envVars : Collection~PodEnv~
imagePullPolicy : String
imagePullSecret : String
labels : Map
nodeSelector : PodNodeSelector
priorityClassName : String
privileged : Boolean
secrets : Collection~PodMountSecret~
securityContext : PodSecurityContext
tolerations : List~Map~
volumeClaims : Collection~PodVolumeClaim~
}

View File

@@ -0,0 +1,21 @@
classDiagram
%%
%% nextflow
%%
class Nextflow
class Channel
class Session {
baseDir : Path
binding : ScriptBinding
cache : CacheDB
commandLine : String
commitId : String
config : Map
configFiles : List~Path~
dag : DAG
profile : String
runName : String
script : BaseScript
uniqueId : UUID
workDir : Path
}

View File

@@ -0,0 +1,14 @@
classDiagram
%%
%% nextflow.plugin
%%
CmdRun --> Plugins : run
Plugins --> PluginsFacade : init
PluginsFacade "1" --> "*" PluginRef : load
class PluginRef {
id : String
version : String
}

View File

@@ -0,0 +1,44 @@
classDiagram
%%
%% nextflow.processor
%%
%% ProcessDef --> TaskProcessor : run
class TaskProcessor {
config : ProcessConfig
executor : Executor
id : int
name : String
operator : DataflowProcessor
taskBody : BodyDef
}
TaskProcessor --> TaskRun : invokeTask
TaskProcessor --> PublishDir : finalizeTask
class TaskRun {
config : TaskConfig
context : TaskContext
hash : HashCode
id : TaskId
index : int
inputs : Map
name : String
outputs : Map
runType : RunType
type : ScriptType
workDir : Path
}
TaskRun --* TaskConfig
TaskRun --* TaskContext
TaskRun --> TaskBean : toTaskBean
class TaskConfig {
target : Map
binding : Map
}
class TaskContext {
holder : Map
script : Script
name : String
}

View File

@@ -0,0 +1,65 @@
classDiagram
%%
%% nextflow.scm
%%
direction LR
CmdRun --> AssetManager : run
class AssetManager {
project : String
mainScript : String
provider : RepositoryProvider
strategy : RepositoryStrategy
hub : String
providerConfigs : List~ProviderConfig~
}
class RepositoryStrategyType {
<<enumeration>>
LEGACY
MULTI_REVISION
}
AssetManager --> RepositoryStrategyType
AssetManager "1" --o "1" RepositoryStrategy
AssetManager "1" --o "1" RepositoryProvider
AssetManager "1" --* "*" ProviderConfig
class RepositoryStrategy {
<<interface>>
}
class AbstractRepositoryStrategy {
<<abstract>>
project : String
provider : RepositoryProvider
root : File
}
class LegacyRepositoryStrategy {
localPath : File
}
class MultiRevisionRepositoryStrategy {
revision : String
bareRepo : File
commitPath : File
revisionSubdir : File
}
RepositoryStrategy <|-- AbstractRepositoryStrategy
AbstractRepositoryStrategy <|-- LegacyRepositoryStrategy
AbstractRepositoryStrategy <|-- MultiRevisionRepositoryStrategy
class RepositoryProvider {
<<abstract>>
}
RepositoryStrategy --> RepositoryProvider
RepositoryProvider <|-- AzureRepositoryProvider
RepositoryProvider <|-- BitbucketRepositoryProvider
RepositoryProvider <|-- BitbucketServerRepositoryProvider
RepositoryProvider <|-- GiteaRepositoryProvider
RepositoryProvider <|-- GithubRepositoryProvider
RepositoryProvider <|-- GitlabRepositoryProvider
RepositoryProvider <|-- LocalRepositoryProvider

View File

@@ -0,0 +1,130 @@
classDiagram
%%
%% nextflow.script
%%
CmdRun --> ScriptRunner : run
class ScriptRunner {
scriptFile : ScriptFile
session : Session
}
ScriptRunner --* ScriptFile
ScriptRunner --> ScriptParser : execute
ScriptParser --> BaseScript : parse
class ScriptFile {
source : Path
main : Path
repository : String
revisionInfo : AssetManager.RevisionInfo
localPath : Path
projectName : String
}
class BaseScript {
meta : ScriptMeta
entryFlow : WorkflowDef
}
BaseScript --* ScriptBinding
BaseScript --* ScriptMeta
BaseScript --> IncludeDef : include
IncludeDef --> ScriptParser : load0
class ScriptBinding {
scriptPath : Path
args : List~String~
params : ParamsMap
configEnv : Map
entryName : String
}
class ScriptMeta {
scriptPath : Path
definitions : Map
imports : Map
module : boolean
}
ScriptMeta "1" --* "*" ComponentDef : definitions
ScriptMeta "1" --* "*" ComponentDef : imports
ComponentDef <|-- FunctionDef
ComponentDef <|-- ProcessDef
ComponentDef <|-- WorkflowDef
class FunctionDef {
target : Object
name : String
alias : String
}
class ProcessDef {
processName : String
simpleName : String
baseName : String
rawBody : Closure~BodyDef~
}
ProcessDef --* ProcessConfig
ProcessDef --* BodyDef
ProcessDef --* ChannelOut
class WorkflowDef {
name : String
body : BodyDef
declaredInputs : List~String~
declaredOutputs : List~String~
variableNames : Set~String~
}
WorkflowDef --* BodyDef
WorkflowDef --* WorkflowBinding
WorkflowDef --* ChannelOut
class ProcessConfig {
configProperties : Map
inputs : InputsList
outputs : OutputsList
}
ProcessConfig --* InputsList
ProcessConfig --* OutputsList
class BodyDef {
closure : Closure
source : String
type : ScriptType
isShell : boolean
}
class ChannelOut {
target : List~DataflowWriteChannel~
channels : Map
}
class WorkflowBinding {
vars : Map
}
class InputsList {
target : List~InParam~
}
InputsList "1" --* "*" InParam
class OutputsList {
target : List~OutParam~
}
OutputsList "1" --* "*" OutParam
%% InParam <|-- BaseInParam
%% BaseInParam <|-- EachInParam
%% BaseInParam <|-- EnvInParam
%% BaseInParam <|-- FileInParam
%% BaseInParam <|-- StdInParam
%% BaseInParam <|-- TupleInParam
%% BaseInParam <|-- ValueInParam
%% OutParam <|-- BaseOutParam
%% BaseOutParam <|-- EachOutParam
%% BaseOutParam <|-- EnvOutParam
%% BaseOutParam <|-- FileOutParam
%% BaseOutParam <|-- StdOutParam
%% BaseOutParam <|-- TupleOutParam
%% BaseOutParam <|-- ValueOutParam

View File

@@ -0,0 +1,12 @@
classDiagram
%%
%% nextflow.secret
%%
ConfigBuilder --> SecretsLoader : build
BaseScript --> SecretsLoader : run
BashWrapperBuilder --> SecretsLoader : build
SecretsLoader --> SecretsProvider : load
SecretsProvider --> Secret : getSecret
SecretsProvider <|-- LocalSecretsProvider
Secret <|-- SecretImpl

View File

@@ -0,0 +1,13 @@
classDiagram
%%
%% nextflow.trace
%%
Session --> TraceObserverFactory : init
TraceObserverFactory "1" --> "*" TraceObserver : create
TraceObserver <|-- AnsiLogObserver
TraceObserver <|-- GraphObserver
TraceObserver <|-- ReportObserver
TraceObserver <|-- TimelineObserver
TraceObserver <|-- TraceFileObserver
TraceObserver <|-- WorkflowStatsObserver

View File

@@ -0,0 +1,69 @@
flowchart TB
subgraph Launcher
subgraph CmdRun
subgraph AssetManager
ScriptFile
end
subgraph ConfigBuilder
ConfigParser([ConfigParser])
ConfigBase([ConfigBase])
end
subgraph ScriptRunner
subgraph Session
ConfigMap
DAG
ExecutorFactory([ExecutorFactory])
subgraph TaskProcessor
TaskRun
end
subgraph Executor
subgraph TaskMonitor
TaskHandler
end
TaskBean
BashWrapperBuilder([BashWrapperBuilder])
end
TraceRecord
CacheFactory([CacheFactory])
CacheDB
TraceObserver([TraceObserver])
end
ScriptParser([ScriptParser])
BaseScript([BaseScript])
subgraph ScriptMeta
WorkflowDef([WorkflowDef])
ProcessDef([ProcessDef])
FunctionDef([FunctionDef])
end
IncludeDef([IncludeDef])
OpCall([OpCall])
end
ConfigParser --> ConfigBase
ConfigBase --> ConfigMap
ScriptFile --> ScriptParser
ScriptParser --> BaseScript
BaseScript --> WorkflowDef
BaseScript --> ProcessDef
BaseScript --> FunctionDef
BaseScript --> IncludeDef
IncludeDef --> ScriptParser
WorkflowDef --> OpCall
OpCall --> DAG
ProcessDef --> DAG
DAG --> TaskRun
TaskRun --> DAG
ExecutorFactory --> Executor
ConfigMap --> Executor
ProcessDef --> TaskProcessor
ConfigMap --> TaskProcessor
TaskRun --> TaskHandler
TaskRun --> TaskBean
TaskBean --> BashWrapperBuilder
BashWrapperBuilder --> TaskHandler
CacheFactory --> CacheDB
TaskHandler --> CacheDB
TaskHandler --> TraceRecord
TraceRecord --> CacheDB
TaskHandler --> TraceObserver
end
end