#!/usr/bin/env nu # Native execution script for Provisioning Platform services # Run services directly on macOS without Docker const PLATFORM_ROOT = "/Users/Akasha/project-provisioning/provisioning/platform" # Service configuration const SERVICES = { orchestrator: { name: "Orchestrator" port: 8080 build_path: "orchestrator" binary: "provisioning-orchestrator" log_file: "~/.provisioning-platform/logs/orchestrator.log" } control_center: { name: "Control Center" port: 8081 build_path: "control-center" binary: "control-center" log_file: "~/.provisioning-platform/logs/control-center.log" } } # Build all services def "main build" [] { print $"šŸ”Ø Building all services from ($PLATFORM_ROOT)...\n" cd $PLATFORM_ROOT # Build workspace print "šŸ“¦ Building Rust workspace (all services)..." cargo build --release if $env.LAST_EXIT_CODE != 0 { print "āŒ Build failed!" return } print "\nāœ… All services built successfully!" print $" Binaries: ($PLATFORM_ROOT)/target/release/\n" } # Start a specific service def "main start" [ service: string # Service name (orchestrator, control_center) --background (-b) # Run in background ] { let service_config = ($SERVICES | get $service) print $"šŸš€ Starting ($service_config.name)..." # Ensure binary exists let binary_path = $"($PLATFORM_ROOT)/target/release/($service_config.binary)" if not ($binary_path | path exists) { print $"āŒ Binary not found: ($binary_path)" print " Run 'nu run-native.nu build' first" return } # Create log directory let log_dir = ($service_config.log_file | path dirname | path expand) mkdir $log_dir # Set environment variables $env.RUST_LOG = "info" $env.DATA_DIR = $"~/.provisioning-platform/data/($service)" | path expand # Create data directory mkdir $env.DATA_DIR if $background { # Background execution print $" Running in background [logs: ($service_config.log_file)]" ^$binary_path out> ($service_config.log_file | path expand) err> ($service_config.log_file | path expand) & print $" Service started on port ($service_config.port)" print $" Check logs: tail -f ($service_config.log_file | path expand)" } else { # Foreground execution print $" Running in foreground (Ctrl+C to stop)" print $" Port: ($service_config.port)\n" ^$binary_path } } # Start all services def "main start-all" [ --background (-b) # Run in background ] { print "šŸš€ Starting all services...\n" # Start orchestrator first (dependency) main start orchestrator --background sleep 2sec # Start control-center main start control_center --background print "\nāœ… All services started!" print " Orchestrator: http://localhost:8080" print " Control Center: http://localhost:8081\n" if not $background { print "Press Ctrl+C to stop all services" sleep 1000day # Keep alive } } # Stop a specific service def "main stop" [ service: string # Service name ] { let service_config = ($SERVICES | get $service) print $"šŸ›‘ Stopping ($service_config.name)..." # Find and kill process by binary name let pids = (ps | where name =~ $service_config.binary | get pid) if ($pids | is-empty) { print $" No running ($service_config.name) found" } else { $pids | each {|pid| kill -9 $pid print $" Stopped process ($pid)" } print $"āœ… ($service_config.name) stopped" } } # Stop all services def "main stop-all" [] { print "šŸ›‘ Stopping all services...\n" main stop control_center main stop orchestrator print "\nāœ… All services stopped!" } # Show status of services def "main status" [] { print "šŸ“Š Service Status:\n" for service in ($SERVICES | columns) { let service_config = ($SERVICES | get $service) let pids = (ps | where name =~ $service_config.binary) if ($pids | is-empty) { print $" āŒ ($service_config.name): Not running" } else { let pid = ($pids | first | get pid) print $" āœ… ($service_config.name): Running \(PID: ($pid), Port: ($service_config.port)\)" } } print "" } # Show logs for a service def "main logs" [ service: string # Service name --follow (-f) # Follow log output ] { let service_config = ($SERVICES | get $service) let log_path = ($service_config.log_file | path expand) if not ($log_path | path exists) { print $"āŒ No log file found: ($log_path)" return } if $follow { print $"šŸ“œ Following logs for ($service_config.name) \(Ctrl+C to stop\)...\n" tail -f $log_path } else { print $"šŸ“œ Latest logs for ($service_config.name):\n" tail -n 50 $log_path } } # Check health of services def "main health" [] { print "šŸ„ Health Check:\n" # Check orchestrator try { let health = (http get http://localhost:8080/health) print $" āœ… Orchestrator: Healthy" } catch { print $" āŒ Orchestrator: Not responding" } # Check control-center try { let health = (http get http://localhost:8081/health) print $" āœ… Control Center: Healthy" } catch { print $" āŒ Control Center: Not responding" } print "" } # Show help def "main help" [] { print "Provisioning Platform - Native Execution\n" print "Usage: nu run-native.nu [options]\n" print "Commands:" print " build Build all services" print " start Start a service (orchestrator|control_center)" print " start-all Start all services" print " stop Stop a service" print " stop-all Stop all services" print " status Show service status" print " logs Show service logs" print " health Check service health" print " help Show this help\n" print "Examples:" print " nu run-native.nu build" print " nu run-native.nu start orchestrator --background" print " nu run-native.nu start-all" print " nu run-native.nu logs orchestrator --follow" print " nu run-native.nu stop-all\n" } # Main entry point def main [] { main help }