deploy/create-edge-script.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq gh
# Script to create a new Bunny CDN edge script (tickets-*)
# Fetches latest release code from GitHub, creates the script, then sets secrets
set -euo pipefail
# Colors for nice output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
DIM='\033[2m'
NC='\033[0m' # No Color
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="${SCRIPT_DIR}/.env"
# Pretty print functions
print_header() {
echo ""
echo -e "${BOLD}${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BOLD}${BLUE} $1${NC}"
echo -e "${BOLD}${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
}
print_success() { echo -e " ${GREEN}✓${NC} $1"; }
print_error() { echo -e " ${RED}✗${NC} $1"; }
print_info() { echo -e " ${CYAN}→${NC} $1"; }
print_step() { echo -e "${YELLOW}▶${NC} $1"; }
# Load environment variables
if [[ ! -f "$ENV_FILE" ]]; then
print_header "Configuration Error"
print_error ".env file not found at $ENV_FILE"
echo ""
echo " Please create a .env file with at least:"
echo -e " ${CYAN}BUNNY_API_KEY=your_api_key${NC}"
echo ""
exit 1
fi
source "$ENV_FILE"
if [[ -z "${BUNNY_API_KEY:-}" ]]; then
print_header "Configuration Error"
print_error "BUNNY_API_KEY not set in .env"
exit 1
fi
API_BASE="https://api.bunny.net"
print_header "Create New Bunny Edge Script"
# Prompt for script name
echo -e -n " ${CYAN}→${NC} Enter script name (will be prefixed with ${BOLD}Tickets - ${NC}): "
read -r SCRIPT_NAME_INPUT
if [[ -z "$SCRIPT_NAME_INPUT" ]]; then
print_error "Script name cannot be empty"
exit 1
fi
FULL_NAME="Tickets - ${SCRIPT_NAME_INPUT}"
print_info "Full name: ${BOLD}${FULL_NAME}${NC}"
echo ""
# Fetch latest release from GitHub
print_step "Fetching latest release from GitHub..."
LATEST_RELEASE=$(curl -s "https://api.github.com/repos/chobbledotcom/tickets/releases/latest")
TAG_NAME=$(echo "$LATEST_RELEASE" | jq -r '.tag_name')
if [[ -z "$TAG_NAME" || "$TAG_NAME" == "null" ]]; then
print_error "Could not determine latest release"
echo "$LATEST_RELEASE" | jq .
exit 1
fi
print_info "Latest release: ${BOLD}${TAG_NAME}${NC}"
# Download bunny-script.ts
DOWNLOAD_URL="https://github.com/chobbledotcom/tickets/releases/download/${TAG_NAME}/bunny-script.ts"
print_step "Downloading bunny-script.ts..."
SCRIPT_CODE_FILE=$(mktemp)
trap 'rm -f "$SCRIPT_CODE_FILE" "$PAYLOAD_FILE"' EXIT
curl -sL "$DOWNLOAD_URL" -o "$SCRIPT_CODE_FILE"
if [[ ! -s "$SCRIPT_CODE_FILE" ]]; then
print_error "Failed to download bunny-script.ts from ${DOWNLOAD_URL}"
exit 1
fi
LINE_COUNT=$(wc -l < "$SCRIPT_CODE_FILE")
print_success "Downloaded bunny-script.ts (${LINE_COUNT} lines)"
echo ""
# Create the edge script via Bunny API
print_step "Creating edge script..."
PAYLOAD_FILE=$(mktemp)
jq -n \
--arg name "$FULL_NAME" \
--rawfile code "$SCRIPT_CODE_FILE" \
'{
Name: $name,
Code: $code,
ScriptType: 1,
CreateLinkedPullZone: true
}' > "$PAYLOAD_FILE"
CREATE_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"${API_BASE}/compute/script" \
-H "AccessKey: ${BUNNY_API_KEY}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d @"$PAYLOAD_FILE")
HTTP_CODE=$(echo "$CREATE_RESPONSE" | tail -n1)
RESPONSE_BODY=$(echo "$CREATE_RESPONSE" | sed '$d')
if [[ "$HTTP_CODE" -lt 200 || "$HTTP_CODE" -ge 300 ]]; then
print_error "Failed to create edge script (HTTP $HTTP_CODE)"
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
exit 1
fi
NEW_SCRIPT_ID=$(echo "$RESPONSE_BODY" | jq -r '.Id')
DEFAULT_HOSTNAME=$(echo "$RESPONSE_BODY" | jq -r '.DefaultHostname // empty')
print_success "Edge script created!"
print_info "Script ID: ${BOLD}${NEW_SCRIPT_ID}${NC}"
if [[ -n "$DEFAULT_HOSTNAME" ]]; then
print_info "Default hostname: ${BOLD}${DEFAULT_HOSTNAME}${NC}"
fi
echo ""
# Set secrets on the new script
print_header "Setting Secrets on New Script"
"${SCRIPT_DIR}/set-edge-script-secrets.sh" "$NEW_SCRIPT_ID"
# Final summary
print_header "All Done!"
echo -e " Script name: ${BOLD}${FULL_NAME}${NC}"
echo -e " Script ID: ${BOLD}${CYAN}${NEW_SCRIPT_ID}${NC}"
if [[ -n "$DEFAULT_HOSTNAME" ]]; then
echo -e " Hostname: ${BOLD}${DEFAULT_HOSTNAME}${NC}"
fi
echo ""
echo -e " ${BOLD}Logs:${NC} https://dash.bunny.net/scripts/${NEW_SCRIPT_ID}/logs"
echo ""