feat(demo): arch-based vhs recording image and runner
- commit
- f0cb4a1a03f054b4338a41ac4f2343510e41df21
- author
- brice · · 2026-07-24 05:10 UTC
- parent
- ddf1935
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
4 files · +58 -1
M Makefile +7 -1
| @@ -1,4 +1,4 @@ | |||
| 1 | - | .PHONY: install test test-installer lint mocks | |
| 1 | + | .PHONY: install test test-installer lint mocks demo | |
| 2 | 2 | ||
| 3 | 3 | install: | |
| 4 | 4 | go install . | |
| @@ -24,3 +24,9 @@ mocks: | |||
| 24 | 24 | exit 1; \ | |
| 25 | 25 | fi | |
| 26 | 26 | mockery | |
| 27 | + | ||
| 28 | + | demo: | |
| 29 | + | docker build -f scripts/demo/Dockerfile -t vev-demo . | |
| 30 | + | ./scripts/demo/run.sh demo.tape | |
| 31 | + | mkdir -p docs/assets | |
| 32 | + | cp scripts/demo/out/demo.gif docs/assets/demo.gif | |
| @@ -1,4 +1,4 @@ | |||||
| 1 | - | .PHONY: install test test-installer lint mocks | 1 | + | .PHONY: install test test-installer lint mocks demo |
| 2 | 2 | ||||
| 3 | install: | 3 | install: | ||
| 4 | go install . | 4 | go install . | ||
| @@ -24,3 +24,9 @@ mocks: | |||||
| 24 | exit 1; \ | 24 | exit 1; \ | ||
| 25 | fi | 25 | fi | ||
| 26 | mockery | 26 | mockery | ||
| 27 | + | ||||
| 28 | + | demo: | |||
| 29 | + | docker build -f scripts/demo/Dockerfile -t vev-demo . | |||
| 30 | + | ./scripts/demo/run.sh demo.tape | |||
| 31 | + | mkdir -p docs/assets | |||
| 32 | + | cp scripts/demo/out/demo.gif docs/assets/demo.gif | |||
A scripts/demo/Dockerfile +25 -0
| @@ -0,0 +1,25 @@ | |||
| 1 | + | # syntax=docker/dockerfile:1 | |
| 2 | + | FROM golang:1.26 AS build | |
| 3 | + | WORKDIR /src | |
| 4 | + | COPY go.mod go.sum ./ | |
| 5 | + | RUN go mod download | |
| 6 | + | COPY . . | |
| 7 | + | RUN CGO_ENABLED=0 go build -o /out/vev . | |
| 8 | + | ||
| 9 | + | FROM archlinux:latest | |
| 10 | + | RUN pacman -Sy --noconfirm archlinux-keyring \ | |
| 11 | + | && pacman -Syu --noconfirm \ | |
| 12 | + | vhs ttyd ffmpeg chromium \ | |
| 13 | + | btop fastfetch gifsicle \ | |
| 14 | + | nodejs npm \ | |
| 15 | + | && pacman -Scc --noconfirm | |
| 16 | + | RUN npm install -g --allow-scripts=@anthropic-ai/claude-code @anthropic-ai/claude-code | |
| 17 | + | RUN setcap -r /usr/sbin/btop | |
| 18 | + | RUN useradd -m -u 1000 demo | |
| 19 | + | COPY --from=build /out/vev /usr/local/bin/vev | |
| 20 | + | COPY scripts/demo/ticker.sh /usr/local/bin/ticker | |
| 21 | + | RUN chmod +x /usr/local/bin/ticker | |
| 22 | + | USER demo | |
| 23 | + | WORKDIR /home/demo | |
| 24 | + | ENV VHS_NO_SANDBOX=true | |
| 25 | + | ENTRYPOINT ["vhs"] | |
| @@ -0,0 +1,25 @@ | |||||
| 1 | + | # syntax=docker/dockerfile:1 | |||
| 2 | + | FROM golang:1.26 AS build | |||
| 3 | + | WORKDIR /src | |||
| 4 | + | COPY go.mod go.sum ./ | |||
| 5 | + | RUN go mod download | |||
| 6 | + | COPY . . | |||
| 7 | + | RUN CGO_ENABLED=0 go build -o /out/vev . | |||
| 8 | + | ||||
| 9 | + | FROM archlinux:latest | |||
| 10 | + | RUN pacman -Sy --noconfirm archlinux-keyring \ | |||
| 11 | + | && pacman -Syu --noconfirm \ | |||
| 12 | + | vhs ttyd ffmpeg chromium \ | |||
| 13 | + | btop fastfetch gifsicle \ | |||
| 14 | + | nodejs npm \ | |||
| 15 | + | && pacman -Scc --noconfirm | |||
| 16 | + | RUN npm install -g --allow-scripts=@anthropic-ai/claude-code @anthropic-ai/claude-code | |||
| 17 | + | RUN setcap -r /usr/sbin/btop | |||
| 18 | + | RUN useradd -m -u 1000 demo | |||
| 19 | + | COPY --from=build /out/vev /usr/local/bin/vev | |||
| 20 | + | COPY scripts/demo/ticker.sh /usr/local/bin/ticker | |||
| 21 | + | RUN chmod +x /usr/local/bin/ticker | |||
| 22 | + | USER demo | |||
| 23 | + | WORKDIR /home/demo | |||
| 24 | + | ENV VHS_NO_SANDBOX=true | |||
| 25 | + | ENTRYPOINT ["vhs"] | |||
A scripts/demo/claude-settings.json +6 -0
| @@ -0,0 +1,6 @@ | |||
| 1 | + | { | |
| 2 | + | "preferredNotifChannel": "terminal_bell", | |
| 3 | + | "permissions": { | |
| 4 | + | "allow": ["Bash(sleep:*)"] | |
| 5 | + | } | |
| 6 | + | } | |
| @@ -0,0 +1,6 @@ | |||||
| 1 | + | { | |||
| 2 | + | "preferredNotifChannel": "terminal_bell", | |||
| 3 | + | "permissions": { | |||
| 4 | + | "allow": ["Bash(sleep:*)"] | |||
| 5 | + | } | |||
| 6 | + | } | |||
A scripts/demo/run.sh +20 -0
| @@ -0,0 +1,20 @@ | |||
| 1 | + | #!/usr/bin/env bash | |
| 2 | + | set -euo pipefail | |
| 3 | + | cd "$(dirname "$0")/../.." | |
| 4 | + | ||
| 5 | + | TAPE="${1:-demo.tape}" | |
| 6 | + | mkdir -p scripts/demo/out | |
| 7 | + | ||
| 8 | + | CLAUDE_TMP=$(mktemp -d) | |
| 9 | + | trap 'rm -rf "$CLAUDE_TMP"' EXIT | |
| 10 | + | mkdir -p "$CLAUDE_TMP/.claude" | |
| 11 | + | cp "$HOME/.claude/.credentials.json" "$CLAUDE_TMP/.claude/" | |
| 12 | + | cp scripts/demo/claude-settings.json "$CLAUDE_TMP/.claude/settings.json" | |
| 13 | + | printf '{"hasCompletedOnboarding": true, "theme": "dark"}\n' > "$CLAUDE_TMP/.claude.json" | |
| 14 | + | ||
| 15 | + | docker run --rm --hostname vev-demo \ | |
| 16 | + | -v "$PWD/scripts/demo:/tape:ro" \ | |
| 17 | + | -v "$PWD/scripts/demo/out:/home/demo/out" \ | |
| 18 | + | -v "$CLAUDE_TMP/.claude:/home/demo/.claude" \ | |
| 19 | + | -v "$CLAUDE_TMP/.claude.json:/home/demo/.claude.json" \ | |
| 20 | + | vev-demo "/tape/$TAPE" | |
| @@ -0,0 +1,20 @@ | |||||
| 1 | + | #!/usr/bin/env bash | |||
| 2 | + | set -euo pipefail | |||
| 3 | + | cd "$(dirname "$0")/../.." | |||
| 4 | + | ||||
| 5 | + | TAPE="${1:-demo.tape}" | |||
| 6 | + | mkdir -p scripts/demo/out | |||
| 7 | + | ||||
| 8 | + | CLAUDE_TMP=$(mktemp -d) | |||
| 9 | + | trap 'rm -rf "$CLAUDE_TMP"' EXIT | |||
| 10 | + | mkdir -p "$CLAUDE_TMP/.claude" | |||
| 11 | + | cp "$HOME/.claude/.credentials.json" "$CLAUDE_TMP/.claude/" | |||
| 12 | + | cp scripts/demo/claude-settings.json "$CLAUDE_TMP/.claude/settings.json" | |||
| 13 | + | printf '{"hasCompletedOnboarding": true, "theme": "dark"}\n' > "$CLAUDE_TMP/.claude.json" | |||
| 14 | + | ||||
| 15 | + | docker run --rm --hostname vev-demo \ | |||
| 16 | + | -v "$PWD/scripts/demo:/tape:ro" \ | |||
| 17 | + | -v "$PWD/scripts/demo/out:/home/demo/out" \ | |||
| 18 | + | -v "$CLAUDE_TMP/.claude:/home/demo/.claude" \ | |||
| 19 | + | -v "$CLAUDE_TMP/.claude.json:/home/demo/.claude.json" \ | |||
| 20 | + | vev-demo "/tape/$TAPE" | |||