Skip to main content

How It Works

Tests live as YAML files in .revyl/tests/. Each file contains a _meta block that tracks the relationship with the remote copy on the Revyl server:
When you push, the CLI sends the local blocks to the server and increments the version. When you pull, the CLI downloads the remote blocks and updates the _meta accordingly. Conflicts are detected by comparing version numbers and checksums.

Sync Statuses

Every test has a sync status derived from comparing local _meta against the remote API:

revyl sync — Full Reconciliation

revyl sync is the top-level command that reconciles the entire project in one pass. It covers three domains: tests, app links, and hot reload mappings.
The sync process for tests:
  1. Name-match linking — local files that match a remote test by name (but lack a remote_id) are offered for linking.
  2. Import — remote-only tests with no local counterpart are imported after confirmation (interactive) or skipped (non-interactive / --skip-import).
  3. Status reconciliation — each linked test is checked and the appropriate action is applied (pull, push, detach, prune).

Flags

Examples


revyl test list — View Sync Status

Show all local tests with their sync status, local version, and remote version:
Example output:

Flags


revyl test push — Push Local Changes

Upload local test changes to the Revyl server.
When pushing, the CLI:
  1. Checks changed local YAML with backend validation.
  2. Resolves build.name to an app_id and any module/script names to UUIDs.
  3. Sends the blocks to the server with an expected_version for optimistic concurrency.
  4. If the remote version has advanced (HTTP 409 conflict), the push is rejected. Use --force to overwrite, or pull first and re-push.
  5. On success, updates _meta with the new remote_version, checksum, and last_synced_at.
What gets synced: blocks, tags, custom variables, environment variables, and device targets.

Flags


revyl test pull — Pull Remote Changes

Download test changes from the Revyl server to local YAML.
When pulling, the CLI:
  1. Fetches the remote test and converts tasks to blocks.
  2. Strips server-generated block IDs.
  3. Resolves UUIDs back to human-readable names (modules, scripts).
  4. Pulls associated tags, custom variables, environment variables, and device targets.
  5. Writes the updated YAML with refreshed _meta.
Use --all to discover and import tests created by teammates in the web UI that don’t exist locally yet.

Flags


revyl test diff — Compare Local vs Remote

Show a unified diff between the local and remote versions of a test:
Example output:

revyl test remote — List All Organization Tests

List every test in your Revyl organization, regardless of local project state:

Flags


Common Workflows

First-time setup (clone and sync)

After cloning a repository that already has .revyl/tests/ files:

Import all org tests locally

Pull every test from your org so the full suite is available locally:
Or use the interactive flow:

Edit-push-run loop

Pull a teammate’s changes

Resolve a version conflict

When both you and a teammate have changed the same test:

CI dry-run validation

Check sync status in CI without modifying anything:
Parse the JSON output to gate deployments on sync health.

Prune stale mappings

Clean up orphaned links and removed tests:

Troubleshooting