
How to Build a React Native CI/CD Pipeline That Deploys to Both App Stores in Under 20 Minutes
- Larry Brooks
- React Native, Mobile Development
- 01 Jun, 2026
Without a CI/CD pipeline, a React Native team's deployment day looks like this: a developer spends 2–3 hours building, signing, and submitting to both the App Store and Play Store. Every release. Every week. That is 100–150 hours per year — close to a full month of engineering time — on a process that should be automated.
A well-built pipeline runs the same process in under 20 minutes from a git push to the release branch. Here is every component.
The Pipeline Architecture
The pipeline has five stages: validate, build, test, sign, and deploy. Each stage has clear pass/fail criteria. A failure at any stage stops the pipeline, notifies the team, and provides diagnostic output.
GitHub Actions handles orchestration. The iOS build runs on a macOS runner. The Android build runs on a Linux runner. Both execute in parallel, which is why the total time stays under 20 minutes instead of doubling.
Stage 1: Validate (2 minutes)
TypeScript compilation with strict mode catches type errors. ESLint catches code quality issues. Dependency audit checks for known vulnerabilities. Version validation confirms the build number has been incremented. If any validation fails, the pipeline stops before spending compute resources on builds.
Stage 2: Build (8 minutes, parallel)
The iOS build uses Fastlane's gym action with the release scheme. The Android build uses Gradle's assembleRelease task. Both builds use Hermes for JavaScript compilation, which reduces bundle size compared to JavaScriptCore.
Build caching is critical. Cache CocoaPods, Gradle dependencies, and Hermes bytecode compilation between runs. A clean build takes 14+ minutes. A cached build takes 8.
Stage 3: Test (parallel with build)
Unit tests run via Jest with coverage thresholds. Integration tests run via Detox on iOS Simulator and Android Emulator. These run in parallel with builds because the test suite tests JavaScript logic and component rendering, not compiled app behavior. End-to-end tests run on a separate nightly schedule.
Stage 4: Sign (1 minute)
iOS signing uses Fastlane's match — which stores certificates and provisioning profiles in an encrypted git repository. Android signing uses a keystore stored in CI secrets. Automated signing eliminates the most common deployment failure: expired or misconfigured certificates.
Stage 5: Deploy (3 minutes)
iOS deployment uses Fastlane's deliver action to upload to App Store Connect and submit for review. Android deployment uses Fastlane's supply action to upload to the Play Store's internal testing track. For JavaScript-only changes, EAS Update deploys an OTA update in under 60 seconds — no store submission required.
The ROI
Automated deployment eliminates the weekly manual build tax, removes human error from the signing and submission process, and lets teams increase release frequency from weekly to daily. Every deployment is identical. Rollbacks are a single command.
If your team is still deploying React Native apps manually, let's automate the process.
