fix(e2e): serialize concurrent E2E runs to prevent environment conflicts #111

Closed
privilegedescalation-engineer[bot] wants to merge 1 commits from fix/e2e-concurrency-serialization into main
privilegedescalation-engineer[bot] commented 2026-03-24 16:31:30 +00:00 (Migrated from github.com)

Summary

Concurrent E2E runs share the same headlamp-e2e release name in privilegedescalation-dev. When two PRs trigger E2E tests simultaneously, one run's teardown step (if: always()) deletes the shared Deployment/Service/ConfigMap while the other run is still using it — causing Playwright auth setup to time out trying to reach the Headlamp UI.

Root cause evidence: Pod events in privilegedescalation-dev showed headlamp-e2e cycling through scale 0→1 multiple times in minutes, with each cycle matching a concurrent CI run lifecycle. Run 23499990163 (feat/renovate-extend-org-config) failed while a concurrent run on fix/node24-action-versions was tearing down the shared environment.

Fix: Add a repo-wide concurrency group to the E2E workflow. Only one E2E run executes at a time; others queue (cancel-in-progress: false) rather than cancel, to avoid interrupting teardown and leaving dangling cluster resources.

Changes

  • .github/workflows/e2e.yaml: Add concurrency block with group: e2e-${{ github.repository }} and cancel-in-progress: false

Test Plan

  • Open a second PR while an E2E run is in progress — second run should show "Waiting for pending jobs" in GitHub Actions
  • Confirm the first run completes and tears down cleanly before the second begins
  • Confirm E2E auth setup no longer times out due to environment interference

cc @cpfarhood

## Summary Concurrent E2E runs share the same `headlamp-e2e` release name in `privilegedescalation-dev`. When two PRs trigger E2E tests simultaneously, one run's teardown step (`if: always()`) deletes the shared Deployment/Service/ConfigMap while the other run is still using it — causing Playwright auth setup to time out trying to reach the Headlamp UI. **Root cause evidence:** Pod events in `privilegedescalation-dev` showed `headlamp-e2e` cycling through scale 0→1 multiple times in minutes, with each cycle matching a concurrent CI run lifecycle. Run 23499990163 (`feat/renovate-extend-org-config`) failed while a concurrent run on `fix/node24-action-versions` was tearing down the shared environment. **Fix:** Add a repo-wide `concurrency` group to the E2E workflow. Only one E2E run executes at a time; others queue (`cancel-in-progress: false`) rather than cancel, to avoid interrupting teardown and leaving dangling cluster resources. ## Changes - `.github/workflows/e2e.yaml`: Add `concurrency` block with `group: e2e-${{ github.repository }}` and `cancel-in-progress: false` ## Test Plan - [ ] Open a second PR while an E2E run is in progress — second run should show "Waiting for pending jobs" in GitHub Actions - [ ] Confirm the first run completes and tears down cleanly before the second begins - [ ] Confirm E2E auth setup no longer times out due to environment interference cc @cpfarhood
privilegedescalation-engineer[bot] commented 2026-03-24 16:33:48 +00:00 (Migrated from github.com)

Closing as duplicate of #110. Both PRs add the same group to the E2E workflow. One difference worth noting on #110: I've used cancel-in-progress: false here vs true in #110. Recommend changing #110 to false — when GitHub cancels an in-progress run, the if: always() teardown step may not execute, leaving dangling Deployment/Service/ConfigMap resources in privilegedescalation-dev. Queuing (false) is safer for shared cluster environments.

Closing as duplicate of #110. Both PRs add the same group to the E2E workflow. One difference worth noting on #110: I've used `cancel-in-progress: false` here vs `true` in #110. Recommend changing #110 to `false` — when GitHub cancels an in-progress run, the `if: always()` teardown step may not execute, leaving dangling Deployment/Service/ConfigMap resources in `privilegedescalation-dev`. Queuing (`false`) is safer for shared cluster environments.

Pull request closed

Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: privilegedescalation/headlamp-polaris-plugin#111