Files
aitbc/scripts/deploy-developer-ecosystem.sh
oib 864ef4343e refactor(contracts): remove deprecated AIPowerRental contract in favor of bounty system
- Delete AIPowerRental.sol (566 lines) - replaced by AgentBounty.sol
- Remove rental agreement system with provider/consumer model
- Remove performance metrics and SLA tracking
- Remove dispute resolution mechanism
- Remove ZK-proof verification for performance
- Remove provider/consumer authorization system
- Bounty system provides superior developer incentive structure
2026-02-27 21:46:54 +01:00

534 lines
15 KiB
Bash
Executable File

#!/usr/bin/env bash
# AITBC Developer Ecosystem Complete Deployment Orchestration
# Deploys the entire Developer Ecosystem system (contracts + frontend + API)
#
# Usage: ./deploy-developer-ecosystem.sh [environment] [skip-tests]
# Environment: testnet, mainnet
# Skip-Tests: true/false - whether to skip integration tests
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Parse arguments
ENVIRONMENT="${1:-testnet}"
SKIP_TESTS="${2:-false}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
echo "🚀 AITBC Developer Ecosystem Complete Deployment"
echo "==============================================="
echo "Environment: $ENVIRONMENT"
echo "Skip Tests: $SKIP_TESTS"
echo "Root Directory: $ROOT_DIR"
echo ""
# Deployment phases
PHASES=("contracts" "frontend" "api" "integration-tests" "monitoring")
# Check prerequisites
check_prerequisites() {
print_status "Checking deployment prerequisites..."
# Check if required directories exist
if [[ ! -d "$ROOT_DIR/contracts" ]]; then
print_error "Contracts directory not found"
exit 1
fi
if [[ ! -d "$ROOT_DIR/apps/marketplace-web" ]]; then
print_error "Frontend directory not found"
exit 1
fi
# Check if required scripts exist
if [[ ! -f "$ROOT_DIR/contracts/scripts/deploy-developer-ecosystem.sh" ]]; then
print_error "Contract deployment script not found"
exit 1
fi
if [[ ! -f "$ROOT_DIR/apps/marketplace-web/scripts/deploy-frontend.sh" ]]; then
print_error "Frontend deployment script not found"
exit 1
fi
# Check SSH connection for frontend deployment
if ! ssh -o ConnectTimeout=5 aitbc-cascade "echo 'SSH connection successful'" 2>/dev/null; then
print_warning "Cannot connect to frontend server. Frontend deployment will be skipped."
SKIP_FRONTEND=true
else
SKIP_FRONTEND=false
fi
print_success "Prerequisites check completed"
}
# Phase 1: Deploy Smart Contracts
deploy_contracts() {
print_status "Phase 1: Deploying Smart Contracts"
echo "====================================="
cd "$ROOT_DIR/contracts"
# Run contract deployment
if ./scripts/deploy-developer-ecosystem.sh "$ENVIRONMENT" "true"; then
print_success "Smart contracts deployed successfully"
# Copy deployment info to root directory
if [[ -f "deployed-contracts-$ENVIRONMENT.json" ]]; then
cp "deployed-contracts-$ENVIRONMENT.json" "$ROOT_DIR/"
print_success "Contract deployment info copied to root directory"
fi
else
print_error "Smart contract deployment failed"
return 1
fi
echo ""
}
# Phase 2: Deploy Frontend
deploy_frontend() {
if [[ "$SKIP_FRONTEND" == "true" ]]; then
print_warning "Skipping frontend deployment (SSH connection failed)"
return 0
fi
print_status "Phase 2: Deploying Frontend"
echo "============================"
cd "$ROOT_DIR/apps/marketplace-web"
# Update environment variables with contract addresses
update_frontend_env
# Build and deploy frontend
if ./scripts/deploy-frontend.sh "production" "aitbc-cascade"; then
print_success "Frontend deployed successfully"
else
print_error "Frontend deployment failed"
return 1
fi
echo ""
}
# Update frontend environment variables
update_frontend_env() {
print_status "Updating frontend environment variables..."
local deployment_file="$ROOT_DIR/deployed-contracts-$ENVIRONMENT.json"
if [[ ! -f "$deployment_file" ]]; then
print_error "Contract deployment file not found: $deployment_file"
return 1
fi
# Extract contract addresses
local aitbc_token=$(jq -r '.contracts.AITBCToken.address' "$deployment_file")
local agent_bounty=$(jq -r '.contracts.AgentBounty.address' "$deployment_file")
local agent_staking=$(jq -r '.contracts.AgentStaking.address' "$deployment_file")
local performance_verifier=$(jq -r '.contracts.PerformanceVerifier.address' "$deployment_file")
local dispute_resolution=$(jq -r '.contracts.DisputeResolution.address' "$deployment_file")
local escrow_service=$(jq -r '.contracts.EscrowService.address' "$deployment_file")
# Create .env.local file
cat > .env.local << EOF
# AITBC Developer Ecosystem - Frontend Environment
# Generated on $(date -Iseconds)
# Contract Addresses
VITE_AITBC_TOKEN_ADDRESS=$aitbc_token
VITE_AGENT_BOUNTY_ADDRESS=$agent_bounty
VITE_AGENT_STAKING_ADDRESS=$agent_staking
VITE_PERFORMANCE_VERIFIER_ADDRESS=$performance_verifier
VITE_DISPUTE_RESOLUTION_ADDRESS=$dispute_resolution
VITE_ESCROW_SERVICE_ADDRESS=$escrow_service
# API Configuration
VITE_API_BASE_URL=http://localhost:3001/api/v1
VITE_WS_URL=ws://localhost:3001
# Network Configuration
VITE_NETWORK_NAME=$ENVIRONMENT
VITE_CHAIN_ID=$(get_chain_id "$ENVIRONMENT")
# Application Configuration
VITE_APP_NAME=AITBC Developer Ecosystem
VITE_APP_VERSION=1.0.0
VITE_APP_DESCRIPTION=Developer Ecosystem & DAO Grants System
EOF
print_success "Frontend environment variables updated"
}
# Get chain ID for environment
get_chain_id() {
case "$1" in
"localhost"|"hardhat")
echo "31337"
;;
"sepolia")
echo "11155111"
;;
"goerli")
echo "5"
;;
"mainnet")
echo "1"
;;
*)
echo "1"
;;
esac
}
# Phase 3: Deploy API Services
deploy_api() {
print_status "Phase 3: Deploying API Services"
echo "=================================="
# Check if API deployment script exists
if [[ -f "$ROOT_DIR/apps/coordinator-api/deploy_services.sh" ]]; then
cd "$ROOT_DIR/apps/coordinator-api"
if ./deploy_services.sh "$ENVIRONMENT"; then
print_success "API services deployed successfully"
else
print_error "API services deployment failed"
return 1
fi
else
print_warning "API deployment script not found. Skipping API deployment."
fi
echo ""
}
# Phase 4: Run Integration Tests
run_integration_tests() {
if [[ "$SKIP_TESTS" == "true" ]]; then
print_warning "Skipping integration tests"
return 0
fi
print_status "Phase 4: Running Integration Tests"
echo "====================================="
cd "$ROOT_DIR"
# Update test configuration with deployed contracts
update_test_config
# Run comprehensive test suite
if ./tests/run_all_tests.sh; then
print_success "Integration tests passed"
else
print_error "Integration tests failed"
return 1
fi
echo ""
}
# Update test configuration
update_test_config() {
print_status "Updating test configuration..."
local deployment_file="$ROOT_DIR/deployed-contracts-$ENVIRONMENT.json"
if [[ ! -f "$deployment_file" ]]; then
print_warning "Contract deployment file not found. Using default test configuration."
return 0
fi
# Create test configuration
cat > "$ROOT_DIR/tests/test-config-$ENVIRONMENT.json" << EOF
{
"environment": "$ENVIRONMENT",
"contracts": $(cat "$deployment_file"),
"api": {
"base_url": "http://localhost:3001/api/v1",
"timeout": 30000
},
"frontend": {
"base_url": "http://aitbc.bubuit.net/marketplace",
"timeout": 10000
}
}
EOF
print_success "Test configuration updated"
}
# Phase 5: Setup Monitoring
setup_monitoring() {
print_status "Phase 5: Setting up Monitoring"
echo "==============================="
# Create monitoring configuration
create_monitoring_config
# Setup health checks
setup_health_checks
print_success "Monitoring setup completed"
echo ""
}
# Create monitoring configuration
create_monitoring_config() {
print_status "Creating monitoring configuration..."
local deployment_file="$ROOT_DIR/deployed-contracts-$ENVIRONMENT.json"
cat > "$ROOT_DIR/monitoring-config-$ENVIRONMENT.json" << EOF
{
"environment": "$ENVIRONMENT",
"timestamp": "$(date -Iseconds)",
"contracts": $(cat "$deployment_file"),
"monitoring": {
"enabled": true,
"interval": 60,
"endpoints": [
{
"name": "Frontend Health",
"url": "http://aitbc.bubuit.net/marketplace/",
"method": "GET",
"expected_status": 200
},
{
"name": "API Health",
"url": "http://localhost:3001/api/v1/health",
"method": "GET",
"expected_status": 200
}
],
"alerts": {
"email": "admin@aitbc.dev",
"slack_webhook": "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
}
}
}
EOF
print_success "Monitoring configuration created"
}
# Setup health checks
setup_health_checks() {
print_status "Setting up health checks..."
# Create health check script
cat > "$ROOT_DIR/scripts/health-check.sh" << 'EOF'
#!/bin/bash
# AITBC Developer Ecosystem Health Check Script
ENVIRONMENT="${1:-testnet}"
CONFIG_FILE="monitoring-config-$ENVIRONMENT.json"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "❌ Monitoring configuration not found: $CONFIG_FILE"
exit 1
fi
echo "🔍 Running health checks for $ENVIRONMENT..."
echo "=========================================="
# Check frontend
FRONTEND_URL=$(jq -r '.monitoring.endpoints[0].url' "$CONFIG_FILE")
FRONTEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$FRONTEND_URL" || echo "000")
if [[ "$FRONTEND_STATUS" == "200" ]]; then
echo "✅ Frontend: $FRONTEND_URL (Status: $FRONTEND_STATUS)"
else
echo "❌ Frontend: $FRONTEND_URL (Status: $FRONTEND_STATUS)"
fi
# Check API
API_URL=$(jq -r '.monitoring.endpoints[1].url' "$CONFIG_FILE")
API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$API_URL" || echo "000")
if [[ "$API_STATUS" == "200" ]]; then
echo "✅ API: $API_URL (Status: $API_STATUS)"
else
echo "❌ API: $API_URL (Status: $API_STATUS)"
fi
echo ""
echo "Health check completed at $(date)"
EOF
chmod +x "$ROOT_DIR/scripts/health-check.sh"
print_success "Health check script created"
}
# Generate deployment report
generate_deployment_report() {
print_status "Generating deployment report..."
local report_file="$ROOT_DIR/deployment-report-$ENVIRONMENT-$(date +%Y%m%d-%H%M%S).json"
cat > "$report_file" << EOF
{
"deployment": {
"environment": "$ENVIRONMENT",
"timestamp": "$(date -Iseconds)",
"skip_tests": "$SKIP_TESTS",
"skip_frontend": "$SKIP_FRONTEND"
},
"phases": {
"contracts": {
"status": "$CONTRACTS_STATUS",
"file": "deployed-contracts-$ENVIRONMENT.json"
},
"frontend": {
"status": "$FRONTEND_STATUS",
"url": "http://aitbc.bubuit.net/marketplace/"
},
"api": {
"status": "$API_STATUS",
"url": "http://localhost:3001/api/v1"
},
"tests": {
"status": "$TESTS_STATUS",
"skipped": "$SKIP_TESTS"
},
"monitoring": {
"status": "completed",
"config": "monitoring-config-$ENVIRONMENT.json"
}
},
"urls": {
"frontend": "http://aitbc.bubuit.net/marketplace/",
"api": "http://localhost:3001/api/v1",
"health_check": "./scripts/health-check.sh $ENVIRONMENT"
}
}
EOF
print_success "Deployment report saved to $report_file"
}
# Rollback function
rollback() {
print_warning "Rolling back deployment..."
# Rollback contracts (if needed)
print_status "Contract rollback not implemented (manual intervention required)"
# Rollback frontend
if [[ "$SKIP_FRONTEND" != "true" ]]; then
print_status "Rolling back frontend..."
ssh aitbc-cascade "cp -r /var/www/aitbc.bubuit.net/marketplace.backup /var/www/aitbc.bubuit.net/marketplace" 2>/dev/null || true
ssh aitbc-cascade "systemctl reload nginx" 2>/dev/null || true
fi
print_warning "Rollback completed. Please verify system status."
}
# Main execution
main() {
print_status "Starting complete Developer Ecosystem deployment..."
# Initialize status variables
CONTRACTS_STATUS="pending"
FRONTEND_STATUS="pending"
API_STATUS="pending"
TESTS_STATUS="pending"
# Check prerequisites
check_prerequisites
# Execute deployment phases
if deploy_contracts; then
CONTRACTS_STATUS="success"
else
CONTRACTS_STATUS="failed"
print_error "Contract deployment failed. Aborting."
exit 1
fi
if deploy_frontend; then
FRONTEND_STATUS="success"
else
FRONTEND_STATUS="failed"
print_warning "Frontend deployment failed, but continuing..."
fi
if deploy_api; then
API_STATUS="success"
else
API_STATUS="failed"
print_warning "API deployment failed, but continuing..."
fi
if run_integration_tests; then
TESTS_STATUS="success"
else
TESTS_STATUS="failed"
if [[ "$SKIP_TESTS" != "true" ]]; then
print_error "Integration tests failed. Deployment may be unstable."
fi
fi
# Setup monitoring
setup_monitoring
# Generate deployment report
generate_deployment_report
print_success "🎉 Developer Ecosystem deployment completed!"
echo ""
echo "📊 Deployment Summary:"
echo " Contracts: $CONTRACTS_STATUS"
echo " Frontend: $FRONTEND_STATUS"
echo " API: $API_STATUS"
echo " Tests: $TESTS_STATUS"
echo ""
echo "🌐 Application URLs:"
echo " Frontend: http://aitbc.bubuit.net/marketplace/"
echo " API: http://localhost:3001/api/v1"
echo ""
echo "🔧 Management Commands:"
echo " Health Check: ./scripts/health-check.sh $ENVIRONMENT"
echo " View Report: cat deployment-report-$ENVIRONMENT-*.json"
echo ""
echo "📋 Next Steps:"
echo " 1. Test the application in browser"
echo " 2. Verify all functionality works"
echo " 3. Monitor system health"
echo " 4. Set up automated monitoring"
}
# Handle script interruption
trap 'print_error "Deployment interrupted"; rollback; exit 1' INT TERM
# Run main function
main "$@"