Files
Job-Info/setup.sh
T
aewing 42ff3e8f33
Build & Deploy / Test & Lint (push) Has been cancelled
Build & Deploy / Security Scan (push) Has been cancelled
Code Quality / Code Quality Checks (push) Has been cancelled
Code Quality / Dependency Vulnerabilities (push) Has been cancelled
Code Quality / Performance Testing (push) Has been cancelled
Build & Deploy / Build Docker Images (push) Has been cancelled
Build & Deploy / Deploy to Kubernetes (push) Has been cancelled
Add Mode6Test: copy of Mode5Test running on port 3000
2026-01-20 13:43:29 +00:00

352 lines
9.4 KiB
Bash

#!/bin/bash
# Project Setup & Deployment Script
# Automates common tasks for Job Info application
set -e
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Functions
print_header() {
echo -e "${BLUE}╔════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} $1"
echo -e "${BLUE}╚════════════════════════════════════════════════════╝${NC}"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}!${NC} $1"
}
# Main menu
main_menu() {
print_header "Job Info - Project Setup & Deployment"
echo ""
echo "Select an option:"
echo " 1) Start Local Development (Backend + Frontend)"
echo " 2) Start Docker Compose (Containerized)"
echo " 3) Build Docker Images"
echo " 4) Deploy to Kubernetes"
echo " 5) Run Tests"
echo " 6) Build Production Bundle"
echo " 7) View Documentation"
echo " 8) Check System Status"
echo " 9) Clean Up (Remove containers/build artifacts)"
echo " 0) Exit"
echo ""
read -p "Enter your choice [0-9]: " choice
}
# Option 1: Start Local Development
start_local_dev() {
print_header "Starting Local Development"
# Check if Node.js and Bun are installed
if ! command -v bun &> /dev/null; then
print_error "Bun not found. Install from https://bun.sh"
return 1
fi
if ! command -v npm &> /dev/null; then
print_error "npm not found. Install Node.js"
return 1
fi
echo ""
echo "Starting backend and frontend servers..."
echo "Backend will run on http://localhost:3005"
echo "Frontend will run on http://localhost:5173"
echo ""
print_warning "You need TWO terminals for this"
echo ""
echo "Terminal 1 - Backend:"
echo " cd $PROJECT_DIR/Mode3Test"
echo " bun run dev"
echo ""
echo "Terminal 2 - Frontend:"
echo " cd $PROJECT_DIR/frontend"
echo " npm run dev"
echo ""
echo "Then open browser to: http://localhost:5173"
echo ""
read -p "Press Enter to open instructions in your default browser..."
}
# Option 2: Start Docker Compose
start_docker_compose() {
print_header "Starting Docker Compose"
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose not found. Install from https://docs.docker.com/"
return 1
fi
echo ""
cd "$PROJECT_DIR"
echo "Building containers..."
docker-compose build
echo ""
echo "Starting services..."
docker-compose up -d
print_success "Services started"
echo ""
echo "Checking status..."
docker-compose ps
echo ""
print_success "Application ready at http://localhost:5173"
echo ""
echo "To stop services: docker-compose down"
echo "To view logs: docker-compose logs -f"
}
# Option 3: Build Docker Images
build_docker_images() {
print_header "Building Docker Images"
if ! command -v docker &> /dev/null; then
print_error "Docker not found. Install from https://docs.docker.com/"
return 1
fi
echo ""
cd "$PROJECT_DIR"
echo "Building backend image..."
docker build -f Dockerfile.backend -t job-info-backend:latest .
print_success "Backend image built"
echo ""
echo "Building frontend image..."
docker build -f Dockerfile.frontend -t job-info-frontend:latest .
print_success "Frontend image built"
echo ""
echo "Images ready:"
docker images | grep job-info
}
# Option 4: Deploy to Kubernetes
deploy_kubernetes() {
print_header "Deploy to Kubernetes"
if ! command -v kubectl &> /dev/null; then
print_error "kubectl not found. Install from https://kubernetes.io/docs/"
return 1
fi
echo ""
read -p "Is your Kubernetes cluster configured? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
print_warning "Configure kubectl first"
return 1
fi
echo ""
cd "$PROJECT_DIR"
echo "Creating namespace and configs..."
kubectl apply -f k8s-config.yaml
print_success "Namespace and configs created"
echo ""
echo "Deploying backend..."
kubectl apply -f k8s-backend-deployment.yaml
print_success "Backend deployed"
echo ""
echo "Deploying frontend..."
kubectl apply -f k8s-frontend-deployment.yaml
print_success "Frontend deployed"
echo ""
echo "Checking deployment status..."
kubectl rollout status deployment/job-info-backend -n job-info
kubectl rollout status deployment/job-info-frontend -n job-info
echo ""
print_success "Deployment complete"
echo ""
echo "Get service IP:"
echo " kubectl get svc job-info-frontend -n job-info"
}
# Option 5: Run Tests
run_tests() {
print_header "Running Tests"
echo ""
echo "See PHASE_8_QUICK_START.md for detailed testing procedures"
echo ""
echo "23 Test scenarios covering:"
echo " 1. OAuth2 Flow (6 tests)"
echo " 2. Token Management (4 tests)"
echo " 3. API Error Handling (3 tests)"
echo " 4. Data Storage (2 tests)"
echo " 5. UI Components (2 tests)"
echo " 6. Performance (2 tests)"
echo " 7. Security (2 tests)"
echo " 8. Accessibility (2 tests)"
echo ""
echo "Estimated time: 2 hours 45 minutes"
}
# Option 6: Build Production Bundle
build_production() {
print_header "Building Production Bundle"
echo ""
cd "$PROJECT_DIR/frontend"
echo "Installing dependencies..."
npm ci
echo ""
echo "Building frontend..."
npm run build
print_success "Production build complete"
echo ""
echo "Output directory: frontend/dist/"
du -sh dist/
}
# Option 7: View Documentation
view_documentation() {
print_header "Documentation Available"
echo ""
echo "Quick References:"
echo " • QUICK_START.md - Get running in 2 minutes"
echo " • DELIVERABLES.md - Complete deliverables checklist"
echo ""
echo "Detailed Guides:"
echo " • PROJECT_COMPLETION_FINAL.md - Full project overview"
echo " • PHASE_8_QUICK_START.md - Testing procedures"
echo " • DEPLOYMENT_GUIDE.md - Deployment instructions"
echo ""
echo "Reference:"
echo " • TESTING_GUIDE.md - Complete test guide"
echo " • SVELTE_DEVELOPMENT_SYSTEM.md - Development standards"
echo ""
read -p "Open documentation? (y/n) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
if command -v xdg-open &> /dev/null; then
xdg-open PROJECT_COMPLETION_FINAL.md
elif command -v open &> /dev/null; then
open PROJECT_COMPLETION_FINAL.md
else
echo "Open manually: less PROJECT_COMPLETION_FINAL.md"
fi
fi
}
# Option 8: Check System Status
check_status() {
print_header "System Status"
echo ""
echo "Checking requirements:"
if command -v node &> /dev/null; then
print_success "Node.js: $(node --version)"
else
print_error "Node.js not found"
fi
if command -v bun &> /dev/null; then
print_success "Bun: $(bun --version)"
else
print_error "Bun not found"
fi
if command -v docker &> /dev/null; then
print_success "Docker: $(docker --version)"
else
print_warning "Docker not found (optional)"
fi
if command -v kubectl &> /dev/null; then
print_success "kubectl: $(kubectl version --client --short 2>/dev/null || echo 'installed')"
else
print_warning "kubectl not found (optional)"
fi
echo ""
echo "Checking project structure:"
[ -d "frontend" ] && print_success "frontend/" || print_error "frontend/ not found"
[ -d "Mode3Test" ] && print_success "Mode3Test/" || print_error "Mode3Test/ not found"
[ -f "docker-compose.yml" ] && print_success "docker-compose.yml" || print_error "docker-compose.yml not found"
[ -f "k8s-config.yaml" ] && print_success "k8s-config.yaml" || print_error "k8s-config.yaml not found"
}
# Option 9: Clean Up
cleanup() {
print_header "Clean Up"
echo ""
read -p "Remove Docker containers and volumes? (y/n) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker-compose down -v
print_success "Docker containers and volumes removed"
fi
echo ""
read -p "Remove build artifacts? (y/n) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf frontend/dist/
rm -rf frontend/node_modules/
rm -rf Mode3Test/node_modules/
print_success "Build artifacts removed"
fi
}
# Main loop
while true; do
main_menu
case $choice in
1) start_local_dev ;;
2) start_docker_compose ;;
3) build_docker_images ;;
4) deploy_kubernetes ;;
5) run_tests ;;
6) build_production ;;
7) view_documentation ;;
8) check_status ;;
9) cleanup ;;
0) print_success "Goodbye!"; exit 0 ;;
*) print_error "Invalid option" ;;
esac
echo ""
read -p "Press Enter to continue..."
echo ""
done