Fixes: 1. media.ts: wrap placeholder generation in try-catch 2. toolbar.ts: check r.ok, display error message in popover
164 lines
3.6 KiB
Bash
Executable File
164 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Sync demos that should match the blog templates exactly.
|
|
#
|
|
# Deliberately custom demos (not synced here):
|
|
# - demos/plugins-demo (plugin API/hook coverage)
|
|
#
|
|
# Demos with custom runtime/config but shared visual template:
|
|
# - demos/cloudflare (kitchen sink Cloudflare features)
|
|
# - demos/playground (playground-specific runtime wiring)
|
|
# - demos/preview (preview DB workflow)
|
|
# - demos/postgres (Postgres adapter coverage)
|
|
#
|
|
# Usage: ./scripts/sync-blog-demos.sh
|
|
#
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
TEMPLATES_DIR="$ROOT_DIR/templates"
|
|
DEMOS_DIR="$ROOT_DIR/demos"
|
|
|
|
# Files/directories to sync from template to demo.
|
|
# Intentionally excludes package.json so demo package identity/scripts stay stable.
|
|
SYNC_ITEMS=(
|
|
"src"
|
|
"public"
|
|
"seed"
|
|
"astro.config.mjs"
|
|
"tsconfig.json"
|
|
"emdash-env.d.ts"
|
|
".gitignore"
|
|
)
|
|
|
|
# Mapping of template -> demo for demos that should track templates verbatim.
|
|
DEMO_PAIRS=(
|
|
"blog:simple"
|
|
)
|
|
|
|
# Mapping of template -> demo for demos that should share the template frontend
|
|
# while keeping runtime-specific config/entry files.
|
|
FRONTEND_PAIRS=(
|
|
"blog-cloudflare:cloudflare"
|
|
"blog-cloudflare:preview"
|
|
"blog:playground"
|
|
"blog:postgres"
|
|
)
|
|
|
|
sync_demo() {
|
|
local template="$1"
|
|
local demo="$2"
|
|
local template_dir="$TEMPLATES_DIR/$template"
|
|
local demo_dir="$DEMOS_DIR/$demo"
|
|
|
|
if [[ ! -d "$template_dir" ]]; then
|
|
echo " Skipping: $template (template not found)"
|
|
return
|
|
fi
|
|
|
|
if [[ ! -d "$demo_dir" ]]; then
|
|
echo " Skipping: $demo (demo not found)"
|
|
return
|
|
fi
|
|
|
|
echo "Syncing $template -> $demo"
|
|
|
|
for item in "${SYNC_ITEMS[@]}"; do
|
|
local src="$template_dir/$item"
|
|
local dest="$demo_dir/$item"
|
|
|
|
if [[ ! -e "$src" ]]; then
|
|
continue
|
|
fi
|
|
|
|
if [[ -L "$dest" ]]; then
|
|
rm "$dest"
|
|
elif [[ -d "$dest" ]]; then
|
|
rm -rf "$dest"
|
|
elif [[ -f "$dest" ]]; then
|
|
rm "$dest"
|
|
fi
|
|
|
|
if [[ -d "$src" ]]; then
|
|
cp -r "$src" "$dest"
|
|
echo " Copied directory: $item"
|
|
else
|
|
cp "$src" "$dest"
|
|
echo " Copied file: $item"
|
|
fi
|
|
done
|
|
}
|
|
|
|
sync_frontend() {
|
|
local template="$1"
|
|
local demo="$2"
|
|
shift 2
|
|
local template_dir="$TEMPLATES_DIR/$template"
|
|
local demo_dir="$DEMOS_DIR/$demo"
|
|
|
|
if [[ ! -d "$template_dir/src" ]]; then
|
|
echo " Skipping frontend sync: $template (template src not found)"
|
|
return
|
|
fi
|
|
|
|
if [[ ! -d "$demo_dir/src" ]]; then
|
|
echo " Skipping frontend sync: $demo (demo src not found)"
|
|
return
|
|
fi
|
|
|
|
echo "Syncing frontend $template -> $demo"
|
|
|
|
local rsync_args=("-a" "--delete")
|
|
for preserved in "$@"; do
|
|
rsync_args+=("--exclude=$preserved")
|
|
done
|
|
|
|
rsync "${rsync_args[@]}" "$template_dir/src/" "$demo_dir/src/"
|
|
|
|
if [[ -f "$template_dir/emdash-env.d.ts" ]]; then
|
|
cp "$template_dir/emdash-env.d.ts" "$demo_dir/emdash-env.d.ts"
|
|
echo " Copied file: emdash-env.d.ts"
|
|
fi
|
|
|
|
if [[ -d "$template_dir/seed" && -d "$demo_dir/seed" ]]; then
|
|
rsync -a --delete "$template_dir/seed/" "$demo_dir/seed/"
|
|
echo " Synced directory: seed"
|
|
fi
|
|
}
|
|
|
|
echo "Syncing demos from templates..."
|
|
echo ""
|
|
|
|
for pair in "${DEMO_PAIRS[@]}"; do
|
|
IFS=':' read -r template demo <<< "$pair"
|
|
sync_demo "$template" "$demo"
|
|
echo ""
|
|
done
|
|
|
|
for pair in "${FRONTEND_PAIRS[@]}"; do
|
|
IFS=':' read -r template demo <<< "$pair"
|
|
case "$demo" in
|
|
cloudflare)
|
|
sync_frontend "$template" "$demo" \
|
|
"worker.ts" \
|
|
"pages/als-test.astro" \
|
|
"pages/sandbox-test.astro" \
|
|
"pages/sandbox-plugin-test.astro"
|
|
;;
|
|
playground)
|
|
sync_frontend "$template" "$demo" "worker.ts"
|
|
;;
|
|
preview)
|
|
sync_frontend "$template" "$demo" "worker.ts" "middleware.ts"
|
|
;;
|
|
postgres)
|
|
sync_frontend "$template" "$demo"
|
|
;;
|
|
esac
|
|
echo ""
|
|
done
|
|
|
|
echo "Done!"
|