- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains - Omit embedded publish git dirs and empty placeholders from index Made-with: Cursor
66 lines
3.0 KiB
Bash
Executable File
66 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Create or update Cloudflare DNS for relay-mainnet-cw.d-bis.org → PUBLIC_IP (DNS-only, gray cloud).
|
|
# Matches scripts/update-all-dns-to-public-ip.sh behavior for other NPM-fronted d-bis hosts.
|
|
#
|
|
# Usage: bash scripts/cloudflare/configure-relay-mainnet-cw-dns.sh
|
|
# Requires: .env with CLOUDFLARE_API_TOKEN or (CLOUDFLARE_EMAIL + CLOUDFLARE_API_KEY),
|
|
# CLOUDFLARE_ZONE_ID_D_BIS_ORG or CLOUDFLARE_ZONE_ID, and PUBLIC_IP (WAN → NPM NAT).
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
source config/ip-addresses.conf 2>/dev/null || true
|
|
[ -f .env ] && set +u && source .env 2>/dev/null || true && set -u
|
|
|
|
ZONE_ID="${CLOUDFLARE_ZONE_ID:-${CLOUDFLARE_ZONE_ID_D_BIS_ORG:-}}"
|
|
HOSTNAME="relay-mainnet-cw.d-bis.org"
|
|
NAME_LABEL="relay-mainnet-cw"
|
|
PUBLIC_IP="${PUBLIC_IP:-76.53.10.36}"
|
|
|
|
if [ -n "${CLOUDFLARE_API_TOKEN:-}" ]; then
|
|
AUTH_H=(-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN")
|
|
elif [ -n "${CLOUDFLARE_API_KEY:-}" ] && [ -n "${CLOUDFLARE_EMAIL:-}" ]; then
|
|
AUTH_H=(-H "X-Auth-Email: $CLOUDFLARE_EMAIL" -H "X-Auth-Key: $CLOUDFLARE_API_KEY")
|
|
else
|
|
echo "Set CLOUDFLARE_API_TOKEN or (CLOUDFLARE_EMAIL + CLOUDFLARE_API_KEY) in .env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
[ -z "${ZONE_ID:-}" ] && { echo "Set CLOUDFLARE_ZONE_ID or CLOUDFLARE_ZONE_ID_D_BIS_ORG in .env" >&2; exit 1; }
|
|
|
|
DATA=$(jq -n --arg name "$NAME_LABEL" --arg content "$PUBLIC_IP" \
|
|
'{type:"A",name:$name,content:$content,ttl:1,proxied:false}')
|
|
|
|
echo "Relay mainnet-cw DNS: $HOSTNAME → $PUBLIC_IP (DNS-only)"
|
|
|
|
EXISTING=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?name=${HOSTNAME}" \
|
|
"${AUTH_H[@]}" -H "Content-Type: application/json")
|
|
RECORD_ID=$(echo "$EXISTING" | jq -r '.result[0].id // empty')
|
|
CURRENT_CONTENT=$(echo "$EXISTING" | jq -r '.result[0].content // empty')
|
|
CURRENT_PROXIED=$(echo "$EXISTING" | jq -r '.result[0].proxied // false')
|
|
|
|
if [ -n "$RECORD_ID" ] && [ "$RECORD_ID" != "null" ]; then
|
|
if [ "$CURRENT_CONTENT" = "$PUBLIC_IP" ] && [ "$CURRENT_PROXIED" = "false" ]; then
|
|
echo " $HOSTNAME: OK (A → $PUBLIC_IP, proxied=false)"
|
|
exit 0
|
|
fi
|
|
UPD=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \
|
|
"${AUTH_H[@]}" -H "Content-Type: application/json" -d "$DATA")
|
|
if echo "$UPD" | jq -e '.success == true' >/dev/null 2>&1; then
|
|
echo " $HOSTNAME: Updated A → $PUBLIC_IP (proxied=false)"
|
|
else
|
|
echo " $HOSTNAME: Update failed ($(echo "$UPD" | jq -r '.errors[0].message // "unknown"' 2>/dev/null))" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
CR=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \
|
|
"${AUTH_H[@]}" -H "Content-Type: application/json" -d "$DATA")
|
|
if echo "$CR" | jq -e '.success == true' >/dev/null 2>&1; then
|
|
echo " $HOSTNAME: Created A → $PUBLIC_IP (proxied=false)"
|
|
else
|
|
echo " $HOSTNAME: Create failed ($(echo "$CR" | jq -r '.errors[0].message // "unknown"' 2>/dev/null))" >&2
|
|
exit 1
|
|
fi
|
|
fi
|