Skip to content

Orchestrator --with-demos installs demos; --with-demo-sources clones (#297)#339

Open
dfattal wants to merge 2 commits into
mainfrom
feat/297-orchestrator-install-demos
Open

Orchestrator --with-demos installs demos; --with-demo-sources clones (#297)#339
dfattal wants to merge 2 commits into
mainfrom
feat/297-orchestrator-install-demos

Conversation

@dfattal
Copy link
Copy Markdown
Collaborator

@dfattal dfattal commented May 26, 2026

Closes #297.

What

Splits the dev orchestrator's demo handling into two intent-revealing flags:

Flag Behavior
--with-demos Installs each demo's prebuilt release asset — gh release download + silent install + marker check, the same install_component path as runtime/shell/leia/mcp.
--with-demo-sources Clones each displayxr-demo-* repo into ./demos/<name>/ (the former --with-demos behavior), for contributors who build from source.

Both combine freely; --dry-run works with both.

Why (the resilience argument)

The original clone-only choice (#283) was to avoid importing each demo's build environment (Vulkan SDK, graphics toolchains) onto the contributor's box. But clone-only doesn't make a demo usable — it leaves the dev to build it, which is exactly where that fragility bites; after --with-demos the shell launcher showed no demo tile (the bug #297 was filed for).

Installing a prebuilt release asset sidesteps the build entirely — the binary was already compiled by the demo's own CI — so --with-demos is more resilient to dev-environment drift, not less. Source-only demos (no release installer) stay under --with-demo-sources.

How

  • components.sh: new COMPONENT_PIN_KEY_<name> override (the demo's tag lives at demos.gaussiansplat, not a top-level key) + a DEMO_COMPONENTS list. install_component resolves the pin key, defaulting to the component name.
  • setup-displayxr.sh / .bat: --with-demos now loops DEMO_COMPONENTS through install_component (after the core components, so runtime is present for demos that require it); --with-demo-sources carries the old clone loop. Demos with no asset for the current OS warn-and-skip (no hard failure).
  • full-stack-install.md: documents the split.

#311 already registered gauss_demo in the component table; this PR wires it into the install path. Bridges the gap until #284's user-facing meta-installer ships.

Test

  • bash -n clean on .sh + components.sh; --help renders the new flags.
  • Pin-key resolution verified: runtimeruntime, gauss_demodemos.gaussiansplatv1.4.1.
  • .bat mirrors the same structure (exact-match arg parse; --with-demos doesn't shadow --with-demo-sources).

🤖 Generated with Claude Code

dfattal and others added 2 commits May 26, 2026 16:13
… clones

--with-demos now downloads + silently installs each demo's prebuilt
release asset (reusing install_component — same path as runtime/shell/
leia/mcp), so a fresh `setup-displayxr --with-demos` actually lands the
demo and the shell launcher shows its tile. The former source-clone
behavior moves to a new --with-demo-sources flag for contributors who
build from source.

Because demos install from a prebuilt binary (compiled by the demo's own
CI), --with-demos is insensitive to the contributor's build environment
(Vulkan SDK, graphics toolchains) — it addresses the original clone-only
rationale by removing the build step entirely, not deferring it.

- components.sh: add COMPONENT_PIN_KEY_<name> override (gauss_demo pins
  under demos.gaussiansplat, not a top-level key) + DEMO_COMPONENTS list.
- setup-displayxr.sh/.bat: --with-demos → install loop over
  DEMO_COMPONENTS; --with-demo-sources → former clone behavior. Both
  combine freely. Demos with no asset for this OS warn-and-skip.
- full-stack-install.md: document the split.

#311 already registered gauss_demo in the component table; this wires it
into the install path. Bridges the gap until the #284 meta-installer
ships the user-facing bundle.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A broken-pipe / network blip on the 'gh release view --json assets'
query left asset_count empty, and '[ "$asset_count" -eq 0 ]' aborted
with 'integer expected' (surfaced during a real --with-demos install).
Guard the integer test with a numeric-match: only warn-and-skip on a
confirmed zero; otherwise fall through to the download, which is the
real gate and errors cleanly if the asset is truly absent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dfattal
Copy link
Copy Markdown
Collaborator Author

dfattal commented May 26, 2026

Validated with a real macOS install (./scripts/setup-displayxr.sh --with-demos):

  • Runtime .pkg installed → installer: The upgrade was successful → ✅ runtime installed.
  • --with-demos resolved gauss_demo via the new demos.gaussiansplat pin key → v1.4.1, downloaded DisplayXRGaussianSplat-1.4.1.pkg → ✅ gauss_demo installed.
  • Smoke verification green; all three markers confirmed present afterward: runtime sim-display manifest, /etc/xdg/openxr/1/active_runtime.json, and /Applications/Gaussian Splat Viewer.app.

The run also surfaced a latent robustness bug (pre-existing in install_component, now exercised by the demo path): a transient gh broken-pipe on the asset-count query left asset_count empty and [ "$asset_count" -eq 0 ] aborted with integer expected. It happened to fall through and install anyway, but that was accidental. Fixed in 8cc17e93d — the integer test is now guarded by a numeric match, so a network blip falls through to the download (the real gate) cleanly instead of printing a scary error.

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.

Orchestrator --with-demos should also install demos (not just clone source)

1 participant