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¶
- Učitaj
ci-state.json(service, platforme, env). - Za svaku platformu (
ios,android): - Build:
ci/expo/build.py→eas build --platform <plat> --non-interactive. - Submit (opciono):
ci/expo/submit.py→eas submit --platform <plat>(App Store / Play Store). - Update (opciono, OTA):
ci/expo/update.py→eas update --branch <branch>. - Zapiši per-platform rezultat:
{
"platforms": {
"ios": { "status": "deployed", "build_id": "...", "url": "..." },
"android": { "status": "failed", "error": "eas-build-failed:..." }
}
}
- Aggregate u
services.<name>.deploy.status: - Svi
deployed→deployed - Bilo koji
failed(safailure_policy: strict) →failed - Bilo koji
failed(sasoft, 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
failedu 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¶
v7.md§2 "Kako radi"01-bump.md— state + version02-deploy-coolify.md— alternative mod02-deploy-ecs.md— alternative modci/expo/expo_deploy.py— orchestratorci/expo/{build,submit,update}.py— per-platform wrappersci/expo/CLAUDE.md— EAS setup, per-platform contractci/sentry/CLAUDE.md— auto-stamp- bundle-id override