React Native · CI/CD
CodePush release platform
A CLI, a release dashboard and pipelines that ship JavaScript fixes to our Android and iOS apps over the air, without waiting for a store review.
- apps on one release flow
- 2
- apps on one release flow
- platforms: Android + iOS
- 2
- platforms: Android + iOS
- published CLI
- npm
- published CLI
- from merge to users
- Minutes
- from merge to users
The problem
Every bug fix in our React Native apps waited for a full store build and review. Over-the-air (CodePush) updates existed, but releasing them was manual, easy to get wrong across several apps and environments, and a React Native 0.83 upgrade broke the app restart that applies an update.
What I built
Pick branch→CLI / dashboard→Build JS bundle→Release to staging or prod→App updates on next open
- CLI, published to npm: build, release, disable and roll back updates for each app and environment with one command.
- Release dashboard: see every deployment and release, choose a branch, then build and release from the browser.
- Pipelines: Bitbucket Pipelines run the same release steps in CI.
- Safe testing: test releases can be limited to allowlisted phone numbers before going to everyone.
- Restart fixes: patched React Native 0.83’s bundle loading so updates apply on Android and iOS, and added a restart guard plus a watchdog so a bad update can’t leave the app stuck.
Result
JavaScript-only fixes reach users in minutes, not after a store review, across the Packers & Movers app and the partner app, on Android and iOS.
What I learned
- Check that a commit range is JavaScript-only before an over-the-air release. A native change shipped over the air crashes the app.
- Patches to
node_modulesget lost. Commit them withpatch-packageand check that they still apply after every upgrade.