Files
dbis_core/scripts/run-migrations.sh
2026-03-02 12:14:07 -08:00

107 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Run Ledger Correctness Migrations
# Executes all migrations in order with error checking
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
MIGRATIONS_DIR="$PROJECT_ROOT/db/migrations"
# Load database URL from environment or use default
DATABASE_URL="${DATABASE_URL:-${1:-postgresql://user:password@localhost:5432/dbis}}"
echo "=== Running Ledger Correctness Migrations ==="
echo "Database: $DATABASE_URL"
echo "Migrations directory: $MIGRATIONS_DIR"
echo ""
# Check if migrations directory exists
if [ ! -d "$MIGRATIONS_DIR" ]; then
echo "❌ Migrations directory not found: $MIGRATIONS_DIR"
exit 1
fi
# List of migrations in order
MIGRATIONS=(
"001_ledger_idempotency.sql"
"002_dual_ledger_outbox.sql"
"003_outbox_state_machine.sql"
"004_balance_constraints.sql"
"005_post_ledger_entry.sql"
)
# Function to check if migration was already applied
check_migration_applied() {
local migration_name=$1
# This assumes you have a migrations tracking table
# Adjust based on your migration tracking system
psql "$DATABASE_URL" -tAc "SELECT 1 FROM schema_migrations WHERE version = '$migration_name'" 2>/dev/null || echo "0"
}
# Run each migration
for migration in "${MIGRATIONS[@]}"; do
migration_path="$MIGRATIONS_DIR/$migration"
if [ ! -f "$migration_path" ]; then
echo "⚠️ Migration file not found: $migration"
continue
fi
echo "Running: $migration"
# Run migration
if psql "$DATABASE_URL" -f "$migration_path"; then
echo "$migration completed successfully"
echo ""
else
echo "$migration failed"
exit 1
fi
done
echo "=== All migrations completed successfully ==="
# Verify migrations
echo ""
echo "=== Verifying migrations ==="
# Check idempotency constraint
echo "Checking idempotency constraint..."
psql "$DATABASE_URL" -tAc "
SELECT CASE
WHEN EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'ledger_entries_unique_ledger_reference'
) THEN '✅ Idempotency constraint exists'
ELSE '❌ Idempotency constraint missing'
END;
"
# Check outbox table
echo "Checking outbox table..."
psql "$DATABASE_URL" -tAc "
SELECT CASE
WHEN EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_name = 'dual_ledger_outbox'
) THEN '✅ Outbox table exists'
ELSE '❌ Outbox table missing'
END;
"
# Check posting function
echo "Checking posting function..."
psql "$DATABASE_URL" -tAc "
SELECT CASE
WHEN EXISTS (
SELECT 1 FROM pg_proc
WHERE proname = 'post_ledger_entry'
) THEN '✅ Posting function exists'
ELSE '❌ Posting function missing'
END;
"
echo ""
echo "=== Migration verification complete ==="