Skip to content

feat: inputs enhancements — subflow() function, dynamic-values loader & FORM input type#16656

Draft
brian-mulier-p wants to merge 3 commits into
developfrom
fix/inputs-enhancements-mhf
Draft

feat: inputs enhancements — subflow() function, dynamic-values loader & FORM input type#16656
brian-mulier-p wants to merge 3 commits into
developfrom
fix/inputs-enhancements-mhf

Conversation

@brian-mulier-p

Copy link
Copy Markdown
Member

Demo aggregation branch combining two open OSS PRs onto one branch so the changes can be exercised together in a single build:

  • feat(core): add subflow() Pebble function #16653 — subflow() Pebble function
    • synchronously runs a subflow and returns its terminal Execution, so .outputs.<id> can populate a SELECT/MULTISELECT input's values at execute-form render
    • execute-form: per-input loading spinner on dynamic SELECT/MULTISELECT while values compute, immediate defaults, stale-validate-response discard, SUBFLOW_FUNCTION kind filter
  • feat: add FORM input type for grouped flow execution forms #16655 — FORM input type
    • groups related inputs under a displayName + description; expanded to dotted-id leaves so resolution + flattenToNestedMap produce a nested payload
    • Flow Execute modal Next/Back wizard, per-section recap, progressive autocomplete, translations for the new wizard keys

Cherry-picks of the source PR commits (no new work). InputsForm.vue was hand-merged to combine the dynamic-values loader with the FORM wizard.

Submission for FORM is NESTED ({"environment":{"region":"EU"}}); this intentionally diverges from kestra-io/kestra-ee#8330's flat-payload design note.

Synchronously runs a subflow and returns its terminal Execution, so
.outputs.<id> reads the subflow's flow-level outputs — mainly to populate
a SELECT/MULTISELECT input's values at execute-form render time.

- new SubflowFunction (ACL-aware resolution, depth-cap guard, SUCCESS/WARNING gate)
- WebhookService.runAndWait(Execution, Flow, Duration) reusing the queue glue
- ExecutionKind.SUBFLOW_FUNCTION (auto-hidden from lists via NORMAL_KIND_CONDITION)
- config kestra.pebble.subflow-function.{completion-timeout=PT1M,max-depth=3}

(cherry picked from commit 7480bb9)
…uted

When an input's values are rendered dynamically (e.g. via the subflow()
function), surface that work on the execute form instead of a frozen UI:

- per-input loading spinner on dynamic SELECT/MULTISELECT while values compute;
  on the initial fetch (no value yet) the input is also disabled with a
  "computing" placeholder, later recomputations only spin and stay usable
- apply input defaults immediately at init, without waiting for the validate call
- discard stale validate responses so a value the user just picked is never reset
- add SUBFLOW_FUNCTION to the executions Kind filter (+ translations)

(cherry picked from commit 09364ee)
Implements the FORM input type (kestra-io/kestra-ee#8330) — a flow input
that groups related inputs under a displayName + description.

- New FORM input expanded to dotted-id leaves so existing resolution +
  flattenToNestedMap produce a nested payload; FORM never reaches resolution.
- Validation: duplicate/prefix-conflict expanded paths rejected; dependsOn on
  form children must use the dotted path (bad refs rejected loudly); nested
  FORM and FORM-with-defaults rejected.
- Flow Execute modal: Next/Back wizard (one step per top-level FORM, a
  contiguous run of ungrouped inputs as its own step), recap with per-section
  Edit, localStorage persistence, clear-on-success.
- Progressive autocomplete: inputs.<form>. suggests the FORM's children.
- Translations for the new wizard keys across all supported locales.

Submission is NESTED ({"environment":{"region":"EU"}}); tasks reference
{{ inputs.environment.region }}. This intentionally diverges from the issue's
design note (FORM as UI-only grouping with a flat payload) — per the decision
to make FORM a real structural wrapper.

(cherry picked from commit 8d161e4)
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

📄 OpenAPI Spec Changes

Spec generated with EE branch fix/inputs-enhancements-mhf. Diff vs client-sdk:

14775,14829d14774
<     get:
<       tags:
<       - ServiceAccount
<       summary: List service accounts for the given tenant
<       operationId: listServiceAccountsForTenant
<       parameters:
<       - name: page
<         in: query
<         description: The current page
<         explode: false
<         schema:
<           type: integer
<           format: int32
<           default: 1
<       - name: size
<         in: query
<         description: The current page size
<         explode: false
<         schema:
<           type: integer
<           format: int32
<           default: 10
<       - name: sort
<         in: query
<         description: The sort of current page
<         explode: false
<         schema:
<           type: array
<           nullable: true
<           items:
<             type: string
<       - name: filters
<         in: query
<         description: Filters
<         required: true
<         explode: false
<         schema:
<           type: array
<           items:
<             $ref: "#/components/schemas/QueryFilter"
<       - name: tenant
<         in: path
<         required: true
<         schema:
<           type: string
<       responses:
<         "200":
<           description: listServiceAccountsForTenant 200 response
<           content:
<             application/json:
<               schema:
<                 $ref: "#/components/schemas/PagedResults_IAMTenantAccessController.ApiUserTenantAccess_"
<       security:
<       - bearerAuth: []
<       - basicAuth: []
19400a19346
>       - SUBFLOW_FUNCTION
24231a24178
>       - FORM

🐋 Docker image

ghcr.io/kestra-io/kestra-pr:16656
docker run --pull=always --rm -it -p 8080:8080 --user=root -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp ghcr.io/kestra-io/kestra-pr:16656 server local

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: To review

Development

Successfully merging this pull request may close these issues.

1 participant