ci: serialize go-unit/ui-test/integration on a shared concurrency group
Tests · Go / test (push) Has been cancelled
Tests · Go / test (pull_request) Has been cancelled
Tests · Integration / integration (pull_request) Has been cancelled
Tests · UI / test (push) Waiting to run
Tests · UI / test (pull_request) Successful in 3m11s

These three jobs run on the host runner, which shares a single workspace.
Run concurrently, they race on workspace teardown: ui-test's production
build leaves a root-owned ui/frontend/build that a sibling job's (non-root)
cleanup cannot remove, which then spuriously fails that job — observed
repeatedly on go-unit when it overlapped a ui-test build. Put all three in
one global concurrency group (galaxy-host-runner, cancel-in-progress:
false) so they run one at a time and never collide. CI becomes more serial
but the false failures stop.

This also subsumes ui-test's former ui-test-singleton group, which guarded
the Playwright :5173 port; the shared group preserves that guarantee.
This commit is contained in:
Ilia Denisov
2026-05-31 18:11:34 +02:00
parent 5d2f2bfc26
commit 046857177e
3 changed files with 28 additions and 7 deletions
+11
View File
@@ -30,6 +30,17 @@ on:
- '.gitea/workflows/go-unit.yaml'
- '!**/*.md'
# Serialised with ui-test and integration via a shared concurrency group.
# All three run on the host runner, which shares a single workspace, so
# running them at the same time races on workspace teardown: the
# root-owned ui/frontend/build that ui-test's production build leaves
# behind cannot be removed by a sibling job's (non-root) cleanup, which
# then spuriously fails that job. One global group runs them one at a
# time; cancel-in-progress: false queues runs instead of cancelling them.
concurrency:
group: galaxy-host-runner
cancel-in-progress: false
jobs:
test:
runs-on: ubuntu-latest
+8
View File
@@ -37,6 +37,14 @@ on:
- '.gitea/workflows/integration.yaml'
- '!**/*.md'
# Shared concurrency group with go-unit and ui-test: the host runner uses
# one workspace, so these jobs must not run concurrently or they race on
# workspace teardown (see go-unit.yaml for the full rationale). Runs are
# queued, not cancelled.
concurrency:
group: galaxy-host-runner
cancel-in-progress: false
jobs:
integration:
runs-on: ubuntu-latest
+9 -7
View File
@@ -18,14 +18,16 @@ on:
# Playwright launches its own `pnpm dev` on :5173, and in host-mode
# the runner shares the host's port namespace with every other job,
# so two parallel ui-test runs collide on EADDRINUSE. Serialise via a
# singleton concurrency group with queueing — new runs wait their
# turn instead of cancelling the in-progress one. cancel-in-progress
# is explicitly false because Gitea has shown spurious self-cancel
# behaviour under cancel-in-progress: true even when no other run
# shares the group.
# so two parallel ui-test runs collide on EADDRINUSE. Serialise via the
# shared `galaxy-host-runner` concurrency group (also used by go-unit and
# integration) with queueing — new runs wait their turn instead of
# cancelling the in-progress one. The shared group additionally avoids the
# host-workspace teardown race those jobs hit (see go-unit.yaml). New runs
# wait their turn; cancel-in-progress is explicitly false because Gitea has
# shown spurious self-cancel behaviour under cancel-in-progress: true even
# when no other run shares the group.
concurrency:
group: ui-test-singleton
group: galaxy-host-runner
cancel-in-progress: false
jobs: