dps CLI
Command-line client for DPS — authenticate with a deploy token, upload mobile artifacts, create/publish releases, and validate or trigger builds in connected GitHub repositories.
- Source:
apps/dps/dps-cli - Auth: scoped deploy tokens issued from Dashboard → Account Settings → Deploy Tokens
- Transport: REST under
/api/v1/*on your DPS server
Install
npm i -g @duabalabs/dps-cli # or: pnpm add -g @duabalabs/dps-cli
dps --versionAuthenticate
dps login --url https://api.dps.example.com --token dps_xxx...
dps whoami
dps logoutTokens carry scopes that gate which commands you can run:
| Scope | Used by |
|---|---|
artifact:upload | dps artifact upload, dps publish |
artifact:read | dps artifact list |
release:create | dps release create, dps publish |
release:publish | dps release publish, dps release rollback |
repo:read | dps repo check, dps repo status |
build:trigger | dps build trigger |
Artifacts
# Upload a built mobile binary (.ipa / .apk / .aab)
dps artifact upload ./build/app.aab \
--app <appId> --version 1.2.3 --build-number 42
# List artifacts
dps artifact list --app <appId> --platform android
# Register an externally-hosted artifact (no DPS upload)
dps artifact register --app <appId> --platform ios --type ipa \
--url https://cdn.example.com/app.ipa --checksum <sha256>The upload flow computes SHA-256 locally, requests a presigned S3 URL,
PUTs the file, then calls /finalize so the server verifies size +
checksum before marking the artifact verified.
Releases
dps release create --app <appId> \
--artifact <iosArtifactId> --artifact <androidArtifactId> \
--version 1.2.3 --channel production --notes "Bug fixes"
dps release list --app <appId> --channel production
dps release publish <releaseId> --target play-store
dps release rollback <releaseId> --to <previousReleaseId>One-shot publish
dps publish ./build/app.aab \
--app <appId> --version 1.2.3 \
--channel production --auto-publishUploads → finalizes → creates release → (optionally) marks it publishing.
Repo validation & remote builds
DPS classifies every connected repo as managed or artifact-only.
| Mode | Required files | Capabilities |
|---|---|---|
| managed | package.json + .dps/config.json + .github/workflows/dps-build.yml | DPS can dispatch builds remotely in the client repo |
| artifact-only | none | upload artifacts manually or via external CI; releases + publishing still work |
# Local check (no server call) — run inside the repo
dps doctor # alias: dps validate
dps doctor --json
# Server-side check (uses the GitHub App) for a connected app
dps repo check --app <appId> --ref main
dps repo status --app <appId>
# Trigger a managed build (dispatches dps-build.yml in the client repo)
dps build trigger --app <appId> --platform android --profile productiondps build trigger requires the repo to validate as managed; otherwise
the server returns an error explaining what files are missing.
See also
- DPS Repo Contract — schema for
.dps/config.jsonand the thin client workflow. - Mobile builds — full end-to-end build & publish guide for mobile apps on DPS.
- API Reference — the REST endpoints the CLI calls.