Skip to main content

Workflows

Workflows define how tasks trigger based on the results of upstream tasks. By default, a downstream task runs only when its upstream dependency succeeds. With workflows, you can also trigger a task on failure or completion of its upstream dependency.

Dependency Conditions

Each dependency has a condition that determines when the downstream task runs:

ConditionDescription
SucceededRuns when the upstream task completes successfully (default)
FailedRuns when the upstream task fails
CompletedRuns regardless of whether the upstream task succeeds or fails

Creating Dependencies in the Graph

  1. Open your production line's Graph view
  2. Hover over a task node to reveal three colored handles on the right side:
    • Green = Succeeded
    • Red = Failed
    • Blue = Completed
  3. Click on the appropriate handle, then click again on the downstream task

Connection lines are color-coded to show the dependency type.

Creating Dependencies via Properties

  1. Select a task to open its properties panel
  2. Scroll to the Workflow section
  3. Search for and select an upstream task
  4. Choose the condition from the dropdown (Succeeded, Failed, Completed)
  5. Click Add Dependency

AND/OR Logic

When a task has multiple upstream dependencies, you can control how they combine:

LogicBehaviour
ALLTask runs when all dependencies meet their conditions
ANYTask runs when any single dependency meets its condition

Set this using the dropdown in the Workflow section: "This task will run if ALL/ANY of the dependency conditions are met".

Example: ANY logic

Use ANY logic when a task should run after any one of several possible predecessors completes. For example, a cleanup task that runs after either the success path or error path finishes.

External dependencies

Tasks can depend on tasks from other production lines. This avoids duplicating work when multiple pipelines share common upstream processing.

To view external dependencies in the graph, click Show External in the graph toolbar.

Common patterns

Error handling: Create a task with a "Failed" dependency to send notifications or run cleanup when something goes wrong.

Always run: Use "Completed" for tasks that must run regardless of upstream success—like logging, cleanup, or finalization steps.

Parallel paths: Use ANY logic to continue after the first of several parallel tasks completes.

What's Next?