Preskoči na sadržaj

Kako radi deploy verb (EAS/Expo mod)?

TL;DR

Orchestrator (ci/expo/expo_deploy.py) šalje per-platform komande thin wrapper-ima oko eas-cli. Jednofazni (nema Infisical, nema tag_secret — EAS build ne referencira Docker image). Per-platform rezultati u state.services.<name>.deploy.platforms aggregate-uju u deploy.status. Sentry auto-stamp po uspješnoj platformi (kad je observability.sentry.stamp.auto uključen).

Kada se koristi

Servis ima deploy.mode: expo u services.json + build.kind: expo. To znači:

  • Mobile app (iOS / Android), ne Docker
  • EAS (Expo Application Services) gradi native binarni fajl
  • Tag ide kao EAS channel + build number, ne Docker image

Šta radi, korak po korak

  1. Učitaj ci-state.json (service, platforme, env).
  2. Za svaku platformu (ios, android):
  3. Build: ci/expo/build.pyeas build --platform <plat> --non-interactive.
  4. Submit (opciono): ci/expo/submit.pyeas submit --platform <plat> (App Store / Play Store).
  5. Update (opciono, OTA): ci/expo/update.pyeas update --branch <branch>.
  6. Zapiši per-platform rezultat:
{
  "platforms": {
    "ios":     { "status": "deployed", "build_id": "...", "url": "..." },
    "android": { "status": "failed",   "error": "eas-build-failed:..." }
  }
}
  1. Aggregate u services.<name>.deploy.status:
  2. Svi deployeddeployed
  3. Bilo koji failed (sa failure_policy: strict) → failed
  4. Bilo koji failed (sa soft, default) → partial

Sentry auto-stamp

Ako service ima observability.sentry.stamp.auto: true (default za Expo servise), deploy verb inline poziva ci/sentry/mobile_stamp.py nakon svake uspješne platforme:

sentry release_name = services.<name>.release_name_template.format(
    version=<bumped_version>,
    bundle_id=<eas_build_bundle_id>,
    platform=<ios|android>,
)
sentry-cli releases new <release_name>
sentry-cli releases set-commits <release_name> --auto

SENTRY_BUNDLE_ID_OVERRIDE Make var overriduje {bundle_id} placeholder; NE toggle-uje stamping.

--wait značenje

EAS deploy nema services_stable ekvivalent. --wait znači:

  • Sačekaj da EAS build završi (eas build:list --status finished)
  • NE čeka App Store review (to traje danima)

Ako treba čekati review — to je van CI scope-a; koristi eas submit:status ad-hoc.

Failure modes

  • EAS CLI auth fail (401/403) → VendorAuthError (exit 2). Expo token istekao.
  • EAS build fail (compile error) → per-platform failed u state. NE retry — fix app code.
  • Submit reject (App Store / Play Store) → per-platform failed. Out of CI scope.
  • Sentry stamp fail → NE aborta deploy; log warning + continue. Stamp je observability, ne gate.

Vidi i