Files
dbskill/scripts/record-demo.sh
T
daymadeandClaude Opus 4.6 5c8fa24631 feat: add Claude Code plugin marketplace for one-click install & auto-update
Add .claude-plugin/marketplace.json with all 10 skills registered as
individual plugins under marketplace name 'dontbesilent-skills'.

Users can now install via:
  claude plugin marketplace add dontbesilent2025/dbskill
  claude plugin install dbs-diagnosis@dontbesilent-skills

Categories: business-diagnostics, content-creation, thinking-tools, utilities.
Auto-update supported via Claude Code native plugin system.

Also includes:
- demo.gif showing real installation flow
- scripts/record-demo.sh for reproducible demo recording
- README updated with plugin marketplace install instructions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:26:52 +08:00

82 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Record dbskill plugin marketplace demo GIF
# Usage: ./scripts/record-demo.sh
# Output: demo.gif in repo root
#
# Auto-detects marketplace repo: uses upstream (dontbesilent2025/dbskill) if its
# default branch has .claude-plugin/marketplace.json, otherwise falls back to
# origin fork. After upstream PR merge, re-running this script will automatically
# produce a demo pointing at the canonical repo.
#
# Prerequisites: brew install charmbracelet/tap/vhs gifsicle
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TAPE_TEMPLATE="$SCRIPT_DIR/demo.tape"
TAPE_RENDERED="/tmp/demo_rendered.tape"
OUTPUT_GIF="$REPO_DIR/demo.gif"
for cmd in vhs gifsicle; do
if ! command -v "$cmd" &>/dev/null; then
echo "Error: $cmd not found."
echo "Install: brew install charmbracelet/tap/vhs gifsicle"
exit 1
fi
done
# Extract owner/repo from a git remote URL (strips .git suffix and host prefix)
parse_remote() {
git -C "$REPO_DIR" remote get-url "$1" 2>/dev/null \
| sed 's|.*github.com[:/]||; s|\.git$||'
}
# Detect marketplace repo: prefer upstream if it has marketplace.json, else origin
detect_marketplace_repo() {
local upstream origin
upstream=$(parse_remote upstream) || true
origin=$(parse_remote origin) || true
if [[ -n "$upstream" ]] && gh api "repos/$upstream/contents/.claude-plugin/marketplace.json" &>/dev/null; then
echo "$upstream"
return
fi
if [[ -n "$origin" ]]; then
echo "$origin"
return
fi
echo "dontbesilent2025/dbskill"
}
# Remove previously installed demo plugins (safe to call when nothing is installed)
cleanup_plugins() {
claude plugin uninstall dbs-diagnosis@dontbesilent-skills 2>/dev/null || true
claude plugin uninstall dbs@dontbesilent-skills 2>/dev/null || true
claude plugin marketplace remove dontbesilent-skills 2>/dev/null || true
}
MARKETPLACE_REPO=$(detect_marketplace_repo)
echo "Using marketplace repo: $MARKETPLACE_REPO"
# Render tape template: replace MARKETPLACE_REPO placeholder with detected repo
sed "s|MARKETPLACE_REPO|$MARKETPLACE_REPO|g" "$TAPE_TEMPLATE" > "$TAPE_RENDERED"
echo "Cleaning previous plugin state..."
cleanup_plugins
echo "Recording demo..."
rm -f "$OUTPUT_GIF"
(cd "$REPO_DIR" && vhs "$TAPE_RENDERED")
echo "Speeding up 2x..."
cp "$OUTPUT_GIF" /tmp/demo_raw.gif
gifsicle -d2 /tmp/demo_raw.gif "#0-" > "$OUTPUT_GIF"
echo "Cleaning up..."
cleanup_plugins
rm -f /tmp/demo_raw.gif "$TAPE_RENDERED" /tmp/cw.sh
SIZE=$(ls -lh "$OUTPUT_GIF" | awk '{print $5}')
echo "Done: $OUTPUT_GIF ($SIZE)"