@@ -23,7 +23,7 @@ REGION="oregon"
2323PLAN=" starter"
2424DISK_SIZE_GB=10
2525GITHUB_REPO=" https://github.com/andrewm4894/anomstack"
26- BRANCH=" main"
26+ BRANCH=$( git rev-parse --abbrev-ref HEAD 2> /dev/null || echo " main" )
2727CONFIRM=false
2828
2929# Parse arguments
@@ -44,6 +44,7 @@ echo -e "${BLUE}╚════════════════════
4444echo " "
4545echo " Service Name: $SERVICE_NAME "
4646echo " Profile: $PROFILE "
47+ echo " Branch: $BRANCH "
4748echo " Region: $REGION "
4849echo " Plan: $PLAN "
4950echo " Disk Size: ${DISK_SIZE_GB} GB"
7980
8081echo -e " ${GREEN} ✅ Owner ID: $OWNER_ID ${NC} "
8182
83+ # Check if service already exists
84+ echo -e " ${BLUE} 🔍 Checking if service '$SERVICE_NAME ' already exists...${NC} "
85+ EXISTING_SERVICE=$( curl -s -H " Authorization: Bearer $RENDER_API_KEY " \
86+ " https://api.render.com/v1/services" | jq -r " .[] | select(.service.name == \" $SERVICE_NAME \" ) | .service.id" )
87+
88+ if [ -n " $EXISTING_SERVICE " ]; then
89+ echo -e " ${YELLOW} ⚠️ Service '$SERVICE_NAME ' already exists (ID: $EXISTING_SERVICE )${NC} "
90+ echo -e " ${YELLOW} ⚠️ Will update existing service instead of creating new one${NC} "
91+ SERVICE_ID=" $EXISTING_SERVICE "
92+ UPDATE_MODE=true
93+ else
94+ echo -e " ${GREEN} ✅ Service does not exist, will create new service${NC} "
95+ UPDATE_MODE=false
96+ fi
97+
8298# Load profile environment variables
8399PROFILE_FILE=" $PROJECT_ROOT /profiles/${PROFILE} .env"
84100if [ ! -f " $PROFILE_FILE " ]; then
@@ -148,7 +164,7 @@ PAYLOAD=$(cat <<EOF
148164 "sizeGB": $DISK_SIZE_GB
149165 },
150166 "envSpecificDetails": {
151- "dockerfilePath": "./docker/Dockerfile.fly ",
167+ "dockerfilePath": "./docker/Dockerfile.render ",
152168 "dockerContext": ".",
153169 "dockerCommand": ""
154170 },
@@ -174,52 +190,110 @@ else
174190fi
175191
176192echo " "
177- echo -e " ${BLUE} 🚀 Creating service...${NC} "
178-
179- # Create service via API
180- RESPONSE= $( curl -s -w " \n%{http_code}" \
181- -X POST " https://api.render.com/v1/services" \
182- -H " Authorization: Bearer $RENDER_API_KEY " \
183- -H " Content-Type: application/json" \
184- -H " Accept: application/json" \
185- -d " $PAYLOAD " )
186-
187- HTTP_CODE= $( echo " $RESPONSE " | tail -n 1)
188- BODY= $( echo " $RESPONSE " | sed ' $d' )
189-
190- if [ " $HTTP_CODE " = " 201" ] || [ " $HTTP_CODE " = " 200" ]; then
191- echo -e " ${GREEN} ✅ Service created successfully!${NC} "
192- echo " "
193-
194- SERVICE_ID=$( echo " $BODY " | jq -r ' .service.id // .id' 2> /dev/null)
195- SERVICE_URL=$( echo " $BODY " | jq -r ' .service.serviceDetails.url // .serviceDetails.url // empty' 2> /dev/null)
196-
197- echo -e " ${GREEN} Service Details:${NC} "
198- echo " Service ID: $SERVICE_ID "
199- [ -n " $SERVICE_URL " ] && echo " URL: https://$SERVICE_URL "
200- echo " "
201193
202- echo -e " ${BLUE} 📋 Next Steps:${NC} "
203- echo " 1. View deployment: https://dashboard.render.com/web/$SERVICE_ID "
204- echo " 2. Set ANOMSTACK_ADMIN_PASSWORD secret:"
205- echo " - Go to service → Environment"
206- echo " - Mark ANOMSTACK_ADMIN_PASSWORD as secret"
207- echo " - Set your admin password"
208- echo " 3. Wait for build to complete (~5-10 minutes)"
209- echo " 4. Access dashboard: https://$SERVICE_URL "
210- echo " "
211-
212- echo -e " ${BLUE} 💡 View logs:${NC} "
213- echo " export RENDER_SERVICE_ID=$SERVICE_ID "
214- echo " make render-logs"
215- echo " "
194+ if [ " $UPDATE_MODE " = true ]; then
195+ echo -e " ${BLUE} 🔄 Updating existing service...${NC} "
196+
197+ # Update service via API (PATCH)
198+ UPDATE_PAYLOAD=$( echo " $PAYLOAD " | jq ' del(.type, .ownerId, .name)' )
199+
200+ RESPONSE=$( curl -s -w " \n%{http_code}" \
201+ -X PATCH " https://api.render.com/v1/services/$SERVICE_ID " \
202+ -H " Authorization: Bearer $RENDER_API_KEY " \
203+ -H " Content-Type: application/json" \
204+ -H " Accept: application/json" \
205+ -d " $UPDATE_PAYLOAD " )
206+
207+ HTTP_CODE=$( echo " $RESPONSE " | tail -n 1)
208+ BODY=$( echo " $RESPONSE " | sed ' $d' )
209+
210+ if [ " $HTTP_CODE " = " 200" ]; then
211+ echo -e " ${GREEN} ✅ Service updated successfully!${NC} "
212+ echo " "
213+
214+ SERVICE_URL=$( echo " $BODY " | jq -r ' .service.serviceDetails.url // .serviceDetails.url // empty' 2> /dev/null)
215+
216+ echo -e " ${GREEN} Service Details:${NC} "
217+ echo " Service ID: $SERVICE_ID "
218+ [ -n " $SERVICE_URL " ] && echo " URL: https://$SERVICE_URL "
219+ echo " "
220+
221+ # Trigger new deploy after update
222+ echo -e " ${BLUE} 🚀 Triggering new deployment...${NC} "
223+ DEPLOY_RESPONSE=$( curl -s -X POST " https://api.render.com/v1/services/$SERVICE_ID /deploys" \
224+ -H " Authorization: Bearer $RENDER_API_KEY " \
225+ -H " Content-Type: application/json" \
226+ -d ' {"clearCache": "do_not_clear"}' )
227+
228+ DEPLOY_ID=$( echo " $DEPLOY_RESPONSE " | jq -r ' .id' )
229+ echo -e " ${GREEN} ✅ Deploy triggered (ID: $DEPLOY_ID )${NC} "
230+ else
231+ echo -e " ${RED} ❌ Failed to update service (HTTP $HTTP_CODE )${NC} "
232+ echo " "
233+ echo " Response:"
234+ echo " $BODY " | jq ' .' 2> /dev/null || echo " $BODY "
235+ echo " "
236+ exit 1
237+ fi
216238else
217- echo -e " ${RED} ❌ Failed to create service (HTTP $HTTP_CODE )${NC} "
218- echo " "
219- echo " Response:"
220- echo " $BODY " | jq ' .' 2> /dev/null || echo " $BODY "
221- echo " "
222- exit 1
239+ echo -e " ${BLUE} 🚀 Creating new service...${NC} "
240+
241+ # Create service via API
242+ RESPONSE=$( curl -s -w " \n%{http_code}" \
243+ -X POST " https://api.render.com/v1/services" \
244+ -H " Authorization: Bearer $RENDER_API_KEY " \
245+ -H " Content-Type: application/json" \
246+ -H " Accept: application/json" \
247+ -d " $PAYLOAD " )
248+
249+ HTTP_CODE=$( echo " $RESPONSE " | tail -n 1)
250+ BODY=$( echo " $RESPONSE " | sed ' $d' )
251+
252+ if [ " $HTTP_CODE " = " 201" ] || [ " $HTTP_CODE " = " 200" ]; then
253+ echo -e " ${GREEN} ✅ Service created successfully!${NC} "
254+ echo " "
255+
256+ SERVICE_ID=$( echo " $BODY " | jq -r ' .service.id // .id' 2> /dev/null)
257+ SERVICE_URL=$( echo " $BODY " | jq -r ' .service.serviceDetails.url // .serviceDetails.url // empty' 2> /dev/null)
258+
259+ echo -e " ${GREEN} Service Details:${NC} "
260+ echo " Service ID: $SERVICE_ID "
261+ [ -n " $SERVICE_URL " ] && echo " URL: https://$SERVICE_URL "
262+ echo " "
263+
264+ # Trigger initial deploy
265+ echo -e " ${BLUE} 🚀 Triggering initial deployment...${NC} "
266+ DEPLOY_RESPONSE=$( curl -s -X POST " https://api.render.com/v1/services/$SERVICE_ID /deploys" \
267+ -H " Authorization: Bearer $RENDER_API_KEY " \
268+ -H " Content-Type: application/json" \
269+ -d ' {"clearCache": "do_not_clear"}' )
270+
271+ DEPLOY_ID=$( echo " $DEPLOY_RESPONSE " | jq -r ' .id' )
272+ echo -e " ${GREEN} ✅ Deploy triggered (ID: $DEPLOY_ID )${NC} "
273+ else
274+ echo -e " ${RED} ❌ Failed to create service (HTTP $HTTP_CODE )${NC} "
275+ echo " "
276+ echo " Response:"
277+ echo " $BODY " | jq ' .' 2> /dev/null || echo " $BODY "
278+ echo " "
279+ exit 1
280+ fi
223281fi
224282
283+ echo " "
284+ echo -e " ${BLUE} 📋 Next Steps:${NC} "
285+ echo " 1. View deployment: https://dashboard.render.com/web/$SERVICE_ID "
286+ echo " 2. Set ANOMSTACK_ADMIN_PASSWORD secret (if not already set):"
287+ echo " - Go to service → Environment"
288+ echo " - Mark ANOMSTACK_ADMIN_PASSWORD as secret"
289+ echo " - Set your admin password"
290+ echo " 3. Wait for build to complete (~5-10 minutes)"
291+ echo " 4. Access dashboard: https://anomstack-demo.onrender.com"
292+ echo " "
293+
294+ echo -e " ${BLUE} 💡 View logs:${NC} "
295+ echo " export RENDER_SERVICE_ID=$SERVICE_ID "
296+ echo " make render-logs"
297+ echo " "
298+
225299echo -e " ${GREEN} ✅ Deployment initiated successfully!${NC} "
0 commit comments