fix(deploy): fix update.sh fallback mode, trap rollback, and database names

This commit is contained in:
2026-06-24 12:28:17 +09:00
parent 701d3f10d9
commit 5da6e59d2f
+55 -12
View File
@@ -76,12 +76,60 @@ fi
HAS_MAM=0 HAS_MAM=0
if [ -d ".mam" ]; then if [ -d ".mam" ]; then
HAS_MAM=1 HAS_MAM=1
# Move .mam out of the way of remove.sh # Copy database and jobs to temporary backup outside of .mam.
mv ".mam" ".mam.update-tmp" # We do NOT move the .mam folder away so that remove.sh can still read .mam/install_manifest.txt!
mkdir -p .mam.update-tmp
# Copy SQLite databases and session files
for db in .mam/agent-sessions.*; do
if [ -f "$db" ]; then
cp -f "$db" .mam.update-tmp/
fi fi
done
# Copy jobs history
if [ -d ".mam/jobs" ] && [ "$(ls -A .mam/jobs 2>/dev/null)" ]; then
mkdir -p .mam.update-tmp/jobs
cp -rf .mam/jobs/* .mam.update-tmp/jobs/
fi
# Copy delegate logs
if [ -d ".mam/delegate_job_logs" ] && [ "$(ls -A .mam/delegate_job_logs 2>/dev/null)" ]; then
mkdir -p .mam.update-tmp/delegate_job_logs
cp -rf .mam/delegate_job_logs/* .mam.update-tmp/delegate_job_logs/
fi
# Copy manifest so we have a backup
if [ -f ".mam/install_manifest.txt" ]; then
cp -f .mam/install_manifest.txt .mam.update-tmp/
fi
fi
# Define trap to restore backup files on failure
restore_on_failure() {
echo "❌ Update failed. Reverting configuration and database to previous state..."
if [ $HAS_ENV -eq 1 ] && [ -f ".env.update-tmp" ]; then
mv -f ".env.update-tmp" ".env" 2>/dev/null || true
fi
if [ $HAS_MAM -eq 1 ] && [ -d ".mam.update-tmp" ]; then
# Revert to old database/jobs backup by restoring .mam directory
rm -rf .mam 2>/dev/null || true
mkdir -p .mam
cp -f .mam.update-tmp/agent-sessions.* .mam/ 2>/dev/null || true
if [ -d ".mam.update-tmp/jobs" ]; then
cp -rf .mam.update-tmp/jobs .mam/ 2>/dev/null || true
fi
if [ -d ".mam.update-tmp/delegate_job_logs" ]; then
cp -rf .mam.update-tmp/delegate_job_logs .mam/ 2>/dev/null || true
fi
if [ -f ".mam.update-tmp/install_manifest.txt" ]; then
cp -f .mam.update-tmp/install_manifest.txt .mam/ 2>/dev/null || true
fi
rm -rf .mam.update-tmp 2>/dev/null || true
fi
}
trap restore_on_failure EXIT
# 3. Perform uninstallation of existing files # 3. Perform uninstallation of existing files
echo "🗑️ Removing existing installation..." echo "🗑️ Removing existing installation..."
# remove.sh will run in manifest mode because .mam/install_manifest.txt is still present.
# It will delete .agents/, documents, scripts, .venv, and .mam folder.
bash remove.sh --force bash remove.sh --force
# 4. Fetch and run the latest installer from Gitea # 4. Fetch and run the latest installer from Gitea
@@ -93,13 +141,12 @@ elif command -v wget &>/dev/null; then
wget -qO- "$INSTALLER_URL" | bash -s -- "$TARGET_DIR" wget -qO- "$INSTALLER_URL" | bash -s -- "$TARGET_DIR"
else else
echo "❌ Error: Neither 'curl' nor 'wget' is available to fetch the installer." >&2 echo "❌ Error: Neither 'curl' nor 'wget' is available to fetch the installer." >&2
# Restore backups before failing
if [ $HAS_ENV -eq 1 ]; then mv ".env.update-tmp" ".env"; fi
if [ $HAS_MAM -eq 1 ]; then mv ".mam.update-tmp" ".mam"; fi
exit 1 exit 1
fi fi
# Disable failure trap since installation succeeded
trap - EXIT
# 5. Restore backups of configuration and database # 5. Restore backups of configuration and database
echo "🔄 Restoring configuration and database..." echo "🔄 Restoring configuration and database..."
if [ $HAS_ENV -eq 1 ]; then if [ $HAS_ENV -eq 1 ]; then
@@ -108,26 +155,22 @@ if [ $HAS_ENV -eq 1 ]; then
fi fi
if [ $HAS_MAM -eq 1 ]; then if [ $HAS_MAM -eq 1 ]; then
if [ -d ".mam.update-tmp" ]; then
# The installer created a new .mam directory with a new manifest. # The installer created a new .mam directory with a new manifest.
# We want to merge the old .mam database/jobs back while keeping the new manifest. # We want to merge the old .mam database/jobs back while keeping the new manifest.
if [ -d ".mam.update-tmp" ]; then for db in .mam.update-tmp/agent-sessions.*; do
# Copy SQLite databases
for db in .mam.update-tmp/db.sqlite*; do
if [ -f "$db" ]; then if [ -f "$db" ]; then
cp -f "$db" .mam/ cp -f "$db" .mam/
fi fi
done done
# Copy jobs history
if [ -d ".mam.update-tmp/jobs" ] && [ "$(ls -A .mam.update-tmp/jobs 2>/dev/null)" ]; then if [ -d ".mam.update-tmp/jobs" ] && [ "$(ls -A .mam.update-tmp/jobs 2>/dev/null)" ]; then
mkdir -p .mam/jobs mkdir -p .mam/jobs
cp -rf .mam.update-tmp/jobs/* .mam/jobs/ cp -rf .mam.update-tmp/jobs/* .mam/jobs/
fi fi
# Copy delegate logs
if [ -d ".mam.update-tmp/delegate_job_logs" ] && [ "$(ls -A .mam.update-tmp/delegate_job_logs 2>/dev/null)" ]; then if [ -d ".mam.update-tmp/delegate_job_logs" ] && [ "$(ls -A .mam.update-tmp/delegate_job_logs 2>/dev/null)" ]; then
mkdir -p .mam/delegate_job_logs mkdir -p .mam/delegate_job_logs
cp -rf .mam.update-tmp/delegate_job_logs/* .mam/delegate_job_logs/ cp -rf .mam.update-tmp/delegate_job_logs/* .mam/delegate_job_logs/
fi fi
# Clean up the backup directory
rm -rf ".mam.update-tmp" rm -rf ".mam.update-tmp"
fi fi
fi fi