Files
stack/scripts/test-docker-deployment.sh
Jason Woltje 973502f26e feat(#37-41): Add domains, ideas, relationships, agents, widgets schema
Schema additions for issues #37-41:

New models:
- Domain (#37): Life domains (work, marriage, homelab, etc.)
- Idea (#38): Brain dumps with pgvector embeddings
- Relationship (#39): Generic entity linking (blocks, depends_on)
- Agent (#40): ClawdBot agent tracking with metrics
- AgentSession (#40): Conversation session tracking
- WidgetDefinition (#41): HUD widget registry
- UserLayout (#41): Per-user dashboard configuration

Updated models:
- Task, Event, Project: Added domainId foreign key
- User, Workspace: Added new relations

New enums:
- IdeaStatus: CAPTURED, PROCESSING, ACTIONABLE, ARCHIVED, DISCARDED
- RelationshipType: BLOCKS, BLOCKED_BY, DEPENDS_ON, etc.
- AgentStatus: IDLE, WORKING, WAITING, ERROR, TERMINATED
- EntityType: Added IDEA, DOMAIN

Migration: 20260129182803_add_domains_ideas_agents_widgets
2026-01-29 12:29:21 -06:00

222 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${YELLOW}$1${NC}"
}
# Function to check if a service is healthy
check_service_health() {
local service=$1
local max_retries=30
local retry=0
print_info "Waiting for $service to be healthy..."
while [ $retry -lt $max_retries ]; do
if docker compose ps --format json $service 2>/dev/null | grep -q '"Health":"healthy"'; then
print_success "$service is healthy"
return 0
elif docker compose ps --format json $service 2>/dev/null | grep -q '"State":"running"'; then
# Service is running but no health check defined
print_success "$service is running"
return 0
fi
retry=$((retry + 1))
sleep 2
done
print_error "$service failed to become healthy"
return 1
}
# Function to check HTTP endpoint
check_http_endpoint() {
local url=$1
local service_name=$2
local max_retries=15
local retry=0
print_info "Checking $service_name endpoint: $url"
while [ $retry -lt $max_retries ]; do
if curl -sf "$url" > /dev/null 2>&1; then
print_success "$service_name endpoint is accessible"
return 0
fi
retry=$((retry + 1))
sleep 2
done
print_error "$service_name endpoint is not accessible"
return 1
}
# Main test script
main() {
echo "=================================================="
echo " Mosaic Stack Docker Deployment Test"
echo "=================================================="
echo ""
# Check if Docker is running
print_info "Checking Docker..."
if ! docker info > /dev/null 2>&1; then
print_error "Docker is not running"
exit 1
fi
print_success "Docker is running"
# Check if docker-compose.yml exists
if [ ! -f "docker-compose.yml" ]; then
print_error "docker-compose.yml not found"
exit 1
fi
print_success "docker-compose.yml found"
# Check if .env exists, create from .env.example if not
if [ ! -f ".env" ]; then
print_info ".env not found, copying from .env.example"
cp .env.example .env
print_success ".env created from .env.example"
fi
# Clean up any existing containers
print_info "Cleaning up existing containers..."
docker compose down -v > /dev/null 2>&1 || true
print_success "Cleanup complete"
echo ""
echo "Starting core services..."
echo ""
# Start core services (no profiles)
print_info "Starting PostgreSQL, Valkey, API, and Web..."
docker compose up -d
# Wait a bit for services to initialize
sleep 5
# Check PostgreSQL
check_service_health "postgres" || exit 1
# Check Valkey
check_service_health "valkey" || exit 1
# Check API
check_service_health "api" || exit 1
# Check Web
check_service_health "web" || exit 1
echo ""
echo "Checking service endpoints..."
echo ""
# Check API health endpoint
check_http_endpoint "http://localhost:3001/health" "API" || exit 1
# Check Web
check_http_endpoint "http://localhost:3000" "Web" || exit 1
echo ""
echo "Checking service connectivity..."
echo ""
# Check PostgreSQL connectivity from API
print_info "Testing PostgreSQL connection from API..."
if docker compose exec -T api sh -c 'nc -zv postgres 5432' > /dev/null 2>&1; then
print_success "API can connect to PostgreSQL"
else
print_error "API cannot connect to PostgreSQL"
exit 1
fi
# Check Valkey connectivity from API
print_info "Testing Valkey connection from API..."
if docker compose exec -T api sh -c 'nc -zv valkey 6379' > /dev/null 2>&1; then
print_success "API can connect to Valkey"
else
print_error "API cannot connect to Valkey"
exit 1
fi
echo ""
echo "Checking Docker resources..."
echo ""
# Check volumes
print_info "Verifying volumes..."
if docker volume ls | grep -q "mosaic-postgres-data"; then
print_success "PostgreSQL volume created"
else
print_error "PostgreSQL volume missing"
exit 1
fi
if docker volume ls | grep -q "mosaic-valkey-data"; then
print_success "Valkey volume created"
else
print_error "Valkey volume missing"
exit 1
fi
# Check networks
print_info "Verifying networks..."
if docker network ls | grep -q "mosaic-internal"; then
print_success "Internal network created"
else
print_error "Internal network missing"
exit 1
fi
if docker network ls | grep -q "mosaic-public"; then
print_success "Public network created"
else
print_error "Public network missing"
exit 1
fi
echo ""
echo "=================================================="
print_success "All tests passed!"
echo "=================================================="
echo ""
echo "Services are running:"
echo " - Web: http://localhost:3000"
echo " - API: http://localhost:3001"
echo " - API Health: http://localhost:3001/health"
echo " - PostgreSQL: localhost:5432"
echo " - Valkey: localhost:6379"
echo ""
echo "To view logs:"
echo " docker compose logs -f"
echo ""
echo "To stop services:"
echo " docker compose down"
echo ""
echo "To stop and remove volumes:"
echo " docker compose down -v"
echo ""
}
# Run main function
main