Skip to main content
FlowDeck CLI is designed to work seamlessly in CI/CD environments like GitHub Actions, GitLab CI, CircleCI, Bitrise, and other automation platforms.

License Configuration

In CI environments, FlowDeck validates your license through an environment variable instead of machine activation. This approach:
  • Does not consume activation slots
  • Works across ephemeral CI runners
  • Requires no persistent storage
Using your license as an environment variable does not count against your activation limit, but this functionality is restricted to CI/CD environments only. For local development, you must activate the license using flowdeck license activate <key>.

Setting the License Key

Set the FLOWDECK_LICENSE_KEY environment variable in your CI configuration:
Store your license key as a secret in your CI platform. Never commit license keys to version control.

Supported CI Platforms

FlowDeck automatically detects these CI environments: For other CI systems, set CI=true along with your license key.

Installing FlowDeck in CI

Using the Install Script

GitHub Actions Example

Alternative: Using Config Files

Configuration File

For reproducible CI builds, use a configuration file instead of command-line arguments:

Create a Config File

Create .flowdeck/ci-config.json in your repository:

Use in CI

These CI examples use the explicit --config file format for one complete command invocation. That format is separate from the project settings files at .flowdeck/config.json and .flowdeck/config.local.json.

Config File Reference

See Xcodebuild Arguments for complete passthrough options and Configuration File for all config fields.

Output Modes

JSON (Default for CI)

Use --json for machine-readable output:
This outputs NDJSON (newline-delimited JSON) events that can be parsed by CI tools:

Streaming (Human-Readable)

Use --streaming for clean, human-readable output in CI logs. This shows individual pass/fail results grouped by test class, with a summary at the end:

Parsing JSON Results

Simulator Management in CI

Boot a Specific Simulator

Create a Simulator (if needed)

Best Practices

1. Use Config Set or Configuration Files

For reproducibility, either use flowdeck config set or config files:

2. Choose the Right Output Mode

Use --json when you need machine-readable output for parsers or dashboards. Use --streaming when you want clean, human-readable CI logs:

3. Specify Simulator by UDID

Simulator names can vary across CI runners. Use UDIDs for consistency:
Or resolve dynamically:

4. Clean Before Release Builds

5. Use Derived Data Paths

Avoid conflicts with concurrent builds:

Troubleshooting

”License validation failed”

Ensure FLOWDECK_LICENSE_KEY is set correctly:

“Simulator not found”

List available simulators and use exact names or UDIDs:

Build Timeout

Increase timeout for large projects: