Maestro is compatible with all CI systems and provides native integrations with a number of common providers including Bitbucket Pipelines.

You can start running your Flows in CI with just a few lines of configuration using the [Maestro Cloud Bitbucket Pipe](https://bitbucket.org/mobiledevinc/maestro-cloud-upload/src/master/).

## Create a Maestro Cloud account

This doesn’t cost anything up front and you’ll have $10 of free credit each month to play around with the platform.

If you haven’t already, start by creating a Maestro Cloud account: [Create a Maestro Cloud Account](https://signin.maestro.dev/sign-up)

### Get your API key

Once you create your account, you’ll be able to access your api key.

1. Log in to [Maestro Cloud Console](https://app.maestro.dev/), click on your username in bottom left corner and click on View API Key
2. Copy your API Key.

### Save API key in your repository

In order to use the Maestro Cloud Pipe, you’ll need to add the API key as a secret ENV in your Bitbucket repository.

1. Go to your Repository -> Repository settings -> Repository Variables
2. Save your API Key as a secured env variable

## Commit your Maestro Flows to your repository

Create a `.maestro/` directory at the root of your repository and commit your Flows there:

```
<root>
├── .maestro/
│   ├── Login.yaml
│   ├── Add to Cart.yaml
│   └── Search.yaml
```

It’s common to have some Flow files that are only meant to be executed as part of another Flow via the `runFlow` command. These “subflows” can be nested under a subdirectory to prevent them from running as a top-level Flow.

```
<root>
├── .maestro/
│   ├── subflows/
│   │   └── MySubflow.yaml
│   ├── Login.yaml
│   ├── Add to Cart.yaml
│   └── Search.yaml
```

## Add Maestro Cloud Pipe

Once everything is setup, you can integrate the [Maestro Cloud Upload Pipe](https://bitbucket.org/product/features/pipelines/integrations?search=maestro&p=mobiledevinc%2Fmaestro-cloud-upload) in your Pipeline build process.

Edit your `bitbucket-pipelines.yml`and add an extra step after your app has finished building.

_Note: All file paths are relative to the repository source root._

### Android

```
script:
  - pipe: mobiledevinc/maestro-cloud-upload:1.0.0
    variables:
      MDEV_API_KEY: $MDEV_API_KEY
      MDEV_APP_FILE: app/build/outputs/apk/debug/app-debug.apk
```

### iOS

```
script:
  - pipe: mobiledevinc/maestro-cloud-upload:1.0.0
    variables:
      MDEV_API_KEY: $MDEV_API_KEY
      MDEV_APP_FILE: <app_name>.app
```

The pipe will:

- Upload your app and flows to Maestro Cloud
- Wait for flows to complete (can be configured)
- Complete with fail/pass depending on flow results

## That’s it!

For more information and configurations, checkout [Maestro Cloud Upload Pipe](https://bitbucket.org/product/features/pipelines/integrations?search=maestro&p=mobiledevinc%2Fmaestro-cloud-upload).
