Skip to content

Add Quick Start runtime validation workflow#706

Open
arussell-nvidia wants to merge 6 commits into
mainfrom
codex/cxr-3577-quickstart-e2e
Open

Add Quick Start runtime validation workflow#706
arussell-nvidia wants to merge 6 commits into
mainfrom
codex/cxr-3577-quickstart-e2e

Conversation

@arussell-nvidia

@arussell-nvidia arussell-nvidia commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add containerized WebXR browser smoke coverage to the existing CloudXR web-client build action.
  • Build the web client, run Jest, and run a Playwright smoke check inside an isolated container without host networking or published host ports.
  • Verify only the desktop browser/IWER path reaches the Connect-ready state; this PR does not claim full Quick Start end-to-end validation.
  • Add retry/backoff around wheel artifact URL resolution so transient post-upload lookup timeouts do not fail otherwise successful wheel publishing.

Validation

  • npm test -- --runInBand
  • GitHub Actions Build Teleop Web App passed on a8aeeffb
  • New workflow run is pending/running on ebeaa7ad for the wheel-publish retry change

Follow-up

A true Quick Start e2e should be handled separately with a system test that starts the CloudXR runtime, connects the WebXR client, sends XR/controller input, and validates the teleop example output.

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d27174e4-d290-4ccf-8368-1db44691f52e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The web client gains Playwright end-to-end test support. The change adds a Playwright config, a new npm script and dev dependencies, a quick-start e2e test, and CI steps to install Chromium browser dependencies and run the new test target.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the new Quick Start validation workflow added by the PR.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/cxr-3577-quickstart-e2e

Comment @coderabbitai help to get the list of available commands.

@yanziz-nvidia

Copy link
Copy Markdown
Contributor

Can we build and run tests in a container env so that you can truly test e2e without host network (and enable multiple instances on the same host?)

@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Thanks, good point. I am checking whether this e2e path can run in a containerized environment without relying on host networking, and what isolation is needed for multiple instances on one host.

@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Thanks, I pushed a follow-up commit for this. The web client action now runs the build, Jest tests, and Quick Start Playwright e2e test inside an isolated Docker container, with a per-run Docker network/container name and no host networking or published host ports. I also made the Playwright host/port/base URL configurable so the dev server can bind inside the container while the browser connects locally within that container.

Local verification before pushing:

  • npm test passed.
  • USE_LOCAL_WEBXR_ASSETS=0 npm run build passed with the existing bundle-size warnings.
  • npm run test:e2e could not complete on this Windows workstation because Chromium launch is blocked with browserType.launch: spawn EPERM; the containerized path is set up to run in CI with the Playwright image.

@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Quick CI update: Build Teleop Web App is green on commit 1079d69c, so the containerized web client build, Jest, and Quick Start Playwright e2e path passed in GitHub Actions. The broader platform matrix is still running.

@yanziz-nvidia

Copy link
Copy Markdown
Contributor

the test doesn't really test e2e?

if you look at quick start https://nvidia.github.io/IsaacTeleop/main/getting_started/quick_start.html it involves many components. We are not testing with just playwright loading the page. We need to actually connect to IT and send data and validate every steps in that quick start.

Comment thread scripts/run_webxr_smoke_in_container.sh Outdated

docker network create "$NETWORK_NAME" >/dev/null

docker run --rm \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@arussell-nvidia arussell-nvidia changed the title Add Quick Start WebXR e2e baseline Add containerized WebXR browser smoke coverage Jun 28, 2026
@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Thanks, you're right. I pushed a8aeeffb to stop presenting this as a Quick Start e2e test.

This PR now scopes the added coverage to a containerized WebXR browser smoke check: it builds the web client, runs Jest, and uses Playwright only to verify that the desktop browser path loads IWER and reaches the Connect-ready state without host networking or published host ports.

A true Quick Start e2e should be a separate system test that starts the CloudXR runtime, connects the WebXR client to it, sends XR/controller input, and validates the teleop example output. I'll keep this PR limited to the smaller smoke coverage rather than claiming full Quick Start validation.

@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

I updated this PR so it no longer presents the added coverage as a Quick Start E2E test. The current scope is a containerized WebXR browser smoke check: build the web client, run Jest, and use Playwright to verify the desktop browser path loads IWER and reaches the Connect-ready state without host networking or published host ports.

That addresses the review feedback by separating this smoke coverage from the real multi-component Quick Start E2E work, which should remain a separate system test/design. Current checks are green/skipped and the branch is mergeable. Ready for re-review.

@arussell-nvidia arussell-nvidia force-pushed the codex/cxr-3577-quickstart-e2e branch from b261cfd to 2aed653 Compare July 14, 2026 02:12
Comment thread .github/workflows/build-ubuntu.yml Outdated
# GPU runner: install package, launch CloudXR, source the generated env, run
# the documented gripper retargeting example, and upload the logs/summary.
# The desktop browser/IWER path remains the documented headset-free client
# path; this baseline validates the runnable guide steps without scraping

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit: the doc scraping comment feels irrelevant.

"--launch-cloudxr-runtime",
action=argparse.BooleanOptionalAction,
default=True,
default=None,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

If the default doesn't work for the workflow, can we just provide an explicit value instead?

USB_UI_DEFAULT_PORT = 8080 # HTTPS static WebXR UI (loopback)
USB_BACKEND_DEFAULT_PORT = 49100 # CloudXR backend (webrtc client direct connection)
CLOUDXR_SERVER_DEFAULT_PORT = 49100 # CloudXR runtime backend
USB_BACKEND_DEFAULT_PORT = CLOUDXR_SERVER_DEFAULT_PORT # adb reverse'd backend

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This and code below introduce a new order of precedence order of env vars and also makes USB_BACKEND_DEFAULT_PORT unused except the test.

Earlier it was
USB_BACKEND_PORT > USB_BACKEND_DEFAULT_PORT

and now:
USB_BACKEND_PORT > NV_CXR_SERVER_PORT > CLOUDXR_SERVER_DEFAULT_PORT and USB_BACKEND_DEFAULT_PORT becomes unused.

Why do we need the extra cloudxr server port?

log "Step 4: firewall allow-list is a machine configuration step; CI validates the local WSS proxy port instead"
check_wss_proxy_port || fail "WSS proxy port ${PROXY_PORT} is not reachable on localhost"

log "Step 5: desktop browser/IWER is the documented headset-free client path; this CI baseline does not inspect the website"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to connect from the emulated client.


log "Step 5: desktop browser/IWER is the documented headset-free client path; this CI baseline does not inspect the website"

run_example "${env_file}"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to not only run the application but also send input from the client and verify the output from the application side.

@qingsi-at-nv

Copy link
Copy Markdown
Contributor

Please also update the PR title to reflect the actual change.

@arussell-nvidia arussell-nvidia changed the title Add containerized WebXR browser smoke coverage Add Quick Start E2E validation workflow Jul 14, 2026
@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Updated the PR title to Add Quick Start E2E validation workflow.

@arussell-nvidia arussell-nvidia changed the title Add Quick Start E2E validation workflow Add Quick Start runtime validation workflow Jul 15, 2026
@arussell-nvidia

Copy link
Copy Markdown
Contributor Author

Thanks for the review. Agreed on the scope split.

I updated this PR to be the first Quick Start runtime validation baseline rather than the full client-interaction E2E test. The intent for this PR is to prove the automated install/launch/env/example path runs reliably in CI.

I'll handle the richer E2E validation as the next step: launch/connect through an emulated client, send input from that client, and verify the application-side output signal. I also pushed a small cleanup to keep the USB backend port behavior explicit and remove the stale comment wording.

Signed-off-by: Andrew Russell <arussell@nvidia.com>
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.

3 participants