Files
LLM_Engineering_OLD/week8/community_contributions/dkisselev-zz/tuxedo_link/deploy.sh
2025-10-29 02:10:53 -07:00

148 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo "=========================================="
echo " Tuxedo Link - Modal Deployment"
echo "=========================================="
echo ""
# Check Modal is installed
if ! command -v modal &> /dev/null; then
echo -e "${RED}Error: modal CLI not found${NC}"
echo "Install with: pip install modal"
exit 1
fi
# Check Modal auth
echo -e "${BLUE}Checking Modal authentication...${NC}"
if ! uv run python -m modal app list &>/dev/null; then
echo -e "${RED}Error: Modal authentication not configured${NC}"
echo "Run: uv run python -m modal setup"
exit 1
fi
echo -e "${GREEN}✓ Modal authenticated${NC}"
echo ""
# Check config.yaml exists
if [ ! -f "config.yaml" ]; then
echo -e "${RED}Error: config.yaml not found${NC}"
echo "Copy config.example.yaml to config.yaml and configure it"
exit 1
fi
echo -e "${BLUE}Step 1: Validating configuration...${NC}"
python -c "
import yaml
import sys
try:
config = yaml.safe_load(open('config.yaml'))
if config['deployment']['mode'] != 'production':
print('❌ Error: Set deployment.mode to \"production\" in config.yaml for deployment')
sys.exit(1)
print('✓ Configuration valid')
except Exception as e:
print(f'❌ Error reading config: {e}')
sys.exit(1)
"
if [ $? -ne 0 ]; then
exit 1
fi
echo ""
echo -e "${BLUE}Step 2: Setting up Modal secrets...${NC}"
# Check if required environment variables are set
if [ -z "$OPENAI_API_KEY" ] || [ -z "$PETFINDER_API_KEY" ] || [ -z "$MAILGUN_API_KEY" ]; then
echo -e "${YELLOW}Warning: Some environment variables are not set.${NC}"
echo "Make sure the following are set in your environment or .env file:"
echo " - OPENAI_API_KEY"
echo " - PETFINDER_API_KEY"
echo " - PETFINDER_SECRET"
echo " - RESCUEGROUPS_API_KEY"
echo " - MAILGUN_API_KEY"
echo " - SENDGRID_API_KEY (optional)"
echo ""
read -p "Continue anyway? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Load .env if it exists
if [ -f ".env" ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
modal secret create tuxedo-link-secrets \
OPENAI_API_KEY="${OPENAI_API_KEY}" \
PETFINDER_API_KEY="${PETFINDER_API_KEY}" \
PETFINDER_SECRET="${PETFINDER_SECRET}" \
RESCUEGROUPS_API_KEY="${RESCUEGROUPS_API_KEY}" \
MAILGUN_API_KEY="${MAILGUN_API_KEY}" \
SENDGRID_API_KEY="${SENDGRID_API_KEY:-}" \
--force 2>/dev/null || echo -e "${GREEN}✓ Secrets updated${NC}"
echo ""
echo -e "${BLUE}Step 3: Creating Modal volume...${NC}"
modal volume create tuxedo-link-data 2>/dev/null && echo -e "${GREEN}✓ Volume created${NC}" || echo -e "${GREEN}✓ Volume already exists${NC}"
echo ""
echo -e "${BLUE}Step 4: Copying config to Modal volume...${NC}"
# Create scripts directory if it doesn't exist
mkdir -p scripts
# Upload config.yaml to Modal volume
python scripts/upload_config_to_modal.py
echo ""
echo -e "${BLUE}Step 5: Deploying Modal API...${NC}"
modal deploy modal_services/modal_api.py
echo ""
echo -e "${BLUE}Step 6: Deploying scheduled search service...${NC}"
modal deploy modal_services/scheduled_search.py
echo ""
echo "=========================================="
echo -e " ${GREEN}Deployment Complete!${NC}"
echo "=========================================="
echo ""
echo "Deployed services:"
echo ""
echo "📡 Modal API (tuxedo-link-api):"
echo " - search_cats()"
echo " - extract_profile()"
echo " - create_alert_and_notify()"
echo " - get_alerts()"
echo " - update_alert()"
echo " - delete_alert()"
echo " - health_check()"
echo ""
echo "⏰ Scheduled Jobs (tuxedo-link-scheduled-search):"
echo " - daily_search_job (9 AM UTC daily)"
echo " - weekly_search_job (Monday 9 AM UTC)"
echo " - weekly_cleanup_job (Sunday 2 AM UTC)"
echo ""
echo "Useful commands:"
echo " API logs: modal app logs tuxedo-link-api --follow"
echo " Schedule logs: modal app logs tuxedo-link-scheduled-search --follow"
echo " View apps: modal app list"
echo " View volumes: modal volume list"
echo " View secrets: modal secret list"
echo ""
echo "Next steps:"
echo " 1. Run UI: ./run.sh"
echo " 2. Go to: http://localhost:7860"
echo " 3. Test search and alerts!"
echo "=========================================="