123 lines
5.2 KiB
Bash
Executable file
123 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# RMI x402 Gateway — Unified Deploy Script v2
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Deploys both x402 Workers from canonical source directories.
|
|
# Tools are auto-synced from backend catalog — no more hardcoded lists.
|
|
#
|
|
# Usage:
|
|
# ./deploy.sh # Deploy both
|
|
# ./deploy.sh base # Deploy x402-base only
|
|
# ./deploy.sh solana # Deploy x402-sol only
|
|
# ./deploy.sh verify # Verify both workers post-deploy
|
|
#
|
|
# Env vars:
|
|
# CLOUDFLARE_API_TOKEN — Workers Scripts:Edit permission
|
|
# CLOUDFLARE_ACCOUNT_ID — 8f9bd9165c1250b426c66dc1967deefd
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
set -eo pipefail
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
BASE_DIR="/srv/x402-gateway-base"
|
|
SOL_DIR="/root/backend/x402-gateway/solana"
|
|
ACCOUNT_ID="${CLOUDFLARE_ACCOUNT_ID:-8f9bd9165c1250b426c66dc1967deefd}"
|
|
TOKEN="${CLOUDFLARE_API_TOKEN:-}"
|
|
|
|
if [ -z "$TOKEN" ]; then
|
|
echo -e "${RED}ERROR: CLOUDFLARE_API_TOKEN not set${NC}"
|
|
echo "Run: export CLOUDFLARE_API_TOKEN=cfat_xxx..."
|
|
echo "Get one at: https://dash.cloudflare.com/profile/api-tokens"
|
|
echo "Needs: Workers Scripts:Edit permission on account ${ACCOUNT_ID}"
|
|
exit 1
|
|
fi
|
|
|
|
deploy_worker() {
|
|
local name=$1 dir=$2
|
|
echo -e "${CYAN}════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}Deploying ${name} from ${dir}...${NC}"
|
|
echo -e "${CYAN}════════════════════════════════════════════${NC}"
|
|
|
|
if [ ! -d "$dir" ]; then
|
|
echo -e "${RED}ERROR: ${dir} not found${NC}"
|
|
return 1
|
|
fi
|
|
|
|
cd "$dir"
|
|
CLOUDFLARE_API_TOKEN="$TOKEN" \
|
|
CLOUDFLARE_ACCOUNT_ID="$ACCOUNT_ID" \
|
|
npx wrangler deploy 2>&1 | grep -E "Uploaded|Deployed|Current Version|ERROR|✘"
|
|
|
|
local rc=${PIPESTATUS[0]}
|
|
if [ $rc -eq 0 ]; then
|
|
echo -e "${GREEN}✓ ${name} deployed successfully${NC}"
|
|
else
|
|
echo -e "${RED}✗ ${name} deploy failed (may be rate-limited, retry in 60s)${NC}"
|
|
return $rc
|
|
fi
|
|
}
|
|
|
|
verify_worker() {
|
|
local name=$1 url=$2
|
|
echo -n " Verifying ${name}... "
|
|
local health
|
|
health=$(curl -sf "${url}/health" 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'{d[\"status\"]} | rmi:{d[\"tools\"][\"rmi_paid\"]} mcp:{d[\"tools\"][\"mcp\"]}')" 2>/dev/null || echo "FAIL")
|
|
if [ "$health" != "FAIL" ]; then
|
|
echo -e "${GREEN}${health}${NC}"
|
|
else
|
|
echo -e "${RED}DOWN${NC}"
|
|
fi
|
|
|
|
echo -n " Discovery (networks)... "
|
|
local nets
|
|
nets=$(curl -sf "${url}/.well-known/x402" 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d.get('supportedNetworks',[])))" 2>/dev/null || echo "0")
|
|
if [ "$nets" -ge 13 ]; then
|
|
echo -e "${GREEN}${nets} chains${NC}"
|
|
else
|
|
echo -e "${RED}${nets} chains (expected 13)${NC}"
|
|
fi
|
|
|
|
echo -n " Trial enforcement... "
|
|
local trial
|
|
trial=$(curl -sf "${url}/tools/sentiment" -X POST -H "Content-Type: application/json" -d '{"query":"test"}' 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('trial_remaining','no-trial'))" 2>/dev/null || echo "FAIL")
|
|
echo -e "${CYAN}trial_remaining=${trial}${NC}"
|
|
}
|
|
|
|
case "${1:-both}" in
|
|
base)
|
|
deploy_worker "x402-base" "$BASE_DIR"
|
|
;;
|
|
solana|sol)
|
|
deploy_worker "x402-sol" "$SOL_DIR"
|
|
;;
|
|
verify)
|
|
echo -e "${CYAN}Verifying both workers...${NC}"
|
|
verify_worker "x402-base" "https://x402-base.cryptorugmuncher.workers.dev"
|
|
verify_worker "x402-sol" "https://x402-sol.cryptorugmuncher.workers.dev"
|
|
;;
|
|
both|"")
|
|
deploy_worker "x402-base" "$BASE_DIR"
|
|
echo ""
|
|
deploy_worker "x402-sol" "$SOL_DIR"
|
|
echo ""
|
|
echo -e "${CYAN}Post-deploy verification:${NC}"
|
|
verify_worker "x402-base" "https://x402-base.cryptorugmuncher.workers.dev"
|
|
verify_worker "x402-sol" "https://x402-sol.cryptorugmuncher.workers.dev"
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [base|solana|both|verify]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo -e "${GREEN}════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}Deploy complete${NC}"
|
|
echo -e " Backend catalog: https://mcp.rugmunch.io/api/v1/x402-tools/catalog"
|
|
echo -e " x402-base: https://x402-base.cryptorugmuncher.workers.dev"
|
|
echo -e " x402-sol: https://x402-sol.cryptorugmuncher.workers.dev"
|
|
echo -e "${GREEN}════════════════════════════════════════════${NC}"
|