Background
Follow-up from PR #12840 (review by @kachawla).
The four repo-based deploy/delete workflows (run-rad-commands-aws.yml, run-rad-commands-azure.yml, delete-aws.yml, delete-azure.yml) share a single durable state archive (the OCI package selected by RADIUS_STATE_*, or the radius-state git orphan branch). Each run does rad startup (restore) → commands → rad shutdown (persist).
Gap
None of the workflows declares a concurrency: group. If two runs against the same repo/environment overlap, they race on the shared archive: one run's rad shutdown can overwrite state the other run restored, or two runs can push conflicting snapshots, corrupting the archive.
Proposed fix
Add a concurrency: group (keyed by workflow + environment/ref, with an appropriate cancel-in-progress policy) to serialize runs that share a state archive.
Scope
Not required to fix #12838 — that failure is deterministic within a single run. This is an unrelated robustness improvement and is intentionally out of scope for #12840.
Background
Follow-up from PR #12840 (review by @kachawla).
The four repo-based deploy/delete workflows (
run-rad-commands-aws.yml,run-rad-commands-azure.yml,delete-aws.yml,delete-azure.yml) share a single durable state archive (the OCI package selected byRADIUS_STATE_*, or theradius-stategit orphan branch). Each run doesrad startup(restore) → commands →rad shutdown(persist).Gap
None of the workflows declares a
concurrency:group. If two runs against the same repo/environment overlap, they race on the shared archive: one run'srad shutdowncan overwrite state the other run restored, or two runs can push conflicting snapshots, corrupting the archive.Proposed fix
Add a
concurrency:group (keyed by workflow + environment/ref, with an appropriatecancel-in-progresspolicy) to serialize runs that share a state archive.Scope
Not required to fix #12838 — that failure is deterministic within a single run. This is an unrelated robustness improvement and is intentionally out of scope for #12840.