Skip to content

The Workflow Editor

Workflows are built in Admin → Workflows. The demo has the three workflows you'll recreate on the next page:

Workflows list

Click + New workflow (or the pencil on an existing one) to open the editor. It has four tabs: Basics, User Inputs, Steps, JSON.

Basics

Identifier, title, description, the operation (CREATE), the target blueprint (what entity kind this workflow relates to — deployment for all three demo workflows), and the Published toggle that makes it visible in Self-service:

Workflow editor — Basics tab

User Inputs

The form users fill when they run the workflow, defined as a JSON schema. The demo workflows all use:

json
{
  "required": ["environment", "version"],
  "properties": {
    "version": { "type": "string", "title": "Version", "default": "1.0.0" },
    "environment": {
      "enum": ["dev", "staging", "prod"],
      "type": "string",
      "title": "Environment",
      "default": "staging"
    }
  }
}

enum renders as a dropdown; default pre-fills the field.

Steps

Steps are the heart of a workflow — an ordered list with dependencies, rendered as a DAG in the run view:

Workflow editor — Steps tab

Select a step to configure it:

Step configuration panel

Each step has:

FieldMeaning
Identifierunique id — referenced by other steps (dependsOn) and in jq templates (.steps.<id>.status)
TypeGITHUB (dispatch an Actions workflow), GITLAB (create a CI pipeline), APPROVAL (human gate), UPSERT_ENTITY (write to the catalog)
ConditionON_SUCCESS (run only if dependencies succeeded) or ALWAYS (run even after failures — used for recording results)
Depends onwhich steps must finish first; steps with the same dependencies run in parallel
CredentialsDefault (environment) or Stored secret (see Secrets)
Configtype-specific JSON (repo/workflow for GITHUB, projectId/variables for GITLAB, mapping for UPSERT_ENTITY)
Timeoutminutes before the step is failed (or, for APPROVAL, before onTimeout applies)

jq templating

Config values support {{ ... }} jq templates evaluated against the run context:

ExpressionValue
{{ .inputs.version }}a user input
{{ .run.id }}the run id (r_...)
{{ .user.email }}who triggered the run
{{ .entity.identifier }}the related entity (for entity-scoped actions)
{{ .steps.deploy_orders.status }}another step's result (SUCCESS / FAILURE / SKIPPED)
{{ if (.steps.a.status == "SUCCESS") and (.steps.b.status == "SUCCESS") then "SUCCESS" else "FAILURE" end }}computed values

Use underscores in step identifiers

.steps.deploy-orders.status is invalid jq (the hyphen parses as subtraction). Name steps deploy_orders, not deploy-orders.

JSON

The whole workflow as a single JSON document — handy for copy/pasting the demo workflow definitions or managing workflows via the API:

bash
curl -X POST "https://<your-idp-domain>/api/v1/workflows" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d @workflow.json

Next: the three demo workflows, in full →

IDP Next — Internal Developer Platform