To build Android and iOS apps from GitHub with EAS Build, first finish an interactive EAS setup for your project, then use GitHub Actions to authenticate with an Expo access token, install dependencies, and dispatch a cloud build. Keep build dispatch separate from app-store release: a successful CI trigger is not itself a production release.
What the pipeline does
EAS Build creates installable Android and iOS binaries through Expo’s cloud build service. Expo says that “EAS Build supports builds from GitHub and building on CI with any provider.” See Expo’s EAS Build documentation. GitHub Actions can run repository checks and dispatch builds; EAS performs the build remotely.
A dependable setup has three parts: project and signing configuration completed before automation, a CI workflow that can authenticate and dispatch builds non-interactively, and a deliberate policy for preview builds, updates, and production releases.
Prepare the Expo project before automating it
Do the initial setup interactively before relying on a non-interactive CI job. Expo’s CI guide recommends completing a successful EAS build locally for each platform you intend to automate. This establishes the project’s EAS link and configuration and surfaces missing identifiers or credentials while a person can resolve the prompts.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →#1 Best Overall
- Initialize and link the project to EAS so its Expo configuration contains the EAS
projectId. - Create
eas.jsonbuild profiles for the build types you need, such as development, preview, or production. - Set the native app identifiers: an Android package name and an iOS bundle identifier.
- Configure and validate signing credentials for each platform you plan to build.
- Run a successful build for each target platform before making CI responsible for it.
Non-interactive mode cannot reliably substitute for missing project setup, identifiers, or signing decisions. Treat a successful initial build as a readiness gate, not as an optional convenience.
Set up GitHub Actions to dispatch EAS builds
Expo’s documented example uses a workflow file at .github/workflows/eas-build.yml. It runs on manual dispatch and pushes to main, checks out the repository, sets up Node and Expo’s GitHub Action, installs dependencies with npm ci, then runs EAS CLI. The official example currently demonstrates actions/checkout@v5, expo/expo-github-action@v8, and Node 24. Action and runtime versions change; verify the versions in Expo’s current guide when implementing the workflow.
A representative workflow, following that documented sequence, is:
name: EAS Build
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v5
- name: Set up Node.js
uses: actions/setup-node@v5
with:
node-version: 24
cache: npm
- name: Set up Expo and EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: Install dependencies
run: npm ci
- name: Start Android and iOS builds
run: eas build --platform all --non-interactive --no-wait
Match the workflow to your repository: change the branch trigger, package manager and lockfile handling as appropriate, and select one platform instead of all when needed. Pin action and CLI versions according to your maintenance policy rather than assuming a version shown in an example will remain current.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchRank #3
Authenticate without exposing the token
Create an Expo access token and save it as a GitHub repository secret or an environment secret named EXPO_TOKEN. The workflow passes it to the Expo action through ${{ secrets.EXPO_TOKEN }}; do not write the token directly into YAML or print it in a step. Expo’s CI setup guide describes this authentication pattern.
Understand what --no-wait changes
--non-interactive tells EAS CLI to run without interactive prompts. --no-wait makes the GitHub Actions step dispatch the cloud build and finish without waiting for that build to complete. It is useful when the purpose of the job is to start a build, but it does not confirm that the build succeeded or provide a completed binary to later steps.
If downstream jobs need a finished build or its artifact, use a wait or polling-and-download approach appropriate to your pipeline instead of copying --no-wait. EAS CLI documents the distinct --wait option in its CLI reference; EAS Build’s output is an installable binary as described in the EAS Build documentation.
Choose between GitHub Actions and EAS Workflows
GitHub Actions is a general-purpose CI service that can run arbitrary repository jobs and invoke EAS. EAS Workflows are Expo-managed YAML workflows with packaged mobile-development jobs, including build, submit, update, and testing. They are defined under .eas/workflows/ and can respond to events such as pushes, pull requests, tags, labels, schedules, manual CLI runs, and REST API requests. Expo compares the approaches in its EAS Workflows documentation.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →| Decision | GitHub Actions | EAS Workflows |
|---|---|---|
| Best fit | General-purpose CI steps or integrations beyond Expo-specific mobile jobs. | Common mobile build, submit, update, or test tasks using Expo-managed workflow jobs. |
| Workflow definition | GitHub Actions YAML under .github/workflows/. |
Expo workflow YAML under .eas/workflows/. |
| Execution and orchestration | GitHub Actions runs the workflow and can dispatch EAS cloud builds. | Expo manages the workflow and its packaged job types. |
| Can both be used? | Yes. They can coexist; a GitHub Actions job can invoke a workflow with eas workflow:run, as documented in Expo’s workflow guide. |
|
Choose based on where you need flexibility and which system should orchestrate the work. For a repository that already uses GitHub Actions for tests, linting, or other general CI, adding an EAS build dispatch keeps those checks in the same system. If the workflow is mostly common Expo build and release tasks, EAS Workflows can reduce custom job configuration.
Configure EAS Workflow profiles and credentials
Before an EAS Workflow build job runs, the corresponding build profile must exist in eas.json, and signing credentials must be configured for the selected platform. A submit job also needs store-submission configuration. Expo’s workflow syntax documentation explains these requirements.
In EAS Workflows, build jobs infer the environment from the selected profile, while submission jobs inherit the environment from their build. Align environment-specific values and credentials with that profile. Expo says secret and sensitive values are redacted in workflow logs; that does not make it safe to print credentials or place secrets in plain-text job environment declarations. See Expo’s environment variables guide.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Separate routine CI from production release
A build trigger should reflect the intended outcome of a change. Expo’s production guidance illustrates running CI and preview builds on main while reserving production CD for release/* branches. This is an example policy, not a requirement: choose branch rules that match your review and release process. See Expo’s production workflow guidance.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minute- Routine CI: run checks and, when useful, development or preview builds to validate changes.
- Production native build: trigger a production-profile build when native code or configuration requires a new binary.
- OTA update: publish an update only when it is compatible with the native binary already installed by users.
- Store submission: make submission an explicit downstream release step with configured store-submission settings and credentials.
Expo describes fingerprint-based logic that can distinguish changes compatible with an existing native binary from changes that need a new native build. Compatible changes may be delivered as an OTA update; incompatible native changes require a new binary. Do not treat an OTA update as a replacement for a needed native build, and do not make every merge to main a store release unless that is an intentional team policy.
Quick Recap
Common failure points to check
- CI prompts or fails during setup: finish project linking and the first successful interactive build; confirm the project ID, profile, identifiers, and credentials are present.
- Authentication fails: confirm the GitHub secret is named
EXPO_TOKEN, is available to the triggering workflow, and is referenced as a secret rather than literal YAML text. - Dependency installation differs from local development: commit the appropriate lockfile and use the package manager’s deterministic CI install command; Expo’s npm example uses
npm ci. - The Actions job ends before a binary exists: that is expected with
--no-wait; use a completion-aware flow if later steps depend on the artifact. - An EAS Workflow cannot build or submit: check that the referenced profile, signing credentials, environment values, and—when submitting—store configuration are in place.
- A release uses the wrong environment: verify the profile selected by the build and how the submission job inherits its environment.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




