Skip to content

docs: add VHS demo screencast pipeline#109

Draft
rominf wants to merge 2 commits into
mainfrom
docs/demo-screencasts
Draft

docs: add VHS demo screencast pipeline#109
rominf wants to merge 2 commits into
mainfrom
docs/demo-screencasts

Conversation

@rominf

@rominf rominf commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Automates terminal demo GIFs for the README so they're generated in CI and never committed to source branches.

  • Adds VHS tapes (docs/tapes/) for four demos: version, engines list, services list, and one-shot chat.
  • Adds a demo-gifs workflow that builds the binaries, renders each tape, and publishes GIFs to an orphan media branch (force-pushed → single commit, old blobs GC'd). The README embeds them by absolute raw URL.
  • The server-backed demos (chat, services) reuse this repo's e2e mock OpenAI server through a new standalone rocm-demo-env binary: it boots the mock, plants a managed-service record into an isolated config, and prints the env that points rocm at it. No GPU or real model — renders are deterministic.
  • Factors the service-record schema into a shared write_service_record (used by both the cucumber World and the demo runner) so the two can't drift.
  • The mock's chat reply is overridable via ROCM_MOCK_CHAT_REPLY so screencasts read naturally instead of showing the test-only stub.

Why

The README has no visual of the CLI in action. Purpose-built demos give reviewers and users an at-a-glance feel for chat/services without anyone maintaining hand-recorded GIFs — and without bloating main with binaries.

Triggers

workflow_dispatch + on published release (never on PRs — rendering is slow and would churn the branch). The release tag doubles as an image-cache buster for GitHub's proxy.

Verification

  • rocm + rocm-demo-env build; e2e test target still compiles with the refactored World.
  • End-to-end locally: demo-env.shrocm services list shows the mock service; rocm chat --prompt returns the custom reply; the EXIT trap stops the server (no leak).
  • Actual VHS rendering is exercised by the workflow (VHS isn't installed in the dev env); the tapes only invoke commands verified above.

Dependency / scope

Risk

Low — no product code paths change. The only change to existing test code is extracting a shared helper (behavior-preserving) and an env-gated mock reply that defaults to the current string.

@rominf rominf force-pushed the docs/demo-screencasts branch 3 times, most recently from 45b5eda to b7a01d8 Compare July 13, 2026 18:50
@fredespi fredespi force-pushed the test/add-e2e-robot-framework branch from 6d309d7 to 204c4e8 Compare July 15, 2026 12:59
Base automatically changed from test/add-e2e-robot-framework to main July 15, 2026 15:49
Generate terminal demo GIFs for the README from VHS tapes, rendered in
CI and published to an orphan `media` branch so no binaries land in the
source history. The README embeds them by absolute raw URL.

Tapes are pure command sequences; all setup (build dir on PATH, isolated
config, the mock server) is done by docs/tapes/render.sh BEFORE vhs runs.
This is deliberate: VHS types on a fixed clock and never waits for a
command to return, so setup done inside a tape races the typing.

Server-backed demos (chat, services) reuse the e2e harness's mock OpenAI
server via a new standalone `rocm-demo-env` binary: it starts the mock,
plants a managed-service record into an isolated config, and prints the
env that points `rocm` at it — no GPU or real model needed. The record
schema is shared with the cucumber World via `write_service_record` so
the two can't drift. The mock ignores SIGINT/SIGHUP (VHS/ttyd emit some
during terminal setup) and stops on SIGTERM, so it survives until the
tape runs. Its chat reply is overridable via ROCM_MOCK_CHAT_REPLY.

Rendering runs on workflow_dispatch and on release (never on PRs, where
it would be slow and churn the branch); the release tag doubles as an
image-cache buster.

Stacked on #69 (the e2e harness this reuses); keep as draft until it lands.

Signed-off-by: Roman Inflianskas <Roman.Inflianskas@amd.com>
@rominf rominf force-pushed the docs/demo-screencasts branch from b7a01d8 to 804705b Compare July 15, 2026 16:18
Signed-off-by: Roman Inflianskas <Roman.Inflianskas@amd.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.

1 participant