Workflow `concurrency` now supports custom groups, expressions, and queueing, and `hooks` are available on more jobs and at more points in each job.
Concurrency groups
Until now, concurrency could do one thing: cancel_in_progress: true canceled the in-progress runs of the same workflow on the same branch, for runs started from GitHub. The group key was a placeholder, and there was no way to make a run wait.
group is now a real template. Runs whose key renders to the same value belong to one group, within a project and across workflow files. You decide what a new run does to the rest of its group: cancel them, or wait for them. cancel_in_progress accepts an expression, so the choice can depend on the run. A waiting run shows as Queued in the EAS dashboard and uses no build minutes until it starts.
With this configuration, a push to a feature branch cancels the stale runs of that branch, while a run on main waits for the active one to finish, so a deploy is never interrupted. For workflows where every run must execute, such as migrations, queue: max keeps up to 100 runs waiting in order. See concurrency in the workflow syntax reference for the details.
Hooks for pre-packaged jobs
Hooks add your own steps to a pre-packaged job, without rewriting it as a custom job. They used to be a patchwork of job-specific keys, only some of them documented. Hook support has expanded, and each job's docs now list its hooks:
- Supported jobs: build, deploy, fingerprint, repack, submit, testflight, update, and the two Maestro jobs.
- Hook points: add steps after checkout, before or after dependency installation, and around the main action of the submit, update, and Maestro jobs, for example
after_updateto upload sourcemaps after publishing an update. - Workflow-wide defaults:
defaults.hookssets a hook once for every job that supports it.
Each job's section in pre-packaged jobs lists its hook keys, with examples such as uploading sourcemaps to PostHog from an after_update hook. Learn more about hooks and defaults.hooks in the workflow syntax reference.
Wrap up
Both features are available now. If you run into problems, or there is a hook point you wish existed, let us know on Discord or X.