rmi-backend/x402-gateway/deploy.sh

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}"