Skip to content

chore(deps): bump callstackincubator/react-native-harness from 1.2.0 to 1.4.0 - #299

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/callstackincubator/react-native-harness-1.4.0
Open

chore(deps): bump callstackincubator/react-native-harness from 1.2.0 to 1.4.0#299
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/callstackincubator/react-native-harness-1.4.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 6, 2026

Copy link
Copy Markdown
Contributor

Bumps callstackincubator/react-native-harness from 1.2.0 to 1.4.0.

Changelog

Sourced from callstackincubator/react-native-harness's changelog.

1.4.0 (2026-08-03)

🚀 Features

  • Harness now offers experimental native iOS coverage for selected CocoaPods, so you can see which native code paths your Harness tests exercise. After a covered run, Harness produces native-coverage.lcov, giving you a concrete way to inspect and report native coverage alongside your existing test results. (#83)
  • Harness test files can now opt into platform-specific execution by suffixing the file name with a known platform, while shared harness tests continue to run everywhere. When you run Harness for a specific runner, files for other known platforms are filtered out before Jest schedules them, so *.ios.harness.* and *.android.harness.* tests can live side by side without failing on the wrong platform. (#134)
  • Harness runs can now emit detailed diagnostics: enable them with the new diagnostics config option (or RN_HARNESS_DIAGNOSTICS env var) to get a Chrome Trace Event JSON file plus a console summary showing where time went during a run — session setup, Metro bundling, bridge/device round-trips, and per-file test execution. Load the trace directly in chrome://tracing or Perfetto. Diagnostics are off by default with zero overhead. (#148)
  • resetEnvironmentBetweenTestFiles now accepts 'runtime' as a faster alternative to a full app restart between test files. Instead of relaunching the app, the runtime is reset in place, which noticeably speeds up suites with many test files while keeping each file isolated. Existing true/false settings keep working as before. (#154)
  • The official GitHub Action now computes the Metro cache key itself instead of hashing a static file list: it accounts for your lockfile(s), Metro/Babel config, the resolved @react-native-harness/bundler-metro version, and your cache.version salt, so the cache invalidates automatically when you upgrade Metro, not only when a lockfile or config file changes. A new cacheSavePolicy action input ('default-branch' by default, or 'always'/'never') controls when a new cache entry is saved, and a run only saves a new entry when its cache contents actually changed. (#161, #160)
  • Harness now starts building the Metro bundle as soon as the Metro server is up, instead of waiting for the emulator/simulator to finish booting first. On cold starts, bundling now overlaps platform boot instead of happening after it, cutting wall-clock time by up to the full first-bundle build duration. Startup stall errors are also more actionable, distinguishing device-side connectivity issues from a slow or broken bundle build. A new eagerPrewarm config option (default true) lets you opt out on constrained runners where emulator boot and bundling might contend for CPU. (#149)
  • Metro's transform and file-map caches now persist under .harness/cache/metro and .harness/cache/metro-file-map in your project root, enabled by default, so repeated Metro runs and CI jobs reuse work instead of rebuilding from scratch. Configure this with the new cache.metro and cache.version options; the previous unstable__enableMetroCache flag still works but is deprecated in favor of cache.metro. The official GitHub Action restores and saves the new cache paths automatically. (#160)
  • Test files now load faster, since Harness no longer resends code your app already has. This was previously an experimental opt-in and is now enabled by default; the old experimental flag still works but is deprecated in favor of the new skipAlreadyIncludedModules option. (#158)

🩹 Fixes

  • Using expect.soft will no longer throw an internal exception. (#105)

  • Add the permissions config flag for cross-platform permission automation, using the iOS XCTest agent for prompt auto-accept and Android adb pm grant for requested dangerous permissions. (#106)

  • Harness will stop trying to treat connected physical Android devices as emulators. If you run against an Android emulator and also have a physical device plugged in, Harness will now pick the emulator cleanly instead of failing during device resolution. (#112)

  • Harness now lets you target connected physical iOS devices by hardware UDID as well as by device name or CoreDevice identifier, which makes it easier to select the exact device when multiple phones share similar names. (#113)

  • When forwardClientLogs is enabled, Harness continues attaching device console output to the active test result, while keeping the internal log-capture path simpler and easier to maintain. (#115)

  • Harness now lets you build the iOS XCTest agent binary directly from the CLI, without starting a Harness test run. This makes it easier to prepare the agent artifact ahead of time for external injection workflows. (#117)

  • Harness on iOS can now start from an externally prepared .xctestrun and derived data directory, so you can run XCTest-based flows on hosted device infrastructure without rebuilding the agent on the runner. (#116)

  • Harness on web can now pass Playwright launch arg overrides through the browser config, so you can turn off defaults like --enable-automation without forking the runner. (#119)

  • Harness now keeps the browser's native Event and EventTarget on web, while still applying the shim where React Native needs it, so web users no longer lose native DOM behavior. (#122)

  • Harness test callbacks now consistently receive a HarnessTestContext in test, it, beforeEach, and afterEach, exposing task metadata, dynamic skipping with context.skip(...), and per-test onTestFinished / onTestFailed lifecycle hooks. (#125)

  • Harness now handles app bridge reloads, reconnects, disconnects, and dropped sockets more reliably during test runs. For Harness users, this means fewer stuck runs waiting on a dead RPC channel and clearer failures when the app reloads, crashes, or loses its bridge connection mid-test. (#132)

  • Harness test events now include richer per-test context, so end-users can skip or react to individual tests more reliably and get clearer pass/fail reporting from the runner. (#131)

  • Crash detection now uses app sessions with native crash evidence, so users get faster, clearer failure reports and more reliable diagnosis on real devices. (#133)

  • Harness test runs keep Metro and the device responsive together, reducing slowdowns on larger development machines while preserving small CI runner behavior. (#152, #151)

  • The iOS permission-dialog watchdog now uses far less CPU, and its polling interval is tunable via HARNESS_XCTEST_AGENT_TICK_INTERVAL_MS. (#163)

  • Android Harness runs now use more of the CPU available on larger machines, making local emulator tests faster without changing behavior on small CI runners. (#151)

  • Fixes a hang where the harness process kept running after tests finished whenever diagnostics were enabled (via the diagnostics config option or RN_HARNESS_DIAGNOSTICS). Diagnostics instrumentation replaced subprocess handles returned by adb/simctl with plain promises, so teardown could no longer kill the background adb logcat / app-launch processes and they kept the harness alive. Instrumented calls now return the original subprocess handles untouched, so runs with diagnostics enabled terminate cleanly. (#159)

  • Fixes a hang where the harness process never exits after tests finish, most common on Android and occasional on iOS. A stray WebSocket connection to Metro's dev server (e.g. a half-open HMR client) could prevent the server from shutting down, leaving Jest running indefinitely until it was killed manually or by a CI timeout. Metro now force-closes any lingering connections when the harness tears down, so runs terminate reliably and Ctrl+C/SIGTERM work as expected. (#155)

  • Fixes an unbounded memory leak that OOM'd the Harness runner on suites with many test files. Each test file is fetched from Metro as its own bundle entry point, and Metro keeps a full dependency graph in memory per entry for delta updates — so the harness retained one graph (~tens of MB) per test file for the whole run, climbing until JavaScript heap out of memory. The runtime now releases each file's Metro graph once the file finishes (via the dev server's standard graph-release request), keeping memory flat regardless of how many test files a run contains. (#145, #144)

  • Fixes Metro prewarm so it actually warms the graph the app requests. On Expo projects, the prewarm request was missing several transform/query params the app's real bundle request uses, so the prewarmed graph was essentially always thrown away and rebuilt from scratch; on bare React Native it was missing lazy=true. Both client types now request byte-identical bundle URLs, so the prewarm work is no longer wasted, and a new guard logs a warning if the two URLs ever drift apart again. (#150)

  • Fixes an unbounded memory leak in the runtime promise tracker that could exhaust the JS heap (JavaScript heap out of memory) during long runs. Apps that keep producing work every frame (animations, requestAnimationFrame loops, polling, async data-binding) create a stream of promises that never settle; these were retained forever along with a captured stack, growing memory until the run crashed. Harness now releases a promise's tracking record as soon as the promise is garbage-collected and caps the number of retained records, so memory stays bounded regardless of how busy the app under test is. (#143, #142)

  • Android E2E crash-detection logcat cleanup no longer surfaces an unhandled promise rejection during Harness shutdown, which previously crashed the whole test process. (#162)

  • Harness now asks the iOS XCTest permission agent to stop gracefully when a test run ends, letting its session finish on its own before Harness falls back to terminating xcodebuild. This avoids cutting off an otherwise-passing agent session during teardown and leaves fewer stray simulator and xcodebuild processes behind after tests complete. (#139)

  • Collapses the two competing subprocess shutdown mechanisms (the global process-level SIGINT/SIGTERM net in packages/tools/src/spawn.ts and the session's own abort-driven dispose) into one session-lifetime abort signal. Long-lived child processes (Android logcat, iOS launch process and XCTest agent, web browser, Vega app) now abort on session teardown through a single signal instead of racing a separate raw-kill handler. (#164, #162)

  • Harness test runs now use markedly less memory while Metro bundles, and Metro configs keep the project's own resolver.blockList instead of having it discarded. (#173)

  • Harness runs on iOS no longer linger for up to ~25 seconds after tests finish (#176) printing results. Uncancelled timers and abort listeners left over from internal Promise.race calls (XCTest agent shutdown, Android/iOS/Vega app session polling, and startup crash detection) could keep the process alive past test completion; they are now cleaned up as soon as the other side of the race settles.

  • Harness commands now include the supported Jest CLI runtime, so the init command works when invoked through yarn dlx or npx. (#168)

  • The web and Vega platforms start correctly again. Session setup previously threw Cannot read properties of undefined (reading 'aborted') because these runners received the harness config in place of their init options. (#175)

  • Harness now adapts iOS permission-agent startup to the host's available memory (#174, #171)

... (truncated)

Commits
  • 546344e chore: release v1.4.0
  • 4dd68dd chore: update action artifacts
  • a4d63b5 fix: cancel uncleared timers and abort listeners left by lost Promise.race br...
  • 0b84bcf Fix web and vega platform runner init signature mismatch (#175)
  • d4678c8 perf(platform-ios): adapt startup to host capabilities (#174)
  • 2a679e0 fix(cli): bundle supported Jest CLI runtime (#168)
  • 696a257 Cut Metro's memory and CPU footprint during harness runs (#173)
  • 69a48a5 Unify subprocess lifecycle around a single session-owned abort signal (#164)
  • 14bc398 fix(platform-ios): gracefully stop XCTest agent (#139)
  • 50808c7 Reduce XCTest permission watchdog CPU usage and make its polling interval tun...
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [callstackincubator/react-native-harness](https://github.com/callstackincubator/react-native-harness) from 1.2.0 to 1.4.0.
- [Release notes](https://github.com/callstackincubator/react-native-harness/releases)
- [Changelog](https://github.com/callstackincubator/react-native-harness/blob/main/CHANGELOG.md)
- [Commits](callstackincubator/react-native-harness@v1.2.0...v1.4.0)

---
updated-dependencies:
- dependency-name: callstackincubator/react-native-harness
  dependency-version: 1.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants