Skip to content

Prepare a Submission

Start from the workflow's own declarations instead of a blank inputs file, and find out whether a run will work before spending time and money on it.

  • Scaffold

    Generate an inputs template from the WDL, with types and documentation

  • Preflight

    Check server, WDL, inputs and file paths before submitting

  • Automatic

    submit runs the checks for you

The flow

pumbaa workflow scaffold  -w main.wdl -o inputs.json   # 1. generate
# ... fill in the placeholders ...
pumbaa workflow preflight -w main.wdl -i inputs.json   # 2. check
pumbaa workflow submit    -w main.wdl -i inputs.json   # 3. run (checks again)

Scaffold

pumbaa workflow scaffold --workflow FILE [OPTIONS]

Alias: pumbaa wf template

Flag Alias Required Description
--workflow -w WDL workflow file
--output -o Write to this file instead of stdout
--all Include optional inputs, with their defaults
--force Overwrite an existing output file

Required inputs come first, each with a placeholder carrying its type and — when the WDL documents it in parameter_meta — its description:

{
  "AlignReads.reads_fastq": "<FILL: File — Sequencing reads in FASTQ format>",
  "AlignReads.reference_files": "<FILL: Array[File]+ — Reference genome and its index files>",
  "AlignReads.sample_name": "<FILL: String — Identifier used to name outputs>"
}

Optional inputs are left out by default, so the file is minimal and ready to submit once filled. Add --all to include them with their default values.

With --output, the command also prints every input — including the optional ones — and the next steps:

✓ Wrote inputs.json for workflow AlignReads

 INPUT                       TYPE          REQUIRED  DEFAULT  DESCRIPTION
 AlignReads.reads_fastq      File          yes                Sequencing reads in FASTQ format
 AlignReads.reference_files  Array[File]+  yes                Reference genome and its index files
 AlignReads.sample_name      String        yes                Identifier used to name outputs
 AlignReads.threads          Int           no        4
 AlignReads.skip_qc          Boolean       no        false

Piping

Without --output only the JSON is printed, so pumbaa workflow scaffold -w main.wdl > inputs.json works.

Preflight

pumbaa workflow preflight --workflow FILE [OPTIONS]

Alias: pumbaa wf check

Flag Alias Required Description
--workflow -w WDL workflow file
--inputs -i Inputs JSON file
--dependencies -d Imports ZIP — checks that every import resolves
--skip-paths Do not check that input files exist
--skip-server Do not check that Cromwell is reachable
Preflight — workflow AlignReads
─────────────────────────────────────────
  ✓ Cromwell server  reachable
  ✓ WDL syntax       workflow AlignReads
  ⚠ Inputs           worth a look
      ⚠ AlignReads.threads: is the quoted number "8" where Int is expected
      ⚠ AlignReads.sampleName: not declared by this workflow — check for a typo
  ✗ Input files      missing files
      ✗ AlignReads.reference_files[1]: file does not exist: gs://bucket/ref.fai

✗ 1 problem(s) must be fixed before this run can start (2 warning(s) too)

The command exits non-zero when there are errors, so it can gate a script or CI job.

What is checked

Check Blocks? Notes
Cromwell reachable Skipped with --skip-server
WDL parses A parse failure is only a warning — Cromwell is the authority
Required inputs present
Placeholders replaced Catches "scaffolded and submitted unedited"
Types match declarations Only clear mismatches; coercible values warn instead
Keys declared by the workflow Usually a typo, so a warning
File inputs exist Missing is an error; unverifiable (no credentials) is only a warning
Imports resolve in the ZIP Only when -d is given; checks the whole import tree, including transitive imports

Missing vs. unverifiable

If a path cannot be checked — no local cloud credentials, for instance — preflight warns instead of blocking: Cromwell may well have access this machine does not.

Submit runs it for you

pumbaa workflow submit runs the same checks before sending anything, so a broken submission fails in seconds instead of minutes. It always reports the outcome, so you can see the checks happened:

✓ Preflight passed.
✓ Workflow submitted successfully!

When there are non-blocking warnings, the full checklist is shown before the submission proceeds; when there are errors, nothing is submitted:

✗ 1 problem(s) must be fixed before this run can start

ℹ Nothing was submitted. Fix the problems above, or use --skip-preflight to submit anyway.

The server check is skipped there (submitting contacts the server anyway). Use --skip-preflight to bypass the checks entirely (it prints Preflight skipped. so the bypass is explicit).

See Also