#!/bin/bash # Lions Dev Client Deployment Script # This script deploys the Lions Dev application using lionsctl pipeline set -euo pipefail # Configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" LIONSCTL_PATH="${SCRIPT_DIR}/../lions-infrastructure-2025/lionsctl/lionsctl.exe" REPO_URL="https://git.lions.dev/lionsctl-bot/lionsctl-deployments" BRANCH="main" JAVA_VERSION=17 NOTIFICATION_EMAIL="gbanedahoud@gmail.com" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Logging functions log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Help function show_help() { cat << EOF Lions Dev Client Deployment Script Usage: $0 [OPTIONS] OPTIONS: -e, --environment Target environment (dev|staging|production) [default: production] -c, --cluster Target cluster (k1|k2) [default: k2 for production, k1 for dev/staging] -b, --branch Git branch to deploy [default: main] -m, --email Notification email [default: gbanedahoud@gmail.com] -j, --java-version Java version to use [default: 17] -h, --help Show this help message EXAMPLES: # Deploy to production (default) $0 # Deploy to staging $0 --environment staging # Deploy to development $0 --environment dev --cluster k1 # Deploy specific branch to production $0 --branch feature/new-design --environment production ENVIRONMENTS: - dev: Development environment on k1 cluster (dev.lions.dev) - staging: Staging environment on k1 cluster (staging.lions.dev) - production: Production environment on k2 cluster (lions.dev) EOF } # Parse command line arguments ENVIRONMENT="production" CLUSTER="" EMAIL="$NOTIFICATION_EMAIL" while [[ $# -gt 0 ]]; do case $1 in -e|--environment) ENVIRONMENT="$2" shift 2 ;; -c|--cluster) CLUSTER="$2" shift 2 ;; -b|--branch) BRANCH="$2" shift 2 ;; -m|--email) EMAIL="$2" shift 2 ;; -j|--java-version) JAVA_VERSION="$2" shift 2 ;; -h|--help) show_help exit 0 ;; *) log_error "Unknown option: $1" show_help exit 1 ;; esac done # Set default cluster based on environment if not specified if [[ -z "$CLUSTER" ]]; then case $ENVIRONMENT in production) CLUSTER="k2" ;; dev|staging) CLUSTER="k1" ;; *) log_error "Invalid environment: $ENVIRONMENT. Must be dev, staging, or production." exit 1 ;; esac fi # Validate inputs if [[ ! "$ENVIRONMENT" =~ ^(dev|staging|production)$ ]]; then log_error "Invalid environment: $ENVIRONMENT. Must be dev, staging, or production." exit 1 fi if [[ ! "$CLUSTER" =~ ^(k1|k2)$ ]]; then log_error "Invalid cluster: $CLUSTER. Must be k1 or k2." exit 1 fi # Check if lionsctl exists if [[ ! -f "$LIONSCTL_PATH" ]]; then log_error "lionsctl not found at: $LIONSCTL_PATH" log_info "Please build lionsctl first:" log_info " cd ../lions-infrastructure-2025/lionsctl && go build -o lionsctl.exe" exit 1 fi # Display deployment information log_info "🚀 Lions Dev Client Deployment" log_info "================================" log_info "Repository: $REPO_URL" log_info "Branch: $BRANCH" log_info "Environment: $ENVIRONMENT" log_info "Cluster: $CLUSTER" log_info "Java Version: $JAVA_VERSION" log_info "Email: $EMAIL" log_info "================================" # Confirm deployment if [[ "$ENVIRONMENT" == "production" ]]; then log_warning "⚠️ You are about to deploy to PRODUCTION!" log_warning "This will affect the live Lions Dev website at https://lions.dev" read -p "Are you sure you want to continue? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then log_info "Deployment cancelled." exit 0 fi fi # Execute deployment log_info "🔄 Starting deployment..." "$LIONSCTL_PATH" pipeline \ --url "$REPO_URL" \ --branch "$BRANCH" \ --java-version "$JAVA_VERSION" \ --environment "$ENVIRONMENT" \ --cluster "$CLUSTER" \ --mail "$EMAIL" \ --verbose DEPLOYMENT_STATUS=$? if [[ $DEPLOYMENT_STATUS -eq 0 ]]; then log_success "🎉 Deployment completed successfully!" case $ENVIRONMENT in production) log_success "✅ Lions Dev is now live at: https://lions.dev" ;; staging) log_success "✅ Staging environment is available at: https://staging.lions.dev" ;; dev) log_success "✅ Development environment is available at: https://dev.lions.dev" ;; esac log_info "📊 You can monitor the deployment at:" log_info " - Kubernetes Dashboard: https://k8s.lions.dev" log_info " - Grafana Monitoring: https://grafana.lions.dev" log_info " - Application Logs: kubectl logs -n lions-apps -l app=lionsdev-client" else log_error "❌ Deployment failed with exit code: $DEPLOYMENT_STATUS" log_info "🔍 Check the logs above for error details" log_info "📧 A notification email has been sent to: $EMAIL" exit $DEPLOYMENT_STATUS fi