Skip to content

chore: upgrade react native to 0.81.5#142

Merged
patrickkabwe merged 5 commits intomainfrom
chore/upgrade-react-native-to-0.81.5
Nov 23, 2025
Merged

chore: upgrade react native to 0.81.5#142
patrickkabwe merged 5 commits intomainfrom
chore/upgrade-react-native-to-0.81.5

Conversation

@patrickkabwe
Copy link
Copy Markdown
Owner

@patrickkabwe patrickkabwe commented Nov 23, 2025

Description

This PR upgrades React Native from 0.81.0 to 0.81.5.

Changes

  • Updated version to 0.81.5 in root and example package.json
  • Updated all packages to 0.81.5 in example package.json
  • Updated Node.js engine requirement from >=18 to >=20
  • Removed debug AndroidManifest.xml and consolidated cleartext traffic configuration
  • Updated AndroidManifest.xml to use manifest placeholder for usesCleartextTraffic

Testing

  • Verify the app builds successfully on iOS
  • Verify the app builds successfully on Android
  • Test basic file system operations

Related

Upgrades React Native to the latest patch version 0.81.5.

Summary by CodeRabbit

  • Chores
    • Updated React Native development dependency to 0.81.5
    • Increased Node.js minimum version to 20
  • Cleanup
    • Removed a redundant debug manifest
    • Made the app's cleartext network policy configurable
  • CI
    • Consolidated iOS build into a matrix-based job with manual trigger
    • Updated CI runtimes and simplified pod/cache steps

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Nov 23, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Removes the debug Android manifest, adds a configurable cleartext traffic placeholder to the main Android manifest, bumps React Native from 0.81.0 → 0.81.5 in project and example, raises the example Node engine requirement to >=20, and consolidates and reworks the iOS CI workflow into a matrix build with Ruby update and conditional Podfile tweak.

Changes

Cohort / File(s) Summary
Android Manifests
example/android/app/src/debug/AndroidManifest.xml, example/android/app/src/main/AndroidManifest.xml
Deletes the debug manifest; updates the main manifest <application> to include android:usesCleartextTraffic="${usesCleartextTraffic}" (placeholder-driven configurable policy).
Package manifests
package.json, example/package.json
Bumps react-native from 0.81.00.81.5 in project and example; example/package.json raises engines.node from >=18>=20 and updates related RN devDependencies.
iOS CI Workflow
.github/workflows/ios-build.yml
Adds workflow_dispatch and permissions: contents: read; consolidates arch jobs into a matrix build job (arch: [new, old], fail-fast disabled); updates Ruby to 3.2; removes/ comments Pod cache steps and pod cache restore; adds conditional step to modify Podfile when matrix.arch == 'old'; adjusts install/build steps and xcodebuild invocation (workspace/scheme set to NitroTextExample) and step renames.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant GH as GitHub Actions
    participant Runner as Runner
    participant Shell as Shell/Steps
    participant Xcode as xcodebuild

    note over GH,Runner `#DDEBF7`: Trigger (push / workflow_dispatch)
    GH->>Runner: start workflow
    Runner->>Runner: strategy.matrix.arch => [new, old]
    alt arch == "old"
        Shell->>Shell: modify Podfile to disable new arch
    else arch == "new"
        Shell->>Shell: leave Podfile unchanged
    end
    Shell->>Shell: install dependencies (bun)
    Shell->>Shell: run pod install (no cache restore)
    Shell->>Xcode: run xcodebuild on NitroTextExample workspace & scheme
    Xcode-->>Runner: build result
    Runner-->>GH: workflow outcome
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Check example/android/app/src/main/AndroidManifest.xml placeholder interpolation and any gradle/CI substitution.
  • Verify RN bumps in package.json and example/package.json align with lockfile/native dependency expectations.
  • Review .github/workflows/ios-build.yml matrix logic, conditional Podfile modification, and xcodebuild invocation/args.

Possibly related PRs

  • Chore/bump nitro #78 — Modifies the same .github/workflows/ios-build.yml; likely related CI workflow changes.

Poem

🐇 I hopped through manifests at dawn,
Deleted debug crumbs and left a yawn,
Versions leapt and Node grew tall,
CI learned to build for all,
🥕 — whispered the rabbit, "Ship the haul!"

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main objective of the PR - upgrading React Native from 0.81.0 to 0.81.5, which is reflected in the package.json updates across both root and example directories.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/upgrade-react-native-to-0.81.5

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9403fb5 and 1811bd1.

⛔ Files ignored due to path filters (1)
  • example/ios/Podfile.lock is excluded by !**/*.lock
📒 Files selected for processing (1)
  • .github/workflows/ios-build.yml (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Build iOS Example App (old)
  • GitHub Check: Build iOS Example App (new)
  • GitHub Check: Build Android Example App (old architecture)
  • GitHub Check: Build Android Example App (new architecture)
🔇 Additional comments (8)
.github/workflows/ios-build.yml (8)

3-4: ✅ Approve security and UX improvements to workflow triggers.

The addition of permissions: { contents: read } restricts unnecessary permissions to the minimum required, and workflow_dispatch enables manual workflow execution for debugging and testing. Both are improvements.

Also applies to: 39-39


49-55: ✅ Approve matrix strategy for testing both architectures.

The matrix strategy with fail-fast: false and arch: [new, old] enables testing of both the new React Native architecture and the legacy architecture in parallel. This provides broader coverage of potential compatibility issues. The job name correctly includes ${{ matrix.arch }} for clarity in the CI logs.

Also applies to: 50-50


64-64: ✅ Approve dependency installation label update.

The label change from "Install npm dependencies (bun)" to "Install dependencies (bun)" is more accurate since bun is the package manager in use.


67-69: ✅ Approve conditional Podfile modification for architecture variants.

The conditional step correctly disables the new architecture environment variable in the Podfile when testing the legacy architecture variant. This ensures proper isolation between the two build variants.


74-74: ✅ Approve Ruby version upgrade to 3.2.

The upgrade from Ruby 2.7.2 to 3.2 aligns with the Node engine requirement bump to >=20 mentioned in the PR objectives and ensures compatibility with current CocoaPods and bundler versions.


81-87: Clarify the intent behind commenting out the CocoaPods cache.

The CocoaPods cache section has been commented out instead of removed. Please confirm:

  1. Is this intentional (e.g., to resolve a caching-related issue or due to environment constraints)?
  2. If intentional, consider adding an inline comment explaining why the cache is disabled.
  3. If accidental, the cache should be uncommented or removed entirely to avoid confusion.

95-105: ✅ Approve build command refactoring and multi-line formatting.

The refactored xcodebuild command improves readability by breaking it into multiple lines and maintains the set -o pipefail safety net. The compiler and linker configuration (CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++) is preserved, and the final piping to xcpretty is intact.


99-100: ✅ Approve correction of workspace and scheme names.

The workspace and scheme names have been corrected to NitroFsExample, matching the actual example app structure in the repository. This resolves the critical issue from the previous review and ensures the build will target the correct Xcode workspace and build scheme.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0b8da52 and 9610472.

⛔ Files ignored due to path filters (2)
  • bun.lock is excluded by !**/*.lock
  • example/ios/Podfile.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • example/android/app/src/debug/AndroidManifest.xml (0 hunks)
  • example/android/app/src/main/AndroidManifest.xml (1 hunks)
  • example/package.json (3 hunks)
  • package.json (1 hunks)
💤 Files with no reviewable changes (1)
  • example/android/app/src/debug/AndroidManifest.xml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build Android Example App (new architecture)
  • GitHub Check: Build Android Example App (old architecture)
🔇 Additional comments (2)
package.json (1)

63-63: Verify Node.js engine requirement for consistency.

React Native 0.81 requires Node.js version 20.19.4 or higher. The root package.json upgrades to React Native 0.81.5 but lacks an engines.node field, unlike the example app's package.json. While this distinction may be intentional for a library (to avoid constraining consuming projects), consider whether explicitly documenting the Node requirement would improve clarity for contributors and CI pipelines.

example/package.json (1)

15-15: Good alignment of React Native dependencies and Node engine upgrade.

The updates correctly bump React Native to 0.81.5 across the runtime and all @react-native/* devDependencies, and the Node engine requirement is appropriately raised to >=20, which aligns with React Native 0.81's requirement for Node.js version 20.19.4 or higher. The React 19.1.0 version is compatible with this toolchain.

Verify that your CI pipelines and development setup documentation are also updated to enforce Node.js >=20 for builds and developer machines.

Also applies to: 27-30, 42-42

android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="${usesCleartextTraffic}"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify Gradle placeholder is configured in build scripts.

The manifest placeholder ${usesCleartextTraffic} requires corresponding build configuration to resolve this value at build time. Without proper Gradle configuration, the build may fail or the placeholder may remain unresolved.

Please verify that example/android/app/build.gradle (or similar Gradle configuration) defines the usesCleartextTraffic placeholder with an appropriate value (e.g., true for development, false for production).

Run the following script to check for the property definition:


🏁 Script executed:

#!/bin/bash
# Description: Search for usesCleartextTraffic property in Android build configuration files

echo "Checking for usesCleartextTraffic in gradle files..."
rg -n "usesCleartextTraffic" example/android/app/build.gradle* example/android/gradle.properties --type gradle --type properties

echo ""
echo "Checking for manifestPlaceholders in gradle files..."
rg -n "manifestPlaceholders" example/android/app/build.gradle* --type gradle

echo ""
echo "Checking for resValue definitions in gradle files..."
rg -n "resValue" example/android/app/build.gradle* --type gradle

Length of output: 195


I'll explore the Android build structure to verify the Gradle configuration:

Now let me search the repository for gradle files and their contents:


---

🏁 Script executed:

```shell
#!/bin/bash
# Find all gradle files in the Android app directory

echo "Finding gradle files in example/android/app/..."
fd -e gradle -e properties example/android/app/

echo ""
echo "Listing all files in example/android/app/ directory:"
ls -la example/android/app/ 2>/dev/null || echo "Directory not found"

Length of output: 846


Now let me examine the build.gradle file to check for the manifestPlaceholders configuration:


---

🏁 Script executed:

```shell
#!/bin/bash
# Examine the build.gradle file content

echo "Contents of example/android/app/build.gradle:"
cat example/android/app/build.gradle

echo ""
echo "Searching for manifestPlaceholders or usesCleartextTraffic in build.gradle:"
rg -n "manifestPlaceholders|usesCleartextTraffic" example/android/app/build.gradle

Length of output: 4816


Add manifestPlaceholders configuration to build.gradle to resolve the ${usesCleartextTraffic} placeholder.

The build.gradle file does not contain any manifestPlaceholders configuration. The android:usesCleartextTraffic="${usesCleartextTraffic}" placeholder in AndroidManifest.xml will remain unresolved at build time, causing the build to fail. Add the following to example/android/app/build.gradle in the defaultConfig block (or appropriate buildType/productFlavor):

manifestPlaceholders = [usesCleartextTraffic: "false"]

Adjust the value (true for development, false for production) as appropriate for your build configuration.

🤖 Prompt for AI Agents
In example/android/app/src/main/AndroidManifest.xml around line 12 the attribute
android:usesCleartextTraffic="${usesCleartextTraffic}" uses an unresolved
manifest placeholder; update example/android/app/build.gradle (app module) to
add a manifestPlaceholders entry (inside defaultConfig or the appropriate
buildType/productFlavor) that defines usesCleartextTraffic with the desired
value (e.g., "false" for production or "true" for development) so the
placeholder is resolved at build time.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 10 to +12
android:allowBackup="false"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="${usesCleartextTraffic}"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Define usesCleartextTraffic manifest placeholder

The Android manifest now sets android:usesCleartextTraffic="${usesCleartextTraffic}", but the app’s Gradle config does not declare any manifestPlaceholders value for usesCleartextTraffic (nothing in example/android/app/build.gradle and rg "manifestPlaceholders" example/android returns empty). The manifest merger treats unresolved placeholders as errors, so every Android build will fail during manifest processing until a default value is provided or the substitution is removed.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fb17db5 and 9403fb5.

📒 Files selected for processing (1)
  • .github/workflows/ios-build.yml (2 hunks)
🔇 Additional comments (4)
.github/workflows/ios-build.yml (4)

81-87: Clarify why CocoaPods caching has been disabled.

The CocoaPods cache section (lines 81–87) is now commented out. This may impact build performance and reliability. Please clarify:

  1. Was caching disabled intentionally due to cache invalidation or environment issues?
  2. Is this temporary until cache issues are resolved, or a permanent change?
  3. Are there any known issues with CocoaPods caching on macOS-15 or Ruby 3.2?

49-55: Matrix build consolidation improves maintainability.

The migration from dual separate jobs to a single matrix-based job with arch: [new, old] is a good refactoring that eliminates duplication and centralizes the build logic. The fail-fast: false setting ensures both architecture variants are tested even if one fails.


3-4: Permissions and workflow_dispatch additions are reasonable.

Adding minimal contents: read permissions and workflow_dispatch trigger follows best practices for GitHub Actions security and manual workflow invocation.

Also applies to: 39-39


74-74: Ruby version upgrade to 3.2 is appropriate and gem compatibility is confirmed.

Verification confirms all bundled gems in Gemfile.lock are compatible with Ruby 3.2. The Gemfile specifies ruby ">= 2.6.10" (allowing Ruby 3.2), and the current lock file is pinned to Ruby 3.3.6, which is newer than 3.2 and demonstrates compatibility. All gem constraints (activesupport 7.2.3, cocoapods, xcodeproj, concurrent-ruby) are satisfied for Ruby 3.2.

Comment thread .github/workflows/ios-build.yml Outdated
@patrickkabwe patrickkabwe merged commit c6caa36 into main Nov 23, 2025
5 checks passed
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.

1 participant