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


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. Equivalent to eas update --auto. When run from a GitHub event, the EAS Update branch name will correspond to the git branch name. When run manually, a random branch name that includes the git branch name will be supplied to avoid unintentionally unintentional deployment of an update.

.eas/workflows/update.yaml
jobs:
  update:
    type: update

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"