Mobile EAS CI
| Component | apps/mobile — Expo React Native shell |
|---|---|
| Status | Production source — store binaries require EAS cloud build |
Native mobile is a WebView shell around the anoobot web app. Source, tests, and validation gates are complete in-repo; .ipa / .apk artifacts are produced by Expo Application Services (EAS), not checked into git.
Local development (no EAS)
pnpm install
export EXPO_PUBLIC_ANOOBOT_FRONTEND_URL=http://localhost:5173
export EXPO_PUBLIC_ANOOBOT_API_URL=http://localhost:3000
pnpm --filter @anoobot/mobile start
Validation:
bash tools/scripts/validate-mobile-production.sh
bash tools/scripts/verify-expo-metro.sh
EAS build (operator)
cd apps/mobile
pnpm exec eas login
pnpm exec eas init # first time only — links EAS project
pnpm exec eas build --profile preview --platform all
Profiles (apps/mobile/eas.json):
| Profile | Use |
|---|---|
development | Dev client, localhost URLs |
preview | Internal APK / device builds, production URLs |
production | Store submission, auto-increment version |
GitHub Actions
Workflow: .github/workflows/mobile-eas-build.yml
| Trigger | Action |
|---|---|
Manual (workflow_dispatch) | Build with chosen profile + platform |
Tag mobile-v* (e.g. mobile-v0.0.1) | Preview build on EAS |
Repository hosting: CI requires an approved GitHub remote. Do not push tags until hosting is re-approved (see docs/developer-guide.md).
Required secrets
| Secret | Purpose |
|---|---|
EXPO_TOKEN | Expo account token for non-interactive eas build |
EAS_PROJECT_ID | UUID from expo.dev after eas init |
Optional variables
| Variable | Default |
|---|---|
ANOOBOT_FRONTEND_URL | https://app.anoobot.com |
ANOOBOT_API_URL | https://api.anoobot.com |
Validate secrets locally:
export EAS_PROJECT_ID=<uuid-from-expo.dev>
export ANOOBOT_VALIDATE_PRODUCTION_SECRETS=true
bash tools/scripts/validate-eas-secrets.sh
See .env.production.example for EAS_PROJECT_ID, EAS_UPDATE_URL, and EXPO_PUBLIC_* URLs.
CI pipeline steps
pnpm install --frozen-lockfilenode tools/scripts/generate-mobile-assets.mjsbash tools/scripts/validate-mobile-production.sheas build --profile <profile> --platform <platform> --non-interactive --no-wait
If EXPO_TOKEN is unset, the workflow prints a notice and skips the build.
Store submission (manual)
Configure placeholders in apps/mobile/eas.json → submit.production:
- iOS:
appleTeamId,ascAppId - Android:
google-play-service-account.jsonpath
Then:
cd apps/mobile
pnpm exec eas submit --platform ios --profile production
pnpm exec eas submit --platform android --profile production
Related docs
apps/mobile/README.md— quick startdocs/mobile-production-validation-proof.md— gate attestationdocs/desktop-app-status.md— desktop client packaging (Electron)docs/website.md— product status matrix