← All work

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_modules get lost. Commit them with patch-package and check that they still apply after every upgrade.