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
submitruns 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
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
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:
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).