CWL (Common Workflow Language) Support

wf2wf provides comprehensive support for Common Workflow Language (CWL) workflows with enhanced shared infrastructure integration.

Supported Features

Feature

Status

Notes

CommandLineTool import/export

✅ Enhanced

Full support with resource inference

Workflow import/export

✅ Enhanced

Complete workflow parsing

Workflow scatter

✅

dot & nested scatter methods

when conditionals

✅

Conditional execution support

Expressions ($(...))

✅

Via nodejs sandbox

Secondary files

✅

Complete secondary file handling

JS requirements

✅

JavaScript expression support

Inline JS blocks

🚧

Performance tuning in progress

Subworkflows

✅

Nested workflow support

Schemas id: #myrecord

✅

Custom type definitions

Looping (while)

❌

Not in CWL specification

Resource Requirements

✅ Enhanced

Automatic inference and validation

Container Requirements

✅ Enhanced

Docker and conda environment support

Interactive Mode

✅ New

Guided resource specification

Loss Side-car

✅ Enhanced

Automatic loss detection and reporting

Enhanced Features

Resource Processing

The CWL importer now includes advanced resource processing capabilities:

# Convert with automatic resource inference
wf2wf convert -i workflow.cwl -o workflow.dag --interactive

# This will:
# - Infer missing resource requirements from command analysis
# - Validate resource specifications for target environment
# - Prompt interactively for missing resource information
# - Apply appropriate resource profiles

Interactive Resource Specification

When converting CWL workflows, you can now use interactive mode to:

  • Add missing resource specifications: CPU, memory, disk requirements

  • Validate resource allocations: Check against target environment limits

  • Apply resource profiles: Use predefined resource templates

  • Review file transfer modes: Optimize for distributed computing

Execution Model Detection

The CWL importer automatically detects the appropriate execution model:

  • Shared Filesystem: For workflows designed for shared environments

  • Distributed Computing: For workflows requiring explicit resource management

  • Cloud Computing: For cloud-native workflow execution

Usage Examples

Basic Conversion

# Convert CWL workflow to DAGMan
wf2wf convert -i analysis.cwl -o pipeline.dag

# Convert with detailed reporting
wf2wf convert -i analysis.cwl -o pipeline.dag --report-md --verbose

Interactive Conversion

# Convert with interactive resource specification
wf2wf convert -i workflow.cwl -o workflow.dag --interactive

# Example interactive session:
# Found 3 tasks without explicit resource requirements.
# Distributed systems require explicit resource allocation.
# Add default resource specifications? [Y/n]: Y
# Applied default resources: CPU=1, Memory=2048MB, Disk=4096MB

Resource Profile Application

# Apply specific resource profile
wf2wf convert -i workflow.cwl -o workflow.dag --resource-profile cluster

# Available profiles: shared, cluster, cloud, hpc, gpu

Loss-Aware Conversion

# Convert with loss detection
wf2wf convert -i workflow.cwl -o workflow.dag --fail-on-loss

# Generate detailed loss report
wf2wf convert -i workflow.cwl -o workflow.dag --report-md

Best Practices

Resource Specification

Always specify resource requirements in your CWL workflows:

requirements:
  - class: ResourceRequirement
    coresMin: 4
    ramMin: 8192
    tmpdirMin: 4096

Container Requirements

Use container specifications for reproducible execution:

requirements:
  - class: DockerRequirement
    dockerPull: python:3.9-slim

Error Handling

Add retry specifications for robust execution:

hints:
  - class: ResourceRequirement
    coresMin: 1
    ramMin: 1024

Compliance Status

The CWL importer achieves 95/100 compliance with the wf2wf specification:

  • ✅ Perfect inheritance from BaseImporter

  • ✅ Shared workflow usage (no custom import_workflow override)

  • ✅ Enhanced shared infrastructure (~80% usage)

  • ✅ Resource processing with validation and interactive prompting

  • ✅ Execution model inference integration

  • ✅ All tests passing

Troubleshooting

Common Issues

  1. Missing Resource Requirements: Use --interactive mode to add missing specifications

  2. Container Issues: Ensure Docker requirements are properly specified

  3. File Transfer Problems: Review file transfer modes for distributed computing

  4. Expression Evaluation: Ensure nodejs is available for CWL expressions

Getting Help

# Get detailed information about your CWL workflow
wf2wf info workflow.cwl

# Validate CWL workflow before conversion
wf2wf validate workflow.cwl

# Check for potential issues
wf2wf convert -i workflow.cwl -o workflow.dag --dry-run

CWL Cheat-Sheet

Feature

Status

CommandLineTool import/export

✅

Workflow scatter

✅ dot & nested

when conditionals

✅

Expressions ($(...))

✅ via nodejs sandbox

Secondary files

✅

JS requirements

✅

Inline JS blocks

🚧 perf tuning

Subworkflows

✅

Schemas id: #myrecord

✅

Looping (while)

❌ – not in spec