From d4937ed2ce3fd0b2f496bdfb3183a91bef4770ac Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 8 Sep 2026 09:46:05 +0100 Subject: [PATCH 1/2] build(deps): dependency updates 20260908 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - actions/setup-java 5.7.0 → 6.0.0 (#9272) - hendrikmuhs/ccache-action 1.2.23 → 1.2.24 (#9299) - rubocop 1.89.0 → 1.90.0 (#9274) - actions/deploy-pages 5.0.0 → 5.0.1 (#9301) - simplecov 1.1.1 → 1.3.0 (beyond #9320 1.2.0 to current; #9204 still out - stale packages/app/__tests__ path) - skip react / @types/react (#9160) - skip simplecov in packages/app/__tests__ (#9204) --- .github/workflows/deploy-api-reference.yml | 2 +- .github/workflows/linting.yml | 2 +- .github/workflows/tests_e2e_android.yml | 2 +- .github/workflows/tests_e2e_ios.yml | 6 +++--- .github/workflows/tests_e2e_other.yml | 4 ++-- Gemfile | 4 ++-- Gemfile.lock | 14 +++++++------- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy-api-reference.yml b/.github/workflows/deploy-api-reference.yml index c47b90af80..01f39763c6 100644 --- a/.github/workflows/deploy-api-reference.yml +++ b/.github/workflows/deploy-api-reference.yml @@ -60,4 +60,4 @@ jobs: - name: Deploy to GitHub Pages id: deployment # https://github.com/actions/deploy-pages/releases - uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 + uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1 diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 06c171bc3e..3285467bb1 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -37,7 +37,7 @@ jobs: node-version: 24 - name: Configure JDK # https://github.com/actions/setup-java/releases - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: 'temurin' java-version: '21' diff --git a/.github/workflows/tests_e2e_android.yml b/.github/workflows/tests_e2e_android.yml index 0e34228e8e..8dd45c6345 100644 --- a/.github/workflows/tests_e2e_android.yml +++ b/.github/workflows/tests_e2e_android.yml @@ -153,7 +153,7 @@ jobs: - name: Configure JDK # https://github.com/actions/setup-java/releases - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: 'temurin' java-version: '21' diff --git a/.github/workflows/tests_e2e_ios.yml b/.github/workflows/tests_e2e_ios.yml index 79cc7a3182..e1ede03153 100644 --- a/.github/workflows/tests_e2e_ios.yml +++ b/.github/workflows/tests_e2e_ios.yml @@ -151,7 +151,7 @@ jobs: - name: Configure JDK # https://github.com/actions/setup-java/releases - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: 'temurin' java-version: '21' @@ -211,7 +211,7 @@ jobs: # Detox is compiled during yarn install, using Xcode, set up cache first # https://github.com/hendrikmuhs/ccache-action/releases - - uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23 + - uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24 name: Xcode Compile Cache with: key: ${{ runner.os }}-${{ matrix.buildmode }}-${{ matrix.dep-resolution }}-ios-v3 # makes a unique key w/related restore key internally @@ -658,7 +658,7 @@ jobs: key: ${{ runner.os }}-ios-yarn-v1-${{ hashFiles('yarn.lock') }} restore-keys: ${{ runner.os }}-ios-yarn-v1 - - uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23 + - uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24 name: Xcode Compile Cache with: key: ${{ runner.os }}-archive-${{ matrix.dep-resolution }}-ios-v1 diff --git a/.github/workflows/tests_e2e_other.yml b/.github/workflows/tests_e2e_other.yml index 40ad8b6e83..9fa245df9d 100644 --- a/.github/workflows/tests_e2e_other.yml +++ b/.github/workflows/tests_e2e_other.yml @@ -131,7 +131,7 @@ jobs: - name: Configure JDK # https://github.com/actions/setup-java/releases - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: 'temurin' java-version: '21' @@ -164,7 +164,7 @@ jobs: restore-keys: ${{ runner.os }}-macos-yarn-v1 # https://github.com/hendrikmuhs/ccache-action/releases - - uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23 + - uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24 name: Xcode Compile Cache with: key: ${{ runner.os }}-macos-v2 diff --git a/Gemfile b/Gemfile index 55c513d22e..09efb3a0dd 100644 --- a/Gemfile +++ b/Gemfile @@ -21,8 +21,8 @@ gem 'xcodeproj', '1.28.1' # (Bundler 2.6 deprecates `--frozen` and would persist it into .bundle/config). # - Do NOT put Bundler-native `cooldown:` here — that needs Bundler 4.0.13+. # Dependabot cooldown for directory `/` lives in `.github/dependabot.yml`. -gem 'simplecov', '~> 1.0' +gem 'simplecov', '~> 1.2' gem 'simplecov-lcov', '~> 0.9' # Lint for packages/app Ruby helpers + __tests__ (yarn lint:ruby / tests:ios:ruby). -gem 'rubocop', '~> 1.75' +gem 'rubocop', '~> 1.90' diff --git a/Gemfile.lock b/Gemfile.lock index 2f240ff221..68a8570a1f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -107,8 +107,8 @@ GEM rainbow (3.1.1) regexp_parser (2.12.0) rexml (3.4.4) - rubocop (1.89.0) - json (~> 2.3) + rubocop (1.90.0) + json (>= 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) parallel (>= 1.10) @@ -124,7 +124,7 @@ GEM ruby-macho (4.1.0) ruby-progressbar (1.13.0) securerandom (0.4.1) - simplecov (1.1.1) + simplecov (1.3.0) simplecov-lcov (0.9.0) typhoeus (1.6.0) ethon (>= 0.18.0) @@ -158,8 +158,8 @@ PLATFORMS DEPENDENCIES cocoapods (= 1.17.0) - rubocop (~> 1.75) - simplecov (~> 1.0) + rubocop (~> 1.90) + simplecov (~> 1.2) simplecov-lcov (~> 0.9) xcodeproj (= 1.28.1) @@ -222,12 +222,12 @@ CHECKSUMS rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 - rubocop (1.89.0) sha256=4dee8e3ee9c45e474834efd9e8d6fd031e8331c8dacdff0de4ad65ae0a6faae7 + rubocop (1.90.0) sha256=9eb4c065b5c5154e4ef554c547972f3905a9eb6b53e657e580b6796b54bf8242 rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db ruby-macho (4.1.0) sha256=23dab37f7de0fe1e14f3bfa73bebc423ae8cd1d4fdb3e5585abc45a841eca920 ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 - simplecov (1.1.1) sha256=25825ef13f0b2e74694d769817dad6ab8e90131dabdaa666e522fea105521e78 + simplecov (1.3.0) sha256=d9886307863c1ead47657dcbed869bfffd82318808b09014d8f0ff77dcfe7492 simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd typhoeus (1.6.0) sha256=bacc41c23e379547e29801dc235cd1699b70b955a1ba3d32b2b877aa844c331d tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b From f75e289c04e5a7b95331b8935438a55a43a4e28d Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Mon, 14 Sep 2026 10:18:10 -0500 Subject: [PATCH 2/2] test(analytics, ios): bound getSessionId retries and log attempts Unify local and CI to the prior CI attempt budget so a cold simulator cannot burn Jet on a 240x60s loop; log each attempt for future triage. --- packages/analytics/e2e/analytics.e2e.js | 53 ++++++++++++++++++------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/packages/analytics/e2e/analytics.e2e.js b/packages/analytics/e2e/analytics.e2e.js index ed51368334..1b27bd83c5 100644 --- a/packages/analytics/e2e/analytics.e2e.js +++ b/packages/analytics/e2e/analytics.e2e.js @@ -28,26 +28,49 @@ describe('analytics()', function () { this.skip(); } const { getAnalytics, getSessionId } = analyticsModular; - let sessionId = await getSessionId(getAnalytics()); - // On iOS it can take ~ 3 minutes for the session ID to be generated - // Otherwise, `Analytics uninitialized` error will be thrown - // On CI we're only going to give it a few tries - const retries = global.isCI ? 3 : 240; - let attemptsLeft = retries; - while (!sessionId && attemptsLeft > 0) { - await Utils.sleep(1000); + // Native getSessionId can take up to ~60s before resolving null (iOS/Android + // bridge timeouts). Cap retries the same locally and on CI: a long local + // loop (formerly 240) outlives the Jet orchestrator and looks like a hang. + const maxAttempts = 4; // 1 initial + 3 retries (matches prior CI budget) + const startedAt = Date.now(); + let sessionId = null; + + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + const attemptStartedAt = Date.now(); sessionId = await getSessionId(getAnalytics()); - attemptsLeft -= 1; + const attemptMs = Date.now() - attemptStartedAt; + const totalMs = Date.now() - startedAt; + // eslint-disable-next-line no-console + console.log( + `[rnfb-e2e] analytics getSessionId attempt=${attempt}/${maxAttempts} ` + + `sessionId=${sessionId === null || sessionId === undefined ? String(sessionId) : sessionId} ` + + `attemptMs=${attemptMs} totalMs=${totalMs}`, + ); + if (sessionId) { + break; + } + if (attempt < maxAttempts) { + await Utils.sleep(1000); + } } - // on CI this will be ignored so it doesn't flake - if (!sessionId && global.isCI) { - this.skip(); - return; - } + // iOS simulator session-ID readiness is flaky; skip rather than fail. + // Keep prior CI skip for all platforms; Android local stays fail-loud. if (!sessionId) { + // eslint-disable-next-line no-console + console.log( + `[rnfb-e2e] analytics getSessionId giving up after ${maxAttempts} attempts ` + + `(totalMs=${Date.now() - startedAt}); platform=${Platform.ios ? 'ios' : 'android'} isCI=${!!global.isCI}`, + ); + if (Platform.ios || global.isCI) { + this.skip(); + return; + } return Promise.reject( - new Error('Firebase SDK did not return a session ID after 4 minutes'), + new Error( + `Firebase SDK did not return a session ID after ${maxAttempts} attempts ` + + `(totalMs=${Date.now() - startedAt})`, + ), ); }