#!/usr/bin/env bash # Build dist/avtoambor-patch.zip — a small build/-only update for an # already-installed Windows deployment. # # Use this when only application code has changed since the last full bundle. # The patch is just the SvelteKit build output; node_modules, .bat launchers, # and the native better-sqlite3 binary on the target stay untouched. # # The script compares package-lock.json and src/lib/server/*.sql against the # staging snapshot left by scripts/make-bundle.sh (dist/avtoambor/). If those # changed, a full re-bundle is required instead — the patch alone won't work. set -euo pipefail cd "$(dirname "$0")/.." ROOT="$(pwd)" DIST="$ROOT/dist" BASELINE="$DIST/avtoambor" PATCH_DIR="$DIST/patch" ZIP="$DIST/avtoambor-patch.zip" for cmd in npm zip rsync diff; do command -v "$cmd" >/dev/null || { echo "make-patch.sh: missing required tool: $cmd"; exit 1; } done if [ ! -d "$BASELINE" ]; then echo "make-patch.sh: no baseline at $BASELINE." echo " Run scripts/make-bundle.sh first to establish a baseline." exit 1 fi # --- safety checks: things a build/-only patch cannot deliver --- WARN=0 warn() { echo " ! $*"; WARN=1; } echo "==> Checking patch safety against baseline ($BASELINE)" if ! diff -q "$ROOT/package-lock.json" "$BASELINE/package-lock.json" >/dev/null 2>&1; then warn "package-lock.json changed — node_modules on target is stale. Full bundle required." fi for f in schema.sql seed.sql; do if ! diff -q "$ROOT/src/lib/server/$f" "$BASELINE/src/lib/server/$f" >/dev/null 2>&1; then warn "src/lib/server/$f changed — target DB may need a migration." fi done if [ "$WARN" = 1 ]; then echo echo "Patch may be unsafe." echo "Either:" echo " - run scripts/make-bundle.sh and ship the full bundle, or" echo " - re-run this script with FORCE=1 if you know the change is harmless." if [ "${FORCE:-0}" != "1" ]; then exit 1 fi echo "FORCE=1 set — continuing anyway." fi echo "==> Building production output (vite build)" npm run build echo "==> Staging patch contents" rm -rf "$PATCH_DIR" mkdir -p "$PATCH_DIR" rsync -a --delete build/ "$PATCH_DIR/build/" STAMP="$(date +%Y-%m-%d)" cat > "$PATCH_DIR/UPDATE.txt" < Creating zip: $ZIP" rm -f "$ZIP" ( cd "$PATCH_DIR" && zip -rq "$ZIP" build UPDATE.txt ) ZIP_SIZE="$(du -h "$ZIP" | cut -f1)" echo echo "═══════════════════════════════════════════════════════════════" echo " Patch ready: $ZIP ($ZIP_SIZE)" echo "═══════════════════════════════════════════════════════════════" echo echo " Next steps (you):" echo " 1. Upload $ZIP to your server." echo " 2. Send him the download link." echo echo " What he does (also written in UPDATE.txt inside the zip):" echo " 1. Close the start.bat window." echo " 2. Extract the zip into C:\\avtoambor\\ — choose Replace when asked." echo " 3. Double-click start.bat." echo