Add Quick Start runtime validation workflow#706
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThe 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)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
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?) |
|
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. |
|
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:
|
|
Quick CI update: |
|
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. |
|
|
||
| docker network create "$NETWORK_NAME" >/dev/null | ||
|
|
||
| docker run --rm \ |
There was a problem hiding this comment.
see https://nvidia.github.io/IsaacTeleop/main/getting_started/quick_start.html what exactly test e2e of quick start means
|
Thanks, you're right. I pushed 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. |
|
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. |
b261cfd to
2aed653
Compare
f1ade5f to
8bb0aac
Compare
| # 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 |
There was a problem hiding this comment.
nit: the doc scraping comment feels irrelevant.
| "--launch-cloudxr-runtime", | ||
| action=argparse.BooleanOptionalAction, | ||
| default=True, | ||
| default=None, |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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}" |
There was a problem hiding this comment.
We need to not only run the application but also send input from the client and verify the output from the application side.
|
Please also update the PR title to reflect the actual change. |
|
Updated the PR title to |
|
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>
6c9d418 to
674d94e
Compare
Summary
Validation
npm test -- --runInBandBuild Teleop Web Apppassed ona8aeeffbebeaa7adfor the wheel-publish retry changeFollow-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.