Rustelo/rustelo-local.sh
Jesús Pérez 0d0297423e
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (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 / Cleanup (push) Has been cancelled
chore: fix with CI and pre-commit
2026-02-08 20:37:49 +00:00

309 lines
10 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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:-<default>}"
echo " RUSTELO_DEBUG_BINARY=${RUSTELO_DEBUG_BINARY:-<default>}"
echo " RUSTELO_RELEASE_BINARY=${RUSTELO_RELEASE_BINARY:-<auto-detected>}"
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 <command> [options]"
echo ""
echo "Commands:"
echo " init <name> [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 <command> --help"
;;
*)
print_error "Unknown command: $1"
echo "Run '$0 help' for usage information"
exit 1
;;
esac