Install
Works with Drupal: ^11.3 || ^12Using Composer to manage Drupal site dependencies
Alternative installation files
Release notes
WARNING: THERE IS NO MIGRATION PATH. YOU MUST REINSTALL FROM SCRATCH.
Do not update an existing site to this release. Orchestra ships no update hooks, and none is coming until the first beta release. A site on an earlier alpha holds a database and configuration this code does not match.
Uninstall the Orchestra modules, drop what they leave behind, and install 1.0.0-alpha25 fresh. Every instance, token, task, incident, variable, attachment and delegation from an earlier alpha is lost, and that is expected.
Between alpha24 and alpha25 in particular, a subprocess node no longer has relaunch_attempts and relaunch_backoff: the step's retry policy does that job now. A step can carry a new on_failure feature, the engine settings gain max_parked_step_attempts, and the audit trail settings gain a failed event. The inbox history is a view of its own, orchestra_inbox_history, and the inbox and requests views render their rows with a new row style. Two sites talking to each other must run the same release: the wire version goes back to 1 and stays there until the first beta.
New
- Each step chooses what happens if it fails: the site default, an incident for an operator, a failed instance, or a failure outcome that the step's flows route on. With a failure outcome, the step writes
failedto a variable you name, and can put the failure message in another, so a refused registration can tell the requester and close the request instead of waiting for an operator. Retries still come first. #3633763: Let each step choose what happens when it fails for good: an incident, a failed instance, or a failure outcome its flows route on - A step whose work failed elsewhere is retried by its retry policy, such as a subprocess whose child ended without completing. The work starts over, as many times as the policy allows, and the step's failure handling applies once the attempts are used up. Steps with no policy of their own follow a new site-wide default, Attempts before a parked step whose work failed is given up on. #3633774: Let the step's retry policy retry a parked step whose work failed, with its own site-wide default, replacing the subprocess relaunch settings
- A step can call an external HTTP endpoint and route on its answer, with no code of your own. The new
orchestra_httpsubmodule adds an HTTP request task type: method, URL, headers, a JSON, form, multipart or text body built from variables, basic or bearer authentication with the secret held by the Key module, out of the workflow's configuration, and a timeout. The status code goes to the step's payload variable, so a flow routes on== 409or on any success, and the decoded answer goes to a variable of its own. A step only calls the hosts its author listed, and redirects are not followed. Anexample_http_lookupworkflow ships withorchestra_examples. #3633764: Add an HTTP request task type that calls an external endpoint and routes on its response - Each field of an HTTP answer can be stored in a variable of its own, with nested objects and lists split by field and by position, and a list of patterns choosing which fields to keep (
a.b.cexactly,a.b.*one level,a.b.**any depth). The webform handlers get the same Values to store list. #3633987: Store each field of an HTTP request's JSON answer in a variable of its own, and choose which fields and webform values are stored - The inbox, its history and My requests can be placed as blocks, for example as tabs of the account page. Each block filters on the page that holds it, with its own pager and filter keys, so the three can share one page. #3633526: Render the card through an Orchestra card row plugin instead of a preprocess named after the view id, give the personal lists block displays, and make the inbox history its own view
Fixes worth naming
- A stranger could block a remote site's notices. With request limits on, the notice address counted every request against the remote before checking its signature, so unsigned posts used up the remote's limit and its genuine notices were refused. Notices are now counted per remote and per sending address. #3634192: Count notice requests per remote and sending address, and sign a webform step's escape-button list
- A crafted link could add buttons to a webform step. The escape buttons of a step's form were read from the link's query, which anybody can write. The list is now signed together with the step's resume handle, and the form shows buttons only for a list this site signed for that step. #3634192
- A remote subprocess lost its nested output. An object inside a remote child's variables came back unreadable, so an output mapping such as
result.idfound nothing, where the same mapping on a local child found the value. #3634193: Keep the wire version at 1 until the first beta, decode nested remote variables as arrays, and narrow the chain catch-up query to the instance - A workflow imported or written by code could overwrite the engine's own variables through a subprocess output map naming a reserved
__variable when the child ended. Both the end of the child and the live pass-up now skip reserved names. #3634195: Translate the complete modeler's seeded labels and give five duplicated helpers one home - The complete modeler's seeded Start node and a cloned node's (copy) label were always English. They are now in the workflow's own language, and a copied label keeps its characters as typed. #3634195
- An old link's catch-up searched every token on the site at each step of the chain it follows. It now searches the link's instance only, through an index. #3634193
Changed
- A subprocess node's Re-launch on failure and Re-launch delay are gone: set the step's retry policy instead. #3633774
- A step's failure handling reads If this step fails, and the site setting If a step fails. #3634075: Word a step's failure handling as "If this step fails" instead of "fails for good"
- The inbox history is a view of its own,
orchestra_inbox_history, at/orchestra/views/inbox/history, instead of a display of the inbox view. #3633526 - The modeler warns, when a workflow is saved, about settings that are valid but often a mistake, such as credentials sent over plain http, or a failure outcome whose step has a flow with no condition, which a failed step takes too. #3633763 #3633764
For theme developers
- The inbox and requests cards come from a views row style, Orchestra card, instead of a preprocess keyed on the view ids, so a copy of a shipped view keeps its card.
views-view-fields--orchestra-inbox.html.twigandviews-view-fields--orchestra-requests.html.twigare removed;views-view-orchestra-card.html.twigis new. #3633526
For module developers
- A step's work can fail while it is parked:
ProcessControlInterface::failParkedStep()andisWaitingForRetry(), andStepFailedExceptionfor work found to have failed while the step runs.WorkflowEngineInterfacegainsOUTCOME_FAILEDandOUTCOME_CANCELED.ProcessControlInterface::launchChild()and the relaunch methods ofSubprocessTaskInterfaceare removed. #3633763 #3633774 - A node feature or a task type can warn about a workflow when it is saved, through
NodeFeatureWarningsInterfaceandTaskTypeWarningsInterface. #3633763 #3633764 Drupal\orchestra\VariableSplitterreplacesDrupal\orchestra_webform\SubmissionValueSplitter. #3633987SubprocessEndingRulesInterface::getOutputVariables()replacesgetResumeVariables(): it is the child's output under the parent's names, read when the child ends and by the live pass-up.WorkflowDefinitionInterface::getFlow()finds a flow by its id.TimeoutActionBase::getTimeoutOutcome()andFALLBACK_OUTCOMEgive the timeout outcome one home. #3634195- The BPMN.io editor scripts share one wait for the modeler,
Drupal.orchestraBpmnIo.whenReady()in theorchestra_bpmn_io/modeler_readylibrary. #3634195 WireVersion::CURRENTis 1 again, likeMINIMUM, until the first beta. #3634193
Housekeeping
- The codebase metrics page is refreshed: 1,697 files and 165,722 lines of code.