#!/bin/bash # Hive Platform Development Environment Setup # This script sets up a complete development environment for the Hive platform set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" MULGA_ROOT="$(cd "$PROJECT_ROOT/.." && pwd)" # Default configuration NATS_PORT=4222 PREDASTORE_PORT=8443 HIVE_GATEWAY_PORT=9999 DATA_DIR="$HOME/hive" # Use CONFIG_DIR environment variable if set, otherwise default to ~/hive/config CONFIG_DIR="${CONFIG_DIR:-$HOME/hive/config}" echo "๐Ÿš€ Setting up Hive development environment..." echo "Project root: $PROJECT_ROOT" echo "Data directory: $DATA_DIR" # Create necessary directories mkdir -p "$DATA_DIR"/{nats,predastore,viperblock,logs,hive} mkdir -p "$CONFIG_DIR" # Function to check if command exists command_exists() { command -v "$1" >/dev/null 2>&1 } # Function to check if port is available port_available() { ! nc -z localhost "$1" 2>/dev/null } # Check dependencies echo "๐Ÿ” Checking dependencies..." # Check for required commands required_commands=("go" "make") for cmd in "${required_commands[@]}"; do if command_exists "$cmd"; then echo "โœ… $cmd found" else echo "โŒ $cmd not found. Please install $cmd" case "$cmd" in "go") echo " Install Go: https://golang.org/dl/" ;; esac fi done # Check optional commands optional_commands=("air" "nbdkit") for cmd in "${optional_commands[@]}"; do if command_exists "$cmd"; then echo "โœ… $cmd found (optional)" else echo "โš ๏ธ $cmd not found (optional)" case "$cmd" in "air") echo " Install air for hot reloading: go install github.com/cosmtrek/air@latest" ;; "nbdkit") echo " Install nbdkit: sudo apt-get install nbdkit (Ubuntu/Debian)" ;; esac fi done # Check component repositories echo "" echo "๐Ÿ“ฆ Checking component repositories..." components=("viperblock" "predastore") for component in "${components[@]}"; do component_path="$MULGA_ROOT/$component" if [[ -d "$component_path" ]]; then echo "โœ… $component found at $component_path" if [[ -f "$component_path/go.mod" ]]; then echo " Go module verified" else echo " โš ๏ธ No go.mod found in $component" fi else echo "โŒ $component not found at $component_path" echo " Run: ./scripts/clone-deps.sh" fi done # Check port availability echo "" echo "๐Ÿ”Œ Checking port availability..." ports=("$NATS_PORT:NATS" "$PREDASTORE_PORT:Predastore" "$HIVE_GATEWAY_PORT:Hive Gateway") for port_info in "${ports[@]}"; do port="${port_info%:*}" service="${port_info#*:}" if port_available "$port"; then echo "โœ… Port $port available for $service" else echo "โš ๏ธ Port $port already in use (needed for $service)" fi done # Build Hive first (needed for admin init) echo "" echo "๐Ÿ”จ Building Hive..." cd "$PROJECT_ROOT" make build echo "โœ… Hive built successfully" # Initialize Hive configuration using admin init echo "" echo "๐Ÿ” Initializing Hive configuration..." if [[ ! -f "$CONFIG_DIR/hive.toml" ]]; then echo "๐Ÿ“‹ Running hive admin init..." ./bin/hive admin init --config-dir "$CONFIG_DIR" echo "โœ… Hive configuration initialized" else echo "โœ… Hive configuration already exists" echo " To re-initialize, run: ./bin/hive admin init --force" fi # Build components echo "" echo "๐Ÿ”จ Building components..." # Build Viperblock if [[ -d "$MULGA_ROOT/viperblock" ]]; then echo "๐Ÿ“ฆ Building Viperblock..." cd "$MULGA_ROOT/viperblock" make build echo "โœ… Viperblock built successfully" else echo "โš ๏ธ Viperblock directory not found, skipping build" fi # Build Predastore if [[ -d "$MULGA_ROOT/predastore" ]]; then echo "๐Ÿ“ฆ Building Predastore..." cd "$MULGA_ROOT/predastore" make build echo "โœ… Predastore built successfully" else echo "โš ๏ธ Predastore directory not found, skipping build" fi echo "" echo "๐ŸŽ‰ Development environment setup complete!" echo "" echo "๐Ÿš€ To start the development environment:" echo " ./scripts/start-dev.sh" echo "" echo "๐Ÿ›‘ To stop the development environment:" echo " ./scripts/stop-dev.sh" echo "" echo "๐Ÿ”ง Development endpoints:" echo " - Hive Gateway: https://localhost:$HIVE_GATEWAY_PORT" echo " - Predastore S3: https://localhost:$PREDASTORE_PORT" echo " - NATS: nats://localhost:$NATS_PORT" echo "" echo "๐Ÿ“Š Monitor logs:" echo " tail -f $DATA_DIR/logs/*.log" echo "" echo "๐Ÿงช Test with AWS CLI:" echo " aws --endpoint-url https://localhost:$HIVE_GATEWAY_PORT --no-verify-ssl ec2 describe-instances"