Monorepo for Aesthetic.Computer aesthetic.computer
at main 167 lines 5.1 kB view raw
1#!/usr/bin/env fish 2# Deploy grab worker with automatic DNS configuration 3# Based on the nanos/conductor.mjs pattern 4 5set -e 6 7echo "🚀 Deploying grab worker with automatic DNS setup..." 8echo "" 9 10# Load environment variables from vault 11set VAULT_DIR /workspaces/aesthetic-computer/aesthetic-computer-vault/grab 12if test -f $VAULT_DIR/.env 13 source $VAULT_DIR/.env 14 echo "✅ Loaded environment variables from vault" 15else 16 echo "⚠️ Warning: No .env file found in vault" 17 echo " Continuing with system environment variables..." 18end 19 20echo "" 21 22# Step 1: Deploy the worker 23echo "📦 Step 1: Deploying worker to Cloudflare..." 24cd /workspaces/aesthetic-computer/grab 25npx wrangler deploy 26 27echo "" 28echo "✅ Worker deployed successfully!" 29echo "" 30 31# Step 2: Configure DNS via Cloudflare API 32echo "🌐 Step 2: Configuring DNS (CNAME record)..." 33 34# Check for required environment variables 35if not set -q CLOUDFLARE_EMAIL 36 echo "❌ Error: CLOUDFLARE_EMAIL not set" 37 echo " Please add to $VAULT_DIR/.env" 38 exit 1 39end 40 41if not set -q CLOUDFLARE_API_TOKEN 42 echo "❌ Error: CLOUDFLARE_API_TOKEN not set" 43 echo " Please add to $VAULT_DIR/.env" 44 exit 1 45end 46 47# Cloudflare configuration 48set ZONE_ID "a23b54e8877a833a1cf8db7765bce3ca" 49set SUBDOMAIN "grab" 50set FULL_DOMAIN "grab.aesthetic.computer" 51set TARGET "aesthetic-grab.aesthetic-computer.workers.dev" 52 53echo " Zone: aesthetic.computer ($ZONE_ID)" 54echo " Creating: $FULL_DOMAIN$TARGET" 55echo "" 56 57# Step 2a: Check if DNS record already exists 58echo " Checking for existing DNS record..." 59set CHECK_RESPONSE (curl -s -X GET \ 60 "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=CNAME&name=$FULL_DOMAIN" \ 61 -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \ 62 -H "X-Auth-Key: $CLOUDFLARE_API_TOKEN" \ 63 -H "Content-Type: application/json") 64 65set RECORD_ID (echo $CHECK_RESPONSE | jq -r '.result[0].id // empty') 66 67# Step 2b: Create or update DNS record 68if test -n "$RECORD_ID" 69 echo " 🟡 Updating existing CNAME record (ID: $RECORD_ID)..." 70 set DNS_RESPONSE (curl -s -X PUT \ 71 "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ 72 -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \ 73 -H "X-Auth-Key: $CLOUDFLARE_API_TOKEN" \ 74 -H "Content-Type: application/json" \ 75 --data "{ 76 \"type\": \"CNAME\", 77 \"name\": \"$SUBDOMAIN\", 78 \"content\": \"$TARGET\", 79 \"ttl\": 1, 80 \"proxied\": true 81 }") 82else 83 echo " 🟡 Creating new CNAME record..." 84 set DNS_RESPONSE (curl -s -X POST \ 85 "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \ 86 -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \ 87 -H "X-Auth-Key: $CLOUDFLARE_API_TOKEN" \ 88 -H "Content-Type: application/json" \ 89 --data "{ 90 \"type\": \"CNAME\", 91 \"name\": \"$SUBDOMAIN\", 92 \"content\": \"$TARGET\", 93 \"ttl\": 1, 94 \"proxied\": true 95 }") 96end 97 98# Check if DNS operation was successful 99set DNS_SUCCESS (echo $DNS_RESPONSE | jq -r '.success') 100 101if test "$DNS_SUCCESS" = "true" 102 echo " ✅ DNS record configured successfully!" 103else 104 echo " ❌ DNS configuration failed:" 105 echo $DNS_RESPONSE | jq -r '.errors[]?.message // "Unknown error"' 106 echo "" 107 echo " You can manually configure via:" 108 echo " https://dash.cloudflare.com/$ZONE_ID/aesthetic.computer/dns/records" 109 exit 1 110end 111 112echo "" 113 114# Step 3: Wait for DNS propagation 115echo "⏳ Step 3: Waiting for DNS propagation..." 116echo " This usually takes 30-60 seconds..." 117echo "" 118 119sleep 5 120 121# Try to verify DNS is working 122set MAX_ATTEMPTS 12 123set ATTEMPT 1 124 125while test $ATTEMPT -le $MAX_ATTEMPTS 126 echo -n " Attempt $ATTEMPT/$MAX_ATTEMPTS: " 127 128 set HTTP_CODE (curl -s -o /dev/null -w "%{http_code}" "https://$FULL_DOMAIN/icon/128x128/prompt.png" 2>/dev/null) 129 130 if test "$HTTP_CODE" = "200" 131 echo "✅ DNS working!" 132 break 133 else 134 echo "⏳ Waiting... (HTTP $HTTP_CODE)" 135 if test $ATTEMPT -eq $MAX_ATTEMPTS 136 echo "" 137 echo " ⚠️ DNS may still be propagating. Manual check:" 138 echo " dig $FULL_DOMAIN" 139 echo " curl -I https://$FULL_DOMAIN/icon/128x128/prompt.png" 140 else 141 sleep 5 142 end 143 end 144 145 set ATTEMPT (math $ATTEMPT + 1) 146end 147 148echo "" 149 150# Step 4: Success summary 151echo "✨ Deployment complete!" 152echo "" 153echo "📊 Deployment Summary:" 154echo " Worker URL: https://aesthetic-grab.aesthetic-computer.workers.dev" 155echo " Custom URL: https://$FULL_DOMAIN" 156echo " DNS Record: $FULL_DOMAIN$TARGET (CNAME, Proxied)" 157echo "" 158echo "🧪 Test Commands:" 159echo " curl -I \"https://$FULL_DOMAIN/icon/128x128/prompt.png\"" 160echo " curl -I \"https://$FULL_DOMAIN/preview/1200x630/prompt.png\"" 161echo "" 162echo "📋 Next Steps:" 163echo " 1. Test screenshot generation with various pieces" 164echo " 2. Monitor logs: npx wrangler tail" 165echo " 3. Check Cloudflare dashboard for errors" 166echo " 4. Validate production integration on aesthetic.computer" 167echo ""