This commit introduces a more reliable and consistent approach to setting up the development environment using backups: - Add setup-from-backup.sh script for environment setup from existing backups - Standardize script naming and organization - Move obsolete scripts to bin/obsolete directory - Update documentation with new workflow instructions - Create migration guide for transitioning to new workflow - Update Memory Bank with workflow improvements The new workflow provides: - More reliable environment setup - Faster setup process - Offline development capability - Consistent development environments across team members Breaking changes: - setup-dev.sh is replaced by setup-from-backup.sh - sync-and-setup.sh is replaced by separate scripts - verify-with-wpcli.sh is no longer used Migration path is documented in MIGRATION_GUIDE.md
303 lines
No EOL
11 KiB
Bash
Executable file
303 lines
No EOL
11 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Load environment variables from current directory
|
|
if [ ! -f .env ]; then
|
|
echo "Error: .env file not found in current directory!"
|
|
exit 1
|
|
fi
|
|
|
|
source .env
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Default values
|
|
SKIP_CONFIRM=false
|
|
|
|
# Function to check if a command was successful
|
|
check_status() {
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ $1${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}✗ $1${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to show usage
|
|
show_usage() {
|
|
echo "Usage: $0 {backup|restore <backup_file>|reset|generate-test-data [type]|cleanup-test-data}"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " backup Create a backup of the development database"
|
|
echo " restore FILE Restore database from a backup file"
|
|
echo " reset Reset the development database"
|
|
echo " generate-test-data Generate test data (default: basic)"
|
|
echo " cleanup-test-data Remove all test data"
|
|
echo ""
|
|
echo "Test Data Types:"
|
|
echo " basic Basic test data (1 trainer, 1 event)"
|
|
echo " extended Extended test data (multiple trainers, events)"
|
|
echo " stress Large dataset for stress testing"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -y, --yes Skip confirmation prompts"
|
|
echo " -h, --help Show this help message"
|
|
}
|
|
|
|
# Function to backup development database
|
|
backup_dev_db() {
|
|
local backup_file="backups/dev_db_$(date +%Y%m%d_%H%M%S).sql"
|
|
mkdir -p backups
|
|
|
|
echo "Backing up development database..."
|
|
docker-compose exec -T db mysqldump -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" "$DEV_DB_NAME" > "$backup_file"
|
|
check_status "Database backup" || exit 1
|
|
echo "Backup saved to: $backup_file"
|
|
}
|
|
|
|
# Function to restore development database
|
|
restore_dev_db() {
|
|
local backup_file=$1
|
|
if [ ! -f "$backup_file" ]; then
|
|
echo -e "${RED}Error: Backup file not found: $backup_file${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Restoring development database..."
|
|
cat "$backup_file" | docker-compose exec -T db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" "$DEV_DB_NAME"
|
|
check_status "Database restore" || exit 1
|
|
}
|
|
|
|
# Function to reset development database
|
|
reset_dev_db() {
|
|
echo "Resetting development database..."
|
|
docker-compose exec db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" -e "DROP DATABASE IF EXISTS $DEV_DB_NAME; CREATE DATABASE $DEV_DB_NAME;"
|
|
check_status "Database reset" || exit 1
|
|
}
|
|
|
|
# Function to generate test data
|
|
generate_test_data() {
|
|
local data_type=${1:-"basic"}
|
|
|
|
echo "Generating ${data_type} test data..."
|
|
|
|
# Create test users based on data type
|
|
case "$data_type" in
|
|
basic)
|
|
echo "Creating basic test data..."
|
|
# Create test trainer
|
|
docker-compose exec wordpress wp user create test_trainer test.trainer@example.com \
|
|
--role=author --user_pass=SecurePass123! --allow-root
|
|
check_status "Test trainer creation"
|
|
|
|
# Create test event
|
|
EVENT_ID=$(docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_events \
|
|
--post_title="Test HVAC Training Event" \
|
|
--post_content="This is a test training event for HVAC professionals." \
|
|
--post_status=publish \
|
|
--post_author=test_trainer \
|
|
--porcelain \
|
|
--allow-root)
|
|
check_status "Test event creation"
|
|
|
|
# Set event metadata
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventStartDate "$(date -v+1d '+%Y-%m-%d 10:00:00')" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventEndDate "$(date -v+1d '+%Y-%m-%d 16:00:00')" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventVenueID "1" --allow-root
|
|
check_status "Event metadata setup"
|
|
|
|
# Create test ticket
|
|
docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_rsvp \
|
|
--post_title="Standard Ticket" \
|
|
--post_parent=$EVENT_ID \
|
|
--post_status=publish \
|
|
--meta_input='{"_price": "99.99", "_stock": "50"}' \
|
|
--allow-root
|
|
check_status "Test ticket creation"
|
|
;;
|
|
|
|
extended)
|
|
echo "Creating extended test data..."
|
|
# Create multiple trainers
|
|
for i in {1..3}; do
|
|
docker-compose exec wordpress wp user create "trainer_${i}" "trainer${i}@example.com" \
|
|
--role=author --user_pass=SecurePass123! --allow-root
|
|
check_status "Trainer ${i} creation"
|
|
|
|
# Create multiple events for each trainer
|
|
for j in {1..3}; do
|
|
EVENT_ID=$(docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_events \
|
|
--post_title="HVAC Training ${i}-${j}" \
|
|
--post_content="Extended test training event ${j} by trainer ${i}." \
|
|
--post_status=publish \
|
|
--post_author="trainer_${i}" \
|
|
--porcelain \
|
|
--allow-root)
|
|
|
|
# Set event metadata with different dates
|
|
START_DATE=$(date -v+${j}d '+%Y-%m-%d 10:00:00')
|
|
END_DATE=$(date -v+${j}d '+%Y-%m-%d 16:00:00')
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventStartDate "$START_DATE" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventEndDate "$END_DATE" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventVenueID "$j" --allow-root
|
|
|
|
# Create tickets with different prices
|
|
docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_rsvp \
|
|
--post_title="Early Bird Ticket" \
|
|
--post_parent=$EVENT_ID \
|
|
--post_status=publish \
|
|
--meta_input="{\"_price\": \"79.99\", \"_stock\": \"20\"}" \
|
|
--allow-root
|
|
|
|
docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_rsvp \
|
|
--post_title="Regular Ticket" \
|
|
--post_parent=$EVENT_ID \
|
|
--post_status=publish \
|
|
--meta_input="{\"_price\": \"99.99\", \"_stock\": \"30\"}" \
|
|
--allow-root
|
|
done
|
|
done
|
|
;;
|
|
|
|
stress)
|
|
echo "Creating stress test data..."
|
|
# Create many trainers and events for load testing
|
|
for i in {1..10}; do
|
|
docker-compose exec wordpress wp user create "stress_trainer_${i}" "stress${i}@example.com" \
|
|
--role=author --user_pass=SecurePass123! --allow-root
|
|
|
|
# Create many events per trainer
|
|
for j in {1..10}; do
|
|
EVENT_ID=$(docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_events \
|
|
--post_title="Stress Test Event ${i}-${j}" \
|
|
--post_content="Stress test training event ${j} by trainer ${i}." \
|
|
--post_status=publish \
|
|
--post_author="stress_trainer_${i}" \
|
|
--porcelain \
|
|
--allow-root)
|
|
|
|
START_DATE=$(date -v+${j}d '+%Y-%m-%d 10:00:00')
|
|
END_DATE=$(date -v+${j}d '+%Y-%m-%d 16:00:00')
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventStartDate "$START_DATE" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventEndDate "$END_DATE" --allow-root
|
|
docker-compose exec wordpress wp post meta update $EVENT_ID _EventVenueID "1" --allow-root
|
|
|
|
# Create multiple ticket types
|
|
for k in {1..3}; do
|
|
docker-compose exec wordpress wp post create \
|
|
--post_type=tribe_rsvp \
|
|
--post_title="Ticket Type ${k}" \
|
|
--post_parent=$EVENT_ID \
|
|
--post_status=publish \
|
|
--meta_input="{\"_price\": \"${k}9.99\", \"_stock\": \"${k}0\"}" \
|
|
--allow-root
|
|
done
|
|
done
|
|
done
|
|
;;
|
|
|
|
*)
|
|
echo -e "${RED}Error: Invalid test data type. Use 'basic', 'extended', or 'stress'${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo -e "${GREEN}Test data generation completed!${NC}"
|
|
}
|
|
|
|
# Function to cleanup test data
|
|
cleanup_test_data() {
|
|
echo "Cleaning up test data..."
|
|
|
|
# Remove test events
|
|
docker-compose exec wordpress wp post delete $(docker-compose exec wordpress wp post list --post_type=tribe_events --format=ids --allow-root) --force --allow-root
|
|
check_status "Event cleanup"
|
|
|
|
# Remove test tickets
|
|
docker-compose exec wordpress wp post delete $(docker-compose exec wordpress wp post list --post_type=tribe_rsvp --format=ids --allow-root) --force --allow-root
|
|
check_status "Ticket cleanup"
|
|
|
|
# Remove test users
|
|
docker-compose exec wordpress wp user delete $(docker-compose exec wordpress wp user list --role=author --format=ids --allow-root) --yes --allow-root
|
|
check_status "User cleanup"
|
|
|
|
echo -e "${GREEN}Test data cleanup completed!${NC}"
|
|
}
|
|
|
|
# Function to confirm action
|
|
confirm_action() {
|
|
if [ "$SKIP_CONFIRM" = true ]; then
|
|
return 0
|
|
fi
|
|
|
|
read -p "$1 [y/N] " -n 1 -r
|
|
echo
|
|
[[ $REPLY =~ ^[Yy]$ ]]
|
|
}
|
|
|
|
# Parse command line options
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
backup)
|
|
backup_dev_db
|
|
exit 0
|
|
;;
|
|
restore)
|
|
if [ -z "$2" ]; then
|
|
echo "Error: Please specify backup file to restore"
|
|
show_usage
|
|
exit 1
|
|
fi
|
|
restore_dev_db "$2"
|
|
exit 0
|
|
;;
|
|
reset)
|
|
if confirm_action "${YELLOW}Warning: This will delete all data in the development database. Continue?${NC}"; then
|
|
reset_dev_db
|
|
fi
|
|
exit 0
|
|
;;
|
|
generate-test-data)
|
|
shift
|
|
data_type=${1:-"basic"}
|
|
if confirm_action "Generate ${data_type} test data?"; then
|
|
generate_test_data "$data_type"
|
|
fi
|
|
exit 0
|
|
;;
|
|
cleanup-test-data)
|
|
if confirm_action "${YELLOW}Warning: This will remove all test data. Continue?${NC}"; then
|
|
cleanup_test_data
|
|
fi
|
|
exit 0
|
|
;;
|
|
-y|--yes)
|
|
SKIP_CONFIRM=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Error: Unknown command '$1'"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Show usage if no command provided
|
|
show_usage
|
|
exit 1 |