Skip to main content
.revyl/config.yaml is the configuration file for local and remote builds. It is generated when revyl init runs for the first time in your project. Optional overrides can also be passed into revyl build.

A complete example

PR review build fields

GitHub PR-review builds use the same environment, secret, and cache field shapes as direct remote builds:
env contains non-secret values, while secrets contains names previously stored with revyl build secret set. A name cannot appear in both. PR-review caches are independently declared: omitting pr_review.builds.*.caches or setting it to [] disables caching for that PR-review build, regardless of the matching build.platforms.* cache configuration. The legacy PR-review form env: [SECRET_NAME] is accepted and interpreted as secrets: [SECRET_NAME], but is deprecated.

Platform entries

Each key under build.platforms is a named build stream. The key must be, or contain, ios or android. ios, android, ios-dev, and android-release all work. Pass the key to --platform; passing just ios or android picks the best-matching stream. Steps run in the project root. Each commands entry is a shell command, so cd android && ./gradlew … and A=B tool … both work.

Artifact resolution

After the last command exits 0, Revyl resolves the artifact:
  • iOS: output path or glob pointing at a simulator .app bundle. If unset, Revyl searches build/**/*.app. The bundle must be a simulator build (-sdk iphonesimulator).
  • Android: output path or glob pointing at an .apk. If unset, Revyl searches **/build/outputs/apk/**/*.apk. .aab artifacts are rejected.
Set output explicitly whenever more than one artifact could match, like a flavor matrix producing several APKs, or a cached DerivedData directory holding stale products.

Environment variables

Non-secret variables are exported into the shell for every remote build command. Use this for public build configuration such as EXPO_PUBLIC_* variables that Expo inlines into the bundle or ENVFILE for react-native-config:
Override or add variables per invocation:
--env values take precedence over the config file’s env map. Do not put credentials or tokens in env or --env; those values are part of the remote build request. Use encrypted build secrets instead.

Build secrets

Create or update an encrypted organization secret through the masked prompt:
For CI, send the value over stdin so it does not appear in process arguments or shell history:
Commit only the secret name:
Use --secret NAME to add a reference for one invocation. Repeated names are de-duplicated:
Remote builds validate the names before creating a job, decrypt values only when the sandbox starts, and inject them into every build command. A name cannot appear in both env and secrets. True remote secrets are not downloaded for local builds. A local build uses the same names from its process environment:
Revyl does not parse .env.local automatically. Keep it out of version control; the CLI fails before running the build if a referenced local value is missing. List or delete stored names without revealing values:

Repo-backed builds

For repositories too large to upload per build, configure a Git source so the runner fetches code directly:
With a Git source configured, the CLI skips the archive upload. Local uncommitted edits to tracked files are still included: the CLI uploads them as a patch that the runner applies after checkout. Repository access credentials are provisioned per organization. Contact [email protected] to set up a deploy key or access token for private repositories.

CLI reference

Managing running builds:

Timeout

Remote builds are stopped by the server when they exceed their timeout — 60 minutes by default, up to a maximum of 4 hours. Optionally set it per platform with the timeout key, in seconds:
Or per invocation with revyl build --remote --timeout 3600. Ctrl-C stops following the build; the build keeps running in the cloud. Cancel it with revyl build cancel <build-job-id>.