Skip to content

Fix EAS CI workflow to run non-interactively - #3

Draft
Shambez with Copilot wants to merge 4 commits into
mainfrom
copilot/fix-eas-ci
Draft

Fix EAS CI workflow to run non-interactively#3
Shambez with Copilot wants to merge 4 commits into
mainfrom
copilot/fix-eas-ci

Conversation

Copilot AI commented Dec 2, 2025

Copy link
Copy Markdown

The scheduled "Simba Daily Healthcheck" workflow fails when EAS CLI prompts for "Select build profile" in CI. CI cannot provide stdin, causing exit code 1.

Workflow Changes (.github/workflows/daily_healthcheck_simba.yml)

  • Replace npx eas-cli config --non-interactive with npx eas-cli whoami --non-interactive — the former still prompts when profiles are missing
  • Add commented example demonstrating required flags for CI builds:
    # - name: EAS build production
    #   run: npx eas-cli build --platform all --profile production --non-interactive

EAS Configuration (eas.json)

  • Update CLI version: >= 16.19.0>= 3.19.0
  • Add environment variables to build profiles:
    • EXPO_PUBLIC_APP_ENV: development/preview/staging/production
    • EXPO_PUBLIC_IS_PREVIEW: testflight
    • EXPO_PUBLIC_IS_PRODUCTION: production
  • Correct profile settings:
    • testflight: distribution: "internal""store"
    • preview android: gradleCommand: "assembleDebug""assembleRelease"
  • Replace credentials with placeholders (<apple_id_from_secrets>, <asc_app_id_from_secrets>, <apple_team_id_from_secrets>) — actual values belong in GitHub Secrets
  • Update production android submit settings: track: "production", releaseStatus: "completed"

Profile definitions now enable non-interactive builds with --profile <name> --non-interactive.

Original prompt

Problem:
The scheduled workflow "Simba Daily Healthcheck" (ref: 5ffac83) failed because the job runs an interactive EAS CLI command that prompts for "Select build profile". CI cannot provide stdin, causing the job to exit with code 1. We need a non-interactive workflow and a committed eas.json that contains the required build profiles so EAS commands do not prompt.

Changes to make (apply in a new branch fix/eas-ci and open a pull request):

  1. Update workflow file at .github/workflows/daily_healthcheck_simba.yml
  • Replace the interactive step npx eas-cli config --non-interactive (which still triggers interactive prompts when eas.json or profiles are missing) with a non-interactive authentication verification: npx eas-cli whoami --non-interactive.
  • Keep existing steps (checkout, setup-node, npm ci, expo-doctor).
  • Add comments and an example EAS build step (commented) to show how to run builds non-interactively: always add --profile <name> and --non-interactive.

New file contents for .github/workflows/daily_healthcheck_simba.yml (exact):

name: Simba Daily Healthcheck

on:
schedule:
- cron: "0 19 * * *"
workflow_dispatch:

jobs:
healthcheck:
runs-on: ubuntu-latest
timeout-minutes: 30

env:
  EXPO_TOKEN: ${{ secrets.EXPO_TOKEN_SIMBA }}
  EAS_TOKEN: ${{ secrets.EAS_TOKEN_SIMBA }}
  EAS_PROJECT_ID: ${{ secrets.EAS_PROJECT_ID_SIMBA }}
  # Optional default build profile (can be used by custom steps):
  # EAS_BUILD_PROFILE: production

steps:
  - uses: actions/checkout@v4

  - uses: actions/setup-node@v4
    with:
      node-version: "20"
      cache: "npm"

  - name: Install dependencies
    run: npm ci

  - name: Expo doctor
    run: npx expo-doctor

  - name: Validate EAS auth
    run: npx eas-cli whoami --non-interactive

  # Example: how to run a non-interactive EAS build in CI (uncomment and adjust as needed)
  # - name: EAS build production
  #   env:
  #     EXPO_TOKEN: ${{ secrets.EXPO_TOKEN_SIMBA }}
  #   run: npx eas-cli build --platform all --profile production --non-interactive
  1. Add/Update eas.json at repository root
  • Use the user's existing profiles (development, preview, testflight, production) and preserve per-profile settings.
  • Replace sensitive submit credentials with placeholders so repository does not contain secrets. The real credentials should be stored in GitHub Secrets and provided to EAS at runtime or using EAS secret management.

New file contents for eas.json (exact):

{
"cli": {
"version": ">= 3.19.0",
"appVersionSource": "local"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"channel": "development",
"env": {
"EXPO_PUBLIC_APP_ENV": "development"
},
"android": {
"gradleCommand": ":app:assembleDebug",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Debug",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"preview": {
"distribution": "internal",
"channel": "preview",
"env": {
"EXPO_PUBLIC_APP_ENV": "preview"
},
"android": {
"gradleCommand": ":app:assembleRelease",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"testflight": {
"distribution": "store",
"channel": "staging",
"env": {
"EXPO_PUBLIC_APP_ENV": "staging",
"EXPO_PUBLIC_IS_PREVIEW": "true"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"production": {
"distribution": "store",
"channel": "production",
"env": {
"EXPO_PUBLIC_APP_ENV": "production",
"EXPO_PUBLIC_IS_PRODUCTION": "true"
},
"android": {
"buildType": "app-bundle",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "<APPLE_ID_FROM_SECRETS>",
"ascAppId": "<ASC_APP_ID_FROM_SECRETS>",
"appleTeamId": "<APPLE_TEAM_ID_FROM_SECRETS>"
},
"android": {
"serviceAccountKeyPath": "./google-service-account.json",
"track": "production",
"releaseStatus": "completed"
}
},
"testflight": {
"ios": {
"appleId": "<APPLE_ID_FROM_SECRETS>",
"ascAppId": "<ASC_APP_ID_FROM_SECRETS>",
"appleTeamId": "<APPLE_TEAM_ID_FROM_SECRETS>"
}
...

This pull request was created as a result of the following prompt from Copilot chat.

Problem:
The scheduled workflow "Simba Daily Healthcheck" (ref: 5ffac83) failed because the job runs an interactive EAS CLI command that prompts for "Select build profile". CI cannot provide stdin, causing the job to exit with code 1. We need a non-interactive workflow and a committed eas.json that contains the required build profiles so EAS commands do not prompt.

Changes to make (apply in a new branch fix/eas-ci and open a pull request):

  1. Update workflow file at .github/workflows/daily_healthcheck_simba.yml
  • Replace the interactive step npx eas-cli config --non-interactive (which still triggers interactive prompts when eas.json or profiles are missing) with a non-interactive authentication verification: npx eas-cli whoami --non-interactive.
  • Keep existing steps (checkout, setup-node, npm ci, expo-doctor).
  • Add comments and an example EAS build step (commented) to show how to run builds non-interactively: always add --profile <name> and --non-interactive.

New file contents for .github/workflows/daily_healthcheck_simba.yml (exact):

name: Simba Daily Healthcheck

on:
schedule:
- cron: "0 19 * * *"
workflow_dispatch:

jobs:
healthcheck:
runs-on: ubuntu-latest
timeout-minutes: 30

env:
  EXPO_TOKEN: ${{ secrets.EXPO_TOKEN_SIMBA }}
  EAS_TOKEN: ${{ secrets.EAS_TOKEN_SIMBA }}
  EAS_PROJECT_ID: ${{ secrets.EAS_PROJECT_ID_SIMBA }}
  # Optional default build profile (can be used by custom steps):
  # EAS_BUILD_PROFILE: production

steps:
  - uses: actions/checkout@v4

  - uses: actions/setup-node@v4
    with:
      node-version: "20"
      cache: "npm"

  - name: Install dependencies
    run: npm ci

  - name: Expo doctor
    run: npx expo-doctor

  - name: Validate EAS auth
    run: npx eas-cli whoami --non-interactive

  # Example: how to run a non-interactive EAS build in CI (uncomment and adjust as needed)
  # - name: EAS build production
  #   env:
  #     EXPO_TOKEN: ${{ secrets.EXPO_TOKEN_SIMBA }}
  #   run: npx eas-cli build --platform all --profile production --non-interactive
  1. Add/Update eas.json at repository root
  • Use the user's existing profiles (development, preview, testflight, production) and preserve per-profile settings.
  • Replace sensitive submit credentials with placeholders so repository does not contain secrets. The real credentials should be stored in GitHub Secrets and provided to EAS at runtime or using EAS secret management.

New file contents for eas.json (exact):

{
"cli": {
"version": ">= 3.19.0",
"appVersionSource": "local"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"channel": "development",
"env": {
"EXPO_PUBLIC_APP_ENV": "development"
},
"android": {
"gradleCommand": ":app:assembleDebug",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Debug",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"preview": {
"distribution": "internal",
"channel": "preview",
"env": {
"EXPO_PUBLIC_APP_ENV": "preview"
},
"android": {
"gradleCommand": ":app:assembleRelease",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"testflight": {
"distribution": "store",
"channel": "staging",
"env": {
"EXPO_PUBLIC_APP_ENV": "staging",
"EXPO_PUBLIC_IS_PREVIEW": "true"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
},
"production": {
"distribution": "store",
"channel": "production",
"env": {
"EXPO_PUBLIC_APP_ENV": "production",
"EXPO_PUBLIC_IS_PRODUCTION": "true"
},
"android": {
"buildType": "app-bundle",
"credentialsSource": "remote"
},
"ios": {
"buildConfiguration": "Release",
"scheme": "SimbaGlobalAI",
"cocoapods": "1.16.2",
"credentialsSource": "remote"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "<APPLE_ID_FROM_SECRETS>",
"ascAppId": "<ASC_APP_ID_FROM_SECRETS>",
"appleTeamId": "<APPLE_TEAM_ID_FROM_SECRETS>"
},
"android": {
"serviceAccountKeyPath": "./google-service-account.json",
"track": "production",
"releaseStatus": "completed"
}
},
"testflight": {
"ios": {
"appleId": "<APPLE_ID_FROM_SECRETS>",
"ascAppId": "<ASC_APP_ID_FROM_SECRETS>",
"appleTeamId": "<APPLE_TEAM_ID_FROM_SECRETS>"
}
},
"preview": {
"android": {
"serviceAccountKeyPath": "./google-service-account.json",
"track": "internal",
"releaseStatus": "draft"
}
}
}
}

Additional notes and acceptance criteria:

  • The PR branch should be named fix/eas-ci.
  • The PR description should reference the failing job and explain the root cause: interactive eas-cli config prompting for build profile in CI.
  • The changes must not include plaintext secrets. Placeholder values are used for any sensitive IDs.
  • After merging, the scheduled workflow should no longer fail at the "Select build profile" prompt. Any subsequent EAS build steps must explicitly pass --profile and --non-interactive.

Please create the branch, commit the two files (update workflow file and update/create eas.json), and open a pull request targeting the repository default branch with the above changes.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Co-authored-by: Shambez <204799760+Shambez@users.noreply.github.com>
Copilot AI changed the title [WIP] Update Simba Daily Healthcheck workflow for non-interactive EAS CLI Fix EAS CI workflow to run non-interactively Dec 2, 2025
Copilot AI requested a review from Shambez December 2, 2025 20:17

@Shambez Shambez left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix: Non-interactive EAS CI + Add full eas.json profilesThis PR fixes the CI failure in the scheduled workflow "Simba Daily Healthcheck".
Root cause: npx eas-cli config triggered an interactive "Select build profile" prompt in CI.

Fix includes:

  • Adding eas.json with full CI-safe build profiles (development, preview, testflight, production)
  • Updating the workflow to use: npx eas-cli whoami --non-interactive
  • Making the CI fully non-interactive and build-safe

After merge:

  • CI workflow will stop failing at the profile prompt
  • EAS builds can be triggered in CI using --profile --non-interactive

Copilot AI and others added 2 commits December 2, 2025 22:24
Copilot AI requested a review from Shambez December 2, 2025 22:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants