Skip to Content
DPSMobile Builds & Releases

Mobile builds & releases

DPS builds your iOS and Android app in your own GitHub repository’s Actions, keeps the signed binaries, and publishes them to Google Play, TestFlight / the App Store and Firebase App Distribution.

The work splits into three layers:

  1. Build — a GitHub Actions workflow DPS writes into your repo (dps-build.yml) runs the build: macOS for iOS, Ubuntu for Android.
  2. Artifacts — the .ipa / .apk / .aab it produces is uploaded to DPS with its size and SHA-256.
  3. Releases — DPS publishes a build to the store channels you have set up.

Set up a mobile app

  1. Create a React Native app in a project and connect its GitHub repository on the Source tab (through the DPS GitHub App).
  2. Make the repo compatible. DPS commits two files to it:
    • .dps/config.json — the build type (expo, bare or flutter), the build command for each platform and profile (production, preview), and where each build leaves its artifact. Its JSON Schema is api.duabaforge.com/schemas/dps-config.schema.json , which editors pick up from the file’s $schema;
    • .github/workflows/dps-build.yml — marked “Managed by DPS — do not edit by hand”. DPS updates it when the workflow changes.
  3. Set up signing and publishing on the Publish Setup tab (Google Play, TestFlight, Firebase): the Apple distribution certificate and provisioning profile, the Android keystore (upload one or let DPS generate it), and the store connections.
  4. Create a deploy token under Account settings → Deploy tokens. Scope it to this app and give it at least build:trigger (the workflow needs it to fetch your signing credentials — they are refused to tokens not scoped to one app) and artifact:upload. Save it in the repository as the secret DPS_TOKEN.

A repository has two modes:

ModeFiles in the repoWhat you get
managedpackage.json, .dps/config.json, .github/workflows/dps-build.ymlBuilds started from the dashboard, run in your repo’s Actions
artifact-onlynone of themUpload builds yourself (below); releases and publishing still work

The Source tab shows which mode a repo is in and can re-check it.

Build

Start a build on the Build tab: choose the platform and profile. DPS commits .dps/build-trigger.json to the repo, which starts dps-build.yml. The workflow:

  1. reads the trigger, picks the runner and checks out your code;
  2. fetches the signing credentials from DPS with DPS_TOKEN;
  3. runs the build command from .dps/config.json;
  4. uploads the artifact to DPS (and, for Android, the R8 mapping file if the build is minified);
  5. reports progress back to DPS, signed with a per-build secret, so the build’s status updates live in the dashboard.

Uploading from other CI

From any other CI system, upload a build with the composite action duabalabs/dps-workflows/actions/upload@v1:

- uses: duabalabs/dps-workflows/actions/upload@v1 with: token: ${{ secrets.DPS_TOKEN }} api-url: https://api.duabaforge.com app-id: <appId> artifact: ./build/app.aab platform: android

…or call the REST endpoints directly with the token: POST /api/v1/artifacts/upload-url, PUT the file to the returned URL, then POST /api/v1/artifacts/{id}/finalize (see the API reference). The token needs artifact:upload.

Releases & publishing

Publish a build from the Build tab to the channels you set up:

  • Google Play — upload to a track, promote between tracks, and edit the store listing;
  • TestFlight / App Store — upload to TestFlight, manage tester groups, and edit the App Store listing;
  • Firebase App Distribution — send a build to testers.

Releases can also be created, published and rolled back through the REST API with a token that has the release:* scopes.

Dashboard tabs

TabPurpose
SourceRepository connection and compatibility (mode, detected files, make compatible)
ServerThe Server App the mobile app talks to; DPS writes its Parse values into each build
BuildStart builds, follow them, and publish a finished build
Environment / ReleasesBuild-time variables; release history
Publish SetupSigning credentials and the Google Play, TestFlight and Firebase connections
Crashes / NotificationsCrash reports and push notifications
SettingsGeneral, iOS and Android app settings
Last updated on