Learn how to use GitHub Actions to automate publishing updates with EAS Update.
A GitHub Action is a cloud function that runs every time an event on GitHub occurs. We can use GitHub Actions to automate building and publishing updates when you or members of your team merge to a branch, like "production". This makes the process of deploying consistent and fast, leaving you more time to develop your app.
We can configure GitHub Actions to run on any GitHub event. One of the most common use cases is to publish an update when code is pushed. Below are the steps to publish an update every time an update is pushed:
1
Create a file path named .github/workflows/update.yml at the root of your project.
2
Inside update.yml, copy and paste the following snippet:
name: update
on: push
jobs:
update:
name: EAS Update
runs-on: ubuntu-latest
steps:
- name: Check for EXPO_TOKEN
run: |
if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
exit 1
fi
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18.x
cache: yarn
- name: Setup EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: Install dependencies
run: yarn install
- name: Publish update
run: eas update --auto
In the code above, we set the action to run every time code is pushed to any branch. In the update
job, we set up Node, in addition to Expo's GitHub Action: expo-github-action
. We then add a couple of steps to cache any dependencies installed from the last run to speed this script up on subsequent runs. In the end, we install dependencies (yarn install
), then publish the update with eas update --auto
. Since we're using the --auto
flag, the EAS branch will be named after the GitHub branch, and the message for the update will match the commit's message.
3
Finally, we need to give the script above permission to run by providing an EXPO_TOKEN
environment variable.
Your GitHub Action should be set up now. Whenever a developer merges code into the repo, this action will build an update and publish it, making it available to all of our devices with builds that have access to the EAS branch.
Some repositories or organizations might need to explicitly enable GitHub Workflows and allow third-party Actions.
Another common use case it to create a new update for every pull request. This allows you to test the changes in the pull request on a device before merging the code, and without having to start the project locally. Below are the steps to publish an update every time a pull request is opened:
1
Create a file path named .github/workflows/preview.yml at the root of your project.
2
Inside preview.yml, copy and paste the following snippet:
name: preview
on: pull_request
jobs:
update:
name: EAS Update
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Check for EXPO_TOKEN
run: |
if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
exit 1
fi
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18.x
cache: yarn
- name: Setup EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: Install dependencies
run: yarn install
- name: Create preview
uses: expo/expo-github-action/preview@v8
with:
command: eas update --auto
Although the code above is similar to the example in the previous section, there are a few differences. In this action, we changed the workflow event (on
) to run every time a pull request is opened or updated. In the update
job, we still set up Node, Expo's GitHub Action, and the dependencies using GitHub action's built-in cache. But, instead of running eas update --auto
ourselves, we let the preview subaction run it for us. This will add a comment to the pull request with basic information about the update and a QR code to scan the update.
Don't forget to add the
permissions
section to the job. This enables the job to add comments to the pull request.
3
You can skip this step if you have already set up EXPO_TOKEN
in the previous section. Only one valid EXPO_TOKEN
is required to authenticate GitHub Actions with your Expo account.
If you haven't, you must give the script above permission to run by providing an EXPO_TOKEN
environment variable.
Your GitHub Action should be set up now. Whenever a developer creates a pull request, this action will build an update and publish it, making it available to all reviewers with builds that have access to the EAS branch.
Some repositories or organizations might need to explicitly enable GitHub Workflows and allow third-party Actions.
To use Bun as your package manager instead of Yarn, follow the steps below for both publishing updates on push and previews on pull requests:
1
Replace the Setup Node
step in update.yml with the following snippet:
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
2
To install dependencies using Bun, replace the Install dependencies
step with the following snippet:
- name: Install dependencies
run: bun install