#!/bin/bash # ServerManager Pro - Production Build for Linux & Windows # Version: 2.0.0 set -e # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' APP_NAME="ServerManager Pro" VERSION=$(node -p "require('./package.json').version") echo -e "${BLUE}=== $APP_NAME - Production Build ===${NC}" echo -e "${GREEN}Version: $VERSION${NC}" echo "======================================" print_status() { echo -e "${BLUE}[$(date +%H:%M:%S)]${NC} $1"; } print_success() { echo -e "${GREEN}✅ $1${NC}"; } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; } print_error() { echo -e "${RED}❌ $1${NC}"; } # Check environment check_environment() { print_status "Checking environment..." if [ ! -f "package.json" ]; then print_error "package.json not found. Run from project root." exit 1 fi if ! command -v node >/dev/null; then print_error "Node.js not installed" exit 1 fi print_success "Environment check passed" } # Clean builds clean_builds() { print_status "Cleaning previous builds..." rm -rf build dist print_success "Clean completed" } # Install dependencies install_deps() { print_status "Installing dependencies..." if [ ! -d "node_modules" ]; then npm install else npm install fi print_success "Dependencies installed" } # Build React app build_react() { print_status "Building React application..." npm run build if [ ! -d "build" ]; then print_error "React build failed" exit 1 fi print_success "React app built" } # Create icon if missing create_icon() { if [ ! -f "public/icon.png" ]; then print_status "Creating application icon..." if command -v convert >/dev/null; then convert -size 512x512 gradient:blue-darkblue -pointsize 100 -fill white -gravity center -annotate +0+0 "SM" public/icon.png print_success "Icon created" else print_warning "ImageMagick not available - using default icon" fi fi } # Build Linux package build_linux() { print_status "Building Linux package (.deb)..." npx electron-builder --linux deb if ls dist/*.deb >/dev/null 2>&1; then DEB_FILE=$(ls dist/*.deb | head -1) print_success "Linux package: $(basename $DEB_FILE) ($(du -h $DEB_FILE | cut -f1))" return 0 else print_error "Linux package build failed" return 1 fi } # Build Windows package build_windows() { print_status "Building Windows package (.exe)..." npx electron-builder --win if ls dist/*.exe >/dev/null 2>&1; then EXE_FILE=$(ls dist/*.exe | head -1) print_success "Windows package: $(basename $EXE_FILE) ($(du -h $EXE_FILE | cut -f1))" return 0 else print_error "Windows package build failed" return 1 fi } # Generate report generate_report() { echo "" echo -e "${GREEN}=== BUILD COMPLETE ===${NC}" echo "Version: $VERSION" echo "Build date: $(date)" echo "" echo -e "${BLUE}Generated Packages:${NC}" # Linux packages if ls dist/*.deb >/dev/null 2>&1; then echo -e " 🐧 Linux (.deb):" ls dist/*.deb | while read file; do echo " 📦 $(basename $file) ($(du -h "$file" | cut -f1))" done else echo -e " 🐧 Linux: ❌ Not built" fi # Windows packages if ls dist/*.exe >/dev/null 2>&1; then echo -e " 🪟 Windows (.exe):" ls dist/*.exe | while read file; do echo " 📦 $(basename $file) ($(du -h "$file" | cut -f1))" done else echo -e " 🪟 Windows: ❌ Not built" fi echo "" echo -e "${GREEN}Installation Instructions:${NC}" echo " Linux: sudo dpkg -i dist/*.deb" echo " Windows: Run the .exe file as Administrator" echo "" echo -e "${YELLOW}Next Steps:${NC}" echo " • Test the application on both platforms" echo " • Use IT" } # Main build process main() { local platform=${1:-all} case $platform in "linux") check_environment clean_builds install_deps create_icon build_react build_linux ;; "windows") check_environment clean_builds install_deps create_icon build_react build_windows ;; "all"|*) check_environment clean_builds install_deps create_icon build_react build_linux build_windows ;; esac generate_report } main "$@"