factory-import: --save-as-builtin Flag + README-Überarbeitung
Schließt die Lücke „nach Import landet die ZIP nicht im Image-Default":
./factory-import.sh --save-as-builtin
→ entpackt die ZIP nach erfolgreichem DB-Import zusätzlich in
backend/factory-defaults/ (alter Inhalt vorher aufgeräumt, README.md
und .gitkeep bleiben). Beim nächsten Image-Build sind die Defaults
drin und seeden frische VMs automatisch.
README-Abschnitt „Factory-Defaults" komplett überarbeitet:
- Drei Transport-Pfade explizit erklärt (laufende DB / Drop-Box / Image)
- HTML-Standardtexte + AppSetting-Whitelist dokumentiert
- Auto-Seed-Verhalten + Berechtigungen aktualisiert
- Typische Workflows als End-zu-End-Sequenz inkl. scp-Sync
Live verifiziert: STALE_FILE.txt im backend/factory-defaults/ wurde beim
--save-as-builtin sauber entfernt, README.md blieb erhalten, Subfolder neu
befüllt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+50
-7
@@ -3,9 +3,13 @@
|
||||
# Idempotent (upserts pro Kategorie, nichts wird gelöscht).
|
||||
#
|
||||
# Aufruf:
|
||||
# ./factory-import.sh ./factory-exports/factory-defaults-2026-05-07-1923.zip
|
||||
# ./factory-import.sh # ohne Argument: nimmt automatisch
|
||||
# # die jüngste ZIP aus factory-exports/
|
||||
# ./factory-import.sh # jüngste ZIP aus factory-exports/
|
||||
# ./factory-import.sh ./factory-exports/foo.zip # explizite ZIP
|
||||
# ./factory-import.sh --save-as-builtin # nach Import auch ins
|
||||
# ./factory-import.sh --save-as-builtin ./foo.zip # backend/factory-defaults/
|
||||
# # entpacken → nächster
|
||||
# # Image-Build hat sie
|
||||
# # als Werkseinstellung
|
||||
#
|
||||
# ENV (wie factory-export.sh):
|
||||
# OPENCRM_URL (default http://localhost:3010)
|
||||
@@ -20,8 +24,29 @@ PASSWORD="${OPENCRM_PASSWORD:-}"
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
EXPORT_DIR="$REPO_ROOT/factory-exports"
|
||||
BUILTIN_DIR="$REPO_ROOT/backend/factory-defaults"
|
||||
|
||||
# Argumente parsen: erlaubt sind --save-as-builtin und 0/1 ZIP-Pfade in
|
||||
# beliebiger Reihenfolge.
|
||||
SAVE_AS_BUILTIN=false
|
||||
ZIP_PATH=""
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--save-as-builtin) SAVE_AS_BUILTIN=true ;;
|
||||
-h|--help)
|
||||
sed -n '2,16p' "$0" | sed 's/^# \?//'
|
||||
exit 0
|
||||
;;
|
||||
--*) echo "✗ Unbekanntes Flag: $arg"; exit 2 ;;
|
||||
*)
|
||||
if [ -n "$ZIP_PATH" ]; then
|
||||
echo "✗ Mehrere ZIP-Pfade angegeben (nur einer erlaubt)"; exit 2
|
||||
fi
|
||||
ZIP_PATH="$arg"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
ZIP_PATH="${1:-}"
|
||||
if [ -z "$ZIP_PATH" ]; then
|
||||
# Jüngste ZIP automatisch wählen
|
||||
ZIP_PATH="$(ls -1t "$EXPORT_DIR"/*.zip 2>/dev/null | head -1 || true)"
|
||||
@@ -64,7 +89,7 @@ RESPONSE="$(curl -sS -X POST "$URL/api/factory-defaults/import" \
|
||||
-F "zip=@$ZIP_PATH")"
|
||||
|
||||
# Hübsch ausgeben + auf success prüfen
|
||||
if printf '%s' "$RESPONSE" | python3 -c '
|
||||
if ! printf '%s' "$RESPONSE" | python3 -c '
|
||||
import json, sys
|
||||
r = json.load(sys.stdin)
|
||||
if not r.get("success"):
|
||||
@@ -91,7 +116,25 @@ if warnings:
|
||||
for w in warnings:
|
||||
print(f" - {w}")
|
||||
'; then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --save-as-builtin: ZIP zusätzlich in backend/factory-defaults/ entpacken,
|
||||
# damit der nächste Image-Build sie als Werkseinstellung mitnimmt.
|
||||
# Vorher räumen wir auf (außer README.md + .gitkeep), damit nichts Veraltetes
|
||||
# liegen bleibt.
|
||||
if [ "$SAVE_AS_BUILTIN" = "true" ]; then
|
||||
echo
|
||||
echo "→ --save-as-builtin: aktualisiere $BUILTIN_DIR/"
|
||||
if [ ! -d "$BUILTIN_DIR" ]; then
|
||||
mkdir -p "$BUILTIN_DIR"
|
||||
fi
|
||||
# Aufräumen: alles außer README.md und .gitkeep löschen
|
||||
find "$BUILTIN_DIR" -mindepth 1 \
|
||||
\! -name 'README.md' \! -name '.gitkeep' \
|
||||
-delete
|
||||
# ZIP entpacken (manifest.json kommt mit, ist aber harmlos)
|
||||
unzip -q -o "$ZIP_PATH" -d "$BUILTIN_DIR"
|
||||
echo "✓ Werkseinstellungen aktualisiert. Beim nächsten 'docker-compose up"
|
||||
echo " --build' landen sie im Image und seeden frische DBs automatisch."
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user