@@ -233,14 +233,17 @@ jobs:
233233 server_log="$report_dir/scim-next.log"
234234 mkdir -p "$report_dir"
235235 rm -rf .next/dev
236- node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3017 > "$server_log" 2>&1 &
236+ setsid node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3017 > "$server_log" 2>&1 &
237237 server_pid=$!
238238 finish() {
239239 status=$?
240- kill "$server_pid" 2>/dev/null || true
240+ bash ../../.github/scripts/stop-session.sh "$server_pid" || status=1
241241 wait "$server_pid" 2>/dev/null || true
242242 awk '/^ (GET|POST|PUT|PATCH|DELETE|HEAD) \/api\// { print }' "$server_log" > "$report_dir/scim-http-status.log"
243- [ "$status" -eq 0 ] || tail -n 200 "$server_log"
243+ if [ "$status" -ne 0 ]; then
244+ tail -n 200 "$server_log"
245+ exit "$status"
246+ fi
244247 }
245248 trap finish EXIT
246249 fail_startup() {
@@ -270,11 +273,11 @@ jobs:
270273 # reservation, and the SCIM suite above asserts PostgreSQL rate-limit storage,
271274 # so workflow execution gets its own app rather than adding Redis to that one.
272275 #
273- # Every app in this job starts from an empty Turbopack dev cache (.next/dev).
274- # Restoring the one the previous app left, built with other NEXT_PUBLIC_*
275- # values and cut off by `next dev` killing its server 100ms after SIGTERM,
276- # panicked Turbopack ("inner_of_upper_lost_follower") or wedged the first
277- # route compile in 12 of 175 CI runs .
276+ # The apps in this job share apps/sim/.next. Each starts from an empty Turbopack
277+ # dev cache: one written under other NEXT_PUBLIC_* values, by a server `next dev`
278+ # SIGKILLs 100ms after SIGTERM, can panic Turbopack or wedge a route compile on
279+ # restore. Each runs in its own session, and stop-session.sh returns only once
280+ # all of it has exited, so no app starts beside one still writing .next/dev .
278281 - name : Verify single-block workflow runs over real HTTP
279282 working-directory : apps/sim
280283 env :
@@ -292,14 +295,17 @@ jobs:
292295 server_log="$report_dir/stop-after-next.log"
293296 mkdir -p "$report_dir"
294297 rm -rf .next/dev
295- node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3018 > "$server_log" 2>&1 &
298+ setsid node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3018 > "$server_log" 2>&1 &
296299 server_pid=$!
297300 finish() {
298301 status=$?
299- kill "$server_pid" 2>/dev/null || true
302+ bash ../../.github/scripts/stop-session.sh "$server_pid" || status=1
300303 wait "$server_pid" 2>/dev/null || true
301304 awk '/^ (GET|POST|PUT|PATCH|DELETE|HEAD) \/api\// { print }' "$server_log" > "$report_dir/stop-after-http-status.log"
302- [ "$status" -eq 0 ] || tail -n 200 "$server_log"
305+ if [ "$status" -ne 0 ]; then
306+ tail -n 200 "$server_log"
307+ exit "$status"
308+ fi
303309 }
304310 trap finish EXIT
305311 fail_startup() {
@@ -340,14 +346,17 @@ jobs:
340346 server_log="$report_dir/desktop-inbox-next.log"
341347 mkdir -p "$report_dir"
342348 rm -rf .next/dev
343- node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3019 > "$server_log" 2>&1 &
349+ setsid node ../../node_modules/next/dist/bin/next dev --hostname 127.0.0.1 --port 3019 > "$server_log" 2>&1 &
344350 server_pid=$!
345351 finish() {
346352 status=$?
347- kill "$server_pid" 2>/dev/null || true
353+ bash ../../.github/scripts/stop-session.sh "$server_pid" || status=1
348354 wait "$server_pid" 2>/dev/null || true
349355 awk '/^ (GET|POST|PUT|PATCH|DELETE|HEAD) \/api\// { print }' "$server_log" > "$report_dir/desktop-inbox-http-status.log"
350- [ "$status" -eq 0 ] || tail -n 200 "$server_log"
356+ if [ "$status" -ne 0 ]; then
357+ tail -n 200 "$server_log"
358+ exit "$status"
359+ fi
351360 }
352361 trap finish EXIT
353362 fail_startup() {
0 commit comments