Write your workflow

StreamFlow relies on the Common Workflow Language (CWL) standard to describe workflows. In particular, it supports version v1.2 of the standard, which introduces conditional execution of workflow steps.

The reader is referred to the official CWL documentation to learn how the workflow description language works, as StreamFlow does not introduce any modification to the original specification.

Note

StreamFlow supports all the features required by the CWL standard conformance, and nearly all optional features, for versions v1.0, v1.1, and v1.2. For a complete overview of CWL conformance status, look here.

The following snippet contain a simple example of CWL workflow, which extracts a Java source file from a tar archive and compiles it.

cwlVersion: v1.2
class: Workflow
inputs:
  tarball: File
  name_of_file_to_extract: string

outputs:
  compiled_class:
    type: File
    outputSource: compile/classfile

steps:
  untar:
    run:
      class: CommandLineTool
      baseCommand: [tar, --extract]
      inputs:
        tarfile:
          type: File
          inputBinding:
            prefix: --file
        extractfile: string
      outputs:
        extracted_file:
          type: File
          outputBinding:
            glob: $(inputs.extractfile)
    in:
      tarfile: tarball
      extractfile: name_of_file_to_extract
    out: [extracted_file]

  compile:
    run:
      class: CommandLineTool
      baseCommand: javac
      arguments: ["-d", $(runtime.outdir)]
      inputs:
        src:
          type: File
          inputBinding:
            position: 1
      outputs:
        classfile:
          type: File
          outputBinding:
            glob: "*.class"
    in:
      src: untar/extracted_file
    out: [classfile]