Files
firefrost-services/services/arbiter-3.0/scripts/deploy-arbiter.sh
Claude cfdd89377f feat: Add migration-aware deploy script for Trinity Console
- Automatically runs new SQL migrations on deploy
- Tracks applied migrations in .migrations-applied file
- Skips already-applied migrations
- Logs all actions to /var/log/arbiter-deploy.log
- Handles npm install if package.json changes
- Enables Meg/Holly to deploy without backend access

Install: sudo cp scripts/deploy-arbiter.sh /opt/scripts/
         sudo chmod +x /opt/scripts/deploy-arbiter.sh

Chronicler #76
2026-04-10 20:24:48 +00:00

131 lines
4.0 KiB
Bash

#!/bin/bash
# deploy-arbiter.sh - Deploy Arbiter from Gitea with automatic migrations
# Location: /opt/scripts/deploy-arbiter.sh
#
# Features:
# - Pulls latest code from firefrost-services repo
# - Runs any new database migrations
# - Restarts Arbiter service
# - Logs all actions for debugging
#
# Usage: sudo /opt/scripts/deploy-arbiter.sh [username]
set -e
# Configuration
DEPLOY_USER="${1:-system}"
GITEA_TOKEN="e0e330cba1749b01ab505093a160e4423ebbbe36"
REPO_URL="https://${GITEA_TOKEN}@git.firefrostgaming.com/firefrost-gaming/firefrost-services.git"
ARBITER_DIR="/opt/arbiter-3.0"
TEMP_DIR="/tmp/arbiter-deploy-$$"
LOG_FILE="/var/log/arbiter-deploy.log"
MIGRATION_TRACKER="${ARBITER_DIR}/.migrations-applied"
# Database credentials
DB_USER="arbiter"
DB_HOST="127.0.0.1"
DB_NAME="arbiter_db"
DB_PASS="FireFrost2026!Arbiter"
# Logging function
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "=========================================="
log "DEPLOY STARTED by ${DEPLOY_USER}"
log "=========================================="
# Create temp directory
mkdir -p "$TEMP_DIR"
cd "$TEMP_DIR"
# Clone the repo
log "Cloning firefrost-services..."
git clone --depth 1 "$REPO_URL" repo 2>&1 | tee -a "$LOG_FILE"
# Check if clone succeeded
if [ ! -d "repo/services/arbiter-3.0" ]; then
log "ERROR: Clone failed or arbiter-3.0 not found"
rm -rf "$TEMP_DIR"
exit 1
fi
# Create migration tracker if it doesn't exist
touch "$MIGRATION_TRACKER"
# Run new migrations
log "Checking for new migrations..."
MIGRATIONS_DIR="repo/services/arbiter-3.0/migrations"
if [ -d "$MIGRATIONS_DIR" ]; then
for migration in "$MIGRATIONS_DIR"/*.sql; do
if [ -f "$migration" ]; then
migration_name=$(basename "$migration")
# Check if already applied
if grep -q "^${migration_name}$" "$MIGRATION_TRACKER" 2>/dev/null; then
log "SKIP: $migration_name (already applied)"
else
log "APPLYING: $migration_name"
# Run the migration
if PGPASSWORD="$DB_PASS" psql -U "$DB_USER" -h "$DB_HOST" -d "$DB_NAME" -f "$migration" 2>&1 | tee -a "$LOG_FILE"; then
# Mark as applied
echo "$migration_name" >> "$MIGRATION_TRACKER"
log "SUCCESS: $migration_name applied"
else
log "WARNING: $migration_name may have failed (continuing anyway)"
# Still mark it to avoid re-running on next deploy
echo "$migration_name" >> "$MIGRATION_TRACKER"
fi
fi
fi
done
else
log "No migrations directory found"
fi
# Copy new files
log "Copying updated files..."
# Copy source files
cp -r repo/services/arbiter-3.0/src/* "$ARBITER_DIR/src/" 2>&1 | tee -a "$LOG_FILE"
# Copy migrations (for reference)
cp -r repo/services/arbiter-3.0/migrations/* "$ARBITER_DIR/migrations/" 2>&1 | tee -a "$LOG_FILE"
# Copy package.json if changed
cp repo/services/arbiter-3.0/package.json "$ARBITER_DIR/package.json" 2>&1 | tee -a "$LOG_FILE"
# Check if package.json changed and run npm install
cd "$ARBITER_DIR"
if ! cmp -s "$TEMP_DIR/repo/services/arbiter-3.0/package.json" "$ARBITER_DIR/package.json.bak" 2>/dev/null; then
log "package.json changed, running npm install..."
cp "$ARBITER_DIR/package.json" "$ARBITER_DIR/package.json.bak"
npm install --production 2>&1 | tee -a "$LOG_FILE"
fi
# Cleanup temp directory
rm -rf "$TEMP_DIR"
# Restart Arbiter
log "Restarting Arbiter service..."
systemctl restart arbiter-3 2>&1 | tee -a "$LOG_FILE"
# Wait and check status
sleep 3
if systemctl is-active --quiet arbiter-3; then
log "SUCCESS: Arbiter is running"
else
log "ERROR: Arbiter failed to start"
systemctl status arbiter-3 2>&1 | tee -a "$LOG_FILE"
exit 1
fi
log "=========================================="
log "DEPLOY COMPLETED by ${DEPLOY_USER}"
log "=========================================="
exit 0