Configuring Azure pipelines for OTA (over the air) updates using Expo EAS.

Nicolás Delfino / December 06, 2022

3 min read

Configuring Azure Pipelines for OTA Updates Using Expo EAS.

Although EXPO has a lot of information regarding OTA updates, they lack information on how to setup automatic updates using Azure.

In this example pipeline we trigger the code below to run every time code is pushed to a specific branch. We setup node, checkout the repo and install our dependencies. Then we login to Expo using our username and an environment variable we called EXPO_CLI_PASSWORD. Lastly we specify the EAS branch and use the commit message as our update message.

Example pipeline

  - (branch name)
  vmImage: 'ubuntu-latest'

  - job: EAS
    displayName: 'Run Expo EAS update'
      - task: NodeTool@0
          versionSpec: '16.14'
        displayName: 'Install Node'

      - checkout: self
        displayName: 'Checkout repo'

      - script: yarn install --frozen-lockfile
        workingDirectory: '$(System.DefaultWorkingDirectory)'
        displayName: 'Install app'

      - script: yarn global add expo-cli
        workingDirectory: '$(System.DefaultWorkingDirectory)'
        displayName: 'Install Expo CLI'

      - script: yarn global add eas-cli
        workingDirectory: '$(System.DefaultWorkingDirectory)'
        displayName: 'Install EAS CLI'

      - script: npx expo login -u (your expo username) -p $(EXPO_CLI_PASSWORD)
        workingDirectory: '$(System.DefaultWorkingDirectory)'
        displayName: 'Login to Expo'

      - script: yarn run sourceEnvVariables && eas update --branch (eas branch) --message "$(Build.SourceVersionMessage)"
        workingDirectory: '$(System.DefaultWorkingDirectory)'
        displayName: 'Perform OTA update'

      - script: |
          # done
          echo 'EAS update on commit:' $(Build.SourceVersionMessage)

Note - it’s important to source your environment variables if you have some before running the update command.


  1. Navigate to
  2. Click "Create" to create a new access token and copy the value.
  3. Open the pipeline’s variable pane and create a new variable.
  4. Name it EXPO_CLI_PASSWORD and make it a secret.

Triggering an update

Since this example is set up to trigger when code gets pushed to a specific branch, you could for instance save this pipeline as ota-preview.yml and trigger it when you push code to a git branch called preview (which in turn is connected to an EAS branch with the same name).


OTA updates with Expo EAS are amazing and I hope you liked this article showing one way of configuring this process using Azure pipelines.

/ ND