@@ -185,16 +185,6 @@ jobs:
185185 exit 1
186186 fi
187187
188- ./build/simdeck serve \
189- --port 4310 \
190- --bind 127.0.0.1 \
191- --access-token "$PROVIDER_TOKEN" \
192- --client-root "$PWD/client/dist" \
193- --video-codec h264-software \
194- --stream-quality "${SIMDECK_STREAM_QUALITY:-ci-software}" \
195- > simdeck.log 2>&1 &
196- simdeck_pid="$!"
197-
198188 dump_logs() {
199189 echo "--- simdeck.log ---"
200190 cat simdeck.log || true
@@ -204,33 +194,46 @@ jobs:
204194 find "$HOME/Library/Logs/DiagnosticReports" -maxdepth 1 -type f \( -name 'simdeck*.ips' -o -name 'simdeck*.crash' \) -print -exec cat {} \; || true
205195 }
206196
207- healthy=0
208- for _ in {1..120}; do
209- if ! kill -0 "$simdeck_pid" 2>/dev/null; then
210- echo "simdeck exited before health check passed"
197+ wait_for_simdeck_health() {
198+ healthy=0
199+ for _ in {1..120}; do
200+ if ! kill -0 "$simdeck_pid" 2>/dev/null; then
201+ echo "simdeck exited before health check passed"
202+ dump_logs
203+ return 1
204+ fi
205+ if curl -fsS http://127.0.0.1:4310/api/health >/dev/null; then
206+ healthy=1
207+ break
208+ fi
209+ sleep 1
210+ done
211+ if [[ "$healthy" != "1" ]]; then
212+ echo "simdeck did not become healthy"
211213 dump_logs
212- exit 1
214+ return 1
213215 fi
214- if curl -fsS http://127.0.0.1:4310/api/health >/dev/null; then
215- healthy=1
216- break
217- fi
218- sleep 1
219- done
220- if [[ "$healthy" != "1" ]]; then
221- echo "simdeck did not become healthy"
222- dump_logs
223- exit 1
224- fi
216+ }
225217
226- echo "Prewarming private simulator stream"
227- if ! run_with_timeout 60 curl -fsS -X POST "http://127.0.0.1:4310/api/simulators/$ios_udid/refresh?simdeckToken=$PROVIDER_TOKEN"; then
228- echo "SimDeck private stream prewarm failed"
229- dump_logs
230- exit 1
231- fi
232- echo
233- echo "Private simulator stream prewarmed"
218+ start_simdeck_server() {
219+ echo "Starting SimDeck server"
220+ ./build/simdeck serve \
221+ --port 4310 \
222+ --bind 127.0.0.1 \
223+ --access-token "$PROVIDER_TOKEN" \
224+ --client-root "$PWD/client/dist" \
225+ --video-codec h264-software \
226+ --stream-quality "${SIMDECK_STREAM_QUALITY:-ci-software}" \
227+ >> simdeck.log 2>&1 &
228+ simdeck_pid="$!"
229+ echo "SimDeck server pid: $simdeck_pid"
230+ wait_for_simdeck_health
231+ }
232+
233+ : > simdeck.log
234+ simdeck_pid=""
235+ start_simdeck_server
236+ echo "Skipping private stream prewarm; the first browser WebRTC connection will attach the stream."
234237
235238 provider_base_url="$SIMDECK_CLOUD_URL/simulator/$PREVIEW_ID"
236239 bridge_script="scripts/studio-provider-bridge.mjs"
@@ -300,6 +303,7 @@ jobs:
300303 fi
301304
302305 deadline=$((SECONDS + 1800))
306+ simdeck_restarts=0
303307 while true; do
304308 sleep 30
305309 if (( SECONDS >= deadline )); then
@@ -313,7 +317,15 @@ jobs:
313317 if ! kill -0 "$simdeck_pid" 2>/dev/null; then
314318 echo "simdeck exited"
315319 dump_logs
316- exit 1
320+ if (( simdeck_restarts >= 2 )); then
321+ echo "simdeck restart limit reached"
322+ exit 1
323+ fi
324+ simdeck_restarts=$((simdeck_restarts + 1))
325+ echo "Restarting SimDeck server ($simdeck_restarts/2)"
326+ start_simdeck_server
327+ register || true
328+ continue
317329 fi
318330 if ! kill -0 "$bridge_pid" 2>/dev/null; then
319331 echo "provider bridge exited"
0 commit comments