Rustelo/scripts/utils/build-examples.sh
Jesús Pérex 095fd89ff7
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
chore: add scripts
2025-07-07 23:53:50 +01:00

223 lines
6.3 KiB
Bash
Executable File

#!/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!"