Files
openobserve/.github/scripts
Shrinath RaoandClaude Opus 4.8 43263ad45e test: fix regression Merge Reports failing with missing html-report (force reporters) (#12939)
## Did we introduce this?

**No.** This is a pre-existing fragility in the `Merge Reports and
Upload to TestDino` job of the **Playwright Regression Tests** workflow
— the `unset CI` mechanism has been there since the workflow was created
(#11669, 2026-05). It is unrelated to any test change.

## Symptom

Job fails with exit code 2 **even when all e2e shards pass** (e.g. run
[28410300804](https://github.com/openobserve/openobserve/actions/runs/28410300804/job/84183381446)
— 11/11 shards green, only Merge Reports red):

```
Contents of playwright-results:
-rw-r--r-- 1 runner runner 0 ... .gitkeep
ls: cannot access 'playwright-results/html-report/': No such file or directory
##[error]Process completed with exit code 2.
```

## Root cause

`playwright.config.js` selects reporters by `process.env.CI`:

```js
reporter: process.env.CI
  ? [['blob', { outputDir: 'blob-report' }]]
  : [['html', { outputFolder: 'playwright-results/html-report' }], ['json', { outputFile: 'playwright-results/report.json' }]]
```

The merge step depended on `unset CI` to take the html/json branch. The
runner exports `CI=true`, and `unset CI` does not reliably reach the
`merge-reports` subprocess — so the config re-selects the **`blob`**
reporter, which writes a merged `blob-report/` and **nothing** into
`playwright-results/`. The downstream `ls
playwright-results/html-report/` then exits 2.

### Reproduced locally with this run's blob artifacts
- `CI=true` + `merge-reports --config playwright.config.js` → writes
`blob-report/report.zip`, no `playwright-results/html-report/` → `ls`
exit 2 (matches CI exactly).
- Reporters forced explicitly → always writes `html-report/index.html` +
`report.json`, regardless of `CI`.

## Fix

Stop depending on `unset CI`. Force the reporters and their output paths
explicitly:

```bash
PLAYWRIGHT_HTML_OUTPUT_DIR=playwright-results/html-report \
PLAYWRIGHT_HTML_OPEN=never \
PLAYWRIGHT_JSON_OUTPUT_NAME=playwright-results/report.json \
  npx playwright merge-reports --reporter html,json ./all-blob-reports
```

Plus a guard that fails with a clear message (and lists
`all-blob-reports/`) if the expected outputs are missing — instead of
the cryptic `ls` exit 2.

## Verification (local, against this run's 10 blob artifacts)

Simulating CI (`CI=true GITHUB_ACTIONS=true`):

```
merge exit=0
GUARD: PASS
playwright-results/html-report/index.html   (717 KB)
playwright-results/report.json              (587 KB, stats: expected=75 unexpected=0 flaky=0 skipped=9)
blob-report/   → not created
```

Downstream `jq '.stats'` reads the produced `report.json` correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 01:49:58 +00:00
..