Workflows are graphs (DAG) that represent the dependencies between steps. The goal of an orchestrator or workflow engine is to execute the steps on different workers that respect that graph’s dependencies, and pass the required data defined in the steps’ inputs while applying parallelism when possible. In getOperate, each step is code with a main function in TypeScript, Python, Go, Bash or raw queries to databases.Documentation Index
Fetch the complete documentation index at: https://docs.getoperate.com/llms.txt
Use this file to discover all available pages before exploring further.
Architecture and Data Exchange
In getOperate, a workflow is a JSON serializable value in the OpenFlow format that consists of an input spec (similar to Scripts), and a linear sequence of steps, also referred to as modules. Each step consists of either:
- Reference to a Script from the Hub.
- Reference to a Script in your workspace.
- Inlined Script in TypeScript (Deno), Python, Go, Bash, SQL or non-supported languages.
- Trigger Scripts which are a kind of Scripts that are meant to be first step of a scheduled Flow, that watch for external events and early exit the Flow if there is no new events.
- For loop that iterates over elements and triggers the execution of an embedded flow for each element. The list is calculated dynamically as an input transform.
- Branch to the first subflow that has a truthy predicate (evaluated in-order).
- Branches to all subflows and collect the results of each branch into an array.
- Approval/Suspend steps which suspend the flow at no cost until it is resumed by getting an approval/resume signal.
- Inner flows.
Input Transform
With the mechanism of input transforms, the input of any step can be the output of any previous step, hence every Flow is actually a Directed Acyclic Graph (DAG) rather than simple sequences. You can refer to the result of any step using its ID. Every step has an input transform that maps from:- the Flow input
- any step’s result, not only the previous step’s result
- Resource/Variable.
flow_input: the dict/object containing the different parameters of the Flow itself.results.{id}: the result of the step with given ID.resource(path): the Resource at path.variable(path): the Variable at path.
flow_input, a field of the previous_result or of any steps.
From the editor, you can directly get:
- Static inputs: you can find them on top of the side menu. This tab centralizes the static inputs of every steps. It is akin to a file containing all constants. Modifying a value here modify it in the step input directly.
- Dynamic inputs:
- using the id associated with the step
- clicking on the plug logo that will let you pick flow inputs or previous steps’ results (after testing flow or step).