#!/bin/bash # Rustelo Local Development Helper Script # This script sets up the environment for local template development # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Get the directory where this script is located SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Set the default template source to the local templates TEMPLATES_DIR="${RUSTELO_TEMPLATES_DIR:-$SCRIPT_DIR/templates}" # Function to print colored output print_info() { echo -e "${BLUE}ℹ️ $1${NC}" } print_success() { echo -e "${GREEN}✅ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } # Check if templates directory exists if [ ! -d "$TEMPLATES_DIR" ]; then print_error "Templates directory not found: $TEMPLATES_DIR" echo "Please ensure you're running this script from the rustelo repository root." exit 1 fi # Check if templates.json exists if [ ! -f "$TEMPLATES_DIR/templates.json" ]; then print_error "templates.json not found in $TEMPLATES_DIR" echo "The templates directory appears to be incomplete." exit 1 fi # Set RUSTELO_ASSET_SOURCE if not already set export RUSTELO_ASSET_SOURCE="${RUSTELO_ASSET_SOURCE:-$TEMPLATES_DIR}" print_success "Local development environment configured!" print_info "Using templates from: $TEMPLATES_DIR" if [ "$RUSTELO_ASSET_SOURCE" != "$TEMPLATES_DIR" ]; then print_info "RUSTELO_ASSET_SOURCE overridden to: $RUSTELO_ASSET_SOURCE" fi echo "" # Determine which rustelo binary to use DEBUG_BINARY="${RUSTELO_DEBUG_BINARY:-$SCRIPT_DIR/target/debug/cargo-rustelo}" RELEASE_INSTALLED="${RUSTELO_RELEASE_BINARY:-$(command -v cargo-rustelo 2>/dev/null || true)}" # Function to get the appropriate rustelo command get_rustelo_cmd() { local command_type="$1" case "$command_type" in "production"|"release"|"install") # Use installed cargo rustelo for production tasks if [ -n "$RELEASE_INSTALLED" ]; then echo "cargo rustelo" elif [ -x "$DEBUG_BINARY" ]; then print_warning "Using debug binary for production command. Consider installing: cargo install --path crates/rustelo-cli" echo "$DEBUG_BINARY" else print_error "No rustelo binary available. Build with: cargo build" return 1 fi ;; "dev"|"test"|"debug") # Use debug binary for development and testing (latest changes) if [ -x "$DEBUG_BINARY" ]; then echo "$DEBUG_BINARY" elif [ -n "$RELEASE_INSTALLED" ]; then print_info "Debug binary not found, using installed cargo rustelo" echo "cargo rustelo" else print_error "No rustelo binary available. Build with: cargo build --bin cargo-rustelo" return 1 fi ;; *) # Default: prefer debug for local development, fallback to installed if [ -x "$DEBUG_BINARY" ]; then echo "$DEBUG_BINARY" elif [ -n "$RELEASE_INSTALLED" ]; then echo "cargo rustelo" else print_error "No rustelo binary available. Build with: cargo build --bin cargo-rustelo" return 1 fi ;; esac } # Check binary availability and provide guidance if [ -x "$DEBUG_BINARY" ]; then print_success "Debug binary available: $DEBUG_BINARY" else print_info "Debug binary not found. Build with: cargo build --bin cargo-rustelo" fi if [ -n "$RELEASE_INSTALLED" ]; then print_success "Release binary installed: $RELEASE_INSTALLED" else print_info "Release binary not installed. Install with: cargo install --path crates/rustelo-cli" fi echo "" # Handle commands case "$1" in init) shift RUSTELO_CMD=$(get_rustelo_cmd "dev") if [ $? -ne 0 ]; then exit 1; fi print_info "Creating new Rustelo project with local templates..." echo "Running: $RUSTELO_CMD init $@" echo "" $RUSTELO_CMD init "$@" ;; update) shift RUSTELO_CMD=$(get_rustelo_cmd "dev") if [ $? -ne 0 ]; then exit 1; fi print_info "Updating Rustelo project with local templates..." echo "Running: $RUSTELO_CMD update $@" $RUSTELO_CMD update "$@" ;; features) shift RUSTELO_CMD=$(get_rustelo_cmd "dev") if [ $? -ne 0 ]; then exit 1; fi print_info "Managing features with local configuration..." echo "Running: $RUSTELO_CMD features $@" $RUSTELO_CMD features "$@" ;; assets) shift RUSTELO_CMD=$(get_rustelo_cmd "dev") if [ $? -ne 0 ]; then exit 1; fi print_info "Managing assets with local source..." echo "Running: $RUSTELO_CMD assets $@" $RUSTELO_CMD assets "$@" ;; test) # Quick test to verify templates are accessible RUSTELO_CMD=$(get_rustelo_cmd "test") if [ $? -ne 0 ]; then exit 1; fi print_info "Testing template discovery with debug binary..." echo "Running: $RUSTELO_CMD init (test project)" echo "" # Create a temporary test project TEST_DIR="/tmp/rustelo-test-$$" $RUSTELO_CMD init "$TEST_DIR" --template minimal if [ $? -eq 0 ]; then print_success "Template system is working correctly!" rm -rf "$TEST_DIR" else print_error "Template system test failed" fi ;; list) # List available templates print_info "Available templates in $TEMPLATES_DIR:" echo "" if command -v jq &> /dev/null; then jq -r '.[] | " \(.icon // "📦") \(.name) - \(.description)"' "$TEMPLATES_DIR/templates.json" else echo " Install 'jq' for formatted template listing" echo " Templates defined in: $TEMPLATES_DIR/templates.json" fi ;; env) # Show current environment print_info "Current Rustelo environment:" echo " RUSTELO_ASSET_SOURCE=$RUSTELO_ASSET_SOURCE" echo " RUSTELO_TEMPLATES_DIR=${RUSTELO_TEMPLATES_DIR:-}" echo " RUSTELO_DEBUG_BINARY=${RUSTELO_DEBUG_BINARY:-}" echo " RUSTELO_RELEASE_BINARY=${RUSTELO_RELEASE_BINARY:-}" echo "" echo " Templates directory: $TEMPLATES_DIR" echo " Script directory: $SCRIPT_DIR" echo "" # Check for other relevant environment variables if [ ! -z "$RUST_LOG" ]; then echo " RUST_LOG=$RUST_LOG" fi echo "" echo "Binary Selection:" if [ -x "$DEBUG_BINARY" ]; then echo " Debug: $DEBUG_BINARY (preferred for dev/test)" else echo " Debug: Not available - run 'cargo build --bin cargo-rustelo'" fi if [ -n "$RELEASE_INSTALLED" ]; then echo " Release: $RELEASE_INSTALLED (preferred for production)" else echo " Release: Not installed - run 'cargo install --path crates/rustelo-cli'" fi ;; build) # Build the debug binary for local development print_info "Building debug binary for local development..." echo "Running: cargo build --bin cargo-rustelo" echo "" cargo build --bin cargo-rustelo if [ $? -eq 0 ]; then print_success "Debug binary built successfully!" print_info "Binary location: $DEBUG_BINARY" else print_error "Build failed" fi ;; install) # Install release binary for production use RUSTELO_CMD=$(get_rustelo_cmd "production") print_info "Installing release binary for production use..." echo "Running: cargo install --path crates/rustelo-cli" echo "" cargo install --path crates/rustelo-cli if [ $? -eq 0 ]; then print_success "Release binary installed successfully!" print_info "Now available as: cargo rustelo" else print_error "Installation failed" fi ;; help|--help|-h|"") echo "Rustelo Local Development Helper" echo "" echo "This script configures the environment to use local templates" echo "from: $TEMPLATES_DIR" echo "" echo "Usage: $0 [options]" echo "" echo "Commands:" echo " init [opts] Create a new project with local templates (uses debug binary)" echo " update [opts] Update a project using local templates (uses debug binary)" echo " features [opts] Manage features with local configuration (uses debug binary)" echo " assets [opts] Manage assets with local source (uses debug binary)" echo " test Test that local templates are working (uses debug binary)" echo " list List available local templates" echo " env Show current environment and binary settings" echo " build Build debug binary for local development" echo " install Install release binary for production use" echo " help Show this help message" echo "" echo "Binary Selection Logic:" echo " • Development commands (init, update, features, assets, test) prefer debug binary" echo " • Production commands (install) prefer release binary" echo " • Debug binary: faster iteration, includes latest changes" echo " • Release binary: optimized, suitable for production workflows" echo "" echo "Environment Variables (optional overrides):" echo " RUSTELO_ASSET_SOURCE - Override template source directory" echo " RUSTELO_TEMPLATES_DIR - Override local templates directory" echo " RUSTELO_DEBUG_BINARY - Override debug binary path" echo " RUSTELO_RELEASE_BINARY - Override release binary path" echo "" echo "Examples:" echo " $0 init my-app" echo " $0 init my-app --template enterprise" echo " $0 test" echo " $0 list" echo "" echo "For more options, use: cargo rustelo --help" ;; *) print_error "Unknown command: $1" echo "Run '$0 help' for usage information" exit 1 ;; esac