Skip to content

v0.7.0 — Workflow trigger model + AllOf/AnyOf composite triggers

Latest

Choose a tag to compare

@ryan-evans-git ryan-evans-git released this 21 May 23:39
· 224 commits to main since this release
f925d82

Workflow trigger model. v0.6.0's centralised depends_on={dict} is replaced
by a richer trigger surface on the workflow plus per-job depends_on for the
within-workflow DAG. Hard break, no backwards compat (we're in alpha).

Highlights

  • triggered_by= accepts a workflow/job name, a list (AND-conjoined), or a
    boolean expression built from AllOf(...) / AnyOf(...) for arbitrarily
    nested AND/OR composition. Example:

    ematix.workflow(
        name="combined_report",
        triggered_by=AllOf("workflow_A", AnyOf("workflow_B", "workflow_C")),
        schedule="0 21 * * *",
        timezone="America/New_York",
        jobs=[...],
    )
  • schedule= + timezone= on the workflow (not per-job). Cron tick is one
    trigger condition; AND-conjoined with triggered_by / on_message.

  • on_message=<source> for per-message firing (mutually exclusive with
    triggered_by / schedule).

  • Per-job depends_on=[…] declares the within-workflow DAG.

Web UI

  • Per-element trigger pills on every Workflows card — colored dot per leaf
    AND per composite (ALL / ANY) showing the rolled-up state
    (🟢 ready · 🟡 pending · 🔴 failed).
  • ▶ Run now button on every workflow card (with job-subset checkboxes)
    and every job card (with optional cascade-downstream toggle).
  • Endpoints: POST /api/workflows/{name}/run-now, POST /api/jobs/{name}/run-now.

Migration from v0.6.0

# old
ematix.workflow(name="W", jobs=["a","b","c"], depends_on={"b":["a"], "c":["b"]})

# new
@ematix.job(name="b", depends_on=["a"], ...)
@ematix.job(name="c", depends_on=["b"], ...)
ematix.workflow(name="W", jobs=["a","b","c"], schedule="0 * * * *")

register_workflow raises with a pointer to the new model if it sees the
old shape.

Docs

  • USER_GUIDE: trigger surface + AllOf/AnyOf composite section.
  • ematix.dev: scheduling page rewritten with 6 real-world scenarios + honest
    competitive framing (dbt / Airflow Datasets / Prefect Automations / Dagster
    sensors).

Full changelog: https://github.com/ryan-evans-git/ematix-flow/blob/v0.7.0/CHANGELOG.md