Gives the cross-repo enterprise-e2e gate a real name: **Playwright E2E
Crosscheck**.
Branding only — no behaviour change. Renames the workflow, the **check
name** (what shows on the PR), every sticky-comment header, and the
hidden comment marker. Filenames unchanged. The check isn't required
yet, so nothing in branch protection references the old name.
Note: the marker change means the *next* run on a PR that already has an
old `ent-e2e-gate` sticky comment will post a fresh one (the old one is
orphaned) — only affects a couple of in-flight test PRs. Companion:
o2-enterprise `ci/crosscheck-rename`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
## In plain words
Improves how the ENT e2e gate **communicates** on an OSS PR — three
things you asked for:
1. **Comment on pass, not just fail** — but as **one sticky comment per
PR** that updates in place (🔄 running → ✅ passed / 🚫 failed), so it
never spams a fresh comment on every push.
2. **Say which specs failed** — the comment now lists the failing
enterprise spec files by name (via a `failed-specs` artifact from the
engine — companion PR o2-enterprise `ci/ent-gate-comments`), and
distinguishes an enterprise **build** failure from **spec** failures.
3. **Sister ENT PR/branch awareness** —
- **Open sister ENT PR** (same-named branch) → the gate **defers** to
that PR's own checks: it links the sister PR and does **not** build
here.
- **Sister branch only** (no PR) → build the enterprise binary **against
that branch** and name it in the comment.
- **No ENT counterpart** → build against `main`.
## Comment states (single sticky comment)
| State | Shows |
|---|---|
| ⏭️ Deferred | "handled by sister ENT PR #X" + link |
| 🔄 Running | what it's building against + sister note + ENT run link |
| ✅ Passed | passed against this PR + sister note + link |
| 🚫 Needs Review | **list of failing spec files** + sister note + link |
| 🚫 Build failed | enterprise didn't compile + link |
## Notes
- Builds on the merged false-red fixes (#13373). Pure CI, no AI.
- Not a required check — informational until you decide to enforce.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
## In plain words
The ENT e2e gate has been posting **false "🚫 Needs Review" failures** on
real PRs. None of these were actual test failures — three separate bugs.
(An earlier fix on #13284 was lost when that PR was recreated as #13318
without the workflow change, so this re-applies them cleanly on their
own branch.)
## The three fixes
| # | Bug | Symptom | Fix |
|---|-----|---------|-----|
| 1 | Always built against ENT **`main`** | Cross-repo feature PRs (e.g.
Workflows v1) failed to **compile** — `cannot find function
add_workflow` — because the enterprise code lives on the matching ENT
branch, not main | Resolve a **same-named ENT branch** and build against
it if it exists, else `main` (mirrors ENT's own `playwright.yml`) |
| 2 | Correlation grabbed **stale runs** | Gate "completed" in ~3s
reporting a **hours-old** run's failure for the same PR | Stamp dispatch
time; only accept a run **created at/after** it, newest first |
| 3 | `cancelled` treated as failure | A newer push superseded a run
(engine `cancel-in-progress`) → false "specs failed" comment | Treat
`cancelled`/`skipped`/empty as **neutral** — defer to the newer run,
don't comment or fail |
Only a genuine `failure`/`timed_out` now posts a comment or fails the
gate.
## Notes
- Pure CI, no AI. `ent-e2e-gate.yml` only.
- Not a required check, so this doesn't block anything — it just stops
the false-red noise.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
## In plain words
Our website code and UI tests live here (openobserve), but the triggers
that run the **enterprise** e2e tests live in the separate o2-enterprise
repo. So when a PR here changes the website or tests, we don't find out
it broke an *enterprise-only* test until it randomly surfaces in some
later enterprise PR.
This adds a **gate**: if a PR touches the website (`web/`) or UI tests
(`tests/ui-testing/`), it must run the enterprise-only e2e tests
**before it can merge** — so a breakage is caught on the PR that caused
it, not days later somewhere else.
## What happens on a PR
| PR changes | What the gate does |
|---|---|
| Nothing in `web/` or `tests/ui-testing/` | ✅ Passes instantly — never
gets in the way of unrelated PRs |
| Website/tests **+** `skip-ent-e2e` label | ✅ Passes — a deliberate,
on-the-record opt-out |
| Website/tests, but **no** `e2e` label | ❌ Fails with "add the `e2e`
label to run enterprise tests" — so it can't be skipped by accident |
| Website/tests **+** `e2e` label | Runs the enterprise tests over in
o2-enterprise, waits for the result, and passes/fails with them. On
failure it posts a "🚫 Needs Review" comment linking the run |
The check always runs and reports a result on every PR (so unrelated PRs
are never left hanging), and it's the check you mark **"required"** in
branch protection to actually block a merge.
## How it works (technical)
- Companion engine: **o2-enterprise PR
https://github.com/openobserve/o2-enterprise/pull/2199**
(`oss-pr-ent-gate.yml`). This workflow dispatches it, polls it to
completion, and mirrors its pass/fail as this check.
- "Enterprise-only tests" are **auto-computed, not a hand-kept list** —
the engine diffs the two repos' Playwright test matrices (whatever the
enterprise side runs that openobserve doesn't). ~15 specs today.
- **Pure CI — no AI/LLM.** Deterministic dispatch + poll + comment.
- Fork PRs pass with a notice (the token/branch isn't available to
forks).
## Turn it on (one-time)
- Make **`ent-e2e-gate`** a required status check on `main` in branch
protection — the switch that actually enforces the block.
- `secrets.ORG_ADMIN_TOKEN` — already present (the docgen / e2e-council
callers use it).
- `vars.ENT_GATE_REF` — set to `ci/ent-e2e-gate` until the companion
engine PR merges, then change to `main`.
- `vars.ENT_E2E_GATE_DISABLED = 'true'` — kill switch (gate passes
without running anything).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>