Skip to content

Commit 501edaa

Browse files
committed
Harden provider daemon startup
1 parent 792ee02 commit 501edaa

1 file changed

Lines changed: 47 additions & 35 deletions

File tree

.github/workflows/simdeck-provider.yml

Lines changed: 47 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)