Automating CodePush Releases with CircleCI
DeployPulse integrates cleanly with CircleCI pipelines. This guide shows how to automate dpctl release-react from a standard CircleCI job without requiring a custom orb — just a Node executor and a few environment variables.
Prerequisites
- A DeployPulse account and app already created
DEPLOYPULSE_ACCESS_KEYstored as a CircleCI project environment variable
.circleci/config.yml Example
The example below releases to Production from main and to Staging from develop. Each job authenticates explicitly with dpctl login --key "$DEPLOYPULSE_ACCESS_KEY", reading the project environment variable you set above.
version: 2.1
jobs:
release-production:
docker:
- image: cimg/node:24.0
steps:
- checkout
- run:
name: Install dependencies
command: npm ci
- run:
name: Install dpctl
command: |
npm i -g @deploypulseio/dpctl
- run:
name: Release to DeployPulse (Production)
command: |
dpctl login --key "$DEPLOYPULSE_ACCESS_KEY"
dpctl release-react MyApp-iOS ios \
--deploymentName Production \
--dev false
release-staging:
docker:
- image: cimg/node:24.0
steps:
- checkout
- run:
name: Install dependencies
command: npm ci
- run:
name: Install dpctl
command: |
npm i -g @deploypulseio/dpctl
- run:
name: Release to DeployPulse (Staging)
command: |
dpctl login --key "$DEPLOYPULSE_ACCESS_KEY"
dpctl release-react MyApp-iOS ios \
--deploymentName Staging \
--dev false
workflows:
ota-release:
jobs:
- release-production:
filters:
branches:
only: main
- release-staging:
filters:
branches:
only: develop
Replace MyApp-iOS and ios with your app name and platform (android). Add a second job pair for Android if needed.
Staged Rollout
Use --rollout to release to a percentage of users before a full rollout:
- run:
name: Release to DeployPulse (10% rollout)
command: |
dpctl release-react MyApp-iOS ios \
--deploymentName Production \
--dev false \
--rollout 10
Once you are confident in the release, promote to 100% from the dashboard or with dpctl patch.
Code Signing
To cryptographically sign releases so devices can verify bundle integrity before applying an update, pass --private-key with the path to your private key file:
- run:
name: Release to DeployPulse (signed)
command: |
echo "$CODE_SIGNING_KEY" > /tmp/private.pem
dpctl release-react MyApp-iOS ios \
--deploymentName Production \
--private-key /tmp/private.pem \
--dev false
Store the private key contents as a CircleCI environment variable (CODE_SIGNING_KEY). See the Code Signing guide for key generation and app configuration.
