CI: amd64-only E2E on PRs + run-scoped names + --ipc=host (refs #5) #69

Merged
claude-bot merged 1 commit from fix/5-ci-speed into main 2026-07-16 07:02:08 +00:00
Contributor

Part of #5 (CI hardening). Makes the docker-e2e job fast and concurrency-safe.

Why

Every CI run took ~35 min, almost entirely the emulated linux/arm64 half of the multi-arch build (QEMU). With ~15 issues still flowing through CI, that's the main throughput bottleneck.

Changes (docker-e2e job only)

  • amd64-only on PRs. The Set up QEMU and Build multi-arch image steps are now gated on if: github.event_name == 'push'. Pull requests build linux/amd64 only (the arch we actually boot for the smoke test + E2E); pushes to main / tags still validate amd64+arm64. → PR feedback drops from ~35 min to a few minutes; the release path keeps full multi-arch coverage.
  • Run-scoped names. Containers/network are now iris-${{ github.run_id }} / pw-… / iris-net-… instead of fixed iris/pw/iris-net, so concurrent PR runs on the shared (reused) runner host can't clobber each other. Added an always() cleanup step.
  • --ipc=host on the Playwright container so Chromium isn't starved by the default 64 MB /dev/shm (a latent hang source — a recent run sat ~40 min before finishing).

Validation

This PR's own CI run is the test: because it's a pull_request event, it exercises the new amd64-only path with run-scoped names and --ipc=host — so a fast, green run here proves all three changes. The container orchestration (container-name networking + docker cp) is unchanged and already verified.

Refs #5 (the broader test-coverage items on that issue remain open).

🤖 Generated with Claude Code

Part of #5 (CI hardening). Makes the docker-e2e job fast and concurrency-safe. ## Why Every CI run took ~35 min, almost entirely the emulated `linux/arm64` half of the multi-arch build (QEMU). With ~15 issues still flowing through CI, that's the main throughput bottleneck. ## Changes (docker-e2e job only) - **amd64-only on PRs.** The `Set up QEMU` and `Build multi-arch image` steps are now gated on `if: github.event_name == 'push'`. Pull requests build `linux/amd64` only (the arch we actually boot for the smoke test + E2E); pushes to `main` / tags still validate `amd64`+`arm64`. → PR feedback drops from ~35 min to a few minutes; the release path keeps full multi-arch coverage. - **Run-scoped names.** Containers/network are now `iris-${{ github.run_id }}` / `pw-…` / `iris-net-…` instead of fixed `iris`/`pw`/`iris-net`, so concurrent PR runs on the shared (reused) runner host can't clobber each other. Added an `always()` cleanup step. - **`--ipc=host`** on the Playwright container so Chromium isn't starved by the default 64 MB `/dev/shm` (a latent hang source — a recent run sat ~40 min before finishing). ## Validation This PR's **own CI run is the test**: because it's a `pull_request` event, it exercises the new amd64-only path with run-scoped names and `--ipc=host` — so a fast, green run here proves all three changes. The container orchestration (container-name networking + `docker cp`) is unchanged and already verified. Refs #5 (the broader test-coverage items on that issue remain open). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
CI: amd64-only E2E on PRs, run-scoped names, --ipc=host (refs #5)
All checks were successful
CI / Python lint & type-check (pull_request) Successful in 1m29s
CI / Alembic migration check (pull_request) Successful in 53s
CI / Python tests (pull_request) Successful in 2m29s
CI / Frontend lint, test & build (pull_request) Successful in 1m38s
CI / Dependency audit (pull_request) Successful in 1m32s
CI / Docker build, health smoke & E2E (pull_request) Successful in 2m40s
df5a29fb32
docker-e2e took ~35 min/run, almost all the emulated linux/arm64 multi-arch
build under QEMU. Gate the QEMU + multi-arch build on push events (main /
tags) so PRs build amd64 only — PR feedback drops to a few minutes while the
release path still validates both arches.

Also harden the job:
- Run-scoped container/network names (iris-${{ github.run_id }} etc.) so
  concurrent PR runs on the shared, reused runner host don't collide on fixed
  names; plus an always() cleanup step.
- --ipc=host on the Playwright container so Chromium isn't starved by the
  default 64MB /dev/shm (a latent hang source).

Refs #5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
claude-bot deleted branch fix/5-ci-speed 2026-07-16 07:02:09 +00:00
Sign in to join this conversation.
No description provided.