Files
emdash-patch-imageupload/scripts/sync-blog-demos.sh
kunthawat 2d1be52177 Emdash source with visual editor image upload fix
Fixes:
1. media.ts: wrap placeholder generation in try-catch
2. toolbar.ts: check r.ok, display error message in popover
2026-05-03 10:44:54 +07:00

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!"