#!/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 "When running Hive for the first time, run the init function to create the" echo "default directories for data, config files and layout required." echo "./bin/hive admin init" 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"