Files
Peter Abbondanzo 88b9c3fb7c Retry suite-level runtime failures (#58631)
Summary:
Pull Request resolved: https://github.com/react/react-native/pull/58631

Fantom's CI retries use Jest's `--onlyFailures` mode. Jest 29's default sequencer caches suite-level runtime errors as passing because they contain no failed test cases, so retries select no suites.

See https://github.com/react/react-native/actions/runs/35630015753/job/106440689782?pr=58624 of an example of this, where retries didn't actually do anything

Add a Fantom-specific sequencer that marks runtime-error suites as failed only for cache bookkeeping. This preserves the original test reporting while ensuring targeted retries rerun the crashed suite.

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D121063351

fbshipit-source-id: e24737cc247ea0e11aa04dac74d557a3f41f9db6
2026-09-24 06:58:58 -07:00

44 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
set -e
if [[ -f "BUCK" && -z "$FANTOM_FORCE_OSS_BUILD" ]]; then
export JS_DIR='..'
else
if [[ ! -f "private/react-native-fantom/build/tester/fantom_tester" ]]; then
yarn workspace @react-native/fantom build
fi
export FANTOM_FORCE_OSS_BUILD=1
fi
# The Fantom Jest process hosts a single shared Metro server. Each test
# triggers a fresh Metro bundle build whose dependency graph (transformed
# modules, source maps, inverse-deps, file-watcher subscription) lives in
# memory until the per-test DELETE evicts it. With the maxWorkers cap in
# jest.config.js (~16 in-flight bundles at peak), 16 GB gives ~40% heap
# headroom over the observed steady state of ~6 GB.
export NODE_OPTIONS='--max-old-space-size=16384'
# Parse arguments to extract custom flags
ARGS=()
for arg in "$@"; do
case "$arg" in
--benchmarks) export FANTOM_RUN_BENCHMARKS=1 ;;
*) ARGS+=("$arg") ;;
esac
done
if [[ -n "$FANTOM_RUN_BENCHMARKS" ]]; then
ARGS+=("--runInBand")
fi
yarn jest \
--config private/react-native-fantom/config/jest.config.js \
--testSequencer '<rootDir>/private/react-native-fantom/config/FantomTestSequencer.js' \
"${ARGS[@]}"