CI/CD overview
Aether ships over-the-air updates to React Native apps. Wiring it into CI means a merge to your main branch publishes a release, instead of someone running the CLI by hand.
What a pipeline does
Section titled “What a pipeline does”Every pipeline in these guides does the same four things:
- Installs a pinned version of
@aetherpush/cli. - Logs in with a deploy-scoped API key.
- Runs
aether release-reactto bundle the app and upload the release. - On GitLab, CircleCI, Jenkins, and Bitrise, filters that file before uploading it.
The release command is the same on every platform:
aether release-react "my-react-native-app" android \ --deploymentName "Staging" \ --rollout "100%" \ --json > release.json--deploymentName picks the channel clients pull from. --rollout sets the share of clients eligible for the release. --json prints the full server response, including signed download URLs. The GitLab, CircleCI, Jenkins, and Bitrise templates then keep eight fields in the uploaded file: label, packageHash, size, appVersion, releaseMethod, rollout, isMandatory, and isDisabled. The GitHub Action maps the full --json object to step outputs and does not upload that file.
Staging, then production
Section titled “Staging, then production”The guides set up two deployments on the same Aether app:
- Staging deploys automatically on merge, at 100% rollout. Internal builds and testers track this channel.
- Production sits behind a manual gate, at 25% rollout. The pipeline pauses until someone approves, then releases to a quarter of clients.
Staging and Production are deployment channels, not separate servers. Both run against the same Aether server, which is the CLI’s built-in production endpoint unless you override it.
The deploy-scoped API key
Section titled “The deploy-scoped API key”CI authenticates with an API key scoped to deploy only. Create it in the dashboard, under API Keys.
The key is a long-lived credential a machine can use without a login session. It is the one secret each pipeline needs. Scoping it to deploy limits the damage if it leaks: the key can publish releases and nothing else. Prerequisites covers how to create and store it.
Do not use a session access key (created under Account → CLI access keys in the dashboard) in CI. Those are tied to a user session, expire after 60 days, and stop working when the owner resets their password.
Pick your platform
Section titled “Pick your platform”Each guide is self-contained. Start with Prerequisites, then follow the one for your CI system:
Where the templates live
Section titled “Where the templates live”The configs these guides are built from are maintained outside this repo:
- GitLab CI, CircleCI, Jenkins, and Bitrise:
aether-cli/examples/ci/(gitlab-ci.yml,circleci-config.yml,Jenkinsfile,bitrise.yml). - GitHub Actions: the
aetherpush-deploy-actionrepository (action.ymland its README).
When those change, update these docs to match. The upstream file is the source of truth.