Add native server deployments support for EAS Update
Why
EAS Currently supports native deployments only for EAS Builds.
How
This PR relies on Expo CLI changes which deploys API routes for the update during export, same as export:embed deploys them for native builds.
- https://github.com/expo/expo/pull/39218
eas update sets __EXPO_GENERATED_CONFIG_PATH which expo export writes the generated config into. The deployed URL in this case. This TMP file is created to avoid breaking computed fingerprint. This ensures the new update with will be compatible with the native build or prev update.
This PR also passes it's binary using envs to Expo CLI to ensure the executed deploy command uses the same EAS CLI as the update.
Test Plan
Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction.
# .env
EXPO_UNSTABLE_DEPLOY_SERVER=true
eas update
Example output
➜ easd update --channel production --message "test27"
[expo-cli] env: load .env
[expo-cli] env: export EXPO_UNSTABLE_DEPLOY_SERVER
[expo-cli] React Compiler enabled
[expo-cli] Starting Metro Bundler
[expo-cli] λ Bundled 750ms node_modules/expo-router/build/static/getServerManifest.js (999 modules)
[expo-cli] λ Bundled 5ms app/hello+api.ts (1 module)
[expo-cli] › Files (1):
[expo-cli] _expo/routes.json (247 B)
[expo-cli]
[expo-cli] › API routes (1):
[expo-cli] /hello (3.65 kB) (source map (5.46 kB))
[expo-cli]
[expo-cli] Deploying server to link with client
[expo-cli] EAS Hosting is still in preview and subject to changes.
[expo-cli] > Project export: server
[expo-cli] - Preparing project
[expo-cli] - Creating deployment
[expo-cli] ✔ Created deployment
[expo-cli] Server dashboard: https://expo.dev/projects/xxxxxxxx
[expo-cli] Server deployed to: https://expo-vsupdates--xxxxxxxx.expo.app
[expo-cli] iOS node_modules/expo-router/entry.js ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[expo-cli] Android node_modules/expo-router/entry.js ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[expo-cli] iOS node_modules/expo-router/entry.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 99.9% (1281/1281)
[expo-cli] Android node_modules/expo-router/entry.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 99.9% (1294/1294)
[expo-cli] Android Bundled 5038ms node_modules/expo-router/entry.js (1294 modules)
[expo-cli] iOS node_modules/expo-router/entry.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 99.9% (1281/1281)
[expo-cli] iOS Bundled 7793ms node_modules/expo-router/entry.js (1281 modules)
[expo-cli] Creating asset map
[expo-cli]
[expo-cli] › Assets (36):
[expo-cli] node_modules/expo-router/assets/unmatched.png (4.75 kB)
[expo-cli]
[expo-cli] › android bundles (2):
[expo-cli] _expo/static/js/android/entry-2f1724c2101da188ea611fe10295ff10.hbc (2.21 MB)
[expo-cli] _expo/static/js/android/entry-2f1724c2101da188ea611fe10295ff10.hbc.map (7.36 MB)
[expo-cli]
[expo-cli] › ios bundles (2):
[expo-cli] _expo/static/js/ios/entry-c198586c91d2746e4392264528b56a8c.hbc (2.15 MB)
[expo-cli] _expo/static/js/ios/entry-c198586c91d2746e4392264528b56a8c.hbc.map (7.32 MB)
[expo-cli]
[expo-cli] › Files (4):
[expo-cli] _expo/routes.json (247 B)
[expo-cli] assetmap.json (12.4 kB)
[expo-cli] metadata.json (4.08 kB)
[expo-cli] server-deployment.json (59 B)
[expo-cli]
[expo-cli] › API routes (1):
[expo-cli] /hello (3.65 kB) (source map (5.46 kB))
[expo-cli]
[expo-cli] Exported: dist
✔ Exported bundle(s)
ℹ Set origin to https://expo-vsupdates--xxxxxxxx.expo.app
✔ Uploaded assetmap.json
✔ Uploaded 2 app bundles
✔ Uploading assets skipped - no new assets found
ℹ 31 iOS assets, 32 Android assets (maximum: 2000 total per update). Learn more about asset limits
✔ Computed project fingerprints
✔ Published!
Branch production
Runtime version 1.0.0
Platform android, ios
Update group ID xxxxxxxx
Android update ID xxxxxxxx
iOS update ID v
Message test27
Commit xxxxxxxx
EAS Dashboard https://expo.dev/xxxxxxxx
Size Change: +924 B (0%)
Total Size: 53.6 MB
| Filename | Size | Change |
|---|---|---|
./packages/eas-cli/dist/eas-linux-x64.tar.gz |
53.6 MB | +924 B (0%) |
Codecov Report
:x: Patch coverage is 90.90909% with 1 line in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 51.91%. Comparing base (f643631) to head (d18fdd8).
| Files with missing lines | Patch % | Lines |
|---|---|---|
| packages/eas-cli/src/project/publish.ts | 50.00% | 1 Missing :warning: |
Additional details and impacted files
@@ Coverage Diff @@
## main #3155 +/- ##
==========================================
+ Coverage 51.89% 51.91% +0.02%
==========================================
Files 616 616
Lines 24849 24859 +10
Branches 5216 5216
==========================================
+ Hits 12894 12903 +9
- Misses 10883 10884 +1
Partials 1072 1072
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
✅ Thank you for adding the changelog entry!