mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-05 16:10:43 +00:00
76bd5dd822aff4e87f2efb691335fb446caefccc
479
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
3e89667b13 |
test: add edition-features documentation validation spec (#12573)
## Summary - Adds a single GeneralTests spec (`edition-features.spec.js`) that validates the header edition button, the `EnterpriseUpgradeDialog`, every enterprise feature card, and the `o2.ws/*` documentation links each card opens. - Two tests live in the spec; exactly one runs per environment. The active edition is detected from the rendered header button label (most direct signal of what the user sees, tolerates frontend/backend build-flag mismatches like an OSS frontend served by an ENT backend). - Pairs with the same-named branch on `openobserve/o2-enterprise` so ENT CI tree-merges this spec in and runs the ENT variant. ## What the spec validates - Header button label per edition (`Get OpenObserve Enterprise (Free)` vs `Edition: Enterprise`) - Hero panel (title, badge, primary button, features title, Learn More button) - 20 enterprise feature cards (presence + external-link icon + BETA/HA badges) - Cloud-only `Bring Your Own Bucket` card stays hidden outside Cloud - Every feature card click opens a popup that lands on the expected `openobserve.ai` doc page - Hero external link buttons (`Download Now`/`Learn More` on OSS, `Learn More` on ENT) — `Get Free License` intentionally not clicked because it switches the active org to the meta org ## Files - `tests/ui-testing/playwright-tests/GeneralTests/edition-features.spec.js` (new) - `tests/ui-testing/pages/generalPages/editionFeaturesPage.js` (new — page object + truth table of slugs / expected doc paths) - `tests/ui-testing/pages/page-manager.js` (register `pm.editionFeaturesPage`) ## Test plan - [x] OSS local run: 1 passed, 1 skipped (~2.0m) - [x] ENT local run: 1 passed, 1 skipped (~2.0m) - [x] Sentinel audit passed (POM compliance, no raw selectors in spec, no hardcoded secrets, no console.log) - [ ] OSS CI green on this PR - [ ] ENT CI green on companion PR 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
b3393648b4 |
feat: add environment variable for timechart tab visibility (#12552)
Design At: `ZO_TIMECHART_ENABLED` to enable timechart tab on logs page --------- Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
10dfb4ceaa |
ci: auto-assign metadata with team allowlist, start date, and stranger triage (#12543)
## Summary Extends the `auto-assign-metadata` workflow with three improvements: - **Creator classification** — a new first step buckets every issue/PR creator into one of three categories: - `team` — 23-person engineering allowlist → full workflow runs (assign self, milestone, add to project, set start date) - `internal` — other org members not on the allowlist → silently skipped - `stranger` — not an org member at all → assigned to designated triagers - **Start date** — on new issues, captures the project item ID and sets the `Start Date` field in GitHub Project #19 to today's UTC date via `updateProjectV2ItemFieldValue` - **Stranger triage** (OSS only) — issues from external contributors are assigned to `Shrinath-O2` + `Manazsharma` + `neha00290`; PRs are assigned to `oasisk` + `hengfeiyang` ### Who gets what | Category | Members | Issues | PRs | |---|---|---|---| | **Engineering team** | `bjp232004` `hengfeiyang` `prabhatsharma` `uddhavdave` `oasisk` `haohuaijin` `Subhra264` `Loaki07` `007harshmahajan` `chaitanya-sistla` `ktx-kirtan` `omkarK06` `ktx-vaidehi` `ktx-abhay` `neha00290` `ktx-akshay` `ktx-sadhna` `nikhilsaikethe` `YashodhanJoshi1` `ktx-riya` `mmosarafO2` `Shrinath-O2` `ktx-mihir` | Assign self · milestone · project · start date | Assign self · milestone · project | | **Internal — skipped** | `sowjanyapuvvula` `ravenwh` `abvarun226` `ysantosh` `luckykurhe` `achatterjee4` `akshaye-blip` `Udhankaran` `jakeopenobserve` `Manazsharma` `manoj0881-git` `gorakhnathy7` `simranquirky` `roniandgit` `sandydgenius` `javasks` `Yadumathur` | Skip | Skip | | **Stranger** | Anyone not in org | Assign `Shrinath-O2` + `Manazsharma` + `neha00290` | Assign `oasisk` + `hengfeiyang` | ## Test plan - [ ] Open a new issue as an engineering team member → verify self-assigned, milestone set, added to project, Start Date populated - [ ] Open a new issue as a stranger → verify assigned to Shrinath-O2 + Manazsharma + neha00290 only - [ ] Open a PR as an engineering team member → verify self-assigned and milestone set - [ ] Open a PR as a stranger → verify assigned to oasisk + hengfeiyang only - [ ] Open an issue as an internal (skipped) member → verify no changes made 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
1484f920a9 |
test: expand query agent suite to 570 queries with production SQL patterns (#12534)
## Summary - Added **46 new queries** (Q511-Q556) to the query agent regression suite, bringing the total from 524 to **570 unique queries** - Mined from real production SQL patterns (june7.sql) and adapted to use existing test data fields - Fixed **15 pre-existing duplicate IDs** (Q226-Q240 existed in both aggregation.json and basic_select.json — renumbered to Q557-Q571) ## New query distribution | Category | New | Description | |---|---|---| | string_functions | +10 | spath() + str_match_ignore_case, split_part() + chr(), multi-COALESCE chains, CAST AS VARCHAR | | histogram | +7 | 30-second/min intervals, COUNT FILTER, SUM(CASE WHEN), NULL breakdowns | | date_time | +6 | arrow_cast(), date_trunc(), to_timestamp_micros(), timestamp arithmetic, LAG for gaps | | combined | +6 | count(distinct) in CASE WHEN, re_match + re_not_match combo, FILTER in aggregation, HAVING percentages | | full_text_search | +5 | re_match + re_not_match, regexp_like, match_all(), str_match_ignore_case with COALESCE | | cte_subquery | +4 | CTE with spath, CTE with COALESCE fallbacks, correlated subquery | | aggregation | +2 | IS NOT NULL exploration patterns, multi-column GROUP BY | | window | +2 | NTILE with COALESCE PARTITION, LAG with delta calculation | | basic_select | +2 | Complex COALESCE + CAST chains, NULLS LAST ordering | | cross_stream | +1 | LEFT JOIN on dual keys across streams | | union | +1 | UNION ALL with different metric types | ## New OO-specific functions covered Four functions previously had **zero test coverage**: - `chr()` — 1 query (string splitting by character code) - `arrow_cast()` — 1 query (DataFusion timestamp arithmetic) - `date_trunc()` — 1 query (minute-level timestamp bucketing) - `to_timestamp_micros()` — 1 query (microsecond-to-timestamp conversion) Plus expanded coverage of rare functions: `spath()` (+3), `split_part()` (+3). ## Test modes - **38/46** new queries have full sqllogictest comparison (DuckDB computed expected results) - **8/46** use legacy assertions for OO-specific functions that DuckDB cannot replicate (spath, arrow_cast, date_trunc, to_timestamp_micros) - Overall suite: **533** sqllogictest, **37** legacy ## Changes | File | Change | |---|---| | `data_gen.py` | `NUM_QUERIES` 520 → 575 | | `gen_q511_q556.py` | New: query generation script | | 13 category JSON files | Updated with new queries + dedup fix | ## Verification - `compute_counts.py` ran successfully on all 570 queries - 0 duplicate IDs across all 13 category files - Only gap: Q025 (pre-existing) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
3f63fd4d2d |
test: strip identical retries from TestDino upload to reduce quota usage (#12539)
## Summary - TestDino quota (~75k/month) was being consumed at ~4x rate because each failing test uploads one result entry per retry attempt (original + 3 retries = 4 entries per test) - This PR adds deduplication: if all retry results share the same `status` and error first-line, only the final attempt is uploaded - Retries with differing status or error message are preserved in full — they carry real diagnostic signal (e.g. a test that times out then fails with a different error) ## How it works ``` getErrorFingerprint(result) → first line of error.message (stable across retries) allIdentical = every retry has same status AND same error fingerprint → true: upload only results[last] (strips ~3 entries per test) → false: upload all results as before (keeps diagnostic data) ``` ## Expected quota impact Based on last month's data: ~65k attempts → ~16k (estimated ~75% reduction for OSS Portal alone) ## Test plan - [ ] Trigger a CI run that has failures with retries — confirm the workflow log shows `stripped N identical retry results` - [ ] Trigger a run with a genuinely flaky/environment-variable failure — confirm all retries are preserved in TestDino 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
4ca7a04864 |
test: model pricing E2E tests (13 journey flows) + Build tab timing fix (#12525)
## Summary - **13 Playwright E2E journey tests** for the Model Pricing feature (\`/settings/model_pricing\`), consolidating all P0–P2 scenarios into journey-based flows - New page object \`ModelPricingPage\` under \`pages/generalPages/\` - API cleanup integrated into the centralized \`APICleanup\` class and called from \`cleanup.spec.js\` - CI matrix updated: \`ZO_MODEL_PRICING_ENABLED=true\` env var added; \`model-pricing.spec.js\` added to the \`GeneralTests\` job - **Bug fix**: \`waitForBuildTabLoaded\` now polls the Monaco editor for non-empty content (Phase 3), fixing a timing race where Build tab SQL tests read an empty query string on slower CI machines ## Test coverage | Journey | Scenarios covered | |---------|------------------| | List, tabs & search | Controls, tab switching, search, built-in tab | | Create & validation | All form validation cases + successful save | | Edit, cancel & delete | Full lifecycle | | Duplicate & clone | Org model duplicate + built-in clone | | Bulk actions | Select, export JSON, bulk delete | | Toggle | Disable/re-enable with correct visual state | | Test match dialog | Empty state, no-result, clear, match result | | Import | Valid JSON, correction flow, cancel | | Editor features | Multi-tier, pricing template, pattern examples | | Pricing drawer | Overflow link → drawer with all price keys | | Empty state | CTA when org has no custom models | | Cost applied | LLM span matched → cost stored correctly | | No matching model | Unknown model name → zero cost stored | ## Bug fix: Build tab query editor timing \`waitForBuildTabLoaded\`'s Phase 2 (chart-type-selected signal) fires as soon as \`initializeFromQuery\` sets the chart type — before \`makeAutoSQLQuery\` has run. On slower CI machines this left \`queries[0].query\` empty when tests read the editor, causing the "SQL ON + Auto mode" and "Auto → Custom" tests to receive \`""\` instead of generated SQL. Phase 3 polls the Monaco editor (\`[data-test="logs-search-bar-query-editor"]\`) for non-empty content, confirming \`onBuildQueryGenerated\` has been called and the query is ready. ## Test plan - [x] All 13 model pricing tests pass locally - [x] \`logsQueryBuilder-editor.spec.js\` (23 tests) — all pass with Phase 3 fix applied - [x] Sentinel code audit passed (no blocking issues) - [x] API cleanup added to \`cleanup.spec.js\` via \`apiCleanup.cleanupModelPricingModels()\` — 404-safe for instances where the feature is disabled 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
146d5e7612 |
feat(tests): vortex file format test suite (scenarios 1–83) (#12472)
## Summary - Adds **239 new tests** covering the vortex columnar file format across 78 scenarios from the test plan - **`tests/api-testing/tests/vortex/`** — 9 test modules (83 tests): format conversion, schema evolution, data integrity, FTS, downsampling, API format awareness, server config, and performance/stress - **`tests/api-testing/tests/query_agent/test_3_vortex.py`** — 156 tests: the full 155-query SQL correctness suite + scenario 39 (self-join) run post-flush against vortex files - **`api-testing.yml`** — adds `--ignore=tests/vortex` to the OSS default-set run; vortex tests require the enterprise binary with `ZO_FILE_FORMAT=vortex` and are gated to enterprise CI only ## Test plan coverage | Module | Scenarios | |--------|-----------| | `test_format_conversion.py` | 1–13, 7, 8, 9, 10 | | `test_schema_evolution.py` | 14–25 | | `test_data_integrity.py` | 55–62 | | `test_fts.py` | 51–54 | | `test_downsampling.py` | 47–50 | | `test_api_format.py` | 71–73 | | `test_config.py` | 66–67 | | `test_performance.py` | 74–78 | | `test_3_vortex.py` | 26–46 (155 queries + JOIN) | ## Enterprise CI Two dedicated jobs added in the companion `openobserve/o2-enterprise` PR on the same branch: - **`api_query_agent_vortex`** — runs `test_3_vortex.py` with `ZO_FILE_FORMAT=vortex` - **`api_vortex_format_tests`** — runs the full `tests/vortex/` suite with 4-phase server lifecycle (parquet→vortex→parquet→vortex+compaction) OSS CI is unchanged except for the ignore rule — no vortex tests run against the OSS binary. ## Test checklist - [ ] `tests/vortex/` collects cleanly: `83 tests collected` - [ ] `tests/query_agent/test_3_vortex.py` collects cleanly: `156 tests collected` - [ ] Enterprise CI `api_query_agent_vortex` job passes - [ ] Enterprise CI `api_vortex_format_tests` job passes 🤖 Generated with [Claude Code](https://claude.ai/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
8c23dd000e |
feat: multi-query support (#12374)
Design At: https://github.com/openobserve/designs/tree/main/dashboards/multi-sql-query-support Issue list : https://github.com/openobserve/openobserve/issues/11278 |
||
|
|
ec5b0df819 | fix: removing double pr review via deepseek and ai-code review (#12488) | ||
|
|
af7d0e6696 |
test: harden rerun check step against GitHub API failures (#12486)
## Summary
- Adds `|| echo '{"jobs":[]}'` fallback on the `curl` call so a network
error or GitHub API rate-limit response never produces an empty/invalid
variable
- Adds `2>/dev/null || echo "0"` on both `jq` calls so a malformed API
response (non-JSON error body) falls back to `"0"` instead of
propagating a non-zero exit under `-eo pipefail`
- Changes the arithmetic comparison to `[ "${CURRENT_ATTEMPT_JOBS:-0}"
-eq "${TOTAL_MATRIX_JOBS:-0}" ]` with `2>/dev/null` so a `null` jq
output can't trigger "integer expression expected" and kill the step
**Failure mode fixed:** On re-runs, multiple matrix jobs query the same
GitHub API endpoint concurrently with the shared `GITHUB_TOKEN`. A
rate-limit `403` or transient network hiccup returns non-JSON, `jq`
exits non-zero, and with `set -eo pipefail` the whole "Check if this is
a rerun" step fails — blocking the job before any tests run.
**Degraded behaviour:** When the API is unavailable, both counts fall to
`0`, `0 -eq 0` → `rerun_type=all` → step succeeds → all tests run (same
as a normal rerun-all). The TestDino optimisation is skipped but nothing
is blocked.
Companion PR: openobserve/o2-enterprise#<ENT_PR>
## Test plan
- [ ] Trigger a re-run of a workflow run — "Check if this is a rerun"
step should pass even if GitHub API is slow/rate-limited
- [ ] Verify `rerun_type` is still correctly set to `failed` when the
API responds normally
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
|
||
|
|
02e17023fa | fix: arm build (#12474) | ||
|
|
80984fbf6c | fix: changing layout for deepseek review comment (#12341) | ||
|
|
a107b19a2b | fix: release ci with musl target (#12470) | ||
|
|
c2555d116c |
fix: prevent license textarea from growing and fix layout spacing (#12447)
## Summary - **OTextarea resize**: Changed default resize behaviour from `resize-y` to `resize-none`. `OTextarea` uses `inheritAttrs: false`, so `style`/`class` attrs passed by consumers land on the outer wrapper `<div>`, not the native `<textarea>`. The `resize-y` class was allowing users to manually drag the textarea to grow it indefinitely — this didn't exist with the previous `q-input` implementation. - **License.vue style cleanup**: Removed `style="height: 200px"` and `style="min-height: 150px"` from the two `OTextarea` usages. These were being applied to the outer wrapper div (wrong element) and had no effect on the actual textarea size. The `rows` prop already controls height correctly. - **Button spacing**: Added `tw:mt-3` gap between the license key textarea and the "Update License" button. ## Test plan - [ ] Navigate to Settings → License page with no license installed - [ ] Verify the "Enter License Key" textarea renders at a fixed height and cannot be resized by dragging - [ ] Verify the "Update License" button has visible spacing below the textarea - [ ] Verify pasting a long license key causes scroll within the textarea (not expansion) - [ ] Trigger the update form (on a page with an active license) and verify the same resize-none behaviour 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
73ce75c883 |
fix(tests): bump query_agent ingest timeout 120s → 300s (#12444)
## Summary - ENT CI runners are slower than local/OSS runners — the `ingest_query_agent_data` fixture was hitting the 120s timeout before 1550 records became searchable, causing all 310 query_agent tests to fail at setup - Bumped `wait_until` timeout to 300s ## Test plan - [ ] OSS `api_query_agent_tests` passes as before - [ ] ENT `api_query_agent_tests` no longer hits WaitTimeout on ingest 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
43d0e8cc84 | ci: cache tag for build pr (#12326) | ||
|
|
1196045636 |
test: add org-level ingestion token API and Playwright tests (#12439)
PR #11691 introduces org-level ingestion tokens with o2oi_ prefix (37 chars). This commit adds comprehensive automated test coverage: ## API Tests (35 tests in test_ingestion_tokens.py) ### Token CRUD (9 tests) - Create token returns o2oi_ prefix and 37-char length - Create token persists name, created_by, enabled=true, is_default=false - Create token with name only (no description) — description is empty - Create token with hyphens and underscores allowed - Duplicate name returns 400 with "already exists" message - Empty name returns 400 with "cannot be empty" message - Whitespace-only name returns 400 with "cannot be empty" message - Name too long (>256 chars) returns 400 with non-empty error message - Parametrized: special chars (spaces, @, ., /) rejected with "alphanumeric" message ### List Tokens (3 tests) - GET returns data array - Created token appears in list - Token values are unmasked in list response ### Enable/Disable (5 tests) - Disable token via PATCH {enabled: false} - Enable disabled token via PATCH {enabled: true} - Double disable is a no-op (idempotent) - Toggle nonexistent token returns 404 - DELETE returns 405 (not supported) ### Ingestion Auth — Org Token (6 tests) - Ingest with org token (org_id:o2oi_token) succeeds - Ingest with disabled org token fails (401) - Ingest with nonexistent o2oi_ token fails (401) - Ingest to wrong org with valid token fails (401) - Org token blocked on search endpoint (401) - Org token blocked on dashboards endpoint (401) ### Ingestion Auth — Backward Compat (6 tests) - User password ingestion still works (pre-PR behavior) - Non-o2oi_ service account token ingestion works (falls through to user lookup) - User password on search succeeds (200) — mirrors org token blocking tests - User password on dashboards succeeds (200) — mirrors org token blocking tests - Non-o2oi_ SA token NOT blocked by o2oi_ prefix check on search (≠401) - Non-o2oi_ SA token NOT blocked by o2oi_ prefix check on dashboards (≠401) ### Multi-token and Security (6 tests) - Create 5 tokens, all visible in list - Disable one token, others remain enabled - SQL injection in token name rejected (special chars → 400) - Empty name, whitespace name, too-long name (with message assertions) - Special chars parametrized: spaces, @, ., / ## Playwright UI Tests (7 tests in ingestionTokens.spec.js) - Ingestion Tokens tab renders with table and columns (P0) - Create token via UI dialog with name and description (P0) - Create token with empty name — button disabled, enabled on fill, disabled on clear - Revealed token dialog — copy token with clipboard verification - Toggle token enable/disable from table actions (P0) - Manage Tokens button on ingestion page navigates to IAM - Ingestion page token selector dropdown shows available tokens ## Page Object (ingestionTokensPage.js) - data-test selectors for IAM nav, token list, create dialog, toggle, toast, revealed dialog - Registered in centralized PageManager --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
ce0f5e8988 |
chore(deps): bump actions/cache from 4 to 5 (#12415)
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5. <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>v5.0.0</h2> <blockquote> <p>[!IMPORTANT] <strong><code>actions/cache@v5</code> runs on the Node.js 24 runtime and requires a minimum Actions Runner version of <code>2.327.1</code>.</strong></p> <p>If you are using self-hosted runners, ensure they are updated before upgrading.</p> </blockquote> <hr /> <h2>What's Changed</h2> <ul> <li>Upgrade to use node24 by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1630">actions/cache#1630</a></li> <li>Prepare v5.0.0 release by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1684">actions/cache#1684</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v4.3.0...v5.0.0">https://github.com/actions/cache/compare/v4.3.0...v5.0.0</a></p> <h2>v4.3.0</h2> <h2>What's Changed</h2> <ul> <li>Add note on runner versions by <a href="https://github.com/GhadimiR"><code>@GhadimiR</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1642">actions/cache#1642</a></li> <li>Prepare <code>v4.3.0</code> release by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1655">actions/cache#1655</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/GhadimiR"><code>@GhadimiR</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1642">actions/cache#1642</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v4...v4.3.0">https://github.com/actions/cache/compare/v4...v4.3.0</a></p> <h2>v4.2.4</h2> <h2>What's Changed</h2> <ul> <li>Update README.md by <a href="https://github.com/nebuk89"><code>@nebuk89</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1620">actions/cache#1620</a></li> <li>Upgrade <code>@actions/cache</code> to <code>4.0.5</code> and move <code>@protobuf-ts/plugin</code> to dev depdencies by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1634">actions/cache#1634</a></li> <li>Prepare release <code>4.2.4</code> by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/cache/pull/1636">actions/cache#1636</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/nebuk89"><code>@nebuk89</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1620">actions/cache#1620</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v4...v4.2.4">https://github.com/actions/cache/compare/v4...v4.2.4</a></p> <h2>v4.2.3</h2> <h2>What's Changed</h2> <ul> <li>Update to use <code>@actions/cache</code> 4.0.3 package & prepare for new release by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1577">actions/cache#1577</a> (SAS tokens for cache entries are now masked in debug logs)</li> </ul> <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/cache/pull/1577">actions/cache#1577</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v4.2.2...v4.2.3">https://github.com/actions/cache/compare/v4.2.2...v4.2.3</a></p> <!-- 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]<br /> 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>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> <ul> <li>Bump <code>@actions/cache</code> to v5.0.3 <a href="https://redirect.github.com/actions/cache/pull/1692">#1692</a></li> </ul> <h3>5.0.1</h3> <ul> <li>Update <code>@azure/storage-blob</code> to <code>^12.29.1</code> via <code>@actions/cache@5.0.1</code> <a href="https://redirect.github.com/actions/cache/pull/1685">#1685</a></li> </ul> <h3>5.0.0</h3> <blockquote> <p>[!IMPORTANT] <code>actions/cache@v5</code> runs on the Node.js 24 runtime and requires a minimum Actions Runner version of <code>2.327.1</code>.</p> </blockquote> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/cache/commit/27d5ce7f107fe9357f9df03efb73ab90386fccae"><code>27d5ce7</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1747">#1747</a> from actions/yacaovsnc/update-dependency</li> <li><a href="https://github.com/actions/cache/commit/f280785d7b6e1884c7d12b9136eb0f4a1574fcfd"><code>f280785</code></a> licensed changes</li> <li><a href="https://github.com/actions/cache/commit/619aeb1606e195be0b36fd0ff68dcf1aff6b65a7"><code>619aeb1</code></a> npm run build generated dist files</li> <li><a href="https://github.com/actions/cache/commit/bcf16c2893940a4899761e55c7ac3c1cf88a04f6"><code>bcf16c2</code></a> Update ts-http-runtime to 0.3.5</li> <li><a href="https://github.com/actions/cache/commit/668228422ae6a00e4ad889ee87cd7109ec5666a7"><code>6682284</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1738">#1738</a> from actions/prepare-v5.0.4</li> <li><a href="https://github.com/actions/cache/commit/e34039626f957d3e3e50843d15c1b20547fc90e2"><code>e340396</code></a> Update RELEASES</li> <li><a href="https://github.com/actions/cache/commit/8a671105293e81530f1af99863cdf94550aba1a6"><code>8a67110</code></a> Add licenses</li> <li><a href="https://github.com/actions/cache/commit/1865903e1b0cb750dda9bc5c58be03424cc62830"><code>1865903</code></a> Update dependencies & patch security vulnerabilities</li> <li><a href="https://github.com/actions/cache/commit/565629816435f6c0b50676926c9b05c254113c0c"><code>5656298</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1722">#1722</a> from RyPeck/patch-1</li> <li><a href="https://github.com/actions/cache/commit/4e380d19e192ace8e86f23f32ca6fdec98a673c6"><code>4e380d1</code></a> Fix cache key in examples.md for bun.lock</li> <li>Additional commits viewable in <a href="https://github.com/actions/cache/compare/v4...v5">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> |
||
|
|
d0591ca99a |
ci: publish aarch64-unknown-linux-musl release artifact (#12369) (#12438)
## What Re-enables the `aarch64-unknown-linux-musl` release target so we publish an `openobserve-<tag>-linux-arm64-musl.tar.gz` artifact. Closes #12369 (OSS portion). ## Why A user requested an arm64 + musl build. The target was commented out in `release.yml` (since #1909, late 2023). This brings it back. ## The fix The old commented entry ran on an **x86 runner** (`ubicloud-standard-8`) and cross-compiled. On that host the `Install Protoc for linux ARM` step (`contains(arch, 'aarch64-unknown-linux')`) installs an **aarch64 protoc** binary, which can't execute on x86 — `prost-build` invokes protoc at build time, so the build dies. That mismatch is the likely original "build trouble." This PR instead builds arm64-musl on the **native ARM runner** (`ubicloud-standard-16-arm`), the same setup the working `aarch64-unknown-linux-gnu` artifact already uses, which sidesteps the host/target protoc problem. Everything else is already in place: - `.cargo/config.toml` already configures `[target.aarch64-unknown-linux-musl]` (linker + `+aes,+neon`) - the `linux-musl` deps step already installs `musl-dev`/`musl-tools` + toolchain - the ARM protoc step matches and runs natively - OpenSSL-on-musl is already proven by the working `amd64-musl` build ## Verification This only takes effect on the next `v*.*.*` tag, so it can't be exercised until a release runs the workflow. The matrix and YAML parse correctly and the new entry mirrors the arm64-gnu config. ## Note This covers **OSS** only. The Enterprise arm64-musl build needs a separate change in the o2-enterprise pipeline. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
eb7cce9b96 |
test: query agent SQL regression suite — 155 queries, sqllogictest-style, two-phase (#12384)
## Summary
155-query SQL regression test suite covering 12 categories. Adding a new
query requires zero test code changes — drop a JSON entry into the right
category file and run `compute_counts.py`.
**Sqllogictest-style comparison**: DuckDB pre-computes full expected
result sets (not just row counts). The test runner extracts actual
values from OO hits, sorts both sides, and compares cell-by-cell with 5%
relative float tolerance. This catches value-level regressions that
row-count-only checks miss.
Two-phase execution: **memtable** (pre-flush) then **parquet**
(post-flush + Tantivy). **310/310 pass**.
## Architecture
```
tests/
├── api-testing/tests/query_agent/
│ ├── conftest.py # Shared fixtures, run_query(), tolerance comparison
│ ├── test_1_memtable.py # Phase 1: all queries pre-flush (FTS skipped)
│ └── test_2_parquet.py # Phase 2: post-flush (module-scoped fixture triggers flush)
└── test-data/query-agent/
├── data_gen.py # Deterministic data generator (single source of truth)
├── compute_counts.py # DuckDB oracle: computes expected result sets
├── base_ts_override.json # Locks BASE_TS so compute and tests share same timestamps
└── queries/ # 12 JSON files, 155 queries with expected results
```
### How it works
1. **Deterministic data** — `data_gen.py` generates 10 records per query
(1550 total) with a warehouse/supply-chain IoT schema. Each query Q{N}
gets isolated timestamps. `BASE_TS` is locked via
`base_ts_override.json` so compute and tests share identical timestamps
(prevents histogram bucket drift on minute boundaries).
2. **Unique stream per session** — `STREAM =
f"query_agent_test_{int(time.time())}"` prevents accumulated-data bleed
from prior runs.
3. **DuckDB oracle** — `compute_counts.py` loads the same dataset into
DuckDB, creates a pre-filtered VIEW per query (so time filters work for
CTEs, subqueries, UNIONs — no fragile SQL injection), translates
OO-specific functions, and writes `expected.results` blocks into the
query JSONs.
4. **Histogram translation** — `histogram(_timestamp, 'N unit')` is
translated to integer arithmetic matching OO's `date_bin` with origin at
2001-01-01T00:00:00 UTC. Verified against DataFusion CLI — 100/100
records match across all interval types (15s, 30s, 1m, 2m, 3m, 4m, 5m).
ISO timestamp post-processing converts epoch-µs bucket values to
`YYYY-MM-DDTHH:MM:SS` strings matching OO's serialization format.
5. **Sqllogictest comparison** — `run_query()` checks for
`expected.results`. When present, it extracts column values from hits as
strings, sorts both actual and expected (`results_mode: "rowsort"`), and
compares cell-by-cell with 5% relative float tolerance (handles
cross-engine floating-point drift in AVG/STDDEV/etc.).
6. **Two-phase testing** — `test_1_memtable.py` runs all queries
pre-flush (FTS sqllogictest skipped — Tantivy indexes don't exist yet).
`test_2_parquet.py` has a module-scoped `post_flush` fixture that
triggers `/node/flush`, re-polls until data is searchable, then runs all
queries with full assertions.
### Comparison modes
| Mode | Count | Mechanism |
|------|-------|-----------|
| **Sqllogictest** | 140 | Cell-by-cell comparison with 5% float
tolerance |
| **Skip sqllogictest** | 9 | DuckDB results for documentation, fall
back to legacy assertions |
| **Legacy** | 6 | 5 auto-interval histograms + Q122 (STRING_AGG
DISTINCT ORDER BY) |
**Skip sqllogictest queries** — known OO-DuckDB divergence:
| Query | Reason |
|-------|--------|
| Q037 | ROW_NUMBER tie-breaking differs between engines |
| Q058 | Self-join pairings non-deterministic across engines |
| Q072 | FULL OUTER JOIN histogram — NULL handling differs |
| Q080 | FTS `match_all` + histogram — Tantivy vs SQL LIKE |
| Q111 | ROW_NUMBER ties in pagination |
| Q117 | STRING_AGG ordering differs between engines |
| Q121 | STRING_AGG concatenation order |
| Q127 | UNION across 5 overlapping groups — boundary records compete
for LIMIT spots |
| Q152 | PERCENT_RANK tie-breaking differs between engines |
### Key design decisions
| Decision | Why |
|----------|-----|
| Full result-set comparison | Catches value-level regressions (e.g.,
ROUND producing wrong decimal) |
| `rowsort` mode | DuckDB and OO order ties differently — sorting both
sides eliminates spurious failures |
| 5% float tolerance | Cross-engine AVG/STDDEV/PERCENTILE differ at
least-significant digits |
| `''` = `'None'` normalization | OO serializes NULL as empty string;
DuckDB uses `"None"` |
| DuckDB VIEW for time filtering | WHERE injection into CTEs/subqueries
is fragile — VIEW filters at scan level |
| Dynamic columns excluded | `_timestamp` and `_time` differ between
compute time and test time |
| OO-dropped LAG columns excluded | `prev_tput`, `hours_2_back`,
`delta_from_prev`, `temp_diff` |
| Histogram → DuckDB integer math | DuckDB lacks `date_bin`; integer
formula verified via DataFusion CLI |
| BASE_TS override file | Prevents histogram timestamp drift when
compute and test run at different minutes |
| 1s time window margins | Minimizes cross-query data bleed while
capturing all 10 records |
| `pytest.fail()` on fixture failure | Stops all tests instead of
running 310 against an empty stream |
### Categories covered
| Category | Queries | Description |
|---|---|---|
| aggregation | Q001-Q020 | GROUP BY, COUNT, AVG, SUM, MIN, MAX, FILTER,
HAVING |
| basic_select | Q021-Q035 | WHERE, IN, BETWEEN, LIKE, ORDER BY,
DISTINCT, CASE |
| combined | Q036-Q045 | JOINs, multi-condition filters, combined
aggregations |
| cte_subquery | Q046-Q062 | CTEs, subqueries, derived tables, EXISTS |
| date_time | Q063-Q073 | Date parsing, formatting, extraction, interval
arithmetic, histogram |
| full_text_search | Q074-Q082 | match_all, match against fields |
| histogram | Q083-Q093 | histogram() bucketing, aggregation over
buckets |
| math_functions | Q094-Q102 | ROUND, SQRT, ABS, POWER, arithmetic
expressions |
| pagination | Q103-Q112 | LIMIT, OFFSET, combination with filters and
sorts |
| string_functions | Q113-Q122 | SUBSTR, CONCAT, UPPER, LOWER, TRIM,
LIKE patterns |
| union | Q123-Q134 | UNION ALL, UNION (dedup), CTE + UNION combinations
|
| window | Q135-Q155 | ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM/AVG
OVER |
## Test plan
- [x] All 155 queries pass in both phases (310/310)
- [x] 140 queries with sqllogictest cell-by-cell comparison
- [x] 17 histogram queries converted from legacy to sqllogictest
- [x] 9 queries with skip_sqllogictest for known OO-DuckDB divergence
- [x] 6 queries in legacy mode (auto-interval histograms + Q122)
- [x] BASE_TS locked via override file — no timestamp drift
- [x] Dedicated CI job (`api_query_agent_tests`) runs in parallel
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
ad9fef2242 |
fix: fuzzy tests (#12405)
- [x] Bulk ingestion panic - [x] Create function panic - [x] Dashboards/Alerts/Incidents panic when list data - [x] Match http response error code - [x] Skip some endpoint that fuzz can't generate data --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
3e865a3e6a | ci: update rust (#12394) | ||
|
|
61aa772d57 |
test: revamp api-testing suite (framework + 16 file rewrites + CI matrix) (#12372)
## Summary
Comprehensive rework of the `tests/api-testing/` suite. 30+ commits
implementing all 6 phases of the [revamp
plan](../../tests/ui-testing/MD_Files/api%20tests%20revamp/API_TESTS_REVAMP.md).
**Before → After:**
| | Baseline | Final | Δ |
|---|---|---|---|
| passed | 421 | **443** | **+22 ✓** |
| failed | 3 | **2** | -1 (only same pre-existing) |
| skipped | 53 | 39 | -14 (unskipped dead tests now run) |
| xfailed | 1 | 2 | +1 (new visible backend-bug signal) |
| runtime | 588s | **387s** | **-201s (34% faster)** |
**Zero tests that passed in baseline are now failing.** The 2 remaining
failures are the exact pre-existing ones
(`test_enrichment_table_join.py` backend panic + `test_workflow.py` SMTP
env-miss).
## What's in the diff
- **New `support/` framework** — `OpenObserveClient`, endpoint wrappers
(`alerts`, `dashboards`, `streams`, `search`, etc.), `wait_until()`,
payload factories, pytest fixtures, SSE parser. 14 framework selfcheck
tests.
- **16 of 16 OLD-tier test files rewritten** — using the new framework,
unique-suffix names, body validation, `wait_until` instead of
`time.sleep`, parametrize where appropriate.
- **29 files moved into 12 feature folders** mirroring the UI suite
layout
(`tests/{alerts,dashboards,ingest,orgs,pipelines,regression,rum,search,streams,users,workflow}/`).
- **−6,500 LOC net** (copy-paste + dead code removal; new framework adds
back ~1,500).
- **Ruff config** in pyproject.toml: T201 ban on `print()`, PT pytest
rules, B bugbear, UP pyupgrade.
## CI workflow changes
- New job `api_regression_tests`: `strategy.matrix` over the 4 env-flag
combinations (UTF8_VIEW × JOIN_MATCH_ONE) — now runs in parallel instead
of as 4 sequential server reboots in the main job.
- New job `api_fuzz_tests`: schemathesis OpenAPI-driven fuzz against
`/api-doc/openapi.json` (214 endpoints tested). Informational
(`continue-on-error: true`). Each run surfaces **7–10 distinct 5xx
panics** (e.g., empty `sql` body returning 500 instead of 400, traces
endpoints crashing on unescaped path params that get interpolated into
SQL). Filed to backend team for separate triage.
- Server `o2_*.log` files uploaded as artifacts on failure (was:
silently lost).
- `api_tests_summary` now requires BOTH integration + regression to
pass.
### CI infrastructure fixes
A short hardening pass landed after the initial CI run surfaced several
issues:
- **pytest-sugar count inflation** — dropped `--force-sugar` from both
pytest invocations. The flag double-registered sugar on top of the
auto-loaded entry point, inflating the CI test counter ~3x (display
showed 1364 when collection was 486). Counter is now honest.
- **schemathesis 4.x flag migration** — `--base-url` → `-u`,
`--hypothesis-max-examples` → `-n`, `--hypothesis-deadline` →
`--request-timeout`, `--data-generation-method` → `-m`, dropped
`--auth-type basic`. The fuzz job was failing immediately on flag-parse
before this.
- **Regression matrix binary path** — used `${{ github.workspace
}}/target/debug/openobserve` so the absolute path resolves correctly
under `working-directory: tests/api-testing/` (was: every matrix job
failed with "No such file or directory").
- **`permissions: contents: read`** added to all 4 workflow jobs —
closes CodeQL alert #369.
- **Removed redundant server boot** in `api_integration_tests` (leftover
from main's structure after the regression matrix split; was silently
failing to bind to :5080 and getting masked by the first server).
## Backend bugs surfaced (for backend team to track)
The rework uncovered and visibly flagged these as `xfail`/documented
test comments:
1. `DELETE /api/organizations/{id}` returns 404 unconditionally even for
just-created orgs — endpoint appears unimplemented.
2. `test_dashboard_missing_required_fields` triggers backend panic
(returns 500 instead of 400/422).
3. JS `getEnrichmentTableData()` restricted to `_meta` org AND not
exposed in the `/functions/test` endpoint runtime — `ReferenceError`
even with explicit `enrichment_tables: [...]`.
4. Bulk API silently sanitizes invalid `_index` values (`****` → `_`)
without flagging — user data lands in unexpected index.
5. `AVG` of a single value drifts by ~1e-14 (likely float reduction
order; documented tolerance in `test_advanced_sql.py`).
6. Org name validation rejects hyphens (only
`A-Z/a-z/0-9/spaces/underscores`) — not in spec.
Plus 7–10 additional 5xx panics surfaced per fuzz run (input validation
gaps — separate triage list in fuzz job logs).
## Test bugs uncovered + fixed
- `test_pipeline.py`: had two function definitions named
`test_pipeline_creation_and_action_with_schedule` — Python's last-wins
meant the first test's body never executed for years.
- `test_alertsV2.py`: `assert alert_disabled == "False"` was indented
inside an `else:` branch that never executed because the response is
always a dict; AND `enabled` is a bool, not the string `"False"`. Two
layers of broken.
- `test_bulk.py`: variable typo (`valid_bulk_payload` reused on the POST
call) made the invalid-index test silently duplicate the valid case.
- `test_organisations.py`: `test_create_organization` used pre-pytest-4
`yield`-style fixtures — silently ignored by pytest 8.
- `test_js_result_array.py`: 8 tests skipped with `"Temporarily disabled
- failing test"` — the actual cause was that JS functions are restricted
to `_meta` org. One-line fix unskipped all 8.
- `test_fuzzy.py`: 4 tests `@pytest.mark.skip`-ed because they used a
1-minute time window against older static test data → 0 hits → flake →
skip. Wider window unskips them.
- 547 LOC of zombie commented-out test blocks deleted (15 commented `#
def test_` definitions, including one orphan case where the `def` was
commented but the indented body wasn't).
## Folder layout
```
tests/api-testing/
├── support/ # NEW framework
│ ├── client.py # OpenObserveClient
│ ├── endpoints/ # 7 per-resource wrappers
│ ├── factories.py # unique_name, time_window, *_payload
│ ├── wait.py # wait_until + WaitTimeout
│ ├── sse.py # read_sse_response
│ └── fixtures.py # client, temp_user_email, temp_stream_name, ...
├── helpers/ # Non-test shared code (was scattered in tests/)
│ ├── sourcemap_helpers.py
│ └── workflow/ # workflow chain + pages/ live here now
├── fixtures/
│ └── rum/ # Standalone RUM ingest scripts (was in tests/)
└── tests/
├── alerts/ # 3 files
├── dashboards/ # 4 files
├── ingest/ # 4 files
├── orgs/ # 2 files
├── pipelines/ # 10 files
├── regression/ # 2 files (env-flag matrix targets)
├── rum/ # 3 files
├── search/ # 8 files
├── streams/ # 1 file
├── users/ # 1 file
├── workflow/ # 3 files
├── conftest.py
└── test_framework_selfcheck.py
```
## Test plan
- [x] `rye run pytest --collect-only` — 486 tests discovered
- [x] Full default-set run (`--ignore=tests/regression`) — 443 pass / 2
fail / 39 skip / 2 xfail in 387s
- [x] `rye run pytest -m framework` — 14/14 selfcheck tests pass
- [x] `rye run ruff check support/ tests/test_framework_selfcheck.py` —
clean
- [x] CI run on this PR — `api_integration_tests` + all 4
`api_regression_tests` matrix jobs green
- [x] CI run — `api_fuzz_tests` runs cleanly (informational; surfaces
7–10 unique 5xx panics per run)
## Note on test count
The `test_streaming.py` rewrite folded 7 "tests" (`test_ingest_data`,
`test_ingest_join`, `test_disable_streaming`,
`test_update_max_query_range`, `test_enable_streaming`,
`test_delete_stream`, `test_delete_stream_join`) into pytest fixtures.
Each only checked `status_code == 200` of a setup/teardown operation —
they were imperative steps masquerading as tests. The fixtures still
perform the same operations and assert their success; they're just no
longer counted as discrete pytest items. **Functional coverage is
identical.**
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||
|
|
3e172523d5 |
test: sync regression workflow runners and TestDino with playwright.yml (#12370)
## Summary - **Runners**: `merge_and_upload_reports` and `playwright_summary` now use `ubicloud-standard-4` (was `-8`), matching `playwright.yml` - **TestDino rerun optimization**: added `check_rerun` step + full `last-failed` logic (same as `playwright.yml`) — on re-run-failed, only the previously failed test in each shard is re-executed - **Upload step**: added failures-only filter (`node -e` filterSuite), `startTime` ISO 8601 conversion, and `--verbose`; now uploads `report-failures-only.json` instead of the full report ## Test plan - [ ] Trigger a regression run and confirm it completes with the new runner sizes - [ ] Intentionally fail a test, re-run failed jobs, and verify TestDino optimization runs only the failed test - [ ] Confirm Upload to TestDino step produces a filtered report 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
6ef8c85a75 | chore: remove orphan generate-unit-tests reusable workflow (#11833) | ||
|
|
cc1f09c5c1 |
test: fix selector drift across ENT specs, re-enable enterprise tests, and improve CI (#12358)
## Summary Broad test stabilization pass covering Quasar component selector drift in ENT UI specs, re-enabling previously disabled enterprise tests, and CI infrastructure fixes. ### UI test fixes (selector drift) Quasar's O2 component library wraps native elements — `OInput`, `OTextarea`, `ODropdown`, `OToast`, `OToggleGroup`, `OToggleGroupItem`, `ODrawer`, `ODialog`, `OFile` — in ways that break naive attribute/role selectors. This PR updates affected specs to use the correct locators. | Spec | Fixes | |------|-------| | `service-graph.spec.js` | `OToggleGroupItem` selector, `ODrawer` close btn, `beforeAll` timeout | | `alerts-ui-operations.spec.js` | Remove `waitForResponse` overhead from enterprise block | | `logoManagement.spec.js` | `OInput` / `OFile` / `ODialog` / `OToast` locators | | `jobSearch.spec.js` | `OInput` fill targets wrapper div, `OTable` index-based rows | | `searchPatterns.spec.js` | `OToggleGroup` same-element selector, pattern details dialog | | `pipelineImport.spec.js` | `OInput` / `ODropdown` / Monaco / `OToast` selector drift | | `regexPatternManagement.spec.js` | Correct test-data import file path | | `cipherKeys.spec.js` | `OInput`/`OTextarea` `-field` suffix, `OToast` selector, 403 skip guard, all-toasts polling | ### Enterprise tests re-enabled - Removed `/* ... */` block comment disabling `"Alerts & Incidents Page Navigation"` describe block (`@enterprise`) in `alerts-ui-operations.spec.js` - 3 tests restored: page navigation, element visibility, round-trip nav back to Alerts - Requires `O2_INCIDENTS_ENABLED=true` (set in ENT CI) ### CI improvements - **playwright.yml**: Install `ffmpeg` via local Playwright binary (required for `video: retain-on-failure` recording) - **api-testing.yml**: Reduce runner from `ubicloud-standard-8` → `ubicloud-standard-4` - **test_stream_settings_dedup.py**: Fix field-filtering logic and assertion count in `test_multiple_distinct_fields_no_duplicates` ## Paired ENT PR Full ENT-only test restoration (SDR, RUM, cipherKeys, etc.): https://github.com/openobserve/o2-enterprise/pull/1835 ## Test plan - [ ] ENT CI: `"Alerts & Incidents Page Navigation"` enterprise block passes - [ ] Playwright CI: video artifacts generated on failure (ffmpeg install works) - [ ] API tests: `test_multiple_distinct_fields_no_duplicates` passes 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
98d1d1c378 |
test: fix Chromium CI stability and disable ENT-only tests (runner resize, timeouts, cache, no-sandbox) (#12330)
## Summary - **`--no-sandbox` / `--disable-setuid-sandbox`** added to `chromium.launch()` in `globalSetup.js` and `launchOptions` in `playwright.config.js` (CI-only) — prevents silent Chromium hangs on restricted runner environments - **`globalTimeout: 110 min`** added to `playwright.config.js` — caps the entire suite at 110 min (10 min under the job timeout) so hung runs fail with a clear Playwright error instead of a silent CI kill - **`restore-keys` fallback** added to the browser cache step — a `package-lock.json` change no longer forces a full 163 MB re-download on every shard simultaneously - **Runner right-sizing**: `ui_integration_tests` → `repo-openobserve-standard-16`; `merge_and_upload_reports` + `playwright_summary` → `repo-openobserve-standard-4` ## Test plan - [ ] Confirm `ui_integration_tests` shards start without Chromium launch hangs - [ ] Confirm cache hit on second run (restore-keys fallback working) - [ ] Confirm `merge_and_upload_reports` and `playwright_summary` succeed on 4 GB runners 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
+5 |
ae22a74e62 |
feat: ux improvement main (#11838)
#11720 Design at: https://github.com/openobserve/designs/blob/main/dashboards/ux-improvement-dialog/design.md --------- --------- Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com> Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com> Co-authored-by: Sai Nikhil <nikhil@openobserve.ai> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: ktx-mihir <mihir.patel@kiara.tech> Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Omkar Kesarkhane <127078473+omkarK06@users.noreply.github.com> Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
4d2291d335 |
test: switch playwright CI runners from ubicloud to repo-openobserve (#12317)
## Summary - Switch `ui_integration_tests`, `merge_and_upload_reports`, and `playwright_summary` jobs from `ubicloud-standard-8` to `repo-openobserve-standard-8` - `build_binary` remains on `ubicloud-standard-16` (unchanged) ## Test plan - [ ] Verify CI triggers and jobs pick up the correct `repo-openobserve` runners - [ ] Confirm `build_binary` still runs on ubicloud 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
63b28f68c6 |
test: fix playwright CI hangs and add browser caching (#12258)
## Problem Playwright CI jobs were hanging for 2–6 hours and then timing out without running a single test. Root cause: `npx playwright install --with-deps chromium` downloads the browser binary successfully (~3s), but the `--with-deps` flag then runs a second `apt-get` call that waits indefinitely for the dpkg lock held by Ubuntu's `unattended-upgrades` background daemon on ubicloud runners. Evidence: in a 2h8m run, Chromium downloaded at `08:51:49`, but the `playwright install` process was still listed as a zombie when the job was killed at `11:00:23`. ## Fix Two-layer fix applied to all four workflow files (`playwright.yml` + `playwright_regression.yml` in both OSS and enterprise): **1. Kill background apt services at job start** (new first step) ```bash sudo systemctl stop apt-daily.service apt-daily-upgrade.service unattended-upgrades.service sudo systemctl stop apt-daily.timer apt-daily-upgrade.timer sudo systemctl disable apt-daily.service apt-daily-upgrade.service unattended-upgrades.service sudo flock --wait 30 /var/lib/dpkg/lock-frontend true ``` This eliminates the root cause — the dpkg lock contender is gone before `playwright install` runs. **2. Cache the browser binary** (`actions/cache@v4` keyed on `package-lock.json` hash) On cache hit, only system dependencies are installed (`playwright install-deps chromium`), avoiding apt entirely. On cache miss, the full `playwright install --with-deps chromium` runs with apt services already stopped. **3. Filter TestDino uploads to failures only** Before uploading to TestDino, the JSON report is filtered to only include tests with `status === 'unexpected'`. This prevents passing tests from polluting the TestDino failure history. ## Files changed - `.github/workflows/playwright.yml` — kill apt, cache browser, cache-aware install, TestDino filter - `.github/workflows/playwright_regression.yml` — kill apt, cache browser, split into separate npm/playwright/test steps --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
7157b8feb3 |
test: add E2E regression tests for scroll retention (#9044) and undefined length (#7354) (#12061)
## Summary - Adds 2 new E2E regression test specs to `RegressionSet/` for recently fixed bugs - Adds 13 new page object methods to `logsPage.js` for scroll, pagination, scheduled search, and sidebar navigation https://github.com/openobserve/openobserve/issues/7354 https://github.com/openobserve/openobserve/issues/9044 ## Tests Added ### scroll-retention-9044.spec.js (3 tests) - Scroll resets to top when navigating page 1 → page 2 via page number button - Scroll resets to top when navigating page 2 → page 1 - Scroll resets to top via Next Page (>) button ### undefined-length-7354.spec.js (2 tests) - No "Undefined Length" error after navigating Logs → Scheduled Search → Streams → Logs - No console errors containing "undefined" or "length" after the reproduction path ## CI - Updated `playwright_regression.yml` to include both new spec files in the `Logs-Regression` matrix 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
ab86391649 |
test: add E2E tests for report folders functionality (#11985)
## Summary
- **Add `reportFoldersPage.js`** page object with 30+ methods for folder
CRUD, report move, search, and cross-folder toggle
- **Add `reportFolders.spec.js`** with 12 tests covering:
- **P0 Smoke**: Sidebar renders with default folder, create new folder
- **P1 Functional**: Create report via API (creates temp dashboard from
scratch), move report between folders, cross-folder search, folder
sidebar search filter
- **P2 Edge Cases**: Move button disabled when source=destination, save
disabled for empty name, cancel closes dialog, default folder has no
edit/delete options, special characters allowed in folder names
- **Cleanup**: Deletes all test reports, folders, and leaves no
resources behind
- **Add `createDashboardViaApi`** to apiCleanup.js — creates a minimal
v8 dashboard from scratch, removing dependency on pre-existing
dashboards
- **Add `createReportViaApi`**, `fetchReportFolders`,
`deleteReportFolder`, `cleanupReportFolders` methods to apiCleanup.js
- Register ReportFoldersPage in PageManager
## Approach
- Everything created from scratch — unique report via API, unique
folders via UI, all cleaned up afterward
- No dependency on pre-existing dashboards or reports
- Zero `waitForTimeout` calls — all waits use `waitForLoadState`,
`waitFor({ state: 'visible/hidden' })`, or role-based waits
- Serial execution (tests build on each other: create folder → create
report → move report → cleanup)
## Test Results
```
12 passed (2.1m)
```
## CI Integration
- Added to `.github/workflows/playwright.yml` under `Reports` testfolder
alongside existing report tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
f877299d31 | fix: deepseek write error: Broken pipe and Argument list too long (#11940) | ||
|
|
2423a4b5d4 |
feat: deepseek pr review (#11858)
resolves https://github.com/openobserve/openobserve/issues/11880 |
||
|
|
3161d13785 | fix: refactor ssrf (#11734) | ||
|
|
4211cf37cf |
test: move QB ingestion to beforeAll, skip redundant initial queries (#11797)
## Summary - Moves `ingestTestData` from `beforeEach` to `beforeAll` across all QB describe blocks (one ingestion per describe instead of per test) - For describe blocks where ALL tests call `setupQueryAndSwitchToBuild` (run their own query), uses a lite `beforeEach` that skips the initial `match_all` `/_search` call - Adds `ingestForQueryBuilderTest` helper that works with Playwright's `request` fixture (no page needed in `beforeAll`) - Adds `initQueryBuilderTestLite` helper for describe blocks that don't need the initial query **Impact:** ~74 fewer redundant ingestions and ~41 fewer redundant `/_search` calls per shard run. Estimated reduction: Logs-Builder from ~19 min to ~10-12 min. ## Files changed | File | Change | |------|--------| | `queryBuilder-helpers.js` | Add `ingestForQueryBuilderTest` + `initQueryBuilderTestLite`, remove ingestion from `initQueryBuilderTest` | | `logsQueryBuilder-filters.spec.js` | Split SQL OFF tests into separate describe, add `beforeAll`, use lite init for main block | | `logsQueryBuilder-chart.spec.js` | Add `beforeAll` to 5 describe blocks, use lite init for Chart Type + Chart Auto-Selection blocks | | `logsQueryBuilder-editor.spec.js` | Add `beforeAll` to 7 describe blocks, use lite init for Bare Field Select + FieldList visibility blocks | ## Test plan - [ ] CI: Logs-Builder shard completes in < 13 minutes (currently ~19 min) - [ ] All 77 QB tests pass (no regressions) - [ ] No changes to test assertions or coverage ## Fallback If this doesn't bring Logs-Builder below ~13 min, Plan B (4-shard split) is documented in `tests/ui-testing/MD_Files/Logs Shard Split/4-shard-strategy.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
22b23bfb9b |
test: split logsQueryBuilder into 3 files and rebalance Logs CI shards (#11752)
## Summary - Splits the monolithic `logsQueryBuilder.spec.js` (82 tests, 1,968 lines) into 3 parallel-friendly files by describe-block grouping: - `logsQueryBuilder-chart.spec.js` — 28 tests (P0 critical, tab navigation, chart types, entry conditions, chart auto-selection) - `logsQueryBuilder-filters.spec.js` — 26 tests (all filter operator tests) - `logsQueryBuilder-editor.spec.js` — 23 tests (builder tab improvements, edge cases, mode toggles, bare field select, field list visibility) - Replaces the 2 uneven Logs shards (`Logs-Core` 175 tests / `Logs-Queries` 57 tests) with 3 balanced shards: - `Logs-Builder` (~102 tests) — the 3 split files + logsquickmode, logshistogram, pagination, unflattened - `Logs-Core` (~92 tests) — logspage, logstable, logsqueries, join, shareLink, logsAnalyzeDimensions, monaco-query-prefill, logsqueries.matchall - `Logs-Features` (~77 tests) — autocomplete, searchJobInspector, searchPatterns, jobSearch, sql-autocomplete, CTE, downloads, secondsPrecision, searchpartition, indexquery, region ## Why The old `Logs-Core` shard took **28 minutes** because `logsQueryBuilder.spec.js` (82 serial tests in one file) pinned a single worker while 4 others sat idle. With the split, all 5 workers can process files in parallel, bringing estimated shard time to **~10-12 minutes each**. ## Test plan - [x] All 3 new files verified with `--list` (77 tests parsed correctly) - [x] Shard 1 (Logs-Builder): 65 passed, 5 failed — all 5 failures are pre-existing timing/flake issues, confirmed against CI run [#25556422716](https://github.com/openobserve/openobserve/actions/runs/25556422716/job/75017482996) - [x] Shard 2 (Logs-Core): 88 passed, 4 failed — all 4 failures pre-existing in untouched files - [x] Shard 3 (Logs-Features): 62 passed, 15 failed — 11 are `@enterprise` tests expected to fail on OSS, 4 pre-existing flakes - [x] Zero import errors, zero missing utility function errors across all 3 files - [x] ENT `playwright.yml` updated in companion PR: openobserve/o2-enterprise 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
ac9d365ce2 | fix: claude PR is using opus models hence causing high cost (#11744) | ||
|
|
120b75e09a |
test: clean up bug report template — fix typos, remove redundant categories (#11729)
## Summary - **Fixed** `Not Known / Other` → `Unknown / Other` (grammar error) - **Removed** `Data Sources` — no dedicated page exists in the codebase, fully covered by `Ingestion` - **Renamed** `Landing Page` → `Home` — matches route name, component name, and enterprise template - **Renamed** `Cosmetic` → `UI / Styling` — clearer and more descriptive 17 checkboxes (down from 18). ## Test plan - [ ] Verify template renders correctly in GitHub issue form: `https://github.com/openobserve/openobserve/issues/new?template=bug-report-template-latest.yaml` - [ ] Confirm all 17 checkboxes appear and are selectable 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7eed0d0289 |
test: add regression E2E batch-1 for traces, logs, and alerts (#11706)
## Summary - Adds 8 bug regression tests across 3 spec files covering Traces, Logs, and Alerts - Expands page objects with `skipNavigation` support in LogsPage.selectStream() - Fixes `isSuggestionWidgetVisible()` in TracesPage to use `page.evaluate()` (CSS override bypass) - Integrates all 3 specs into the CI regression pipeline ## Tests Covered | Suite | Bug # | Description | |-------|-------|-------------| | Traces | #10743 | Stream persistence across navigation | | Traces | #11580 | Query editor resets after stream type switch | | Traces | #11217 | Trace editor autocomplete when typing | | Logs | #10821 | Quick mode toggle click interaction | | Logs | #10595 | Single row expansion after run query | | Logs | #9049 | Decimal values rejected in datetime picker | | Alerts | #10110 | Template not duplicated in override input | | Alerts | #11577 | Preview chart renders with numeric y-axis | ## Test Results - **8 passed, 0 skipped, 0 failed** against dev env 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
a86199ec89 |
test: add Playwright E2E tests for service catalog (#11703)
## Summary - Adds 21 Playwright E2E tests for the Service Catalog tab (`/web/traces?tab=services-catalog`) - New page object at `tests/ui-testing/pages/tracesPages/servicesCatalogPage.js` with verified `data-test` selectors - Registers `ServicesCatalogPage` in PageManager ## Test Coverage (21 tests) | Category | Tests | |----------|-------| | Smoke | 5 — page load, default sort, search filter, clear filter regression (#11689), row click/side panel | | Pagination | 5 — default 25/page, 10/page, page nav, prev/next, last page | | Column Sorting | 5 — Status, Requests, Error Rate, Service Name, P95 Duration | | Status Pills | 3 — pill counts, visibility, non-negative values | | Edge Cases | 3 — rapid typing stability, key services exist, console errors | ## Key Design Decisions - **Parallel mode** — avoids serial session degradation - **Isolated test stream** (`e2e-service-catalog`) — `stream-name` header on ingestion prevents false positives from default stream data - **No shared library modifications** — ingestion uses `getAuthHeaders()` directly in `beforeAll` to add the `stream-name` header without changing `service-graph-ingestion.js` - **No `force: true`** — portal interference handled via Escape key after dropdown selection - **Zero raw selectors in spec** — all selectors live in the page object per framework conventions ## Test Plan - [x] All 21 tests pass locally against dev environment - [ ] CI passes with `npx playwright test playwright-tests/Traces/service-catalog.spec.js --config playwright.config.js` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
511bb5ef67 |
test: add dedicated playwright regression workflow and sync tests with ENT (#11677)
## Summary - Added `playwright_regression.yml` with one-shard-per-spec parallelism (11 regression specs) - Removed `RegressionSet` shard from main `playwright.yml` (tests now run via dedicated regression workflow) - Added `Cache test failures to TestDino` step to regression workflow (matching main playwright.yml) - Uses `ubicloud-standard-8` runners for all regression jobs ## Schedule - Auto-triggers every 4 hours starting from 9 AM IST (3:30, 7:30, 11:30, 15:30, 19:30, 23:30 UTC) - Manual trigger via `workflow_dispatch` ## Test Plan - [ ] Confirm `playwright_regression.yml` appears in Actions tab - [ ] Trigger a manual run to verify all 11 regression specs run in parallel - [ ] Verify `playwright.yml` no longer includes RegressionSet shard --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
284442c9f0 |
test: add dedicated playwright regression workflow (#11669)
## Summary - Split regression tests out of main `playwright.yml` into a dedicated `playwright_regression.yml` workflow - Regression tests now run with **one shard per spec** for maximum parallelism - Removed `RegressionSet` shard from main `playwright.yml` ## Schedule - Auto-triggers every 4 hours starting from 9 AM IST (3:30, 7:30, 11:30, 15:30, 19:30, 23:30 UTC) - Manual trigger via `workflow_dispatch` on any branch (always runs on localhost) ## Test Plan - [ ] Confirm `playwright_regression.yml` appears in Actions tab - [ ] Trigger a manual run to verify all 10 regression specs run in parallel - [ ] Verify `playwright.yml` no longer includes RegressionSet shard 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
5d86357fdd | test: add regression tests for same-dashboard drilldown-URL clobbering (#11661) | ||
|
|
3faa3d2ecc |
test: skip TestDino upload and cache on green runs (#11668)
## Summary - Skip TestDino "Cache test failures" and "Upload to TestDino" steps when all tests pass - Both steps now gate on `needs.ui_integration_tests.result == 'failure'` so they only run when at least one test shard failed - The retry mechanism (`tdpw last-failed`) is unaffected — when there are failures the cache step still runs, and the re-run flow works as before ## Why TestDino bills per test case uploaded. Running both steps on green builds wastes quota with zero value since the user only uses TestDino for failure analysis. ## Changes - `merge_and_upload_reports` job: "Cache test failures" step condition changed from `always()` to `needs.ui_integration_tests.result == 'failure'` - `merge_and_upload_reports` job: "Upload to TestDino" step condition changed from `(success() || failure())` to `needs.ui_integration_tests.result == 'failure'` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
c41779f779 |
test: add alerts stream-switching regression tests for 5 canvas/graph bugs (#11651)
## Summary - Adds 18 new POM methods to `alertsPage.js` for stream-type/query-mode coherence verification, chart state assertions, query editor interaction, and aggregation field filtering - Adds 5 helper methods to `alertCreationWizard.js` for full editor open/close, stream switching, and query execution - Adds new regression spec `alerts-stream-switching-regression.spec.js` covering 5 closed bugs: | Bug | Description | |-----|-------------| | #11580 | Metrics+PromQL -> Logs, PromQL editor persists | | #11572 | Logs -> Metrics -> Logs, chart error "No field named value" | | #11571 | Builder -> SQL, chart blank table instead of line | | #11573 | Full editor open/close blanks the graph | | #11578 | Agg functions don't filter to integer fields | ## Test plan - [ ] Run `alerts-stream-switching-regression.spec.js` against dev environment - [ ] All 5 tests pass with no raw selectors in spec (POM-compliant) - [ ] Chart assertions verify canvas child exists (not just bounding box) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7316ae311f | chore: enhance frontend linting and build process (#11643) | ||
|
|
f29102fd9d | fix: ubi-30 to ubi-16 (#11621) | ||
|
|
5098928085 |
chore(deps): bump slackapi/slack-github-action from 3.0.2 to 3.0.3 (#11600)
Bumps [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action) from 3.0.2 to 3.0.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/slackapi/slack-github-action/releases">slackapi/slack-github-action's releases</a>.</em></p> <blockquote> <h2>Slack GitHub Action v3.0.3</h2> <h3>Patch Changes</h3> <ul> <li>66834e4: feat: add instrumentation to address error rates</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/slackapi/slack-github-action/blob/main/CHANGELOG.md">slackapi/slack-github-action's changelog</a>.</em></p> <blockquote> <h2>3.0.3</h2> <h3>Patch Changes</h3> <ul> <li>66834e4: feat: add instrumentation to address error rates</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/slackapi/slack-github-action/commit/45a88b9581bfab2566dc881e2cd66d334e621e2c"><code>45a88b9</code></a> chore: release</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/1c0bcf08feaa559a9bcfcc249184e13b136ffa55"><code>1c0bcf0</code></a> chore: release (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/606">#606</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/66834e4b0cad4cbf09ca680587ad8af71d615d4b"><code>66834e4</code></a> feat: add instrumentation to address error rates (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/600">#600</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/0fe0f902b9f8da107ca0e1314a388c0f57e20d48"><code>0fe0f90</code></a> build(deps): bump <code>@actions/github</code> from 9.0.0 to 9.1.1 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/605">#605</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/c5e70597945c255539c5218d4178ed3c7d8188be"><code>c5e7059</code></a> build(deps): bump <code>@slack/web-api</code> from 7.15.0 to 7.15.1 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/604">#604</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/0325526875571a27abcfd2b302453a90871abbff"><code>0325526</code></a> build(deps-dev): bump <code>@biomejs/biome</code> from 2.4.10 to 2.4.13 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/601">#601</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/900cd3e6fa9d6eacd8a5512ecff230d08e65aec7"><code>900cd3e</code></a> build(deps-dev): bump <code>@types/node</code> from 24.12.0 to 24.12.2 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/603">#603</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/53fdcffeb6e4d34cbdf3276f7beadb0ecc7c9fcd"><code>53fdcff</code></a> build(deps): bump <code>@actions/core</code> from 3.0.0 to 3.0.1 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/602">#602</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/26856cc7fb2c1c2951483645f5fdc3643dbe96eb"><code>26856cc</code></a> build(deps): bump slackapi/slack-github-action from 3.0.1 to 3.0.2 (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/596">#596</a>)</li> <li><a href="https://github.com/slackapi/slack-github-action/commit/feba1e29702383a5a3cd5136af0559ba10859b04"><code>feba1e2</code></a> ci: skip publish step if no release is needed (<a href="https://redirect.github.com/slackapi/slack-github-action/issues/599">#599</a>)</li> <li>Additional commits viewable in <a href="https://github.com/slackapi/slack-github-action/compare/v3.0.2...v3.0.3">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> |
||
|
|
511eccf363 |
fix: correct field access order for CSV download in TableRenderer (#11591)
- #11574 |