Skip to content

fix(ci): split smoke gate — required curl smoke + advisory Playwright - #60

Merged
agjs merged 1 commit into
mainfrom
fix/smoke-split-playwright
May 30, 2026
Merged

fix(ci): split smoke gate — required curl smoke + advisory Playwright#60
agjs merged 1 commit into
mainfrom
fix/smoke-split-playwright

Conversation

@agjs

@agjs agjs commented May 30, 2026

Copy link
Copy Markdown
Contributor

Problem

The combined smoke gate was the chronic CI pain point:

  • Boots compose + runs the full Playwright Chromium suite in one job.
  • 20-min timeout — slow signal on legitimate failures.
  • Playwright surface (browser timing, animation, transient network) flakes occasionally; flake = blocked PR until rerun.
  • Sometimes the runner gets stuck pre-start and GitHub's job timeout doesn't apply; the run hangs indefinitely until manually cancelled. Happened today on run `26681455502`.

Change

Split into two workflows so each part has the cost/value contract that suits it:

Workflow Required? What it does Timeout
`infra-compose-full-stack-smoke.yml` ✅ required curl-only register → login → /me → register-new → dashboard round-trip 8 min (was 20)
`infra-compose-playwright-e2e.yml` ❌ advisory boots same stack, runs apps/ui Playwright Chromium suite 15 min

The curl smoke completes in ~3–4 min on warm runners; the 8-min ceiling fails fast instead of hanging for 20. Playwright failures stop being merge blockers — a flake means "go look at the run", not "rerun and hope".

Also drops the OpenAPI schema check that was bundled into smoke — `apps-api-openapi-drift.yml` already runs the same check as a dedicated required workflow.

Operator follow-up

The Playwright job name `UI Playwright E2E (browser-based smoke)` will appear in the required-check picker once it runs once. Leave it OFF — that's the whole point of the split.

Test plan

  • Both YAMLs parse / yaml-lint clean
  • Pre-push smoke gate green
  • This PR self-verifies: smoke gate runs in curl-only mode + Playwright runs as advisory. If smoke is fast and green and Playwright either passes or fails-without-blocking, the split works.

The combined smoke gate was the chronic CI pain point:

  - Boots compose + runs the full Playwright Chromium suite in one job.
  - 20-min timeout — slow signal on legitimate failures.
  - Playwright surface (browser timing, animation, transient network)
    flakes occasionally; flake = blocked PR until rerun.
  - Sometimes the runner gets stuck pre-start and GitHub's job timeout
    doesn't apply; the run hangs indefinitely until manually cancelled.
    Happened to run 26681455502 today.

Split into two workflows so each part can have the cost/value contract
that suits it:

  - `infra-compose-full-stack-smoke.yml` (REQUIRED) — curl-only
    register → login → /me → register-new → dashboard round-trip.
    Timeout 8 min. The curl path completes in ~3–4 min on warm runners,
    so an 8-min ceiling fails fast instead of hanging for 20.

  - `infra-compose-playwright-e2e.yml` (ADVISORY) — boots the same
    stack, runs the apps/ui Playwright Chromium suite. NOT a required
    check; a Playwright flake no longer blocks merges. Failure means
    "go look at the run", not "rerun and hope".

The OpenAPI schema check that was bundled into smoke is dropped —
`apps-api-openapi-drift.yml` already runs the same check as a
dedicated required workflow.

Both workflows keep the same paths-filter triggers; smoke also keeps
the no-paths `pull_request:` from PR #59 so it reports a status on
docs PRs via the internal skip-with-success pattern.

Operator follow-up (manual, in branch protection settings):
  - The Playwright job name "UI Playwright E2E (browser-based smoke)"
    will appear in the required-check picker once it runs once. Leave
    it OFF — that's the whole point of the split.
@agjs
agjs enabled auto-merge (squash) May 30, 2026 10:33
@agjs
agjs merged commit 958f463 into main May 30, 2026
24 checks passed
@agjs
agjs deleted the fix/smoke-split-playwright branch May 30, 2026 10:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant