mobile: auto-rebuild Dev Tool native client on fingerprint change#8797
Conversation
Add a fingerprint-gated CI job (build:devtool-native) that rebuilds the Dev Tool dev client only when its Expo fingerprint changes — the ~5% case OTA can't serve. iOS auto-submits to TestFlight; Android builds a sideloadable APK (new devtool-apk profile) that CI self-hosts on the dev-assets bucket, since Google Play has no TestFlight-equivalent for a dev-client APK.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Preview buildsMobile Dev Tool previewScan the QR with your phone camera, or tap Open in Dev Tool on the device, to open this branch in the installed Dev Tool dev client. ios — Open in Dev Tool Deep linkandroid — Open in Dev Tool Deep linkcommit |
📝 Release NotesThis PR does not need to be included in release notes. Reason: This PR adds internal CI automation for rebuilding the mobile Dev Tool native client when needed. It affects developer workflow and preview infrastructure rather than functionality visible to end users, and it does not represent a user-facing feature or broadly important platform change for members using Couchers. 🤖 Bot Debug InformationModel: |


Adds CI machinery to rebuild the Dev Tool native client automatically when its Expo fingerprint changes — the ~5% case the per-branch OTA pipeline can't serve (a fingerprint mismatch makes the dev client silently ignore branch bundles, so the installed client itself must be rebuilt). Pure JS/TS changes are unaffected; they still load over the air.
How it works — new
build:devtool-nativejob (app/.gitlab-ci.yml) runs on$DEVTOOL_BUILD_BRANCH(set tomobile/v1.1.20while validating; switch todeveloponce trusted) and callsapp/mobile/scripts/devtool-build.shper platform:expo-updates fingerprint:generate+.fingerprintignorethe OTA pipeline uses, so it matches the EAS build).s3://$AWS_PREVIEW_BUCKET/devtool-builds/<platform>.fingerprint. Unchanged → no-op. Changed → build on EAS.eas build --profile devtool --auto-submit→ TestFlight. Android →eas build --profile devtool-apk(new profile:extends devtool, internal distribution, APK); CI downloads the artifact and publishes an immutablecouchers-devtool-<sha>.apk+ a stableindex.htmltodevtool-builds/android/, served athttps://android--devtool-builds.preview.couchershq.org/. Google Play has no TestFlight-equivalent for a dev-client APK, so we self-host it.Also removes the now-dead
submit.devtool.android(Play) config and repoints the manualrelease:android:devtoolscript at the APK profile.Requires an
EXPO_TOKENCI variable (Expo robot token, build + submit scope) before the job can run. No Play credentials needed.Testing
Not yet run end-to-end — needs
EXPO_TOKENin CI. Validated locally:bash -non the script;json_fieldhelper parses both the fingerprint (.hash) andeas build --json([0].artifacts.applicationArchiveUrl) shapeseas.json/package.jsonvalid JSON and prettier-clean;.gitlab-ci.ymlparses;devtool-apkprofile present,submit.devtool.androidremovedmobile/v1.1.20afterEXPO_TOKENis added: confirm a no-op when the fingerprint is unchanged, a build + TestFlight submit (iOS) and APK publish (Android) when it changes, and the stable Android URL serves the APKandroid--devtool-builds.preview.couchershq.orghost resolves through the existing preview CDN (thetools/lambdas/aren't in this checkout; relies on the same<a>--<b> → /<b>/<a>mapping OTA uses)For maintainers
This PR was created with the Couchers PR skill.