Skip to content

devops: report CI test results as parquet artifacts#41669

Merged
Skn0tt merged 6 commits into
microsoft:mainfrom
Skn0tt:skn0tt-parquet-reporter
Jul 7, 2026
Merged

devops: report CI test results as parquet artifacts#41669
Skn0tt merged 6 commits into
microsoft:mainfrom
Skn0tt:skn0tt-parquet-reporter

Conversation

@Skn0tt

@Skn0tt Skn0tt commented Jul 7, 2026

Copy link
Copy Markdown
Member

Every CI test run now writes its results to a parquet file, uploaded as a per-job artifact. A separate compaction job (not in this PR) will ingest those into a queryable history - so we can answer "how flaky is this test, really" without scraping logs.

New reporter at tests/config/parquetReporter.mts collects results in an in-memory DuckDB and exports one parquet per run. Artifact retention is 7 days; the compaction job is the real system of record. CI only.

Skn0tt added 5 commits July 7, 2026 12:18
Adds a parquetReporter that writes each test result into an in-memory
DuckDB and exports a parquet file per CI job, uploaded as an artifact
for downstream compaction.
The .mts reporter is ESM; importing the named stripAnsi from the CommonJS ./utils failed at load with a missing-named-export error. Inline the tiny helper so the reporter is self-contained.
Docker runs tests inside the container, where the GITHUB_* vars weren't present, so every parquet row had null run/PR metadata. Forward them into the test-run exec.
npm 11 records libc fields for the duckdb native optional deps; CI runs npm 10 and strips them on install, failing the clean-tree check. Remove them so the committed lockfile matches CI.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@Skn0tt Skn0tt added the CQ1 label Jul 7, 2026
@Skn0tt Skn0tt requested a review from dgozman July 7, 2026 12:34
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

Comment thread .github/workflows/tests_docker.yml Outdated
Comment thread .github/actions/run-test/action.yml Outdated
Comment thread .github/actions/upload-parquet-report/action.yml
Comment thread .github/workflows/tests_bidi.yml
Comment thread .github/workflows/tests_components.yml Outdated
- run: npm run build
- run: npx playwright install --with-deps
- run: npm run ct
- run: npm run ct -- --reporter=list,./tests/config/parquetReporter.mts

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this one different from others? Update the playwright config instead?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one doesn't have a config, but I also realised that we're not even emitting blobs for this, so I dropped it.

Comment thread tests/tsconfig.json Outdated
"ignoreDeprecations": "6.0",
},
"include": ["**/*.spec.js", "**/*.ts"],
"include": ["**/*.spec.js", "**/*.ts", "**/*.mts"],

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why make it .mts and not a .ts?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So that the top-level await works. I did it because I didn't want to buffer all results to apply them in onEnd, but I thought again and realised that it's not as much memory as I thought. Turned it back into .ts.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Test results for "tests 2"

3 failed
❌ [electron-page] › page/page-autowaiting-no-hang.spec.ts:41 › assigning location to about:blank @electron-ubuntu-latest
❌ [webkit-library] › library/browsercontext-cookies-third-party.spec.ts:331 › add 'Partitioned;' cookie via API @webkit-macos-15-xlarge
❌ [webkit-library] › library/browsercontext-cookies-third-party.spec.ts:331 › add 'Partitioned;' cookie via API @webkit-macos-15-large

36 flaky ⚠️ [electron-page] › page/page-evaluate.spec.ts:564 › should not throw an error when evaluation does a synchronous navigation and returns an object `@electron-ubuntu-latest`
⚠️ [electron-page] › page/page-evaluate.spec.ts:573 › should not throw an error when evaluation does a synchronous navigation and returns undefined `@electron-ubuntu-latest`
⚠️ [electron-page] › page/page-route.spec.ts:1027 › route.fulfill should throw if called twice `@electron-ubuntu-latest`
⚠️ [electron-page] › page/page-autowaiting-no-hang.spec.ts:41 › assigning location to about:blank `@electron-macos-latest`
⚠️ [electron-page] › page/page-autowaiting-no-hang.spec.ts:46 › assigning location to about:blank after non-about:blank `@electron-macos-latest`
⚠️ [electron-page] › page/page-evaluate.spec.ts:179 › should throw when evaluation triggers reload `@electron-macos-latest`
⚠️ [electron-page] › page/page-evaluate.spec.ts:564 › should not throw an error when evaluation does a synchronous navigation and returns an object `@electron-macos-latest`
⚠️ [electron-page] › page/page-evaluate.spec.ts:573 › should not throw an error when evaluation does a synchronous navigation and returns undefined `@electron-macos-latest`
⚠️ [electron-page] › page/page-route.spec.ts:1027 › route.fulfill should throw if called twice `@electron-macos-latest`
⚠️ [chromium-library] › library/chromium/chromium.spec.ts:371 › should produce network events, routing, and annotations for Service Worker `@tracing-chromium`
⚠️ [chromium-library] › library/chromium/connect-over-cdp.spec.ts:523 › emulate media should not be affected by second connectOverCDP with noDefaults `@msedge-dev-windows-latest`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@msedge-dev-windows-latest`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@chrome-ubuntu-22.04`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@msedge-windows-latest`
⚠️ [chromium-library] › library/heap.spec.ts:304 › cycle handles `@chromium-macos-15-large`
⚠️ [chromium-library] › library/chromium/chromium.spec.ts:434 › should produce network events, routing, and annotations for Service Worker (advanced) `@chromium-macos-14-xlarge`
⚠️ [chromium-library] › library/screenshot.spec.ts:213 › page screenshot › should not hang when event loop is blocked `@chromium-macos-14-xlarge`
⚠️ [chromium-library] › library/chromium/oopif.spec.ts:282 › should click `@chromium-macos-15-xlarge`
⚠️ [chromium-library] › library/video.spec.ts:645 › screencast › should capture full viewport `@chromium-macos-15-xlarge`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@chrome-windows-latest`
⚠️ [chromium-library] › library/chromium/chromium.spec.ts:299 › should report intercepted service worker requests in HAR `@chrome-beta-ubuntu-22.04`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@chrome-beta-ubuntu-22.04`
⚠️ [chromium-library] › library/chromium/chromium.spec.ts:434 › should produce network events, routing, and annotations for Service Worker (advanced) `@chrome-macos-latest`
⚠️ [chromium-library] › library/video.spec.ts:456 › screencast › should be 800x600 with null viewport `@chrome-macos-latest`
⚠️ [electron-page] › page/page-autowaiting-no-hang.spec.ts:41 › assigning location to about:blank `@electron-windows-latest`
⚠️ [electron-page] › page/page-evaluate.spec.ts:573 › should not throw an error when evaluation does a synchronous navigation and returns undefined `@electron-windows-latest`
⚠️ [firefox-library] › library/inspector/cli-codegen-3.spec.ts:224 › cli codegen › should generate frame locators (4) `@tracing-firefox`
⚠️ [firefox-library] › library/defaultbrowsercontext-2.spec.ts:202 › should handle exception `@firefox-macos-15-large`
⚠️ [firefox-library] › library/heap.spec.ts:223 › should not leak workers `@firefox-macos-15-large`
⚠️ [firefox-library] › library/browsercontext-basic.spec.ts:170 › should make a copy of default viewport `@firefox-macos-15-xlarge`
⚠️ [firefox-library] › library/screenshot.spec.ts:213 › page screenshot › should not hang when event loop is blocked `@firefox-macos-15-xlarge`
⚠️ [webkit-library] › library/playwright-client.spec.ts:26 › should connect from a page and drive the same browser `@tracing-webkit`
⚠️ [webkit-page] › page/page-set-input-files.spec.ts:295 › should detect mime type `@webkit-windows-latest`
⚠️ [webkit-library] › library/trace-viewer.spec.ts:1922 › canvas disabled title `@webkit-macos-15-xlarge`
⚠️ [webkit-library] › library/trace-viewer.spec.ts:1932 › canvas clipping `@webkit-macos-15-xlarge`
⚠️ [webkit-page] › page/wheel.spec.ts:51 › should dispatch wheel events @smoke `@webkit-macos-15-large`

105909 passed, 4476 skipped


Merge workflow run.

@Skn0tt Skn0tt removed the CQ1 label Jul 7, 2026
Buffer test results and do all DuckDB work in onEnd, so the reporter can
be a plain .ts file. Fix the docker artifact filename, drop redundant
report_file inputs, tidy the upload action's required/default inputs, and
drop parquet from the components lane where only coarse meta-runner rows
were recorded.
@Skn0tt Skn0tt requested a review from dgozman July 7, 2026 14:02
@Skn0tt Skn0tt merged commit bddd05f into microsoft:main Jul 7, 2026
53 of 58 checks passed
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Test results for "MCP"

2 failed
❌ [chromium] › mcp/annotate.spec.ts:173 › user-initiated annotate downloads zip with feedback.md @mcp-windows-latest-chromium
❌ [webkit] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-ubuntu-latest-webkit

7707 passed, 1235 skipped


Merge workflow run.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

3 flaky ⚠️ [chromium-library] › library/chromium/chromium.spec.ts:371 › should produce network events, routing, and annotations for Service Worker `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:717 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-emulate-media.spec.ts:144 › should keep reduced motion and color emulation after reload `@firefox-ubuntu-22.04-node20`

49501 passed, 1164 skipped


Merge workflow run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants