141 lines
3.3 KiB
Bash
141 lines
3.3 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Development environment setup script
|
||
|
|
# Installs required tools and dependencies for development
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
|
|
|
||
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
||
|
|
source "$SCRIPT_DIR/../lib/common/validation.sh"
|
||
|
|
|
||
|
|
cd "$PROJECT_ROOT"
|
||
|
|
|
||
|
|
log_section "Development Environment Setup"
|
||
|
|
|
||
|
|
# Check for required commands
|
||
|
|
log_subsection "Checking dependencies"
|
||
|
|
|
||
|
|
REQUIRED_COMMANDS=(
|
||
|
|
"bash"
|
||
|
|
"git"
|
||
|
|
"docker"
|
||
|
|
"python3"
|
||
|
|
"node"
|
||
|
|
"npm"
|
||
|
|
)
|
||
|
|
|
||
|
|
MISSING_COMMANDS=()
|
||
|
|
|
||
|
|
for cmd in "${REQUIRED_COMMANDS[@]}"; do
|
||
|
|
if command_exists "$cmd"; then
|
||
|
|
log_success "$cmd is installed"
|
||
|
|
else
|
||
|
|
log_warn "$cmd is not installed"
|
||
|
|
MISSING_COMMANDS+=("$cmd")
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Optional tools
|
||
|
|
log_subsection "Checking optional tools"
|
||
|
|
|
||
|
|
OPTIONAL_COMMANDS=(
|
||
|
|
"shellcheck:Static analysis for shell scripts"
|
||
|
|
"shfmt:Shell script formatter"
|
||
|
|
"yamllint:YAML linter"
|
||
|
|
"terraform:Infrastructure as code"
|
||
|
|
"kubectl:Kubernetes CLI"
|
||
|
|
"az:Azure CLI"
|
||
|
|
)
|
||
|
|
|
||
|
|
for cmd_info in "${OPTIONAL_COMMANDS[@]}"; do
|
||
|
|
IFS=':' read -r cmd desc <<< "$cmd_info"
|
||
|
|
if command_exists "$cmd"; then
|
||
|
|
log_success "$cmd is installed"
|
||
|
|
else
|
||
|
|
log_info "$cmd is not installed (optional: $desc)"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Install shellcheck if missing
|
||
|
|
if ! command_exists shellcheck && command_exists apt-get; then
|
||
|
|
log_info "Installing shellcheck..."
|
||
|
|
sudo apt-get update
|
||
|
|
sudo apt-get install -y shellcheck
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Install shfmt if missing
|
||
|
|
if ! command_exists shfmt && command_exists go; then
|
||
|
|
log_info "Installing shfmt..."
|
||
|
|
go install mvdan.cc/sh/v3/cmd/shfmt@latest
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Setup pre-commit hooks
|
||
|
|
log_subsection "Setting up pre-commit hooks"
|
||
|
|
|
||
|
|
if [ -d ".git" ]; then
|
||
|
|
if [ ! -f ".git/hooks/pre-commit" ]; then
|
||
|
|
log_info "Creating pre-commit hook..."
|
||
|
|
cat > .git/hooks/pre-commit <<'EOF'
|
||
|
|
#!/usr/bin/env bash
|
||
|
|
# Pre-commit hook for code quality checks
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Run shellcheck on shell scripts
|
||
|
|
if command -v shellcheck &>/dev/null; then
|
||
|
|
git diff --cached --name-only --diff-filter=ACM | grep '\.sh$' | while read -r file; do
|
||
|
|
shellcheck "$file" || exit 1
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Run yamllint on YAML files
|
||
|
|
if command -v yamllint &>/dev/null; then
|
||
|
|
git diff --cached --name-only --diff-filter=ACM | grep -E '\.(yml|yaml)$' | while read -r file; do
|
||
|
|
yamllint "$file" || exit 1
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
EOF
|
||
|
|
chmod +x .git/hooks/pre-commit
|
||
|
|
log_success "Pre-commit hook created"
|
||
|
|
else
|
||
|
|
log_info "Pre-commit hook already exists"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Create .env.example if it doesn't exist
|
||
|
|
if [ ! -f ".env.example" ]; then
|
||
|
|
log_info "Creating .env.example..."
|
||
|
|
cat > .env.example <<'EOF'
|
||
|
|
# Environment Configuration
|
||
|
|
# Copy this file to .env and update with your values
|
||
|
|
|
||
|
|
# RPC Configuration
|
||
|
|
RPC_URL=http://localhost:8545
|
||
|
|
|
||
|
|
# Chain Configuration
|
||
|
|
CHAIN_ID=138
|
||
|
|
|
||
|
|
# Azure Configuration (if using Azure)
|
||
|
|
AZURE_SUBSCRIPTION_ID=
|
||
|
|
AZURE_RESOURCE_GROUP=
|
||
|
|
AZURE_LOCATION=westeurope
|
||
|
|
|
||
|
|
# Key Vault Configuration
|
||
|
|
KEY_VAULT_NAME=
|
||
|
|
|
||
|
|
# Deployment Configuration
|
||
|
|
ENVIRONMENT=development
|
||
|
|
EOF
|
||
|
|
log_success ".env.example created"
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_success "Development environment setup complete"
|
||
|
|
|
||
|
|
if [ ${#MISSING_COMMANDS[@]} -gt 0 ]; then
|
||
|
|
log_warn "Missing required commands: ${MISSING_COMMANDS[*]}"
|
||
|
|
log_info "Please install missing commands before continuing"
|
||
|
|
fi
|
||
|
|
|