Skip to content

test(ci): real miniwdl engine-composition test against Substrate - #3

Merged
scttfrdmn merged 1 commit into
mainfrom
ci/substrate-engine-composition
Jul 30, 2026
Merged

scttfrdmn merged 1 commit into
mainfrom
ci/substrate-engine-composition

Conversation

@scttfrdmn

Copy link
Copy Markdown
Contributor

Adds a real-engine CI regression guard: runs actual `miniwdl run` through the spawn backend against the Substrate AWS emulator — no real AWS, no cost, hermetic and deterministic.

What it proves

Full composition seam, on every push:
miniwdl run → SpawnContainer backend → real spawn task run (real RunInstances + real aws s3 staging, all vs. Substrate) → completion record → exit code → miniwdl task success/failure.

  • Happy path: unseeded completion ⇒ Substrate's nominal exit 0/completed ⇒ miniwdl run succeeds; asserts the backend actually dispatched spawn task run.
  • Failure path: seed wdl-call-step-1 to exit 7 via substrate#360's POST /v1/spawn/task-completion ⇒ miniwdl reports CommandFailed exit_status 7.

Why Substrate + why a no-output WDL

Substrate (v0.75.0) serves the task-completion record as a seedable, clock-aware outcome (substrate#360) — real spawn + real S3 staging, only the completion outcome seeded. It does not execute the workload, so the test uses a deliberately no-File-output workflow (tests/composition/noout.wdl); output collection needs real execution and is covered by the real-AWS run, not here.

Validation

Ran the whole chain locally end-to-end before committing (Substrate v0.75.0 + spawn v0.95.0 + miniwdl v1.15.0): both paths green, script exits 0. The CI job installs Substrate (go install), the spawn release binary (curl), and miniwdl+adapter (pip).

Template for the same guard on airflow-spawn and snakemake-executor-plugin-spawn (spore-host#397).

Runs REAL 'miniwdl run' through the spawn backend against the Substrate
AWS emulator (substrate v0.75.0) — no real AWS, no cost, hermetic.

Full seam: miniwdl → SpawnContainer → real 'spawn task run' + real
'aws s3' staging vs Substrate → completion record → exit code →
task success/failure. Substrate serves the completion as a seedable
clock-aware outcome (substrate#360): unseeded ⇒ nominal exit 0
(happy path, no seed); POST /v1/spawn/task-completion with exit 7
drives the failure path → miniwdl CommandFailed exit_status 7.

Uses a no-output WDL (noout.wdl) since Substrate doesn't execute the
workload — output collection needs real execution (covered by the
real-AWS run, not here). Validated locally end-to-end before commit
(both paths green, exit 0).

Template for the same guard on the other adapters (airflow-spawn,
snakemake-executor-plugin-spawn).
@scttfrdmn
scttfrdmn merged commit 09b6e11 into main Jul 30, 2026
2 checks passed
@scttfrdmn
scttfrdmn deleted the ci/substrate-engine-composition branch July 30, 2026 22:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant