Skip to main content

πŸ“± Mobile Deployment Guide (Current)

Overview​

AttuneLogic Mobile currently uses a split deployment model:

  • OTA updates (JS-only) are published by GitHub Actions using eas update
  • Native builds are triggered locally via a pre-push hook on build/* branches
Legacy note

Some older docs in this section reference EAS Workflows (Expo-side CI pipelines). Those pages are legacy and are not the current active pipeline.

Source of truth (mobile repo)​

Repo: attunelogic-mobile/attunelogic-mobile

  • GitHub workflow: .github/workflows/mobile-deploy.yml
  • Local build hook: scripts/git-hooks/pre-push
  • EAS config: eas.json
  • Expo config: app.config.js

Branch model​

BranchMeaningWhat happens
feature/*Dev workCI runs + PR opened to beta
betaAd hoc testingGitHub Actions publishes eas update --branch beta
alphaTestFlight stageGitHub Actions publishes eas update --branch alpha
mainApp Store sourceGitHub Actions publishes eas update --branch production
build/*Build intentLocal pre-push queues eas build --profile <mapped>

OTA updates (GitHub Actions)​

On push to:

  • beta β†’ eas update --branch beta
  • alpha β†’ eas update --branch alpha
  • main β†’ eas update --branch production

Required GitHub Secret​

  • EXPO_TOKEN (required to run eas update non-interactively)

Skip deploy​

Include [no deploy] in the commit message to skip publishing an OTA update.

Native builds (local)​

Push a build intent branch to queue a build locally before the push completes:

  • build/beta β†’ eas build --profile beta --platform all --no-wait
  • build/alpha β†’ eas build --profile alpha --platform all --no-wait
  • build/production β†’ eas build --profile production --platform all --no-wait

For iOS beta ad hoc onboarding per developer, see:

For iOS alpha TestFlight onboarding per developer, see:

Intended profile usage​

  • local / development (iOS): simulator-first local dev workflow
  • beta: ad hoc/internal device testing (non-store distribution)
  • alpha: TestFlight-ready store distribution
  • production: App Store-ready store distribution

Skip the build hook locally:

SKIP_EAS_PREPUSH=1 git push

Local Android development launch​

For emulator-based Android development against the local API, use the repo's Android-specific startup scripts instead of the generic Expo start command.

Start Metro for the dev client:

cd attunelogic-mobile/attunelogic-mobile
npm run start:android

In a second terminal, build/install the app:

cd attunelogic-mobile/attunelogic-mobile
npm run android

Or run the combined local native flow:

cd attunelogic-mobile/attunelogic-mobile
npm run dev-build:local:android

Why these scripts matter​

  • npm run start:android switches to env:android
  • env:android sets the emulator-safe API host:
    • http://10.0.2.2:8080/api/v1
  • the Android start/build scripts disable Expo dotenv auto-merging so .env.local does not override the generated Android .env

Avoid this for emulator work​

npm start

That command runs env:local, which points the app back to localhost. On an Android emulator, local API traffic must use 10.0.2.2.

Versioning (standard-version)​

Mobile uses standard-version (same pattern as API + Service):

npm run release
# or
npm run release:patch
npm run release:minor
npm run release:major

app.config.js reads the app version from package.json.

Rule of thumb:

  • Bump version when preparing a native build
  • JS-only OTA updates generally do not require a version bump

OTA compatibility (runtimeVersion)​

The mobile app currently uses runtimeVersion.policy = "appVersion".

If native-impacting changes occur, cut and distribute a new native build with the updated app version before expecting users to receive OTA updates for that runtime.

  1. Build and validate locally on simulator during feature work (local/development)
  2. Push feature/* β†’ PR is opened to beta
  3. Merge to beta β†’ GitHub Actions publishes OTA update to beta (ad hoc lane)
  4. Merge beta β†’ alpha promotion PR β†’ publishes OTA update to alpha (TestFlight lane)
  5. Merge alpha β†’ main promotion PR β†’ publishes OTA update to production (App Store lane)