# How to Set Up Expo with EAS Workflows and Codex Run Actions

> Automate Expo EAS builds with Codex Run actions. Learn to configure expo-cicd-workflows, validate your setup, and trigger builds via GitHub Actions for seamless CI/CD.

- Repository: [OpenAI/plugins](https://github.com/openai/plugins)
- Tags: how-to-guide
- Published: 2026-07-04

---

**You can automate Expo Application Services (EAS) builds using the Codex Run actions provided in the `openai/plugins` repository by configuring the `expo-cicd-workflows` skill, validating your setup with [`validate.js`](https://github.com/openai/plugins/blob/main/validate.js), and triggering builds via GitHub Actions.**

The `openai/plugins` repository provides a complete toolkit for automating Expo React Native deployments. By leveraging the **Codex Run actions** and **EAS workflow** configurations defined in `plugins/expo/skills/expo-cicd-workflows`, you can establish continuous integration pipelines that validate, build, and deploy your Expo applications without manual intervention.

## Prerequisites

Before configuring the workflow, ensure your environment meets these requirements:

- **Node.js 16 or higher** – Required for running the Expo CLI and EAS CLI
- **Expo CLI** – Install globally with `npm i -g expo-cli`
- **EAS CLI** – Install globally with `npm i -g eas-cli`
- **GitHub Repository** – Where the workflow will execute
- **EXPO_TOKEN** – Store this as a repository secret in GitHub Settings (required for non-interactive EAS authentication)

## Configure Expo and EAS

Initialize your Expo project and generate the required configuration files.

### Initialize the Project

```bash

# Create a new Expo project

expo init my-app --template blank
cd my-app

# Initialize EAS configuration

eas init

```

This creates an [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) file. The [`plugins/expo/skills/expo-cicd-workflows/SKILL.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-cicd-workflows/SKILL.md) file provides a production-ready template:

```json
{
  "cli": {
    "version": ">= 2.0.0"
  },
  "build": {
    "production": {
      "android": {
        "buildType": "apk"
      },
      "ios": {
        "simulator": false
      }
    }
  }
}

```

## Set Up Codex Run Actions

The repository includes validation scripts that ensure your EAS configuration complies with the latest Expo schema.

### Copy Validation Scripts

Locate the following files in the repository and copy them to your project's `scripts/` directory:

- **[`plugins/expo/skills/expo-cicd-workflows/scripts/validate.js`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-cicd-workflows/scripts/validate.js)** – Validates [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) against the Expo workflow schema
- **[`plugins/expo/skills/expo-cicd-workflows/scripts/fetch.js`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-cicd-workflows/scripts/fetch.js)** – Handles cached fetching of the schema from `https://api.expo.dev/v2/workflows/schema`

These scripts are referenced by the **Codex Run actions** defined in [`plugins/expo/skills/codex-expo-run-actions/SKILL.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/codex-expo-run-actions/SKILL.md) and invoked by the agent configuration in [`plugins/expo/skills/codex-expo-run-actions/agents/openai.yaml`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/codex-expo-run-actions/agents/openai.yaml).

### Validate Configuration Locally

Run the validator before committing to ensure schema compliance:

```bash
node ./scripts/validate.js

```

The [`validate.js`](https://github.com/openai/plugins/blob/main/validate.js) script checks your local [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) against the remote Expo schema and exits with an error code if validation fails.

## Create the GitHub Actions Workflow

Create [`.github/workflows/eas-build.yml`](https://github.com/openai/plugins/blob/main/.github/workflows/eas-build.yml) in your repository to trigger Codex Run actions on push, pull request, or manual dispatch.

```yaml
name: Expo EAS Build

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  workflow_dispatch: {}

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
      
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Install Expo CLI
        run: npm i -g expo-cli
      
      - name: Install EAS CLI
        run: npm i -g eas-cli
      
      - name: Validate EAS workflow schema
        run: node ./scripts/validate.js
      
      - name: Run EAS build
        env:
          EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
        run: |
          eas build --platform android --profile production --non-interactive
          eas build --platform ios --profile production --non-interactive

```

The **`workflow_dispatch`** trigger allows manual execution from the GitHub Actions UI, while the **[`validate.js`](https://github.com/openai/plugins/blob/main/validate.js)** step ensures configuration errors are caught before initiating expensive build operations.

## Configure Deployment Targets

For automated distribution, reference the deployment skills in the repository.

### iOS TestFlight

Consult [`plugins/expo/skills/expo-deployment/references/ios-app-store.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-deployment/references/ios-app-store.md) for the exact command syntax to submit builds to TestFlight using `eas submit --platform ios`.

### Google Play Store

Consult [`plugins/expo/skills/expo-deployment/references/play-store.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-deployment/references/play-store.md) for Android track configuration and `eas submit --platform android` parameters.

Add these as separate steps after the build job completes successfully.

## Trigger and Monitor Builds

1. **Push to main** – The workflow triggers automatically on commits to the main branch
2. **Pull requests** – Builds run in validation mode to verify configuration changes
3. **Manual triggers** – Use the **Run workflow** button in GitHub Actions for testing or redeployment

Build artifacts appear in your Expo dashboard under the **Builds** section. The [`fetch.js`](https://github.com/openai/plugins/blob/main/fetch.js) script caches the Expo schema locally to reduce API calls during repeated validations.

## Summary

- The **[`validate.js`](https://github.com/openai/plugins/blob/main/validate.js)** script in `plugins/expo/skills/expo-cicd-workflows/scripts/` ensures your [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) matches the current Expo schema
- The **`codex-expo-run-actions`** skill provides the agent configuration that maps GitHub Actions to Expo CLI commands
- Store **`EXPO_TOKEN`** as a GitHub secret to enable non-interactive EAS authentication
- Use **`workflow_dispatch`** to enable manual build triggers for testing configuration changes
- Reference **`expo-deployment`** skills for App Store and Play Store submission workflows

## Frequently Asked Questions

### What does the validate.js script check?

The [`validate.js`](https://github.com/openai/plugins/blob/main/validate.js) script, located at [`plugins/expo/skills/expo-cicd-workflows/scripts/validate.js`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-cicd-workflows/scripts/validate.js), downloads the latest EAS workflow schema from `https://api.expo.dev/v2/workflows/schema` and validates your local [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) configuration against it. It ensures your build profiles and platform settings comply with current Expo requirements before triggering expensive build operations.

### Where do I store the EXPO_TOKEN for Codex Run actions?

Store your Expo access token as a repository secret named **`EXPO_TOKEN`** in your GitHub repository settings (Settings > Secrets and variables > Actions). The workflow references this via `${{ secrets.EXPO_TOKEN }}` to authenticate the EAS CLI without interactive login prompts.

### Can I use these actions with an existing Expo project?

Yes. The `expo-cicd-workflows` skill works with existing projects. Simply ensure your project has an [`eas.json`](https://github.com/openai/plugins/blob/main/eas.json) file (run `eas init` if missing), copy the validation scripts from `plugins/expo/skills/expo-cicd-workflows/scripts/`, and add the GitHub Actions workflow to your `.github/workflows/` directory.

### How do I configure deployment to TestFlight or Google Play?

Refer to the deployment reference files in the repository. For iOS, consult [`plugins/expo/skills/expo-deployment/references/ios-app-store.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-deployment/references/ios-app-store.md) for TestFlight configuration. For Android, consult [`plugins/expo/skills/expo-deployment/references/play-store.md`](https://github.com/openai/plugins/blob/main/plugins/expo/skills/expo-deployment/references/play-store.md) for Play Store track settings. Both documents specify the exact `eas submit` commands and required environment variables.