Learn which pre-packaged and custom jobs you can run with EAS Workflows.


EAS Workflows sequence jobs together to automate your development and release processes. You can run two types of jobs: pre-packaged jobs and custom jobs.

Expo provides pre-packaged jobs that meet common use cases for developers, such as building, submitting, and running end-to-end tests. Since they are provided by Expo, they are continuously maintained and updated.

Custom jobs are jobs that you write yourself. They are useful for any use case not met by the pre-packaged jobs.

Build

This is a pre-packaged job that creates a build from a project:

.eas/workflows/build.yaml
jobs:
  build:
    type: build
    params:
      platform: android | ios
      profile: string # default: production

This job outputs the following variables:

  • platform: Either android or ios.
  • build_id: The ID of the build.

Submit

This is a pre-packaged job that submits a build to an app store. Given a build_id, we'll choose the correct automation to submit the build to the correct store.

.eas/workflows/submit.yaml
jobs:
  submit:
    type: submit
    params:
      profile: string # default: production
      build_id: string

This job outputs the following variables:

  • platform: Either android or ios.
  • submission_id: The ID of the submission.

Update

This is a pre-packaged job that publishes an update. If starting workflows via eas workflow:run, a hard coded branch name will be required. We recommending using branch: ${{ github.ref_name || 'your-branch-name' }} if you start workflows locally and via GitHub events.

.eas/workflows/update.yaml
jobs:
  update:
    type: update
    params:
      platform: android | ios | all # (default: all)
      channel: string # missing by default, update will be deployed to a branch
      branch: string # default: ${{ github.ref_name }}, which will be the name of the git branch
      message: string # default: commit message or empty if no commit

End-to-end tests with Maestro

This is a pre-packaged job that runs end-to-end tests with Maestro. Given a build_id, we'll choose the correct machine to run the tests on the correct platform.

.eas/workflows/e2e-test.yaml
jobs:
  e2e-test:
    type: maestro
    params:
      build_id: string
      flow_path: string | string[] # string is a file path from the project root

Custom jobs

Custom jobs are jobs that you write yourself. They are useful for any use case that isn't met by the pre-packaged jobs.

.eas/workflows/custom-job.yaml
jobs:
  custom-job:
    type: custom # default: undefined
    steps:
      - name: Run a script
        run: echo "Hello, world!"

Within custom jobs, you can use our built-in functions, like eas/checkout, eas/use_npm_token to interact with the project. These need to be prefixed with the uses: keyword.

.eas/workflows/custom-job.yaml
jobs:
  custom-job:
    type: custom
    steps:
      - uses: eas/checkout

      - uses: eas/install_node_modules

      - name: Say hello!
        run: echo "Hello world!"

      - name: Multiline script
        run: |
          CURRENT_DATE=$(date)
          echo "It is $CURRENT_DATE"