feat(operator-demo-video): add login and workflow-navigation controllers - #7600
feat(operator-demo-video): add login and workflow-navigation controllers#7600xuang7 wants to merge 3 commits into
Conversation
…ht automation foundation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dules use Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Automated Reviewer SuggestionsBased on the
|
|
Could you take a look when you're available? Thanks! @carloea2 |
|
| config | throughput | MB/s | latency | max Δ latest / 7d | |
|---|---|---|---|---|---|
| 🔴 | bs=10 sw=10 sl=64 | 388 | 0.237 | 25,897/33,087/33,087 us | 🔴 +13.8% / 🔴 +103.2% |
| 🔴 | bs=100 sw=10 sl=64 | 905 | 0.552 | 105,044/164,408/164,408 us | 🔴 +14.6% / 🔴 +51.9% |
| ⚪ | bs=1000 sw=10 sl=64 | 1,097 | 0.67 | 911,511/1,024,078/1,024,078 us | ⚪ within ±5% / 🟢 -8.5% |
Baseline details
Latest main 71faf44 from same runner
| config | metric | PR | latest main | 7d avg | Δ latest | Δ 7d |
|---|---|---|---|---|---|---|
| bs=10 sw=10 sl=64 | throughput | 388 tuples/sec | 429 tuples/sec | 775.33 tuples/sec | -9.6% | -50.0% |
| bs=10 sw=10 sl=64 | MB/s | 0.237 MB/s | 0.262 MB/s | 0.473 MB/s | -9.5% | -49.9% |
| bs=10 sw=10 sl=64 | p50 | 25,897 us | 22,758 us | 12,743 us | +13.8% | +103.2% |
| bs=10 sw=10 sl=64 | p95 | 33,087 us | 34,934 us | 16,310 us | -5.3% | +102.9% |
| bs=10 sw=10 sl=64 | p99 | 33,087 us | 34,934 us | 18,926 us | -5.3% | +74.8% |
| bs=100 sw=10 sl=64 | throughput | 905 tuples/sec | 909 tuples/sec | 1,001 tuples/sec | -0.4% | -9.6% |
| bs=100 sw=10 sl=64 | MB/s | 0.552 MB/s | 0.555 MB/s | 0.611 MB/s | -0.5% | -9.6% |
| bs=100 sw=10 sl=64 | p50 | 105,044 us | 106,202 us | 101,399 us | -1.1% | +3.6% |
| bs=100 sw=10 sl=64 | p95 | 164,408 us | 143,446 us | 108,206 us | +14.6% | +51.9% |
| bs=100 sw=10 sl=64 | p99 | 164,408 us | 143,446 us | 118,195 us | +14.6% | +39.1% |
| bs=1000 sw=10 sl=64 | throughput | 1,097 tuples/sec | 1,108 tuples/sec | 1,026 tuples/sec | -1.0% | +6.9% |
| bs=1000 sw=10 sl=64 | MB/s | 0.67 MB/s | 0.676 MB/s | 0.626 MB/s | -0.9% | +7.0% |
| bs=1000 sw=10 sl=64 | p50 | 911,511 us | 905,411 us | 996,304 us | +0.7% | -8.5% |
| bs=1000 sw=10 sl=64 | p95 | 1,024,078 us | 975,461 us | 1,042,531 us | +5.0% | -1.8% |
| bs=1000 sw=10 sl=64 | p99 | 1,024,078 us | 975,461 us | 1,074,934 us | +5.0% | -4.7% |
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,514.94,200,128000,388,0.237,25897.33,33086.87,33086.87
1,100,10,64,20,2210.04,2000,1280000,905,0.552,105043.53,164407.53,164407.53
2,1000,10,64,20,18230.46,20000,12800000,1097,0.670,911511.15,1024077.69,1024077.69
carloea2
left a comment
There was a problem hiding this comment.
createNewWorkflow can report success when the page URL changed but the canvas never appeared. Please fail when waitForCanvas fails, even if the URL contains workflow.
There was a problem hiding this comment.
Pull request overview
Adds Playwright-based login and workflow-navigation automation for generating operator demo videos.
Changes:
- Implements login, workflow creation/import, timing, and cursor utilities.
- Adds stable frontend automation hooks with guard tests.
- Registers the generator module and excludes it from website synchronization.
Reviewed changes
Copilot reviewed 15 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
workflow-editor.component.spec.ts |
Guards the canvas test hook. |
workflow-editor.component.html |
Adds the canvas test hook. |
texera-login.component.spec.ts |
Guards login test hooks. |
texera-login.component.html |
Adds login control hooks. |
user-workflow.component.spec.ts |
Guards navigation button hooks. |
user-workflow.component.html |
Adds create/upload hooks. |
OperatorScript.scala |
Defines operator script phases. |
Utils.scala |
Adds cursor and interaction utilities. |
NavigationControllerBuilder.scala |
Implements workflow creation/import. |
LoginControllerBuilder.scala |
Implements local-account login. |
ControllerContext.scala |
Defines controller context and step builder. |
Constants.scala |
Defines timing constants. |
TestDataConfig.scala |
Configures recording defaults. |
docs/operator-demo-videos/build.sbt |
Configures the standalone Scala module. |
build.sbt |
Registers and aggregates the module. |
sync-docs-to-site.yml |
Excludes generator tooling from site sync. |
Suppressed comments (1)
docs/operator-demo-videos/src/main/scala/org/apache/texera/demovideos/controllers/NavigationControllerBuilder.scala:135
- A missing success notification means the upload/search sequence did not complete successfully, but this catch continues to a name-based lookup. If an older workflow has the same filename, the controller opens it and falsely reports a successful import. Let the confirmation timeout fail the step before selecting an entry.
} catch {
case _: Exception =>
println("[Import] Upload confirmation not seen; falling back to the list entry")
}
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| // Persistent across navigations. | ||
| page.addInitScript(script) | ||
| // Run once now so the cursor is visible immediately on the current page | ||
| // (addInitScript only fires on subsequent loads, not retroactively). | ||
| page.evaluate(script) |
| try waitForCanvas(page) | ||
| catch { | ||
| case _: Exception => | ||
| if (!page.url().contains("/workflow/")) { | ||
| throw new RuntimeException("Create workflow did not open workflow editor.") | ||
| } | ||
| } |
| class LoginControllerBuilder(ctx: ControllerContext) extends ControllerBuilder(ctx) { | ||
|
|
||
| def login(username: String, password: String): this.type = |
| // new NavigationControllerBuilder(ctx).importWorkflow("path/to/sample.json").execute() | ||
| // ═══════════════════════════════════════════════════════════════════ | ||
|
|
||
| class NavigationControllerBuilder(ctx: ControllerContext) extends ControllerBuilder(ctx) { |
What changes were proposed in this PR?
This PR adds the first two UI controllers of the demo video generator: signing in and getting a workflow onto the canvas.
Changes:
LoginControllerBuilder: navigates to/loginand signs in with the local account; skips the form when the session is already authenticated, and fails with a screenshot when the login page never appears.NavigationControllerBuilder:createNewWorkflow(used by source-operator demos, which start from an empty canvas) andimportWorkflow, which uploads a workflow JSON from the workflow listing and opens the resulting entry. Covering both the list and card views of the listing.Delays/Timeouts) the two controllers wait on; later controllers extend these.data-testidhooks the controllers locate elements by (login form ×3, create/upload buttons, workflow canvas), each covered by a guard test in the component's existing spec so renaming or removing one fails CI instead of silently breaking recording.Any related issues, documentation, discussions?
Closes #7520
Depends on #7594.
How was this PR tested?
sbt DemoVideoGenerator/compile,scalafmtCheck, andscalafix --checkall pass; the three touched component specs (157 tests, including the new guard tests) pass. The upload-import flow was verified end-to-end against a localdeployment by recording an operator demo video with it.
Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Claude Fable 5)