Skip to content

[build-tools] replace record-sim with serve-sim recording - #4474

Draft
gwdp wants to merge 2 commits into
mainfrom
gabe/serve-sim-recording-consumer
Draft

gwdp wants to merge 2 commits into
mainfrom
gabe/serve-sim-recording-consumer

Conversation

@gwdp

@gwdp gwdp commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Why

The session runner used record-sim to capture the framebuffer separately from serve-sim. The new serve-sim stack owns one native capture and a dedicated hardware recording encoder, so build-tools can use its recording client and keep the existing upload manifest.

Depends on expo/expo-device-hub#164–#167 being released in order before this consumer.

How

Start serve-sim record-video from the selected serve-sim package after its token-bearing preview is ready, wait for its start marker, and stop with SIGINT. Recording begins with that preview; footage before serve-sim startup is outside this recording. If serve-sim stops first, it finalizes the file during shutdown while the client waits for the manifest. Give the serve-sim process group up to 90 seconds after SIGTERM before SIGKILL, even when its package-manager wrapper exits early. Remove record-sim packaging; the upload step is unchanged.

Test Plan

  • corepack yarn jest-unit --runInBand src/steps/utils/__tests__/IosSimulatorRecordingUtils.test.ts src/steps/utils/__tests__/remoteDeviceRunSession.test.ts: 75 passed, including a wrapper-exit recording regression.
  • corepack yarn typecheck in build-tools, root corepack yarn lint, and root corepack yarn fmt:check: passed.
  • The matching local serve-sim binary produced a decodable MP4 and the existing manifest in pinned Tart iPhone 17, Xcode 26.4, with two concurrent H.264 viewers. A separate SIGTERM run confirmed finalization and client manifest wait.
  • Hosted EAS worker execution remains unverified. Release serve-sim before this consumer.

— Codex

@gwdp gwdp added the no changelog PR that doesn't require a changelog entry label Sep 25, 2026
@codecov

codecov Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.72180% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 72.66%. Comparing base (7fd8a3a) to head (a9ac7da).

Files with missing lines Patch % Lines
...ools/src/steps/utils/IosSimulatorRecordingUtils.ts 86.96% 15 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4474      +/-   ##
==========================================
+ Coverage   72.43%   72.66%   +0.23%     
==========================================
  Files         975      975              
  Lines       46624    46715      +91     
  Branches    10072    10091      +19     
==========================================
+ Hits        33767    33939     +172     
+ Misses      11857    11786      -71     
+ Partials     1000      990      -10     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gwdp
gwdp force-pushed the gabe/serve-sim-recording-consumer branch from a0f3012 to 1815695 Compare September 25, 2026 18:03
@gwdp

This comment has been minimized.

@devin-ai-integration

This comment has been minimized.

devin-ai-integration[bot]

This comment was marked as resolved.

@gwdp
gwdp force-pushed the gabe/serve-sim-recording-consumer branch from 1815695 to cff9ab3 Compare September 25, 2026 18:22
@gwdp

This comment has been minimized.

@devin-ai-integration

This comment has been minimized.

@gwdp
gwdp force-pushed the gabe/serve-sim-recording-consumer branch from cff9ab3 to 8ec7bd5 Compare September 27, 2026 23:54
@gwdp

gwdp commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Codex contribution: switched the iOS Simulator recording consumer to serve-sim record-video, preserved the upload manifest, and added retry and shutdown coverage. After rebasing onto current main, I fixed wrapper-exit tracking so a live recorder remains owned by its process group; the focused 75 tests, typecheck, lint, and formatting checks pass.

— Codex

@gwdp

This comment has been minimized.

@devin-ai-integration

This comment has been minimized.

devin-ai-integration[bot]

This comment was marked as resolved.

Co-authored-by: Codex <codex@openai.com>
@github-actions

Copy link
Copy Markdown

⏩ The changelog entry check has been skipped since the "no changelog" label is present.

@gwdp

This comment has been minimized.

@devin-ai-integration

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no changelog PR that doesn't require a changelog entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant