Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
Skip to content
World desk6 min

Mobile App CI/CD with EAS Build and GitHub Actions

A practical guide to preparing an Expo project for EAS Build, dispatching builds from GitHub Actions, choosing EAS Workflows, and keeping CI separate from production release.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Initialize and link the project to EAS so its Expo configuration contains the EAS projectId.
  • Create eas.json build 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.Support on Ko-Fi

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • 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.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.