From 046857177ea65d5e84e9d852cfd18c82b5a5769a Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Sun, 31 May 2026 18:11:34 +0200 Subject: [PATCH] ci: serialize go-unit/ui-test/integration on a shared concurrency group MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .gitea/workflows/go-unit.yaml | 11 +++++++++++ .gitea/workflows/integration.yaml | 8 ++++++++ .gitea/workflows/ui-test.yaml | 16 +++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/go-unit.yaml b/.gitea/workflows/go-unit.yaml index b961d6a..6f26043 100644 --- a/.gitea/workflows/go-unit.yaml +++ b/.gitea/workflows/go-unit.yaml @@ -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 diff --git a/.gitea/workflows/integration.yaml b/.gitea/workflows/integration.yaml index 85d61cd..43c1c83 100644 --- a/.gitea/workflows/integration.yaml +++ b/.gitea/workflows/integration.yaml @@ -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 diff --git a/.gitea/workflows/ui-test.yaml b/.gitea/workflows/ui-test.yaml index 8cfb439..c98368b 100644 --- a/.gitea/workflows/ui-test.yaml +++ b/.gitea/workflows/ui-test.yaml @@ -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: -- 2.52.0