github.workflow-dispatch-select-runner ​
Select runner group for workflow_dispatch by routing rules
Select the runner group for a workflow_dispatch based on routing rules.
Routing priority:
- inputs.runner_group_uuid → use that runner group directly
- inputs.runner_labels → find runner group with matching labels
- Fall back to repository/org default runner group
Inputs:
- organization_uuid: Organization UUID (public) (required)
- repository_full_name: Full name "owner/repo" (required)
- runner_group_uuid: Explicit runner group UUID (optional)
- runner_labels: Requested runner labels (optional, comma-separated)
- payload: Full webhook payload (for future: repo config defaults)
Outputs (terminal state_data):
- runner_group_uuid: Selected runner group UUID
- backend_type: RunnerBackendType of the selected group
- runner_group: Serialized runner group info (for workflow)
- dispatch_skipped: True when the org only has warm-pool-enabled (ec2_vm) groups — idle registered runners claim the job directly, no ephemeral launch needed
- skip_reason: "warm_pool_claims_directly" when dispatch_skipped is True
Overview ​
| Property | Value |
|---|---|
| Workflow type | Atomic |
| Library | App-github |
| Version | 1.0 |
Input Schema ​
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
organization_uuid | string | Yes | — | Organization UUID (public) |
repository_full_name | string | Yes | — | Repository full name |
runner_group_uuid | uuid | No | — | Explicit runner group UUID |
runner_labels | string | No | — | Requested runner labels |
payload | dict | No | — | Full webhook payload |
workflow_run_id | string | No | — | Parent DAG run ID |
Output Schema ​
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
runner_group_uuid | string | No | — | Selected runner group UUID |
backend_type | string | No | — | Backend type of selected group |
runner_group | dict | No | — | Serialized runner group info |
dispatch_skipped | boolean | No | — | True when a warm-pool group claims the job directly (no dispatch) |
skip_reason | string | No | — | Why the dispatch was skipped |
organization_uuid | string | No | — | Organization UUID (public) |
repository_full_name | string | No | — | Repository full name |
runner_labels | string | No | — | Requested runner labels |
payload | dict | No | — | Full webhook payload |
workflow_run_id | string | No | — | Parent DAG run ID |
failure_reason | string | No | — | — |
failure_type | string | No | — | — |
failed_action | string | No | — | — |
failed_at_state | string | No | — | — |
failed_step | string | No | — | — |
failed_layer | string | No | — | — |
error | string | No | — | — |
error_type | string | No | — | — |
States ​
| State | Initial | Terminal | Success | Auto-advance | Description |
|---|---|---|---|---|---|
pending | Yes | No | — | execute | — |
completed | No | Yes | Yes | — | — |
failed | No | Yes | No | — | — |
State Diagram ​
Transitions ​
| From | Action | To | Description |
|---|---|---|---|
pending | execute | completed | — |
* (any state) | fail | failed | — |
API Usage ​
bash
POST /api/workflows/start
Content-Type: application/json
{
"workflow_type": "github.workflow-dispatch-select-runner",
"initial_data": {
"organization_uuid": "value",
"repository_full_name": "value"
}
}