167 lines
5.6 KiB
Bash
167 lines
5.6 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Convenience script: Clean databases and regenerate all migrations in one command
|
||
|
|
# This wraps the two-step process into a single workflow
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
# Colors for output
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
# Configuration
|
||
|
|
NAMESPACE="${KUBE_NAMESPACE:-bakery-ia}"
|
||
|
|
SKIP_CONFIRMATION=false
|
||
|
|
APPLY_MIGRATIONS=false
|
||
|
|
VERBOSE=false
|
||
|
|
|
||
|
|
# Parse command line arguments
|
||
|
|
while [[ $# -gt 0 ]]; do
|
||
|
|
case $1 in
|
||
|
|
--namespace) NAMESPACE="$2"; shift 2 ;;
|
||
|
|
--yes) SKIP_CONFIRMATION=true; shift ;;
|
||
|
|
--apply) APPLY_MIGRATIONS=true; shift ;;
|
||
|
|
--verbose) VERBOSE=true; shift ;;
|
||
|
|
-h|--help)
|
||
|
|
echo "Usage: $0 [OPTIONS]"
|
||
|
|
echo ""
|
||
|
|
echo "This script performs the complete migration regeneration workflow:"
|
||
|
|
echo " 1. Clean all service databases"
|
||
|
|
echo " 2. Generate new migrations from models"
|
||
|
|
echo " 3. Optionally apply migrations"
|
||
|
|
echo ""
|
||
|
|
echo "Options:"
|
||
|
|
echo " --namespace NAME Use specific Kubernetes namespace (default: bakery-ia)"
|
||
|
|
echo " --yes Skip all confirmation prompts"
|
||
|
|
echo " --apply Apply migrations after generation"
|
||
|
|
echo " --verbose Enable detailed logging"
|
||
|
|
echo ""
|
||
|
|
echo "Examples:"
|
||
|
|
echo " $0 # Interactive mode (with confirmations)"
|
||
|
|
echo " $0 --yes --verbose # Automated mode with detailed output"
|
||
|
|
echo " $0 --apply # Generate and apply migrations"
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
*) echo "Unknown option: $1"; echo "Use --help for usage information"; exit 1 ;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo -e "${BLUE}Complete Migration Regeneration Workflow${NC}"
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}This script will:${NC}"
|
||
|
|
echo -e "${YELLOW} 1. Clean all service databases (DROP all tables)${NC}"
|
||
|
|
echo -e "${YELLOW} 2. Generate new migrations from models${NC}"
|
||
|
|
if [ "$APPLY_MIGRATIONS" = true ]; then
|
||
|
|
echo -e "${YELLOW} 3. Apply migrations to databases${NC}"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}Namespace: $NAMESPACE${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if [ "$SKIP_CONFIRMATION" = false ]; then
|
||
|
|
echo -e "${RED}⚠ WARNING: This will DROP ALL TABLES in all service databases!${NC}"
|
||
|
|
echo ""
|
||
|
|
read -p "Continue? (yes/no) " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
|
|
echo -e "${YELLOW}Aborted.${NC}"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo -e "${BLUE}Step 1: Cleaning Databases${NC}"
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Build cleanup command
|
||
|
|
CLEANUP_CMD="./cleanup_databases_k8s.sh --namespace $NAMESPACE"
|
||
|
|
if [ "$SKIP_CONFIRMATION" = true ]; then
|
||
|
|
CLEANUP_CMD="$CLEANUP_CMD --yes"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Run cleanup
|
||
|
|
if ! $CLEANUP_CMD; then
|
||
|
|
echo -e "${RED}✗ Database cleanup failed!${NC}"
|
||
|
|
echo -e "${YELLOW}Cannot proceed with migration generation.${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}✓ Database cleanup completed${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Wait a moment for database connections to settle
|
||
|
|
sleep 2
|
||
|
|
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo -e "${BLUE}Step 2: Generating Migrations${NC}"
|
||
|
|
echo -e "${BLUE}========================================${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Build migration command
|
||
|
|
MIGRATION_CMD="./regenerate_migrations_k8s.sh --namespace $NAMESPACE"
|
||
|
|
if [ "$VERBOSE" = true ]; then
|
||
|
|
MIGRATION_CMD="$MIGRATION_CMD --verbose"
|
||
|
|
fi
|
||
|
|
if [ "$APPLY_MIGRATIONS" = true ]; then
|
||
|
|
MIGRATION_CMD="$MIGRATION_CMD --apply"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Run migration generation (with automatic 'y' response)
|
||
|
|
if [ "$SKIP_CONFIRMATION" = true ]; then
|
||
|
|
echo "y" | $MIGRATION_CMD
|
||
|
|
else
|
||
|
|
$MIGRATION_CMD
|
||
|
|
fi
|
||
|
|
|
||
|
|
MIGRATION_EXIT_CODE=$?
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
if [ $MIGRATION_EXIT_CODE -eq 0 ]; then
|
||
|
|
echo -e "${GREEN}========================================${NC}"
|
||
|
|
echo -e "${GREEN}✓ Workflow Completed Successfully!${NC}"
|
||
|
|
echo -e "${GREEN}========================================${NC}"
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}Summary:${NC}"
|
||
|
|
echo -e " ${GREEN}✓${NC} Databases cleaned"
|
||
|
|
echo -e " ${GREEN}✓${NC} Migrations generated"
|
||
|
|
if [ "$APPLY_MIGRATIONS" = true ]; then
|
||
|
|
echo -e " ${GREEN}✓${NC} Migrations applied"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}Generated migration files:${NC}"
|
||
|
|
find services/*/migrations/versions/ -name "*.py" -type f -mmin -5 2>/dev/null | while read file; do
|
||
|
|
size=$(wc -c < "$file" | tr -d ' ')
|
||
|
|
echo -e " ${GREEN}✓${NC} $file ($size bytes)"
|
||
|
|
done
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}Next steps:${NC}"
|
||
|
|
echo -e " 1. Review the generated migrations above"
|
||
|
|
echo -e " 2. Verify migrations contain schema operations (not just 'pass')"
|
||
|
|
if [ "$APPLY_MIGRATIONS" = false ]; then
|
||
|
|
echo -e " 3. Apply migrations: ./regenerate_migrations_k8s.sh --apply"
|
||
|
|
echo -e " 4. Commit migrations: git add services/*/migrations/versions/*.py"
|
||
|
|
else
|
||
|
|
echo -e " 3. Commit migrations: git add services/*/migrations/versions/*.py"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo -e "${RED}========================================${NC}"
|
||
|
|
echo -e "${RED}✗ Migration Generation Failed${NC}"
|
||
|
|
echo -e "${RED}========================================${NC}"
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}Check the log file for details.${NC}"
|
||
|
|
echo -e "${YELLOW}Common issues:${NC}"
|
||
|
|
echo -e " - Pod not running for some services"
|
||
|
|
echo -e " - Database connectivity issues"
|
||
|
|
echo -e " - Model import errors"
|
||
|
|
echo ""
|
||
|
|
exit 1
|
||
|
|
fi
|