Freeze the current workspace-first surface as the stable 3.0 contract and reposition the landing docs, CLI help, and public contract around the stable workspace path after the one-shot proof. Bump the package and catalog compatibility to 3.0.0, add a dedicated workspace walkthrough tape/GIF, and mark the 3.0.0 roadmap milestone done while keeping runtime capability unchanged in this release. Validation: uv lock; UV_CACHE_DIR=.uv-cache make check; UV_CACHE_DIR=.uv-cache make dist-check; UV_CACHE_DIR=.uv-cache uv build; UV_CACHE_DIR=.uv-cache uvx --from twine twine check dist/*; built-wheel CLI smoke for pyro --help and pyro workspace --help; vhs validate plus rendered workspace-first-run.gif outside the sandbox because vhs crashes when sandboxed.
98 lines
2.2 KiB
VHS
98 lines
2.2 KiB
VHS
Output docs/assets/workspace-first-run.gif
|
|
|
|
Require uv
|
|
Require python3
|
|
|
|
Set Shell "zsh"
|
|
Set FontSize 18
|
|
Set Width 1400
|
|
Set Height 860
|
|
Set Theme "Dracula"
|
|
Set TypingSpeed 35ms
|
|
Set Padding 24
|
|
Set WindowBar Colorful
|
|
|
|
Hide
|
|
Type "cd /home/thales/projects/personal/pyro"
|
|
Enter
|
|
Type "setopt interactivecomments"
|
|
Enter
|
|
Type "export UV_CACHE_DIR=.uv-cache"
|
|
Enter
|
|
Type "export PYRO_ENVIRONMENT_CACHE_DIR=$(mktemp -d)"
|
|
Enter
|
|
Type "alias pyro='uv run pyro'"
|
|
Enter
|
|
Type "SEED_DIR=$(mktemp -d)"
|
|
Enter
|
|
Type "SYNC_DIR=$(mktemp -d)"
|
|
Enter
|
|
Type "EXPORT_DIR=$(mktemp -d)"
|
|
Enter
|
|
Type 'printf "%s\n" "hello from seed" > "$SEED_DIR/note.txt"'
|
|
Enter
|
|
Type 'printf "%s\n" "hello from sync" > "$SYNC_DIR/note.txt"'
|
|
Enter
|
|
Type "pyro env pull debian:12 >/dev/null"
|
|
Enter
|
|
Show
|
|
|
|
Type "# Create a stable workspace from host content and capture its id"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace create debian:12 --seed-path "$SEED_DIR" --json | tee /tmp/pyro-workspace.json'
|
|
Enter
|
|
Sleep 2200ms
|
|
|
|
Hide
|
|
Type 'export WORKSPACE_ID=$(python3 -c "import json; print(json.load(open(\"/tmp/pyro-workspace.json\", encoding=\"utf-8\"))[\"workspace_id\"])")'
|
|
Enter
|
|
Show
|
|
|
|
Type "# Push a later host-side change into the same workspace"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace sync push "$WORKSPACE_ID" "$SYNC_DIR"'
|
|
Enter
|
|
Sleep 1800ms
|
|
|
|
Type "# Run inside the live workspace"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace exec "$WORKSPACE_ID" -- cat note.txt'
|
|
Enter
|
|
Sleep 2000ms
|
|
|
|
Type "# Capture a checkpoint, then start one long-running service"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace snapshot create "$WORKSPACE_ID" checkpoint'
|
|
Enter
|
|
Sleep 1800ms
|
|
Type 'pyro workspace service start "$WORKSPACE_ID" web --ready-file .web-ready -- sh -lc "touch .web-ready && while true; do sleep 60; done"'
|
|
Enter
|
|
Sleep 2200ms
|
|
|
|
Type "# Reset the full sandbox back to that checkpoint"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace reset "$WORKSPACE_ID" --snapshot checkpoint'
|
|
Enter
|
|
Sleep 2200ms
|
|
|
|
Type "# Export one file back to the host and inspect it locally"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace export "$WORKSPACE_ID" note.txt --output "$EXPORT_DIR/note.txt"'
|
|
Enter
|
|
Sleep 1800ms
|
|
Type 'cat "$EXPORT_DIR/note.txt"'
|
|
Enter
|
|
Sleep 1800ms
|
|
|
|
Type "# Remove the workspace when the loop is done"
|
|
Enter
|
|
Sleep 700ms
|
|
Type 'pyro workspace delete "$WORKSPACE_ID"'
|
|
Enter
|
|
Sleep 2000ms
|