Add vibe-kanban

This commit is contained in:
2025-12-31 01:31:54 +07:00
parent 488d7c2a76
commit a37b59f29a
41 changed files with 2004 additions and 0 deletions

124
scripts/copy-database-for-task.sh Executable file
View File

@@ -0,0 +1,124 @@
#!/bin/bash
# scripts/copy-database-for-task.sh
# Copies database from main repo to task-specific PostgreSQL instance
TASK_ID=$1
SOURCE_HOST=${2:-"localhost"}
SOURCE_PORT=${3:-"5432"}
TARGET_HOST=${4:-"localhost"}
TARGET_PORT=${5:-"5433"}
SOURCE_DB="managing"
# Convert to lowercase (compatible with bash 3.2+)
TARGET_DB="managing_$(echo "$TASK_ID" | tr '[:upper:]' '[:lower:]')"
ORLEANS_SOURCE_DB="orleans"
ORLEANS_TARGET_DB="orleans_$(echo "$TASK_ID" | tr '[:upper:]' '[:lower:]')"
DB_USER="postgres"
DB_PASSWORD="postgres"
set -e # Exit on error
echo "📦 Copying database for task: $TASK_ID"
echo " Source: $SOURCE_HOST:$SOURCE_PORT"
echo " Target: $TARGET_HOST:$TARGET_PORT"
# Wait for target PostgreSQL to be ready
echo "⏳ Waiting for target PostgreSQL..."
for i in {1..60}; do
if PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d postgres -c '\q' 2>/dev/null; then
echo "✅ Target PostgreSQL is ready"
break
fi
if [ $i -eq 60 ]; then
echo "❌ Target PostgreSQL not ready after 60 attempts"
exit 1
fi
sleep 1
done
# Verify source database is accessible
echo "🔍 Verifying source database..."
if ! PGPASSWORD=$DB_PASSWORD psql -h $SOURCE_HOST -p $SOURCE_PORT -U $DB_USER -d postgres -c '\q' 2>/dev/null; then
echo "❌ Cannot connect to source database at $SOURCE_HOST:$SOURCE_PORT"
exit 1
fi
# Create target databases (drop if exists for fresh copy)
echo "🗑️ Dropping existing target databases if they exist..."
PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d postgres -c "DROP DATABASE IF EXISTS \"$TARGET_DB\";" 2>/dev/null || true
PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d postgres -c "DROP DATABASE IF EXISTS \"$ORLEANS_TARGET_DB\";" 2>/dev/null || true
echo "📝 Creating target databases..."
PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d postgres -c "CREATE DATABASE \"$TARGET_DB\";"
PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d postgres -c "CREATE DATABASE \"$ORLEANS_TARGET_DB\";"
# Create temporary dump files
TEMP_DIR=$(mktemp -d)
MANAGING_DUMP="$TEMP_DIR/managing_${TASK_ID}.dump"
ORLEANS_DUMP="$TEMP_DIR/orleans_${TASK_ID}.dump"
# Dump source databases
echo "📤 Dumping source database: $SOURCE_DB..."
PGPASSWORD=$DB_PASSWORD pg_dump -h $SOURCE_HOST -p $SOURCE_PORT -U $DB_USER -Fc "$SOURCE_DB" > "$MANAGING_DUMP"
if [ ! -s "$MANAGING_DUMP" ]; then
echo "❌ Failed to dump source database $SOURCE_DB"
rm -rf "$TEMP_DIR"
exit 1
fi
echo "📤 Dumping Orleans database: $ORLEANS_SOURCE_DB..."
PGPASSWORD=$DB_PASSWORD pg_dump -h $SOURCE_HOST -p $SOURCE_PORT -U $DB_USER -Fc "$ORLEANS_SOURCE_DB" > "$ORLEANS_DUMP" 2>/dev/null || {
echo "⚠️ Orleans database not found, skipping..."
ORLEANS_DUMP=""
}
# Restore to target databases
echo "📥 Restoring to target database: $TARGET_DB..."
PGPASSWORD=$DB_PASSWORD pg_restore -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d "$TARGET_DB" --no-owner --no-acl --clean --if-exists "$MANAGING_DUMP"
if [ $? -eq 0 ]; then
echo "✅ Successfully restored $TARGET_DB"
else
echo "❌ Failed to restore $TARGET_DB"
rm -rf "$TEMP_DIR"
exit 1
fi
if [ -n "$ORLEANS_DUMP" ] && [ -s "$ORLEANS_DUMP" ]; then
echo "📥 Restoring Orleans database: $ORLEANS_TARGET_DB..."
PGPASSWORD=$DB_PASSWORD pg_restore -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d "$ORLEANS_TARGET_DB" --no-owner --no-acl --clean --if-exists "$ORLEANS_DUMP"
if [ $? -eq 0 ]; then
echo "✅ Successfully restored $ORLEANS_TARGET_DB"
# Clean Orleans membership tables to avoid conflicts with old silos
echo "🧹 Cleaning Orleans membership tables (removing old silo entries)..."
PGPASSWORD=$DB_PASSWORD psql -h $TARGET_HOST -p $TARGET_PORT -U $DB_USER -d "$ORLEANS_TARGET_DB" <<EOF
-- Clear membership tables to start fresh (Orleans uses lowercase table names)
TRUNCATE TABLE IF EXISTS orleansmembershiptable CASCADE;
TRUNCATE TABLE IF EXISTS orleansmembershipversiontable CASCADE;
-- Note: We keep reminder and storage tables as they may contain application data
EOF
if [ $? -eq 0 ]; then
echo "✅ Orleans membership tables cleaned"
else
echo "⚠️ Failed to clean Orleans membership tables (tables may not exist yet, which is OK)"
fi
else
echo "⚠️ Failed to restore Orleans database (non-critical)"
fi
else
# Even if no Orleans dump, create empty database for fresh start
echo "📝 Orleans database will be created fresh by Orleans framework"
fi
# Cleanup
rm -rf "$TEMP_DIR"
echo "✅ Database copy completed successfully"
echo " Managing DB: $TARGET_DB on port $TARGET_PORT"
echo " Orleans DB: $ORLEANS_TARGET_DB on port $TARGET_PORT"