- Updated branding from "SolaceScanScout" to "Solace" across various files including deployment scripts, API responses, and documentation. - Changed default base URL for Playwright tests and updated security headers to reflect the new branding. - Enhanced README and API documentation to include new authentication endpoints and product access details. This refactor aligns the project branding and improves clarity in the API documentation.
241 lines
7.2 KiB
Bash
Executable File
241 lines
7.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Complete deployment and testing script
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
echo "=== SolaceScan Tiered Architecture - Deployment & Testing ==="
|
|
echo ""
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
extract_error_message() {
|
|
local body="${1:-}"
|
|
if [ -z "$body" ]; then
|
|
return 0
|
|
fi
|
|
echo "$body" | jq -r '.error.message // empty' 2>/dev/null || true
|
|
}
|
|
|
|
# Step 1: Verify components
|
|
echo -e "${BLUE}Step 1: Verifying components...${NC}"
|
|
bash "$SCRIPT_DIR/verify-tiered-architecture.sh"
|
|
echo ""
|
|
|
|
# Step 2: Build backend
|
|
echo -e "${BLUE}Step 2: Building backend...${NC}"
|
|
cd "$PROJECT_ROOT/backend"
|
|
if go mod tidy && go build -o bin/api-server ./api/rest/cmd; then
|
|
echo -e "${GREEN}✅ Backend built successfully${NC}"
|
|
ls -lh bin/api-server
|
|
else
|
|
echo -e "${RED}❌ Build failed${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Step 3: Check database
|
|
echo -e "${BLUE}Step 3: Checking database connection...${NC}"
|
|
if bash "$SCRIPT_DIR/check-database-connection.sh" 2>&1 | grep -q "✅ Connected"; then
|
|
DB_READY=true
|
|
echo -e "${GREEN}✅ Database is ready${NC}"
|
|
|
|
# Try migration
|
|
echo -e "${BLUE}Running migration...${NC}"
|
|
if bash "$SCRIPT_DIR/run-migration-0010.sh"; then
|
|
echo -e "${GREEN}✅ Migration completed${NC}"
|
|
else
|
|
echo -e "${RED}❌ Migration failed${NC}"
|
|
exit 1
|
|
fi
|
|
else
|
|
DB_READY=false
|
|
echo -e "${YELLOW}⚠️ Database not accessible - Track 1 endpoints will work, Track 2-4 require database${NC}"
|
|
echo " Wallet connect will stay unavailable until DB access is fixed and migration 0010 is applied."
|
|
echo " To fix: Set DB_PASSWORD environment variable or fix database credentials"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 4: Set environment variables
|
|
echo -e "${BLUE}Step 4: Setting environment variables...${NC}"
|
|
export JWT_SECRET="${JWT_SECRET:-test-secret-$(date +%s)}"
|
|
export RPC_URL="${RPC_URL:-http://192.168.11.250:8545}"
|
|
export CHAIN_ID=138
|
|
export PORT=8080
|
|
|
|
# Database variables (with defaults)
|
|
export DB_HOST="${DB_HOST:-localhost}"
|
|
export DB_PORT="${DB_PORT:-5432}"
|
|
export DB_USER="${DB_USER:-explorer}"
|
|
export DB_PASSWORD="${DB_PASSWORD:-changeme}"
|
|
export DB_NAME="${DB_NAME:-explorer}"
|
|
|
|
echo " JWT_SECRET: ${JWT_SECRET:0:20}..."
|
|
echo " RPC_URL: $RPC_URL"
|
|
echo " CHAIN_ID: $CHAIN_ID"
|
|
echo " PORT: $PORT"
|
|
echo " DB_HOST: $DB_HOST"
|
|
echo ""
|
|
|
|
# Step 5: Start server
|
|
echo -e "${BLUE}Step 5: Starting API server...${NC}"
|
|
cd "$PROJECT_ROOT/backend"
|
|
|
|
# Stop any existing server
|
|
if pgrep -f "api-server" > /dev/null; then
|
|
echo "Stopping existing server..."
|
|
pkill -f "api-server"
|
|
sleep 2
|
|
fi
|
|
|
|
# Create log directory
|
|
mkdir -p logs
|
|
|
|
# Start server
|
|
nohup ./bin/api-server > logs/api-server.log 2>&1 &
|
|
SERVER_PID=$!
|
|
|
|
# Wait for server
|
|
echo "Waiting for server to start..."
|
|
for i in {1..10}; do
|
|
if curl -s http://localhost:8080/health > /dev/null 2>&1; then
|
|
echo -e "${GREEN}✅ Server is running (PID: $SERVER_PID)${NC}"
|
|
echo $SERVER_PID > logs/api-server.pid
|
|
break
|
|
fi
|
|
if [ $i -eq 10 ]; then
|
|
echo -e "${RED}❌ Server failed to start${NC}"
|
|
echo "Logs:"
|
|
tail -20 logs/api-server.log
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo ""
|
|
|
|
# Step 6: Test endpoints
|
|
echo -e "${BLUE}Step 6: Testing API endpoints...${NC}"
|
|
echo ""
|
|
|
|
# Test health
|
|
echo -n "Testing /health... "
|
|
if curl -s http://localhost:8080/health | grep -q "healthy"; then
|
|
echo -e "${GREEN}✅${NC}"
|
|
else
|
|
echo -e "${RED}❌${NC}"
|
|
fi
|
|
|
|
# Test feature flags
|
|
echo -n "Testing /api/v1/features... "
|
|
if curl -s http://localhost:8080/api/v1/features | grep -q "track"; then
|
|
echo -e "${GREEN}✅${NC}"
|
|
else
|
|
echo -e "${RED}❌${NC}"
|
|
fi
|
|
|
|
# Test Track 1 endpoints
|
|
echo -n "Testing Track 1: /api/v1/track1/blocks/latest... "
|
|
TRACK1_RESPONSE=$(curl -s -w "\n%{http_code}" "http://localhost:8080/api/v1/track1/blocks/latest?limit=1" 2>&1)
|
|
HTTP_CODE=$(echo "$TRACK1_RESPONSE" | tail -n1)
|
|
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "500" ]; then
|
|
# 500 is OK if RPC is not available, means endpoint exists
|
|
echo -e "${GREEN}✅${NC} (HTTP $HTTP_CODE)"
|
|
else
|
|
echo -e "${YELLOW}⚠️${NC} (HTTP $HTTP_CODE)"
|
|
fi
|
|
|
|
# Test auth endpoints
|
|
echo -n "Testing /api/v1/auth/nonce... "
|
|
if [ "$DB_READY" = true ]; then
|
|
NONCE_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "http://localhost:8080/api/v1/auth/nonce" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"address":"0x1234567890123456789012345678901234567890"}' 2>&1)
|
|
NONCE_CODE=$(echo "$NONCE_RESPONSE" | tail -n1)
|
|
NONCE_BODY=$(echo "$NONCE_RESPONSE" | sed '$d')
|
|
NONCE_ERROR=$(extract_error_message "$NONCE_BODY")
|
|
if [ "$NONCE_CODE" = "200" ]; then
|
|
echo -e "${GREEN}✅${NC} (HTTP $NONCE_CODE)"
|
|
elif [ "$NONCE_CODE" = "503" ]; then
|
|
echo -e "${RED}❌${NC} (HTTP $NONCE_CODE)"
|
|
echo " Wallet auth storage is not ready: ${NONCE_ERROR:-service unavailable}"
|
|
echo " Fix: bash scripts/run-migration-0010.sh, then restart the backend."
|
|
exit 1
|
|
else
|
|
echo -e "${YELLOW}⚠️${NC} (HTTP $NONCE_CODE)"
|
|
if [ -n "$NONCE_ERROR" ]; then
|
|
echo " Response: $NONCE_ERROR"
|
|
fi
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️${NC} skipped (database unavailable; wallet auth cannot work yet)"
|
|
fi
|
|
|
|
# Test Track 2 (should require auth)
|
|
echo -n "Testing Track 2: /api/v1/track2/search (should require auth)... "
|
|
TRACK2_RESPONSE=$(curl -s -w "\n%{http_code}" "http://localhost:8080/api/v1/track2/search?q=test" 2>&1)
|
|
TRACK2_CODE=$(echo "$TRACK2_RESPONSE" | tail -n1)
|
|
if [ "$TRACK2_CODE" = "401" ]; then
|
|
echo -e "${GREEN}✅${NC} (Correctly requires auth - HTTP 401)"
|
|
else
|
|
echo -e "${YELLOW}⚠️${NC} (HTTP $TRACK2_CODE)"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Step 7: Display server info
|
|
echo -e "${BLUE}Step 7: Server Information${NC}"
|
|
echo " PID: $SERVER_PID"
|
|
echo " Port: 8080"
|
|
echo " Logs: $PROJECT_ROOT/backend/logs/api-server.log"
|
|
echo " Health: http://localhost:8080/health"
|
|
echo " Features: http://localhost:8080/api/v1/features"
|
|
echo ""
|
|
|
|
# Step 8: Display status
|
|
echo -e "${BLUE}=== Deployment Status ===${NC}"
|
|
echo ""
|
|
echo -e "${GREEN}✅ Server: Running${NC}"
|
|
if [ "$DB_READY" = true ]; then
|
|
echo -e "${GREEN}✅ Database: Connected${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ Database: Not connected (Track 1 works, Track 2-4 need database)${NC}"
|
|
fi
|
|
echo -e "${GREEN}✅ Build: Successful${NC}"
|
|
echo -e "${GREEN}✅ Routes: Configured${NC}"
|
|
echo ""
|
|
|
|
# Step 9: Next steps
|
|
echo -e "${BLUE}=== Next Steps ===${NC}"
|
|
echo ""
|
|
if [ "$DB_READY" = false ]; then
|
|
echo "1. Fix database connection:"
|
|
echo " export DB_PASSWORD='your-password'"
|
|
echo " bash scripts/run-migration-0010.sh"
|
|
echo ""
|
|
fi
|
|
echo "2. Test authentication:"
|
|
echo " curl -X POST http://localhost:8080/api/v1/auth/nonce \\"
|
|
echo " -H 'Content-Type: application/json' \\"
|
|
echo " -d '{\"address\":\"0xYourAddress\"}'"
|
|
echo ""
|
|
echo "3. Approve users:"
|
|
echo " bash scripts/approve-user.sh <address> <track_level>"
|
|
echo ""
|
|
echo "4. Monitor server:"
|
|
echo " tail -f $PROJECT_ROOT/backend/logs/api-server.log"
|
|
echo ""
|
|
echo "5. Stop server:"
|
|
echo " kill $SERVER_PID"
|
|
echo " or: pkill -f api-server"
|
|
echo ""
|
|
|
|
echo -e "${GREEN}✅ Deployment and testing complete!${NC}"
|
|
echo ""
|