fix(deploy): back up MAM-owned env under --force and restrict deletion to --purge-env
This commit is contained in:
+45
-30
@@ -118,8 +118,8 @@ delete_asset() {
|
|||||||
if [ ${#manifest_files[@]} -gt 0 ]; then
|
if [ ${#manifest_files[@]} -gt 0 ]; then
|
||||||
echo "📜 Manifest found. Reversing installer-created files..."
|
echo "📜 Manifest found. Reversing installer-created files..."
|
||||||
for f in ${manifest_files[@]+"${manifest_files[@]}"}; do
|
for f in ${manifest_files[@]+"${manifest_files[@]}"}; do
|
||||||
# Skip .env and remove.sh for now, they are handled separately
|
# Skip .env, .mam.env, and remove.sh for now, they are handled separately
|
||||||
if [ "$f" = ".env" ] || [ "$f" = "remove.sh" ]; then
|
if [ "$f" = ".env" ] || [ "$f" = ".mam.env" ] || [ "$f" = "remove.sh" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
delete_asset "$f"
|
delete_asset "$f"
|
||||||
@@ -146,49 +146,64 @@ delete_asset ".venv"
|
|||||||
delete_asset ".cache/multi-agent-mux-monitor"
|
delete_asset ".cache/multi-agent-mux-monitor"
|
||||||
delete_asset ".mam" # Deletes manifest file too
|
delete_asset ".mam" # Deletes manifest file too
|
||||||
|
|
||||||
# 5. Clean up .env file (Only if created by installer, or forced with --purge-env)
|
# 5. Clean up .env and .mam.env files (Only if created by installer, or forced with --purge-env)
|
||||||
# If .env is in manifest, it means MAM created it.
|
for env_name in ".mam.env" ".env"; do
|
||||||
env_created_by_mam=0
|
[ -f "$env_name" ] || continue
|
||||||
for f in ${manifest_files[@]+"${manifest_files[@]}"}; do
|
|
||||||
if [ "$f" = ".env" ]; then
|
env_created_by_mam=0
|
||||||
env_created_by_mam=1
|
for f in ${manifest_files[@]+"${manifest_files[@]}"}; do
|
||||||
break
|
if [ "$f" = "$env_name" ]; then
|
||||||
fi
|
env_created_by_mam=1
|
||||||
done
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [ -f ".env" ]; then
|
|
||||||
should_delete_env=0
|
should_delete_env=0
|
||||||
if [ $PURGE_ENV -eq 1 ]; then
|
if [ $PURGE_ENV -eq 1 ]; then
|
||||||
should_delete_env=1
|
should_delete_env=1
|
||||||
elif [ $env_created_by_mam -eq 1 ]; then
|
elif [ $env_created_by_mam -eq 1 ] && [ $FORCE -eq 0 ]; then
|
||||||
# Even if MAM created it, ask or rename to backup to prevent loss of custom secrets
|
if ! read -p "❓ MAM-created '$env_name' found. Delete it? (Saying No preserves it) [y/N]: " -r env_response; then
|
||||||
if [ $FORCE -eq 1 ]; then
|
env_response="n"
|
||||||
|
fi
|
||||||
|
if [[ "$env_response" =~ ^[yY](es)?$ ]]; then
|
||||||
should_delete_env=1
|
should_delete_env=1
|
||||||
else
|
|
||||||
if ! read -p "❓ MAM-created '.env' found. Delete it? (Saying No preserves it) [y/N]: " -r env_response; then
|
|
||||||
env_response="n"
|
|
||||||
fi
|
|
||||||
if [[ "$env_response" =~ ^[yY](es)?$ ]]; then
|
|
||||||
should_delete_env=1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $should_delete_env -eq 1 ]; then
|
if [ $should_delete_env -eq 1 ]; then
|
||||||
delete_asset ".env"
|
delete_asset "$env_name"
|
||||||
else
|
else
|
||||||
if [ $env_created_by_mam -eq 1 ]; then
|
if [ $env_created_by_mam -eq 1 ]; then
|
||||||
backup_name=".env.mam-backup"
|
already_preserved=0
|
||||||
if [ -e "$backup_name" ]; then
|
for existing in "${env_name}.mam-backup" "${env_name}".mam-backup.*; do
|
||||||
backup_name=".env.mam-backup.$(date +%Y%m%d%H%M%S)"
|
[ -f "$existing" ] || continue
|
||||||
|
if cmp -s "$env_name" "$existing" 2>/dev/null; then
|
||||||
|
already_preserved=1
|
||||||
|
rm -f "$env_name"
|
||||||
|
echo "ℹ️ '$env_name' is already preserved in $existing (no duplicate created)."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $already_preserved -eq 0 ]; then
|
||||||
|
slot="${env_name}.mam-backup"
|
||||||
|
if [ -e "$slot" ]; then
|
||||||
|
slot="${env_name}.mam-backup.$(date +%Y%m%d%H%M%S)"
|
||||||
|
n=1
|
||||||
|
while [ -e "$slot" ]; do
|
||||||
|
slot="${env_name}.mam-backup.$(date +%Y%m%d%H%M%S)-$n"
|
||||||
|
n=$((n + 1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
mv "$env_name" "$slot"
|
||||||
|
echo "💾 Backed up $env_name -> $slot"
|
||||||
|
echo " To remove the configuration entirely, re-run with --purge-env."
|
||||||
fi
|
fi
|
||||||
echo "💾 Backing up .env configuration to $backup_name..."
|
|
||||||
mv ".env" "$backup_name"
|
|
||||||
else
|
else
|
||||||
echo "ℹ️ Preserving user-owned .env configuration."
|
echo "ℹ️ Preserving user-owned $env_name configuration."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
done
|
||||||
|
|
||||||
# 6. Remove uninstaller file itself (if we are in the target root)
|
# 6. Remove uninstaller file itself (if we are in the target root)
|
||||||
# Simple check: only delete remove.sh if it is recorded in the manifest
|
# Simple check: only delete remove.sh if it is recorded in the manifest
|
||||||
|
|||||||
Reference in New Issue
Block a user