mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-04 08:09:27 +00:00
77a4fc5f32e0bc1c8997dc508440bd59cdcf2c4d
542
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
12f8e134ff |
test(autoe2e): generated E2E tests for #11813 (logs-visualize-persistence) (#13010)
🤖 Auto-generated E2E tests for #11813 — **healed to passing** against a live OpenObserve before this PR was opened. - Branch `autoe2e/pr-11813` (stacked on `main`), so the tests run against the feature code and pass before it merges. - Spec: `tests/ui-testing/playwright-tests/Logs/logsVisualizePersistence.spec.js` The repo Playwright CI re-validates here. Review is for **quality + coverage** — the tests already pass. _Generated by the E2E Council pipeline._ **Test cases added / changed:** | Test case | Type | What it verifies | |---|---|---| | `should persist live mode / auto-run toggle across navigation` | extend | live-mode toggle state-guard added before navigation to catch silent no-op when auto_query_enabled is false | --------- Co-authored-by: Shrinath-O2 <214651540+Shrinath-O2@users.noreply.github.com> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
223a748b9f | fix: translation workflow improved (#13091) | ||
|
|
816e920cf4 |
test: add E2E coverage for dashboard table column formatting & filtering (#13057)
## Test Coverage — Dashboard Table Column Formatting & Filtering (PR #12531) ### Column Formatting | # | Test | Coverage | |---|------|----------| | 1 | Field type override | Auto-detected numeric column shows Value Formatting + Conditional Styling sections; forcing "text" hides them; forcing "num" restores them | | 2 | Custom unit | Custom unit input appears when unit = Custom; value persists after save + reopen | | 3 | Text/background color | Configured text & background color render correctly on the table cell | | 4 | Conditional styling | Two rules with non-overlapping thresholds prove genuine per-row, order-sensitive, last-match-wins rule evaluation | | 5 | Alignment | Changing alignment (Center) updates the cell's content justification | | 6 | Auto/unique color | Distinct column values render with distinct auto-assigned background colors | ### Column Filtering | # | Test | Coverage | |---|------|----------| | 7 | Filtering toggle | Enabling "Filtering" shows a filter icon in every column header | | 8 | Filter by value | Selecting a value narrows the table to matching rows; filter icon shows active state | | 9 | Clear filter | Clearing restores all rows and resets the filter icon | | 10 | Filter search | Typing in the search box narrows the value list to a "no matches" placeholder | | 11 | Filtering persistence | `table_filtering` toggle state survives save + reopen | ### Additional Changes - Extended `dashboard-panel-configs.js` / `dashboard-table-helpers.js` with reusable page-object methods for column formatting and filtering - Added `Dashboards-Charts` CI matrix entry in `.github/workflows/playwright.yml` |
||
|
|
2a3416ee35 |
fix: Rum automation (#13064)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
aed618785e |
ci: refine e2e gate — label always runs + skip unrelated workflow changes (#13061)
Two refinements to the `e2e` label gate (Playwright + API, OSS + ENT). ## 1. Adding the `e2e` label always runs the suite Previously the auto-bypass could override the label — add `e2e` to an otherwise-skippable PR and nothing ran, which was confusing. Now the label is an explicit **"run it"**: it always runs the full suite. Without the label, the skip logic still decides. | Event | `e2e` label | Change | Result | |---|---|---|---| | PR | **yes** | anything (even docs) | **run full suite** → pass/fail on results | | PR | no | relevant (code) | **block** (fail, "add label") | | PR | no | skip category (docs / unrelated workflow) | **pass, no run** | | push / merge queue / dispatch | n/a | relevant | run | | push / merge queue / dispatch | n/a | nothing relevant | pass, no run | Gate flips from `has_changes && (non-PR || label)` to `(PR && label) || (non-PR && has_changes)`; the summary is reworked to match. ## 2. Unrelated workflow changes no longer require e2e `check_changes` treated **any** `.github/workflows/**` change as relevant, so a Dependabot bump to an unrelated workflow (openobserve#13060, `update-translations.yml`) demanded the label. Now workflow files are bypassed by default; only a change to the suite's **own** workflow (`playwright.yml` / `api-testing.yml`) triggers it. Implemented with captured non-ignored lines instead of `grep -qv` (portable across grep builds). ## Note This PR changes `playwright.yml` + `api-testing.yml`, so it correctly **needs the `e2e` label** to run. Sibling PR on the other repo uses the same branch `ci/e2e-skip-unrelated-workflows`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
48b3f1f58a |
chore(deps): bump peter-evans/create-pull-request from 7 to 8 (#13060)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's releases</a>.</em></p> <blockquote> <h2>Create Pull Request v8.0.0</h2> <h2>What's new in v8</h2> <ul> <li>Requires <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions Runner v2.327.1</a> or later if you are using a self-hosted runner for Node 24 support.</li> </ul> <h2>What's Changed</h2> <ul> <li>chore: Update checkout action version to v6 by <a href="https://github.com/yonas"><code>@yonas</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li> <li>Update actions/checkout references to <a href="https://github.com/v6"><code>@v6</code></a> in docs by <a href="https://github.com/Copilot"><code>@Copilot</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li> <li>feat: v8 by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/yonas"><code>@yonas</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li> <li><a href="https://github.com/Copilot"><code>@Copilot</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p> <h2>Create Pull Request v7.0.11</h2> <h2>What's Changed</h2> <ul> <li>fix: restrict remote prune to self-hosted runners by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p> <h2>Create Pull Request v7.0.10</h2> <p>⚙️ Fixes an issue where updating a pull request failed when targeting a forked repository with the same owner as its parent.</p> <h2>What's Changed</h2> <ul> <li>build(deps): bump the github-actions group with 2 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li> <li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li> <li>fix: provider list pulls fallback for multi fork same owner by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/obnyis"><code>@obnyis</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p> <h2>Create Pull Request v7.0.9</h2> <p>⚙️ Fixes an <a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4228">incompatibility</a> with the recently released <code>actions/checkout@v6</code>.</p> <h2>What's Changed</h2> <ul> <li>~70 dependency updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a></li> <li>docs: fix workaround description about <code>ready_for_review</code> by <a href="https://github.com/ybiquitous"><code>@ybiquitous</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3939">peter-evans/create-pull-request#3939</a></li> <li>Docs: <code>add-paths</code> default behavior by <a href="https://github.com/joeflack4"><code>@joeflack4</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li> <li>docs: update to create-github-app-token v2 by <a href="https://github.com/Goooler"><code>@Goooler</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li> <li>Fix compatibility with actions/checkout@v6 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/joeflack4"><code>@joeflack4</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li> <li><a href="https://github.com/Goooler"><code>@Goooler</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li> <li><a href="https://github.com/ericsciple"><code>@ericsciple</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/peter-evans/create-pull-request/commit/5f6978faf089d4d20b00c7766989d076bb2fc7f1"><code>5f6978f</code></a> fix: retry post-creation API calls on 422 eventual consistency errors (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4356">#4356</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/d32e88dac789dcc7906e7d26f69f24116fa9c97d"><code>d32e88d</code></a> build(deps-dev): bump the npm group with 3 updates (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4349">#4349</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/8170bccad11c0df62542c04dcaefe36d342dfd39"><code>8170bcc</code></a> build(deps-dev): bump handlebars from 4.7.8 to 4.7.9 (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4344">#4344</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/00418193b417f888dbf1d993c5c0d31d27fdc7de"><code>0041819</code></a> build(deps): bump picomatch (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4339">#4339</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/b993918c8536b6d44706130734d5456879762b27"><code>b993918</code></a> build(deps-dev): bump flatted from 3.3.1 to 3.4.2 (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4334">#4334</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/36d7c8468b48f9c2f8f29e260e82f10d4b90d2bd"><code>36d7c84</code></a> build(deps-dev): bump undici from 6.23.0 to 6.24.0 (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4328">#4328</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/a45d1fb447fcaf601166e405fd4f335cde1a8aa8"><code>a45d1fb</code></a> build(deps): bump <code>@tootallnate/once</code> and jest-environment-jsdom (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4323">#4323</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/3499eb61835cc0015c0b786e203d74b1e8f55e43"><code>3499eb6</code></a> build(deps): bump the github-actions group with 2 updates (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4316">#4316</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/3f3b473b8c148f5a7520efb4d1f9a70eea3d9d1f"><code>3f3b473</code></a> build(deps): bump minimatch (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4311">#4311</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/6699836a213cf8b28c4f0408a404a6ac79d4458a"><code>6699836</code></a> build(deps-dev): bump the npm group with 2 updates (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4305">#4305</a>)</li> <li>Additional commits viewable in <a href="https://github.com/peter-evans/create-pull-request/compare/v7...v8">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
9cbc586ca4 | fix: rmum datasources cdn integration (#13039) | ||
|
|
df68a26fcf |
ci: drop redundant post-merge runs, gate regression on main changes (#13024)
## Why Our OSS Playwright + API CI compute (ubicloud build + eks matrix) is a major cost driver. Two sources of avoidable spend: 1. **Every merged PR ran the full heavy suite up to 3×** — on the PR (label-gated), in the merge queue (`merge_group`), and *again* on `push: main`. The `push: main` run is a duplicate of the `merge_group` run (both build/test the exact commit landing on main) **and** it bypasses the `e2e` label gate, clawing back the gate's savings. 2. **Regression runs every 4h regardless of whether `main` moved** — rebuilding and re-running the full matrix on identical code overnight/weekends. ## Changes **`playwright.yml` + `api-testing.yml`** - Remove the `push: main` trigger. `merge_group` remains the trusted main-ward validation. - **Cache fix (important):** the Rust cache was only *saved* on `push: main` runs (`save-if: github.ref == 'refs/heads/main'`). Deleting `push` alone would stop the cache ever refreshing → cold builds → *more* compute. So `save-if` now also fires on the `merge_group` run, which builds the exact soon-to-be-main commit. **`playwright_regression.yml`** - New `check_main_changed` gate: compares `main`'s HEAD to the last run's `head_sha` and skips build+matrix when nothing merged since. Manual `workflow_dispatch` always runs. The skip cascades cleanly (`playwright_summary` already treats skipped build/ui as success → stays green). ## Impact - ~1 full build + 146-shard matrix eliminated per merged PR (the `push:main` duplicate). - Idle-period regression runs (no merges) skipped instead of running the full matrix. - No coverage loss: merge queue still gates every merge; cache stays warm. ## Not in this PR (deferred per discussion) - `db-testing.yml` / `unit-tests.yml` `push:main` removal (cheaper, later). - ENT merge-queue adoption. - OSS→ENT dispatch (semgrep / endpoint-auth-probe) gating. Paired ENT change (regression gate): openobserve/o2-enterprise `ci/trim-redundant-runs`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
62a8f3f30b |
ci: gate Playwright + API tests behind an 'e2e' label + auto-bypass non-code changes (#13014)
## What Gate the full **Playwright (UI)** and **API** test suites on PRs behind a single **`e2e` label**, and **auto-bypass** PRs that only touch files which can't affect those suites. Covers `playwright.yml` and `api-testing.yml`. ## Behaviour (both suites) | Situation | build/test jobs | summary check (`playwright_summary` / `api_tests_summary`) | Mergeable? | |---|---|---|---| | PR with `e2e` label | full suite runs | green if tests pass | ✅ if green | | PR, no label, relevant code changed | skipped | **fails** ("add `e2e` label") | ❌ blocked | | PR, no label, docs/meta only | skipped | **passes** (auto-bypass) | ✅ | | Remove the `e2e` label | skipped (fresh run) | **fails** again | ❌ until re-added | | push to `main` / merge queue / dispatch | full suite runs | green if tests pass | n/a | One `e2e` label runs **both** UI + API. `push`, `merge_group`, and `workflow_dispatch` are never label-gated. ## Why the gate lives in the summary job A job that `if:`-skips reports `skipped`, which branch protection treats as **pass**. So a no-label PR can't be blocked by merely skipping jobs — the summary job **actively fails** when the change is relevant and the `e2e` label is absent. ## Auto-bypass (`check_changes`) No label needed for: `*.md/.mdx/.markdown/.rst/.adoc`, `docs/`, images/media, `LICENSE/NOTICE/AUTHORS/CONTRIBUTORS/CHANGELOG/.mailmap`, `CODEOWNERS`, GitHub issue/PR/funding templates, `dependabot`/`renovate`, `.gitignore/.gitattributes/.editorconfig/.gitkeep/.husky/.vscode/.idea`. The **API** workflow additionally bypasses `web/` + UI-test dirs (frontend changes don't affect API tests). **Not** bypassed (still trigger): `.github/workflows/**` (incl. these workflow files), source, `package*.json`/lockfiles, configs, `*.txt`. ## Rollout prerequisites - Create the **`e2e`** label in this repo. - Required status checks = **`playwright_summary`** and **`api_tests_summary`** — the individual shard jobs must NOT be required (they legitimately skip and would auto-pass). Sibling PR on the other repo uses the same branch `ci/e2e-label-gate`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
b36e7ce97d |
ci: add vamsikarthikr to team CI allowlists (#12997)
Adds new team member **@vamsikarthikr** to the OSS CI allowlists: - `.github/workflows/auto-assign-metadata.yml` — his PRs/issues get auto-assigned + milestoned like the rest of the engineering team. - `.github/workflows/query-agent.yml` — he can run `/query-agent` and `/qa-generate`. Allowlist entries only — no logic change. Sister PR (o2-enterprise#2085) adds him to the ENT auto-assign + codegen-council allowlists. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
ffb50b8345 |
test(autoe2e): generated E2E tests for #11814 (report-csv-media-type) (#13008)
🤖 Auto-generated E2E tests for #11814 — **healed to passing** against a live OpenObserve before this PR was opened. - Branch `autoe2e/pr-11814` (stacked on `main`), so the tests run against the feature code and pass before it merges. - Spec: `tests/ui-testing/playwright-tests/Reports/reportCsvMediaType.spec.js` The repo Playwright CI re-validates here. Review is for **quality + coverage** — the tests already pass. _Generated by the E2E Council pipeline._ **Test cases added / changed:** | Test case | Type | What it verifies | |---|---|---| | `CSV option is visible in the Report Type dropdown` | new | the CSV (Data) option appears in the report type OSelect dropdown | | `Selecting CSV hides Attachment Type and Custom Dimensions` | new | selecting CSV hides the email attachment type dropdown and custom dimensions section | | `Save a report with CSV type succeeds` | new | a full create-report flow with CSV type completes and the report appears in the list | | `Switching from CSV back to PDF restores Attachment Type and Custom Dimensions` | new | toggling from CSV to PDF re-displays the attachment type and custom dimensions controls | | `Selecting PNG type shows PNG warning banner` | new | selecting PNG as the report type displays the PNG deprecation warning banner | | `Edit mode: a previously saved CSV report shows CSV as selected and controls hidden` | new | editing a CSV report reflects CSV as selected and keeps attachment type + dimensions hidden | --------- Co-authored-by: Shrinath-O2 <214651540+Shrinath-O2@users.noreply.github.com> |
||
|
|
81e2d7a42f |
test: heal E2E regressions + ENT shard failures from scoped SCSS removal (#12764) & OTag refactors (#12999)
## What this fixes The scheduled **regression suite** started failing on `main` after **#12764 (scoped scss styles removal)**, and validating the fix on the **enterprise build** surfaced several more failures in the same family (plus a couple unrelated ones). This PR heals **all of them**. Every fix is either a page-object selector update or a small, inert `data-test` hook — **no product behaviour changes**. ## Everything fixed | Area | Test | Root cause | Fix | Verified | |---|---|---|---|---| | **Streams** regression | `query expand icon #9337` | #12764 replaced `.editor-fullscreen` class with inline classes on `isFocused` | `data-fullscreen` hook on the container + detect via it | ✅ local | | **Alerts** regression | `Bug #9967 PromQL alert` | #12764 turned the PromQL operator into `<OSelect data-test="alert-threshold-operator-select">`, dropping `.alert-v3-select` | data-test + popover-option pattern (+ fail-fast fallback) | ✅ local | | **RUM** (ENT) | 3× `sourcemap-ui` | #12764 moved `.error-viewer-container` → data-test and dropped `.tags-title` | rumPage selectors + `data-test="error-tags-title"` hook | ✅ local | | **Logs-Features** (ENT) | `searchPatterns … wildcard chips` | chip moved from `.wildcard-chip` class to `<OTag data-test="pattern-card-wildcard-chip">` | target the data-test hook | ✅ local | | **Traces** (ENT) | `service-graph` user/search-service status | health badge moved from `.health-badge.<status>` classes to `<OTag data-test="service-health-badge">` | read status from the badge's text | ⚙️ ENT CI¹ | | **Dashboards-Core** | `line chart … camelCase zero values` | *(not #12764)* a line chart whose series are entirely zero renders "No Data" | one series counts all rows so the chart always renders | ✅ local | ¹ Traces service-graph needs an enterprise daemon that isn't available locally; validated against the component's own unit spec (`ServiceGraphNodeSidePanel.spec.ts`), confirmed on ENT CI. ## Root-cause themes 1. **#12764 (scoped SCSS removal)** deleted/renamed CSS classes that E2E page objects targeted. It added `data-test` hooks to *some* elements but not others — so tests anchored on bare `.class` selectors broke. The fix everywhere is to move those anchors to durable `data-test` hooks. 2. **`OTag`/`OSelect` component migrations on `main`** continued this: the components gained `data-test` hooks but the (enterprise-only) page objects were never updated. Because those specs are `@enterprise`, OSS CI never runs them — so they merged broken and only surfaced on the enterprise build. ## Product-code touched (test hooks only, inert) - `SearchBar.vue` — `data-fullscreen` attribute (no CSS/JS/snapshot consumers; styling still driven by the existing `isFocused` class binding) - `ErrorTags.vue` — `data-test="error-tags-title"` Everything else is under `tests/ui-testing/`. ## Verification Verified locally against a fresh frontend build (all green): Streams `#9337`, Alerts `#9967`, RUM (3), Dashboards-Core, Logs-Features searchPatterns. Traces service-graph is validated via its component unit spec + the enterprise CI run (it can't run locally without the service-graph daemon). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
7ad182b167 |
test(test-assist-ci): vision-preprocessor fixture + caller filter fix (#12973)
Consolidated OSS-side changes for the vision preprocessor rollout. Two things bundled here — both small, both OSS-only, related by "unblocks test-assist real-issue verification." ## Change 1 — Caller filter fix (originally in #12972, now closed) **One-line fix** for `.github/workflows/test-assist-caller.yml`: ```yaml # BEFORE — broken (silently skipped every /verify-bug comment on real issues) github.event.issue.pull_request == null # AFTER — truthy negation, evaluates correctly for undefined fields !github.event.issue.pull_request ``` Yesterday: 5 `/verify-bug` comments on real issues (#12452, #12647, #12603, #12820, #11700 — all by @neha00290, MEMBER association) produced 5 caller runs with `conclusion: skipped` and empty steps arrays. Root cause: `== null` compared against an *undefined* field in GHA expression context returns unexpected results → the entire OR short-circuited to false. The council caller uses the truthy check in the opposite direction (`github.event.issue.pull_request` alone → *requires* a PR). We use the negation of the same pattern — proven, works. ## Change 2 — Vision preprocessor fixture (`bug-002-image-attachment.json`) Adds fixture #90002 whose repro info lives **entirely in an image attachment**: - body has `Steps to Reproduce: _No response_` - body embeds a stable github.com/user-attachments/... permalink (streams-page screenshot from real bug #11700) Pairs with the ENT-side vision preprocessor PR (adds extract-attachments + describe-via-GLM-4.6V-Flash steps before Analyst). Success = pipeline extracts the image, GLM describes it, Analyst uses the description → produces `area: Streams` + `testability >= MEDIUM` instead of skipping for "no repro steps." `expected-verdicts.json` updated with the pipeline-signal expectations for #90002. ## Why bundled Both changes unblock real-bug verification. The caller fix means `/verify-bug` starts dispatching; the fixture proves the vision preprocessor works on visual-only bugs. Reviewing them together is faster than in isolation. ## Test plan - [x] YAML parses; fixture JSON valid; expected-verdicts JSON valid - [ ] After merge (this + ENT PR): comment `/verify-bug` on any Needs-Testing issue → expect caller job to RUN (not skip) → engine dispatched - [ ] After merge: dispatch fixture 90002 via workflow_dispatch → confirm vision preprocessor produces non-empty `bug-90002-attachments.md` → confirm Analyst produces `area: Streams` + non-SKIP testability Closes #12972. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
86fc9973c1 |
ci: revert the env specification in package.json (#12974)
~Powershell is ... weird~ ~bash good.~ No no, no no no, this time maybe windows was right and I was wrong. --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
ee008d661a |
test: convert query-agent to thin caller (engine in o2-enterprise) (#12853)
## Summary - Thin caller (~70 lines) that watches OSS PRs and forwards to the reusable engine in \`o2-enterprise\` - Replaced the old self-contained 374-line workflow — all real logic (triage, build, test, generation) lives in the ENT engine - Running as \`workflow_call\` means the engine executes in OSS context (OSS \`GITHUB_TOKEN\`) — so it can comment on OSS PRs, push \`autoqa/*\` branches, and open OSS PRs without a cross-repo token - Input validation job guards the \`workflow_dispatch\` path (numeric \`pr_number\` check) before forwarding to the engine - ENT engine is pinned to a specific commit SHA (supply-chain safety — no floating \`@main\`) ## Entry points | Comment | Phase | Action | |---|---|---| | \`/query-agent\` | A | Run existing 675+ SQL regression suite | | \`/qa-generate\` | A + B | Run regression suite AND generate new SQL queries, open autoqa PR | | \`workflow_dispatch\` | A or B | Manual trigger via \`generation_mode\` choice | ## What lives where | Thing | Repo | Why | |---|---|---| | Caller workflow | OSS | Triggers from OSS PR comments | | Engine workflow | ENT | All logic, private | | Agent prompt files (qa-ci-\*) | ENT | Private — never exposed in public OSS repo | | Generated test files (\`queries/\*.json\`) | OSS | OSS SQL regression tests run in ENT CI | | \`compute_counts.py\`, \`data_gen.py\` | OSS | Test data generation scripts | ## Related - Engine PR (o2-enterprise): https://github.com/openobserve/o2-enterprise/pull/1988 - Supersedes: #12749 (standalone Phase B workflow — logic moved to ENT engine) ## Merge order ENT PR #1988 must merge first. After merge, update the SHA pin on line 84 of this file to the new ENT \`main\` commit, then merge this PR. ## Test plan - [ ] \`/query-agent\` comment on an OSS PR triggers Phase A via the engine; triage comment appears on the OSS PR - [ ] \`/qa-generate\` comment triggers Phase A + B; an \`autoqa/pr-N\` PR is opened in OSS with new query JSON files - [ ] \`workflow_dispatch\` with \`dry_run=true\` runs triage only, no tests - [ ] Non-integer \`pr_number\` in \`workflow_dispatch\` is rejected before forwarding 🤖 Generated with [Claude Code](https://claude.ai/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
ea039d0940 |
ci: add test-assist-ci caller + fixture data (#12946)
## Summary Thin OSS caller for the upcoming **Test-Assist** automated bug-verification pipeline — first piece of a 3-PR rollout. Mirrors the existing [`docgen-caller.yml`](.github/workflows/docgen-caller.yml) and [`e2e-council-caller.yml`](.github/workflows/e2e-council-caller.yml) patterns: the heavy engine will live in `o2-enterprise`; this caller only gates the trigger and dispatches via `ORG_ADMIN_TOKEN`. - **`.github/workflows/test-assist-caller.yml`** — caller workflow with two doors (`workflow_dispatch` + `/verify-bug` issue comments by org members). Defaults to `fixture_mode=true` / `write_mode=false` so the engine can't post to real issues until explicitly flipped. - **`tests/test-data/test-assist-ci/`** — fixture issue (#90001) + log seed data + `expected-verdicts.json` contract. Lets the engine soak in `FIXTURE_MODE=true` against synthetic data without touching real `Needs-Testing` issues. - **`tests/ui-testing/.gitignore`** — adds `_ci_tmp/` for the throwaway specs the engine generates per run. ### Differences from docgen / e2e-council callers | Dimension | docgen / e2e-council | test-assist | |---|---|---| | Operates on | PRs | **Issues** (`.issue.pull_request` filter dropped) | | Comment trigger | `/docgen`, `/e2e` | `/verify-bug` | | Inputs | pr_number, dry_run | issue_number, **fixture_mode**, **write_mode** | | Default safety | dry_run=true on comment | write_mode=false on every door | ### Rollout sequencing 1. **This PR** — OSS caller + fixtures + gitignore (no engine yet → caller will 404 on dispatch; intentional) 2. **Follow-up ENT PR** — `o2-enterprise/.opencode/agents/test_assist_ci/` (6 opencode sub-agents + README) 3. **Follow-up ENT PR** — `o2-enterprise/.github/workflows/test-assist.yml` (the engine itself) ## Test plan - [ ] CI: workflow YAML parses (verified locally via `python3 -c "import yaml; yaml.safe_load(open(...))"` — passes) - [ ] After ENT engine PR merges: trigger via `workflow_dispatch` with default inputs (`issue_number=90001`, `fixture_mode=true`, `write_mode=false`) → expect engine ack + fixture verdict in job summary, **no** GitHub writes - [ ] After soak: trigger `workflow_dispatch` with `fixture_mode=false` on a hand-picked `Needs-Testing` issue, `write_mode=false` → verdict in summary only - [ ] After verdict accuracy is calibrated: org member comments `/verify-bug` on a real issue, `write_mode=true` flipped via repo vars → comment + labels post 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
34646a9cfa |
test: auto-rerun failed Playwright Regression jobs (#12953)
## What Adds **Playwright Regression Tests** to the auto-rerun workflow (`playwright-auto-rerun.yml`), so a failed regression run automatically re-runs only its failed jobs once — matching the existing behavior for UI tests. ## Why Until now `playwright-auto-rerun.yml` only watched **Playwright UI Tests**. Regression failures (often flakes) required manual re-runs. ## Change - Added `"Playwright Regression Tests"` to the `workflow_run` `workflows` list. The existing `if` (`run_attempt == 1`) and `gh run rerun --failed` step are workflow-name-agnostic, so no other changes are needed — regression gets exactly 1 auto-retry. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
6081bcd3d8 |
ci: split merge / TestDino / OpenObserve into separate jobs + harden merge (#12942)
## Why The scheduled OSS regression kept failing in `Merge Reports and Upload to TestDino` even after the reporter fix (#12939): in [run 28417106847](https://github.com/openobserve/openobserve/actions/runs/28417106847) all 11 shards passed but `merge-reports` **bailed mid-merge** on the `ubicloud-standard-4` runner (extracted ~4 of 10 blobs, exited 0 without building the report). The blobs are valid 1.50.0 and merge cleanly locally — it's a runner-resource issue. ENT's EKS runner completes the same merge, which is why it passed there. The job also folded merge + TestDino upload + OpenObserve metrics together, so any hiccup cascaded. ## What Split the one job into **three independent jobs** (in both `playwright.yml` and `playwright_regression.yml`): | Job | Role | |-----|------| | **merge_reports** | merge blobs → extract stats/flaky → upload merged report as artifact. Bumped to `ubicloud-standard-8` + `merge-reports` wrapped in a 3× retry. | | **upload_testdino** | own job, only on test failure, consumes the merged report via artifact. | | **report_openobserve** | own job, `continue-on-error` metrics, consumes stats/flaky via job outputs. | `playwright_summary` now `needs:` only `[build_binary, ui_integration_tests, merge_reports]` — **never** TestDino or OpenObserve, so reporting plumbing can't block the run's pass/fail signal. Pairs with ENT `test/ci-split-report-jobs`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
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> |
||
|
|
01f4a6cc08 |
chore(deps): bump actions/cache from 5 to 6 (#12936)
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/cache/releases">actions/cache's releases</a>.</em></p> <blockquote> <h2>v6.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update packages, migrate to ESM by <a href="https://github.com/Samirat"><code>@Samirat</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1760">actions/cache#1760</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v5...v6.0.0">https://github.com/actions/cache/compare/v5...v6.0.0</a></p> <h2>v5.1.0</h2> <h2>What's Changed</h2> <ul> <li>Bump <code>@actions/cache</code> to v5.1.0 - handle read-only cache access by <a href="https://github.com/jasongin"><code>@jasongin</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1775">actions/cache#1775</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v5...v5.1.0">https://github.com/actions/cache/compare/v5...v5.1.0</a></p> <h2>v5.0.5</h2> <h2>What's Changed</h2> <ul> <li>Update ts-http-runtime dependency by <a href="https://github.com/yacaovsnc"><code>@yacaovsnc</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1747">actions/cache#1747</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v5...v5.0.5">https://github.com/actions/cache/compare/v5...v5.0.5</a></p> <h2>v5.0.4</h2> <h2>What's Changed</h2> <ul> <li>Add release instructions and update maintainer docs by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1696">actions/cache#1696</a></li> <li>Potential fix for code scanning alert no. 52: Workflow does not contain permissions by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1697">actions/cache#1697</a></li> <li>Fix workflow permissions and cleanup workflow names / formatting by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1699">actions/cache#1699</a></li> <li>docs: Update examples to use the latest version by <a href="https://github.com/XZTDean"><code>@XZTDean</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1690">actions/cache#1690</a></li> <li>Fix proxy integration tests by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1701">actions/cache#1701</a></li> <li>Fix cache key in examples.md for bun.lock by <a href="https://github.com/RyPeck"><code>@RyPeck</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1722">actions/cache#1722</a></li> <li>Update dependencies & patch security vulnerabilities by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1738">actions/cache#1738</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/XZTDean"><code>@XZTDean</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1690">actions/cache#1690</a></li> <li><a href="https://github.com/RyPeck"><code>@RyPeck</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1722">actions/cache#1722</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v5...v5.0.4">https://github.com/actions/cache/compare/v5...v5.0.4</a></p> <h2>v5.0.3</h2> <h2>What's Changed</h2> <ul> <li>Bump <code>@actions/cache</code> to v5.0.5 (Resolves: <a href="https://github.com/actions/cache/security/dependabot/33">https://github.com/actions/cache/security/dependabot/33</a>)</li> <li>Bump <code>@actions/core</code> to v2.0.3</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v5...v5.0.3">https://github.com/actions/cache/compare/v5...v5.0.3</a></p> <h2>v.5.0.2</h2> <h1>v5.0.2</h1> <h2>What's Changed</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/actions/cache/blob/main/RELEASES.md">actions/cache's changelog</a>.</em></p> <blockquote> <h1>Releases</h1> <h2>How to prepare a release</h2> <blockquote> <p>[!NOTE] Relevant for maintainers with write access only.</p> </blockquote> <ol> <li>Switch to a new branch from <code>main</code>.</li> <li>Run <code>npm test</code> to ensure all tests are passing.</li> <li>Update the version in <a href="https://github.com/actions/cache/blob/main/package.json"><code>https://github.com/actions/cache/blob/main/package.json</code></a>.</li> <li>Run <code>npm run build</code> to update the compiled files.</li> <li>Update this <a href="https://github.com/actions/cache/blob/main/RELEASES.md"><code>https://github.com/actions/cache/blob/main/RELEASES.md</code></a> with the new version and changes in the <code>## Changelog</code> section.</li> <li>Run <code>licensed cache</code> to update the license report.</li> <li>Run <code>licensed status</code> and resolve any warnings by updating the <a href="https://github.com/actions/cache/blob/main/.licensed.yml"><code>https://github.com/actions/cache/blob/main/.licensed.yml</code></a> file with the exceptions.</li> <li>Commit your changes and push your branch upstream.</li> <li>Open a pull request against <code>main</code> and get it reviewed and merged.</li> <li>Draft a new release <a href="https://github.com/actions/cache/releases">https://github.com/actions/cache/releases</a> use the same version number used in <code>package.json</code> <ol> <li>Create a new tag with the version number.</li> <li>Auto generate release notes and update them to match the changes you made in <code>RELEASES.md</code>.</li> <li>Toggle the set as the latest release option.</li> <li>Publish the release.</li> </ol> </li> <li>Navigate to <a href="https://github.com/actions/cache/actions/workflows/release-new-action-version.yml">https://github.com/actions/cache/actions/workflows/release-new-action-version.yml</a> <ol> <li>There should be a workflow run queued with the same version number.</li> <li>Approve the run to publish the new version and update the major tags for this action.</li> </ol> </li> </ol> <h2>Changelog</h2> <h3>6.1.0</h3> <ul> <li>Bump <code>@actions/cache</code> to v6.1.0 to pick up <a href="https://redirect.github.com/actions/toolkit/pull/2435">actions/toolkit#2435 Handle cache write error due to read-only token</a></li> <li>Switch redundant "Cache save failed" warning to debug log in save-only</li> </ul> <h3>6.0.0</h3> <ul> <li>Updated <code>@actions/cache</code> to ^6.0.1, <code>@actions/core</code> to ^3.0.1, <code>@actions/exec</code> to ^3.0.0, <code>@actions/io</code> to ^3.0.2</li> <li>Migrated to ESM module system</li> <li>Upgraded Jest to v30 and test infrastructure to be ESM compatible</li> </ul> <h3>5.0.4</h3> <ul> <li>Bump <code>minimatch</code> to v3.1.5 (fixes ReDoS via globstar patterns)</li> <li>Bump <code>undici</code> to v6.24.1 (WebSocket decompression bomb protection, header validation fixes)</li> <li>Bump <code>fast-xml-parser</code> to v5.5.6</li> </ul> <h3>5.0.3</h3> <ul> <li>Bump <code>@actions/cache</code> to v5.0.5 (Resolves: <a href="https://github.com/actions/cache/security/dependabot/33">https://github.com/actions/cache/security/dependabot/33</a>)</li> <li>Bump <code>@actions/core</code> to v2.0.3</li> </ul> <h3>5.0.2</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9"><code>55cc834</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1768">#1768</a> from jasongin/readonly-cache</li> <li><a href="https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337"><code>d8cd72f</code></a> Bump <code>@actions/cache</code> to v6.1.0 - handle cache write error due to RO token</li> <li><a href="https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8"><code>2c8a9bd</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1760">#1760</a> from actions/samirat/esm_migration_and_package_update</li> <li><a href="https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023"><code>e9b91fd</code></a> Prettier fixes</li> <li><a href="https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb"><code>e4884b8</code></a> Rebuild dist</li> <li><a href="https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f"><code>10baf01</code></a> Fixed licenses</li> <li><a href="https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37"><code>e39b386</code></a> Fix test mock return order</li> <li><a href="https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06"><code>b692820</code></a> PR feedback</li> <li><a href="https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1"><code>6074912</code></a> Rebuild dist bundles as ESM to match type:module</li> <li><a href="https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e"><code>5a912e8</code></a> Fix lint and jest issues</li> <li>Additional commits viewable in <a href="https://github.com/actions/cache/compare/v5...v6">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
bfd8c72504 |
ci: migrate CI runners repo-openobserve-standard -> eks-openobserve-standard (#12931)
Migrates the self-hosted runner label from the `repo-openobserve-standard-*` pool to the `eks-openobserve-standard-*` pool. ### Changes - \`.github/workflows/release.yml\`: \`repo-openobserve-standard-4\` → \`eks-openobserve-standard-4\` (1 instance) This is the OSS half of a paired runner migration. The ENT counterpart (same branch name \`ci/eks-runner-rename\`) renames \`repo-o2-enterprise-standard-*\` → \`eks-o2-enterprise-standard-*\` across its workflows. Untouched: \`ubicloud-standard-*\` labels (different pool, not part of this migration). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: mmosarafO2 <mosraf@openobserve.ai> |
||
|
|
1155da8400 |
ci: per-test flaky/failed → ci_test_results + per-shard API counts → ci_test_counts (#12930)
## Why
Two CI-observability gaps, both about **per-test/per-shard counts** that
the run-level metrics couldn't show:
1. **Flaky vs failed was conflated.** "Failed Shards by Module" counted
shard-*job* failures — but a shard that **failed then passed on rerun is
flaky, not failed**. A bare count told you nothing and misclassified
recovered flakes as failures.
2. **API had no test counts at all.** API `ci_test_runs` rows carried
only run health (conclusion/duration) — `tests_total` was NULL — so the
Test Counts dashboard had nothing for API.
## What
### Per-test flaky **and** failed → `ci_test_results`
- The **merge job** parses the merged `report.json` for tests with
`status="flaky"` (failed→passed on retry) or `status="unexpected"`
(failed after retries) via the new commented
**`.github/scripts/extract-flaky.js`**, emitting **title + module +
status**.
- **report_to_openobserve** posts **one row per such test** to
**`ci_test_results`**.
- Row schema: `{run_id, repo, suite, workflow, ingest_source, status
("flaky"|"failed"), module, test_title, test_file}` — powers accurate
per-module **flaky** *and* **failed** dashboards, no misclassification.
### Per-shard API test counts → `ci_test_counts` (+ run-doc total)
- Each API pytest job emits `--junitxml` and uploads an
**`api-junit__<category>__<leg>`** artifact (category = the test shard:
integration / query_agent / regression / … ENT also cli / vortex_* /
oss_in_ent / ent_top / ent_rbac).
- **report_to_openobserve** runs
**`.github/scripts/parse-api-junit.py`**, which reads the category per
artifact and **dedups config-leg reruns by test identity** (query_agent
opt true|false, regression flag combos) so the same suite isn't counted
twice.
- The deduped **total** folds into the run doc (`ci_test_runs`,
suite=api) so API shows in the same KPI/pie panels as UI; **per-category
rows** go to the new **`ci_test_counts`** stream for the per-shard
breakdown (the API analog of UI's `ci_test_modules`).
## Notes
- **Forward-only** — historical runs never stored junit / per-test names
(only counts), so no backfill; both streams accumulate from merge.
- All **non-fatal**: any parse/ingest error only warns, never fails the
workflow. `_timestamp` unset → ingest time.
- Pairs with the same-named branch on the other repo (OSS ⇄ ENT).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|
|
8af4a70be1 | fix: refactored translation job to make it more effective (#12921) | ||
|
|
0a2cbdb387 |
ci: emit per-shard rows for UI runs (ci_test_runs_shards) — e2e per-shard dashboards (#12919)
Gives the **e2e/UI tabs** the same per-shard breakdown that Regression already has (Slowest Shards / Shard Duration over time / Per-Module Health). `o2-run-report.sh` already sees every `e2e /` shard job in `THIS_JOBS`; this also flattens them to one row per shard in **`ci_test_runs_shards`** (mirrors `ci_regression_shards`). API runs have no `e2e /` jobs → no-op. `_timestamp` unset → ingest time (aligned with the run doc). bash + jq verified locally. Pairs with the same-branch ENT PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
99b3093c2f |
ci: bump node version to 24 (#12811)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
48d8cf770c |
fix: broken UI/API metrics ingest (bash brace-default mangled jq --argjson) (#12918)
## Urgent — regression from #12917 `o2-run-report.sh` used `--argjson shards "${SHARDS:-{}}"`. In bash, `${SHARDS:-{}}` parses as **“SHARDS or `{`” plus a trailing literal `}`**, so when SHARDS was set jq received `{...}}` — invalid JSON → `payload build failed` → **no `ci_test_runs` doc ingested for any UI/API run since #12917 merged** (~1h of missing UI/API run metrics). Regression + inventory are unaffected (they don't use this script). ## Fix `SHARDS` and `BUILD_DUR` are already defaulted (`'{}'` / `null`) just above, so pass them directly: ``` --argjson build "$BUILD_DUR" --argjson shards "$SHARDS" ``` Verified locally: payload now builds (`build_duration_sec:360, shards_total:21, shards_failed:1`); `bash -n` clean. Please merge ASAP to restore UI/API reporting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
65296d88ab |
ci: capture build time + shard tallies (UI/API) + per-shard regression rows (#12917)
Closes the **UI ↔ Regression dashboard parity** gaps by capturing the few fields the dashboards were missing. One PR (pairs with the same-branch ENT PR). ## Changes - **`o2-run-report.sh`** (UI + API runs → `ci_test_runs`): adds - `build_duration_sec` (from the `build_binary` job) - `shards_total / shards_passed / shards_failed / shards_skipped` (from the `e2e /` shard jobs) - Null/0 for suites without them (API) — harmless. - **`playwright_regression.yml`**: after the run doc, emits **one row per shard** to a new **`ci_regression_shards`** stream (flattened from `payload.shards`) → enables per-shard duration / slowest-shard / per-module panels. ## Why The Regression tab had per-shard + build-time panels that UI/Combined couldn't match because the data wasn't captured. Now it is. ## Safety All additions are non-fatal (the report job is `continue-on-error`; shard emit is guarded). Verified locally: build/shard jq (build=360, shards total/passed/failed correct), per-shard row shape (module extracted), and YAML. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
9bf7164e2b |
ci: capture UI (Playwright) per-test counts (ci_test_runs) (#12915)
## What Capture **UI (Playwright) per-test counts** in the `ci_test_runs` OpenObserve stream — `tests_total/passed/failed/flaky/skipped` per run. This was meant to land in #12914 but missed that squash-merge (pushed just after), so it's its own PR now. Companion: o2-enterprise#2046. ## How - `playwright.yml` merge job gains a `stats` output (from the merged `report.json`). - `report_to_openobserve` reads it and emits the test-count fields via a small generic **`EXTRA_JSON`** merge hook added to `o2-run-report.sh`. - Non-fatal as before; no-ops when secrets are unset. API (pytest) counts are not included (would need `--junitxml` + XML aggregation — separate change). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
5f3bda8bac |
fix(council/docgen caller): post 'started' + failure comments as the human PAT, not github-actions[bot] (#12900)
The OSS **caller** workflows posted their source-PR comments with `github.token`, so they showed as `github-actions[bot]` — e.g. the "🤖 E2E Council — started" comment on #12857. This completes the committer/comment PAT work from o2-enterprise#2022 (commits) and #2033 (docgen engine comments), which covered the **engines** but not the **OSS-side callers**. ### Changed - `e2e-council-caller.yml` — "started" ack + dispatch-failure notice → `ORG_ADMIN_TOKEN` - `docgen-caller.yml` — "started" ack → `ORG_ADMIN_TOKEN` - **Deleted `e2e-council-legacy.yml`** — the retired OSS-resident engine, superseded by the ENT engine + caller. It was `workflow_dispatch`-only (its `/e2e` + auto-on-merge triggers were removed on retirement) so it couldn't fire on `/e2e`, but it still had ~8 `github-actions[bot]` comment/reaction steps. No workflow references it. `ORG_ADMIN_TOKEN` is already used in these callers to dispatch the engine, so it's available; comments now post as the human PAT owner. ### Full audit (both repos, all council/docgen workflows) After this + #2033, **every** comment/PR-posting op across ENT `e2e-council.yml` + `docgen.yml` and OSS `e2e-council-caller.yml` + `docgen-caller.yml` uses `ORG_ADMIN_TOKEN`. No remaining `github.token`/`GITHUB_TOKEN` posters. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
94f6aab74e |
ci: live retry-aware metrics for playwright, api-testing + regression (#12914)
## What Makes the per-run test dashboards **live**. Adds non-fatal `report_to_openobserve` jobs that emit **one retry-aware run-summary doc per run** to OpenObserve, following the metrics work merged earlier (regression/docgen/council). Companion PR in the other repo mirrors this. **Scope (this PR):** 1. **`playwright.yml` + `api-testing.yml`** → new report jobs → `ci_test_runs` (`suite=ui` / `suite=api`). 2. **`playwright_regression.yml`** → retry-aware reporting → `ci_regression` (OSS: augments the existing job; ENT: adds the job — was uninstrumented). ## How it works - **Shared `.github/scripts/o2-run-report.sh`** (used by playwright/api) derives the run's `conclusion` from job results, wall-clock from the jobs API, and **sums cost across all attempts**. Regression jobs do the same inline (they also emit shard/build/test fields). - Emits: `run_id`, `run_attempt`, `retries`, `was_retried`, `conclusion`, `suite`, `repo`, `branch`, `author`, `commit_sha`, `pr_number`, `trigger`, `final_duration_sec`, `total_duration_sec`, `retry_wasted_sec`. - **Dedup model:** re-runs append one doc per attempt; dashboards keep the **latest attempt per `run_id`** via `row_number() OVER (PARTITION BY run_id ORDER BY run_attempt DESC)`. Retries become an *attribute*, never duplicate rows; `total_duration_sec` on the kept row carries cumulative compute. - **Safe by construction:** `continue-on-error` + the never-fail poster — can't fail/slow a test run; skips when no tests ran; **no-ops until `O2_REPORTING_*` secrets are set**. ## Review AI review addressed (mktemp payload, `GH_TOKEN` guard, non-negative duration clamp). YAML + jq unit-tested + `actionlint` clean on the added jobs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
bfade1f4f3 |
ci: report regression run metrics to OpenObserve (ci_regression) (#12912)
## What
Adds a CI→OpenObserve metrics sidecar to the Playwright Regression
workflow. A new terminal job `report_to_openobserve` emits **one summary
JSON document per run** into the `ci_regression` OpenObserve stream, so
we can build reliability/performance dashboards.
This is the OSS half of a cross-repo change — the companion
o2-enterprise PR (`ci/o2-reporting`) instruments the DocGen and E2E
Council engines into `ci_docgen` / `ci_council`.
## How it works (safe by construction)
- **Non-invasive:** derives per-job timings + per-shard pass/fail from
the GitHub jobs API and the merged Playwright stats. The only edit to an
existing job is one additive `stats` output on
`merge_and_upload_reports`.
- **Cannot break CI:** the job is `continue-on-error` and posts through
`.github/scripts/o2-report.sh`, which always `exit 0`s (a missing secret
/ rotated passcode / unreachable host only warns).
- **No-ops until secrets exist** — safe to merge first.
## Metrics captured
Reliability (conclusion, shard pass/fail, test pass/fail/flaky/skipped),
duration & cost (wall-clock, `runner_seconds`, build time, per-shard
durations), throughput (trigger/actor/branch).
## Required secrets (this repo + o2-enterprise)
- `O2_REPORTING_INGEST_BASE` — `https://<host>/api/<org>`
- `O2_REPORTING_AUTH` — `base64("email:passcode")`
Full schema, dashboard SQL, and setup notes:
`.github/scripts/O2-REPORTING.md`.
## Validation
- YAML parse + jq unit tests + `actionlint` clean on the added code.
- Live **HTTP 200** test-ingest into the target instance, both via raw
curl and through the poster script.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|
|
702af87f0b |
test: add alert history and report bulk-ops E2E tests (main / UX revamp) (#12883)
## Summary Port of [#12882](https://github.com/openobserve/openobserve/pull/12882) (v0.80.0) adapted for main branch's UX revamp. **Alerts — `alerts-history.spec.js` (6 tests)** - All selectors identical to v0.80.0 — `AlertHistory.vue` data-test attrs unchanged in main - `expectDetailsDialogVisible()` updated to use `data-test="alert-history-details-dialog"` (ODialog) instead of `.alert-details-dialog` CSS class **Reports — `reports-bulk-operations.spec.js` (6 tests)** - Bulk pause/resume tests **omitted** — `report-list-pause-reports-btn` / `report-list-resume-reports-btn` do not exist in main's `ReportList.vue` (only row-level pause exists) - Bulk delete confirmation updated for `ConfirmDialog`'s new ODialog pattern: `[data-test="confirm-dialog"] [data-test="o-dialog-primary-btn"]` - `cancelBulkDelete` updated to use `o-dialog-secondary-btn` ## Key selector changes from v0.80.0 → main | Component | v0.80.0 | main | |---|---|---| | Alert details dialog | `.alert-details-dialog` (CSS class) | `[data-test="alert-history-details-dialog"]` | | Confirm button | `[data-test="confirm-button"]` | `[data-test="confirm-dialog"] [data-test="o-dialog-primary-btn"]` | | Cancel button | `[data-test="cancel-button"]` | `[data-test="confirm-dialog"] [data-test="o-dialog-secondary-btn"]` | ## Related PRs - v0.80.0 OSS: #12882 - v0.80.0 ENT: openobserve/o2-enterprise#2017 ## Test plan - [ ] CI passes on `main` - [ ] Alert history: 6 tests green - [ ] Report bulk operations: 6 tests green (move, delete, cancel ×2, hidden, select-all) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
e529f99100 | ci: instrument code review (#12901) | ||
|
|
f4ba2e2dd6 |
test(autoe2e): generated E2E tests for #12857 (fts-default-column) (#12902)
🤖 Auto-generated E2E tests for #12857 — **healed to passing** against a live OpenObserve before this PR was opened. - Branch `autoe2e/pr-12857` (stacked on `main`), so the tests run against the feature code and pass before it merges. - Spec: `tests/ui-testing/playwright-tests/Logs/ftsDefaultColumn.spec.js` The repo Playwright CI re-validates here. Review is for **quality + coverage** — the tests already pass. _Generated by the E2E Council pipeline._ **Test cases added / changed:** | Test case | Type | What it verifies | |---|---|---| | `should clear FTS selection on stream change and re-resolve for new stream` | extend | switching streams clears the carried-over FTS default selection, then re-resolves the FTS default column for the new stream on the next search | | `should clear FTS default on field reset and re-resolve on next search` | extend | clicking the field-list reset icon clears the auto-picked FTS default column from the table, then running a new search re-resolves it | --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Shrinath-O2 <214651540+Shrinath-O2@users.noreply.github.com> |
||
|
|
6f1d2094c6 |
ci: E2E Council — thin caller + retire legacy workflow (#12886)
## E2E Council — thin caller + retire legacy workflow Cutover to the **DocGen topology**: the heavy E2E Council engine now lives in the private `o2-enterprise` repo (openobserve/o2-enterprise#2019); this OSS repo keeps only a **thin caller** that dispatches it. ### What's here - **NEW** `.github/workflows/e2e-council-caller.yml` — thin caller. Three doors: `workflow_dispatch`, `issue_comment` (`/e2e`, `/e2e-dryrun`, org-member gated), and `pull_request: [closed]` auto-on-merge (behind `vars.E2E_AUTO_ON_MERGE`). Gates the commenter, resolves pr/dry_run/clobber/actor, then `gh workflow run e2e-council.yml --repo openobserve/o2-enterprise` via `secrets.ORG_ADMIN_TOKEN`, and acks on the OSS PR. - **RENAMED** `e2e-council.yml` → `e2e-council-legacy.yml` — header marked RETIRED, triggers reduced to `workflow_dispatch`-only (manual fallback) so it can't double-fire with the caller. Agent assets intentionally kept so the legacy fallback still runs; delete once the ENT engine is proven. ### Why dispatch (not `workflow_call`) A cross-repo reusable call needs an ENT Actions access policy; a PAT with `Actions: R/W` can `workflow_dispatch` with none. Mirrors DocGen. ### Rollout note The `/e2e` comment path only takes effect once this caller is on `main` (comment/dispatch triggers read from the default branch). Until then, test the engine directly via `workflow_dispatch --ref` on the ENT PR. Paired with the engine PR: openobserve/o2-enterprise#2019 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
0ee8a667c2 |
test: E2E Council Refiner — remediate Sentinel findings instead of dead-ending (#12876)
## Why
The E2E Council blocked **#12857** (no test PR opened) because the
post-heal **Sentinel re-audit found 2 critical quality issues** — even
though **9/10 tests passed**. The tests were **not worthless**; 2 just
*under-claimed* (the body asserted something weaker than the test name
promised):
1. `"should not persist FTS default across page reload"` — re-searches
after reload and asserts the column visible, which passes whether it
*persisted* or *re-resolved*. Never verifies non-persistence.
2. `"should clear FTS marker and re-resolve for new stream on stream
change"` — only checks "table rendered", never that FTS actually
re-resolved.
Blocking was correct (green ≠ meaningful), but a **dead-end block throws
away the other 90%**. The pipeline should **fix the problem and make it
right**, not give up. A no-PR outcome should be a *true last resort*.
## What — The Refiner (Phase 5.5)
A remediation loop **inside `verify_heal`**, after the Sentinel re-audit
and before the quality gate (**reuses the already-booted binary** — no
rebuild):
- **Only fires when needed.** If the re-audit is clean (PASS / 0
critical), the step reads the verdict, sets `ran=false`, and exits —
**no DeepSeek call, no test re-run**. Cheap on the happy path.
- **Strengthen-first.** Feeds the exact Sentinel findings to the
Refiner, which **adds/tightens assertions** so each test verifies what
its name promises → re-runs on the live binary (**green must hold**) →
re-checks assertion-integrity → re-audits. Capped at **2 rounds**.
- **Anti-laundering (the whole game).** Assertions may only be
**ADDED/strengthened — never dropped, inverted in place, or
renamed-to-dodge** a missing assertion. If strengthening goes red
because the **feature isn't wired**, it takes the honest `test.fixme` +
evidence exit (no green-wash).
- **`assert_integrity.py --strengthen`**: permits *added* negative
matchers (assert-absence is legit strengthening) while **still blocking
any dropped assertion** (removed/skipped guards + all static checks
stay). Unit-proven in the commit.
- **Quality gate** now judges the **post-refine** state; blocks only if
the Refiner couldn't keep the spec green honestly.
- **No-PR report** now phrases a block as a true last resort ("the
Refiner attempted to strengthen … but could not resolve every finding
honestly").
### Reuse path (clobber off)
`verify_heal` now also runs on **reuse runs**, and the "already covered"
short-circuit is suppressed on reuse — so **re-running `/e2e` on a
previously-BLOCKED spec re-validates + refines the existing tests into a
PR** instead of stopping at "already covered". No new tests are added on
reuse; the Refiner only strengthens what's there. (Cost: a reuse run
rebuilds even when tests were already perfect — acceptable since re-runs
are explicit; can add a "skip if a green test PR already exists" guard
later.)
## Validation
- `assert_integrity.py` unit-checked: added negative → FAIL without
`--strengthen`, PASS with it; dropped assertion → still FAIL with
`--strengthen`.
- Workflow YAML validated; step order confirmed **Sentinel re-audit →
Refiner → Quality gate**.
- Live end-to-end best validated by re-running `/e2e` on **#12857 with
clobber off** — the Refiner should strengthen the 2 flagged tests and
open the PR.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|
|
43bbf2c88c |
test: DocGen OSS caller — dispatch the engine via PAT (no org access-policy) (#12871)
Reworks the OSS DocGen caller from a **cross-repo `workflow_call`** to **dispatching** the engine (`o2-enterprise` `docgen.yml`) via `workflow_dispatch`, authenticated with `ORG_ADMIN_TOKEN`. **Why:** `workflow_call` into the private ENT repo needs a repo/org **Actions access-policy** grant. A PAT-based dispatch doesn't — a fine-grained PAT with **`Actions: read & write`** on `o2-enterprise` can trigger it. No org settings touched. **Flow:** org-member `/docgen` (gate unchanged, = trust boundary for the PAT) → resolve PR/dry-run/actor (event data via env, not spliced into commands) → `gh workflow run docgen.yml --repo o2-enterprise …` with the PAT → ack on the OSS PR. The engine runs in ENT and comments results back via the same PAT (pairs with o2-enterprise engine PR). **PAT requirement:** `ORG_ADMIN_TOKEN` needs **Actions: R/W** on `o2-enterprise` (distinct from "Workflows"), plus Issues/Pull-requests R/W on `openobserve` + `o2-enterprise` for comments (Contents/PRs on docs already present). Merge alongside the engine PR. Stranger comments still fail the `if:` → no dispatch, PAT never used. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
d85c2850fb |
ci(docgen): OSS caller forwards DEEPSEEK_API_KEY_E2E (pairs with ENT 1999) (#12864)
The OSS caller forwarded `DEEPSEEK_API_KEY` (which doesn't exist on OSS — the secret is `DEEPSEEK_API_KEY_E2E`), so an OSS `/docgen` would get an empty DeepSeek key. This forwards `DEEPSEEK_API_KEY_E2E` under the engine's matching (renamed) input. **Merge order: merge ENT o2-enterprise#1999 FIRST**, then this. Until #1999 is on `main`, the engine still expects the old `DEEPSEEK_API_KEY` input name, so editors/actionlint will flag this as a mismatch — that's expected and resolves once #1999 merges. Part of enabling the OSS `/docgen` path end-to-end (with o2-enterprise#1999, which also fixes the private-ENT checkout for the screenshots build). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
744c648102 |
test(autoe2e): generated E2E tests for #12423 (prebuilt-template-management) (#12840)
🤖 Auto-generated E2E tests for #12423 — **healed to passing** against a live OpenObserve before this PR was opened. - Branch `autoe2e/pr-12423` (stacked on `main`), so the tests run against the feature code and pass before it merges. - Spec: `tests/ui-testing/playwright-tests/Alerts/alerts-template-prebuilt-guard.spec.js` The repo Playwright CI re-validates here. Review is for **quality + coverage** — the tests already pass. _Generated by the E2E Council pipeline._ **Test cases added / changed:** | Test case | Type | What it verifies | |---|---|---| | `P0.1: Template List Renders with Tabs and Action Buttons` | new | template list core UI renders with tab toggle group, add/import buttons, and data table | | `P0.2: Prebuilt Template Guard — Delete Button Disabled & Badge Visible` | new | prebuilt templates show a distinguishing badge and have disabled delete buttons | | `P1.1: Template Tab Filtering — All / Prebuilt / Custom` | new | clicking tab toggles correctly filters visible rows to match the selected filter | | `P1.2: Edit (Update) a Custom Template` | new | opening a custom template in edit mode allows updating the body and persisting the change | | `P1.3: Clone a Custom Template` | new | cloning a template creates a Copy_of_ copy without overwriting the original | | `P1.4: Prebuilt Templates Excluded from Bulk Selection` | new | select-all checkbox excludes prebuilt rows so only custom rows get selected for bulk delete | | `P2.1: Empty Template Name Validation` | new | saving with an empty name triggers inline validation error | | `P2.2: Invalid Resource Name Validation` | new | names with spaces or disallowed characters are rejected with a descriptive error | --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
||
|
|
187d382502 |
ci(docgen): OSS caller — forward /docgen to the ENT DocGen engine (#12842)
Brings the **OSS side** of DocGen-on-CI online. This is the thin "caller" that lets `/docgen` work on `openobserve` PRs; all real logic lives in the reusable engine in `o2-enterprise`. ## What it does - Triggers on a `/docgen` or `/docgen-dryrun` **comment** on an OSS PR (org-member gated via `author_association`), or a manual **`workflow_dispatch`** (write-access gated by GitHub). - Forwards to `openobserve/o2-enterprise/.github/workflows/docgen.yml@main` via `workflow_call`. ## Why this is just a thin caller GitHub only delivers a repo's PR/comment events to workflows **in that repo**, so OSS needs its own listener. Crucially, a **reusable workflow runs in the caller's context** — so an OSS-triggered run executes *as openobserve* (OSS runner + OSS `GITHUB_TOKEN`) and comments on the OSS PR with OSS's own `github-actions[bot]`. No cross-repo token needed for comments. ## Runtime OpenCode + DeepSeek (`deepseek-v4-pro`). `DEEPSEEK_API_KEY` already exists in OSS (used by `e2e-council.yml` + `ai-code-review.yml`), so no new secret is required. ## ⚠️ Merge order **Merge this AFTER `o2-enterprise#1977`** lands on ENT `main`. This caller runs the engine at `@main`; the `github-actions[bot]` comment-identity fix is in #1977. Merging earlier would make OSS triage comments post as the PAT owner instead of the bot. Opening now so it's review-ready. ## Phase A only Triage only — generates nothing. Inert until a `/docgen[-dryrun]` comment or manual dispatch. `DOCGEN_DISABLED` repo/org variable is a global kill switch (in the engine). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
e9b39844db |
test(e2e-council): scope existing_tests_in_diff to E2E specs only (#12826)
## What On the triage for **#12423**, the bot set `existing_tests_in_diff: true` and cited: > **EXISTING TESTS: Yes** — The diff modifies `web/src/components/alerts/TemplateList.spec.ts` — a **Vitest unit test**… But that's **not** an E2E test. `existing_tests_in_diff` must mean **only Playwright specs under `tests/ui-testing/playwright-tests/`** — Vitest (`web/src/**/*.spec.ts`) and Rust tests aren't E2E coverage, and the Architect only ever scans the Playwright folder. The triage prompt's detection grep *was* scoped correctly, but it lived in the skip-gate discussion and the field wasn't enforced — so the LLM counted a unit test loosely. ## Fix 1. **Deterministic override (no LLM trust):** a new workflow step recomputes the flag straight from the diff and overwrites the agent's value in both `run-context.json` (the Architect reads it) and `triage.json` (the comment renders it): ```bash grep -qE '^\+\+\+ b/tests/ui-testing/playwright-tests/.+\.spec\.js' diff.patch ``` 2. **Prompt tightened:** the flag *and* the `existing_tests` rationale count **only** E2E specs; a changed Vitest/Rust test is dev test-maintenance, not coverage. ## Test Verified the scoped grep against real cases: | diff touches | result | |---|---| | `web/src/components/alerts/TemplateList.spec.ts` (the #12423 Vitest) | **false** ✅ | | `tests/ui-testing/playwright-tests/Alerts/alerts-prebuilt.spec.js` | **true** ✅ | | `tests/ui-testing/pages/alertsPages/alertsPage.js` (page object) | **false** ✅ | | `src/service/alerts/templates.rs` (Rust) | **false** ✅ | No functional change to the *outcome* on #12423 (E2E was still warranted; the Architect is already scoped) — this fixes the **misleading flag/comment** and prevents a non-E2E test from mis-routing the *enhance* path on another PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
d23aac58e5 |
chore(deps): bump actions/github-script from 7 to 9 (#12675)
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 9. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/github-script/releases">actions/github-script's releases</a>.</em></p> <blockquote> <h2>v9.0.0</h2> <p><strong>New features:</strong></p> <ul> <li><strong><code>getOctokit</code> factory function</strong> — Available directly in the script context. Create additional authenticated Octokit clients with different tokens for multi-token workflows, GitHub App tokens, and cross-org access. See <a href="https://github.com/actions/github-script#creating-additional-clients-with-getoctokit">Creating additional clients with <code>getOctokit</code></a> for details and examples.</li> <li><strong>Orchestration ID in user-agent</strong> — The <code>ACTIONS_ORCHESTRATION_ID</code> environment variable is automatically appended to the user-agent string for request tracing.</li> </ul> <p><strong>Breaking changes:</strong></p> <ul> <li><strong><code>require('@actions/github')</code> no longer works in scripts.</strong> The upgrade to <code>@actions/github</code> v9 (ESM-only) means <code>require('@actions/github')</code> will fail at runtime. If you previously used patterns like <code>const { getOctokit } = require('@actions/github')</code> to create secondary clients, use the new injected <code>getOctokit</code> function instead — it's available directly in the script context with no imports needed.</li> <li><code>getOctokit</code> is now an injected function parameter. Scripts that declare <code>const getOctokit = ...</code> or <code>let getOctokit = ...</code> will get a <code>SyntaxError</code> because JavaScript does not allow <code>const</code>/<code>let</code> redeclaration of function parameters. Use the injected <code>getOctokit</code> directly, or use <code>var getOctokit = ...</code> if you need to redeclare it.</li> <li>If your script accesses other <code>@actions/github</code> internals beyond the standard <code>github</code>/<code>octokit</code> client, you may need to update those references for v9 compatibility.</li> </ul> <h2>What's Changed</h2> <ul> <li>Add ACTIONS_ORCHESTRATION_ID to user-agent string by <a href="https://github.com/Copilot"><code>@Copilot</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li> <li>ci: use deployment: false for integration test environments by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/712">actions/github-script#712</a></li> <li>feat!: add getOctokit to script context, upgrade <code>@actions/github</code> v9, <code>@octokit/core</code> v7, and related packages by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/700">actions/github-script#700</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Copilot"><code>@Copilot</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/github-script/compare/v8.0.0...v9.0.0">https://github.com/actions/github-script/compare/v8.0.0...v9.0.0</a></p> <h2>v8.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update Node.js version support to 24.x by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li> <li>README for updating actions/github-script from v7 to v8 by <a href="https://github.com/sneha-krip"><code>@sneha-krip</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li> </ul> <h2>⚠️ Minimum Compatible Runner Version</h2> <p><strong>v2.327.1</strong><br /> <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Release Notes</a></p> <p>Make sure your runner is updated to this version or newer to use this release.</p> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li> <li><a href="https://github.com/sneha-krip"><code>@sneha-krip</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/github-script/compare/v7.1.0...v8.0.0">https://github.com/actions/github-script/compare/v7.1.0...v8.0.0</a></p> <h2>v7.1.0</h2> <h2>What's Changed</h2> <ul> <li>Upgrade husky to v9 by <a href="https://github.com/benelan"><code>@benelan</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/482">actions/github-script#482</a></li> <li>Add workflow file for publishing releases to immutable action package by <a href="https://github.com/Jcambass"><code>@Jcambass</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/485">actions/github-script#485</a></li> <li>Upgrade IA Publish by <a href="https://github.com/Jcambass"><code>@Jcambass</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/486">actions/github-script#486</a></li> <li>Fix workflow status badges by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/497">actions/github-script#497</a></li> <li>Update usage of <code>actions/upload-artifact</code> by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/512">actions/github-script#512</a></li> <li>Clear up package name confusion by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/514">actions/github-script#514</a></li> <li>Update dependencies with <code>npm audit fix</code> by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/515">actions/github-script#515</a></li> <li>Specify that the used script is JavaScript by <a href="https://github.com/timotk"><code>@timotk</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/478">actions/github-script#478</a></li> <li>chore: Add Dependabot for NPM and Actions by <a href="https://github.com/nschonni"><code>@nschonni</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/472">actions/github-script#472</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/github-script/commit/3a2844b7e9c422d3c10d287c895573f7108da1b3"><code>3a2844b</code></a> Merge pull request <a href="https://redirect.github.com/actions/github-script/issues/700">#700</a> from actions/salmanmkc/expose-getoctokit + prepare re...</li> <li><a href="https://github.com/actions/github-script/commit/ca10bbdd1a7739de09e99a200c7a59f5d73a4079"><code>ca10bbd</code></a> fix: use <code>@octokit/core/</code>types import for v7 compatibility</li> <li><a href="https://github.com/actions/github-script/commit/86e48e20ac85c970ed1f96e718fd068173948b7b"><code>86e48e2</code></a> merge: incorporate main branch changes</li> <li><a href="https://github.com/actions/github-script/commit/c1084728b5b935ec4ddc1e4cee877b01797b3ff9"><code>c108472</code></a> chore: rebuild dist for v9 upgrade and getOctokit factory</li> <li><a href="https://github.com/actions/github-script/commit/afff112e4f8b57c718168af75b89ce00bc8d091d"><code>afff112</code></a> Merge pull request <a href="https://redirect.github.com/actions/github-script/issues/712">#712</a> from actions/salmanmkc/deployment-false + fix user-ag...</li> <li><a href="https://github.com/actions/github-script/commit/ff8117e5b78c415f814f39ad6998f424fee7b817"><code>ff8117e</code></a> ci: fix user-agent test to handle orchestration ID</li> <li><a href="https://github.com/actions/github-script/commit/81c6b7876079abe10ff715951c9fc7b3e1ab389d"><code>81c6b78</code></a> ci: use deployment: false to suppress deployment noise from integration tests</li> <li><a href="https://github.com/actions/github-script/commit/3953caf8858d318f37b6cc53a9f5708859b5a7b7"><code>3953caf</code></a> docs: update README examples from <a href="https://github.com/v8"><code>@v8</code></a> to <a href="https://github.com/v9"><code>@v9</code></a>, add getOctokit docs and v9 brea...</li> <li><a href="https://github.com/actions/github-script/commit/c17d55b90dcdb3d554d0027a6c180a7adc2daf78"><code>c17d55b</code></a> ci: add getOctokit integration test job</li> <li><a href="https://github.com/actions/github-script/commit/a047196d9a02fe92098771cafbb98c2f1814e408"><code>a047196</code></a> test: add getOctokit integration tests via callAsyncFunction</li> <li>Additional commits viewable in <a href="https://github.com/actions/github-script/compare/v7...v9">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
900ebe67c6 |
ci(e2e-council): test-quality gate — stop certifying green-but-worthless specs (#12722)
## The problem (from the #12719 review) The pipeline's only hard gate was **"the Healer's authoritative run is green."** That objective *rewards* making a spec pass by gutting the assertions that test the feature. In #12719 the result was a suite that: - dropped the fix-query-card assertion, - asserted `count >= 0` (a tautology), - buried real assertions inside `if`s whose `else` just logs, and - **asserted the feature is absent** (`expectFixQueryCardNotVisible`) — certifying a half-built feature and set to **turn red when the feature is finished**. > A passing test and a valuable test are different things, and we only measured the first. This PR makes **"done" mean "the tests would fail if the feature were broken."** ## Deterministic backbone (no LLM) — `.github/scripts/assert_integrity.py` The most important guards don't depend on the model behaving: - **Diff-aware heal guard** — snapshot the spec's assertions *before* healing; **reject** any heal that **deleted**, **inverted** (`toBeVisible` → `not.toBeVisible`), or **skipped** assertions to reach green. - **Static anti-patterns** — tautologies (`count >= 0`, `expect(true)`) and **conditional-only** tests (every `expect` inside an `if` → the test can pass asserting nothing). - Conservative by design (only high-confidence patterns) — a gate with false positives gets disabled by humans. Restored from a **trusted ref** in verify_heal (never the PR tree's copy). ## Workflow - New **Assertion-integrity gate** after the authoritative run + a combined **Quality gate decision** (integrity **+** Sentinel verdict). `pr_back` now requires `quality_status == pass` → a green-but-worthless spec **never becomes a PR**. - The post-heal **Sentinel re-audit now feeds the blocking gate** (was advisory-only). LLM flakiness fails **open**; the deterministic gate is the hard teeth. - **`feature-incomplete`** honest exit: when a test can't pass because the feature isn't wired, the Healer parks it `test.fixme` + writes **evidence**; the workflow opens **no PR** and posts the gap (file:line) on the source PR — the single highest-value output. - `pr_back` **reconciles `test-summary.json` against the FINAL spec** (drops phantom rows) so the PR body can't claim tests that don't exist. ## Prompts - **Healer:** hard anti-weakening rules + the `feature-incomplete` honest exit. - **Sentinel:** tautology / conditional-only / negative-only-on-feature / name-mismatch as **CRITICAL** checks. - **Engineer:** no dead page-object scaffolding; ban `waitForTimeout` as a sync primitive; assertions must be real and match the test name. - **Architect:** one spec = one area (no Frankenstein specs); de-duplicate scenarios. ## Considered and deferred: mutation-sanity (extra feature-absent build) Theoretically the cleanest definition of a valuable test, but **dropped for now**: it overlaps the cheap static checks, has **no clean "feature-absent" baseline** under merged/multi-PR input, risks false positives that erode trust, and doubles the build. The static guards catch the same #12719 failures at near-zero cost; prevention (Healer can't invert + honest `feature-incomplete`) beats the expensive detector. ## Testing - `assert_integrity.py` unit-tested against tautology / conditional-only (incl. single-line) / heal-removed / heal-inverted fixtures, with no false positive on a legit `if` + unconditional `expect`. - Workflow YAML validated; analyzer compiles. - **First live run still needed** (per the project's "run the path before done" rule) — to see the gate block a real weak spec and the `feature-incomplete` comment fire. Stacked on #12716 (ENT sister flow); the diff collapses to just the quality program once #12716 lands. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
3ec3a5d4e4 |
fix(ci): query-agent run_tests job missing permissions to post PR comment (#12777)
## Summary The `run_tests` job's job-level `permissions: contents: read` was overriding the top-level `issues: write` and `pull-requests: write`, causing the "Post results comment" step to fail with `HttpError: Resource not accessible by integration`. ## Test - Verified on [run #27815374013](https://github.com/openobserve/openobserve/actions/runs/27815374013) — both matrix configurations passed all 672 queries but failed to post results comments - After this fix, comments will post correctly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7d3e67903e |
ci: add single_node_opt matrix mode to query agent tests (#12756)
## Summary - Adds a matrix strategy to the query agent SQL regression suite jobs in both `api-testing.yml` and `query-agent.yml` - Each job now runs with `ZO_FEATURE_SINGLE_NODE_OPTIMIZE_ENABLED=false` and `ZO_FEATURE_SINGLE_NODE_OPTIMIZE_ENABLED=true` - Verifies both DataFusion physical optimizer paths produce identical query results - Matrix legs run in parallel with `fail-fast: false` - All artifact/log names include the matrix label to avoid collisions ## Test plan - [ ] PR CI shows two `api_query_agent` matrix legs (single_node_opt_false and single_node_opt_true), both pass - [ ] `/query-agent` PR comment triggers both modes and posts per-mode results comments 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
10412e91ea |
ci: add query-agent SQL regression workflow (#12749)
## Summary
Adds a standalone workflow that runs the 672-query SQL regression suite
on-demand against a live OpenObserve instance. Triggered by
`/query-agent` PR comment or manual `workflow_dispatch`.
## How it works
```
/query-agent PR comment (or manual dispatch)
│
├── Job 1: Triage
│ - Allowlist gate (same engineering team list as council)
│ - Resolve PR number from comment or dispatch input
│ - Fetch PR diff, grep for query-engine paths
│ - Post decision comment (skip/run/dry-run)
│
└── Job 2: Run tests (if not skipped + not dry-run)
- Build OO debug binary (nightly-2026-05-20, mimalloc)
- Setup Python 3.11 + rye
- Run compute_counts.py to regenerate expected values
- Start OO server with ZO_MAX_FILE_RETENTION_TIME=1
- Run pytest tests/query_agent/ (excluding test_3_vortex.py)
- Post pass/fail comment on PR
```
## Details
- **Trigger**: Exact `/query-agent` comment on a PR (not `contains`), or
manual dispatch with `pr_number`
- **Runner**: `ubicloud-standard-4` (matches api-testing.yml)
- **Timeout**: triage 10 min, tests 60 min
- **Concurrency**: one run per PR, cancel-in-progress
- **Artifacts**: server logs + pytest logs uploaded on failure, JUnit
XML always
## Test plan
- [ ] Merge to main first (required for comment triggers to take effect)
- [ ] Comment `/query-agent` on a PR with query-engine changes →
workflow runs
- [ ] Comment `/query-agent` on a PR with docs-only changes → triage
skips
- [ ] Non-allowlist user comments `/query-agent` → no reaction
- [ ] Manual dispatch with `dry_run=true` → triage only, no tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
f1913e6d97 | test: form e2e (#12632) | ||
|
|
4f3c0fcba3 |
fix(tests): verify match_all FTS result correctness and enforce Tantivy readiness (#12717)
## Summary
Fixes a test gap where `match_all` Tantivy queries could return wrong
results after a DataFusion upgrade without being caught by existing
assertions.
### Problem
After a DataFusion upgrade merge, the DataFusion access plan was no
longer used for `match_all` queries, causing Tantivy to return wrong
results. The existing tests only compared row counts against a DuckDB
oracle that emulates `match_all` with `LIKE '%term%'` — so wrong rows
that still matched the LIKE pattern passed undetected.
Additionally, `node/flush` does not generate Tantivy indexes
immediately. The default `ZO_MAX_FILE_RETENTION_TIME=600s` means
WAL→parquet→Tantivy conversion can lag, so FTS queries may fall back to
a non-Tantivy path during tests.
### Changes
1. **Content verification**
([conftest.py](tests/api-testing/tests/query_agent/conftest.py)): Every
hit from a `match_all` query that returns the `log` field is now checked
— each search term word must be present in `log`. A hard assertion fails
if Tantivy returns rows that don't contain the search terms.
2. **Tantivy readiness gate**
([test_2_parquet.py](tests/api-testing/tests/query_agent/test_2_parquet.py)):
After `node/flush`, the test now polls with a `match_all('warehouse')
LIMIT 1` query (up to 120s timeout) to confirm Tantivy indexes are built
before running FTS assertions. Previously only COUNT(*) was checked.
3. **Multi-word match_all emulation**
([compute_counts.py](tests/test-data/query-agent/compute_counts.py)):
`match_all('ACK batch')` now translates to `(log LIKE '%ACK%' AND log
LIKE '%batch%')` — per-token AND conditions matching Tantivy's
token-level search semantics, instead of the old phrase match `log LIKE
'%ACK batch%'`.
4. **Regenerated expected results** across all query JSON files.
## Test plan
- [ ] Run query agent test suite against an environment with Tantivy
enabled
- [ ] Verify `match_all` content assertions catch intentionally
corrupted results
- [ ] Confirm post-flush Tantivy readiness poll works within the timeout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Huaijin <haohuaijin@gmail.com>
|
||
|
|
bc5303eb54 |
test(logs): add SQL queries test cases for inline comments handling (#12663)
## Summary
- Add E2E test coverage for SQL queries containing `--` inline comments
in the Logs search page
- Fix verified: queries like `-- comment\nSELECT _timestamp FROM stream`
no longer produce `SQL ParserError("Expected: end of statement, found:
_timestamp")`
- Add two reusable page object methods to `logsPage.js` for asserting
SQL error state
## What Was Broken
SQL queries with `--` style comments followed by a `SELECT` statement
were failing with:
> `SQL error: ParserError("Expected: end of statement, found: _timestamp
at Line: 1, Column: 45")`
The parser was not stripping comment lines before executing the query,
causing it to misread the `SELECT` column list as a second statement.
## Test Scenarios Covered
| # | Scenario | Tag |
|---|----------|-----|
| 1 | Single-line comment before SELECT | `@P0 @smoke` |
| 2 | Multiple comment lines before SELECT | `@P1` |
| 3 | Inline comment at end of a line (`SELECT ... -- comment`) | `@P1`
|
| 4 | Comment in the middle of a multi-line SQL query | `@P1` |
| 5 | Comment + WHERE clause using `str_match_ignore_case` | `@P1` |
| 6 | Comment-only query — must NOT produce `_timestamp` parser error
(edge case) | `@P2` |
## Files Changed
-
`tests/ui-testing/playwright-tests/Logs/logsqueries.sql-comments.spec.js`
← new spec file
- `tests/ui-testing/pages/logsPages/logsPage.js` ← two new assertion
methods added
- `.github/workflows/playwright.yml` ← spec registered in CI pipeline
---------
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
|
||
|
|
3dceaa1d91 |
ci(e2e-council): ENT sister flow — validate generated specs on the enterprise build (#12716)
## What & why Every OpenObserve Playwright spec also runs on the **enterprise** binary — ENT CI tree-merges OSS in via a *branch-of-same-name* lookup (`o2-enterprise/.github/workflows/playwright.yml` → "Determine OSS Branch"). So a council-generated spec isn't fully validated until it passes on enterprise too. This adds an **always-on Job 6 (`ent_sister`)** that runs after `pr_back`, reusing the same `autoe2e/pr-<n>` branch name so ENT CI auto-pulls the generated spec. ## Two cases (decided in design) | Situation | Action | |---|---| | Spec **not yet** in ENT `run_files` | **Case 1:** register it in the matching ENT group on a new ENT branch `autoe2e/pr-<n>`, open a **non-blocking** ENT PR, cross-link on the OSS source + test PRs. ENT CI pulls the same-named OSS branch and runs the new spec on enterprise. | | Spec **already** in ENT `run_files` | **Case 2:** no PR — `workflow_dispatch` ENT's `playwright.yml` with `o2_opensource_repo=autoe2e/pr-<n>`; post the run link on the OSS PR. | The case is decided by checking the spec filename against ENT's `run_files` (more robust than new-vs-modified — also catches a modified OSS spec ENT never ran). ## Decisions baked in - **No merge gate** — we *link*, we don't block (per the agreed design). Merge or close the ENT PR once enterprise CI is green. - **Always on** — there's no OSS-only spec; everything must validate on enterprise. - **Async** — ENT builds take ~20–30 min, too long to hold a job, so v1 posts the PR/run **link** and a human confirms green (polling can come later). - **Group mapping** — uses the OSS registration group (ENT mirrors the names); falls back to the spec's folder, then `GeneralTests` with a warning. ## Security Like `pr_back`, this job **never checks out or runs PR code** — pure GitHub API + the trusted `generate` artifact. `ORG_ADMIN_TOKEN` (cross-repo Contents+PR+Actions write) stays isolated to jobs that don't build/run untrusted code. ## Notes / to verify on first live run - Reuses `ORG_ADMIN_TOKEN` for `o2-enterprise` — the job fails fast with a clear message if the token can't reach the ENT repo. - Whole-suite cost: any ENT validation (PR or dispatch) runs ENT's full Playwright matrix — inherent to ENT CI, not a choice. - Stacked behind #12700 (merged-PR detection / cap-6) — rebase if that lands first. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |