#!/bin/bash # Rustelo Build Examples Script # This script demonstrates building the application with different feature combinations set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Function to print colored output print_color() { printf "${1}${2}${NC}\n" } # Function to print section header print_section() { echo "" print_color "$BLUE" "================================================" print_color "$BLUE" "$1" print_color "$BLUE" "================================================" } # Function to build with features build_with_features() { local name="$1" local features="$2" local description="$3" print_color "$YELLOW" "Building: $name" print_color "$YELLOW" "Features: $features" print_color "$YELLOW" "Description: $description" if [ -z "$features" ]; then cargo build --no-default-features --release else cargo build --release --features "$features" fi if [ $? -eq 0 ]; then print_color "$GREEN" "✓ Build successful" # Get binary size local binary_size=$(du -h target/release/server | cut -f1) print_color "$GREEN" "Binary size: $binary_size" else print_color "$RED" "✗ Build failed" exit 1 fi echo "" } # Function to clean build artifacts clean_build() { print_color "$YELLOW" "Cleaning build artifacts..." cargo clean print_color "$GREEN" "✓ Clean complete" } # Function to show help show_help() { echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " -h, --help Show this help message" echo " -c, --clean Clean build artifacts first" echo " -a, --all Build all example configurations" echo " -m, --minimal Build minimal configuration only" echo " -f, --full Build full-featured configuration only" echo " -p, --prod Build production configuration only" echo " -q, --quick Build common configurations only" echo "" echo "Examples:" echo " $0 --all Build all configurations" echo " $0 --minimal Build minimal setup" echo " $0 --clean Clean and build all" } # Parse command line arguments BUILD_ALL=false BUILD_MINIMAL=false BUILD_FULL=false BUILD_PROD=false BUILD_QUICK=false CLEAN_FIRST=false while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -c|--clean) CLEAN_FIRST=true shift ;; -a|--all) BUILD_ALL=true shift ;; -m|--minimal) BUILD_MINIMAL=true shift ;; -f|--full) BUILD_FULL=true shift ;; -p|--prod) BUILD_PROD=true shift ;; -q|--quick) BUILD_QUICK=true shift ;; *) print_color "$RED" "Unknown option: $1" show_help exit 1 ;; esac done # Default to build all if no specific option provided if [ "$BUILD_ALL" = false ] && [ "$BUILD_MINIMAL" = false ] && [ "$BUILD_FULL" = false ] && [ "$BUILD_PROD" = false ] && [ "$BUILD_QUICK" = false ]; then BUILD_ALL=true fi # Clean build artifacts if requested if [ "$CLEAN_FIRST" = true ]; then clean_build fi print_section "Rustelo Build Examples" # Check if we're in the right directory if [ ! -f "Cargo.toml" ]; then print_color "$RED" "Error: Cargo.toml not found. Please run this script from the project root." exit 1 fi # Build configurations if [ "$BUILD_MINIMAL" = true ] || [ "$BUILD_ALL" = true ]; then print_section "1. MINIMAL CONFIGURATION" build_with_features "Minimal Static Website" "" "Basic Leptos SSR with static content only" fi if [ "$BUILD_QUICK" = true ] || [ "$BUILD_ALL" = true ]; then print_section "2. TLS ONLY CONFIGURATION" build_with_features "Secure Static Website" "tls" "Static website with HTTPS support" fi if [ "$BUILD_QUICK" = true ] || [ "$BUILD_ALL" = true ]; then print_section "3. AUTHENTICATION ONLY CONFIGURATION" build_with_features "Authentication App" "auth" "User authentication without database content" fi if [ "$BUILD_QUICK" = true ] || [ "$BUILD_ALL" = true ]; then print_section "4. CONTENT MANAGEMENT ONLY CONFIGURATION" build_with_features "Content Management System" "content-db" "Database-driven content without authentication" fi if [ "$BUILD_FULL" = true ] || [ "$BUILD_ALL" = true ]; then print_section "5. FULL-FEATURED CONFIGURATION (DEFAULT)" build_with_features "Complete Web Application" "auth,content-db" "Authentication + Content Management" fi if [ "$BUILD_PROD" = true ] || [ "$BUILD_ALL" = true ]; then print_section "6. PRODUCTION CONFIGURATION" build_with_features "Production Ready" "tls,auth,content-db" "All features with TLS for production" fi if [ "$BUILD_ALL" = true ]; then print_section "7. SPECIALIZED CONFIGURATIONS" build_with_features "TLS + Auth" "tls,auth" "Secure authentication app" build_with_features "TLS + Content" "tls,content-db" "Secure content management" fi print_section "BUILD SUMMARY" # Show final binary sizes comparison print_color "$GREEN" "Build completed successfully!" print_color "$BLUE" "Binary location: target/release/server" if [ -f "target/release/server" ]; then print_color "$BLUE" "Final binary size: $(du -h target/release/server | cut -f1)" fi print_color "$YELLOW" "Next steps:" echo "1. Choose your configuration based on your needs" echo "2. Set up your .env file with appropriate settings" echo "3. Configure database if using auth or content-db features" echo "4. Run: ./target/release/server" print_section "CONFIGURATION QUICK REFERENCE" echo "Minimal (no database needed):" echo " cargo build --release --no-default-features" echo "" echo "With TLS (requires certificates):" echo " cargo build --release --features tls" echo "" echo "With Authentication (requires database):" echo " cargo build --release --features auth" echo "" echo "With Content Management (requires database):" echo " cargo build --release --features content-db" echo "" echo "Full Featured (default):" echo " cargo build --release" echo "" echo "Production (all features):" echo " cargo build --release --features \"tls,auth,content-db\"" print_color "$GREEN" "Build examples completed!"