mobile: native OTA publish pipeline (CI side)#8804
Conversation
|
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 |
Builds the production OTA bundle, stages the per-platform bundles on the preview CDN with placeholder asset URLs, and records them on their own manifest stream (deploy/native-ota-manifests/) — independent of the backend/web release jobs — for the tools/ publish_native_ota lambda to sign and push to the prod CDN. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Record an ota_version (display version + commit hash, e.g. v1.2.18355.fc38c23d) in the native OTA manifest so the published bundle is identified the same descriptive way as everything else, instead of the opaque Expo update_id UUID. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7261e37 to
6dafba0
Compare
📝 Release NotesThis PR does not need to be included in release notes. Reason: This PR adds CI/CD infrastructure for publishing mobile over-the-air updates and production native builds. While it supports future mobile releases, it is primarily internal release pipeline work and does not directly introduce a user-visible feature or a clearly noticeable end-user improvement on its own. 🤖 Bot Debug InformationModel: |


Adds the CI side of the production native (mobile) OTA publish pipeline. This is the counterpart to the
tools/publish_native_otalambda (separate repo) — CI only stages unsigned bundles; signing and the push to the prod CDN happen in the lambda, so the signing key never touches CI.The flow is decoupled from the backend/web release: a JS-only OTA can be published without (or waiting on) a platform deploy.
build:mobile-ota-prod— exports the production variant per platform and stages bundle + assets + Expo manifest as a tarball. Asset URLs are baked with the literal placeholder__OTA_BUNDLE_BASE__, which the publish lambda substitutes with the real prod CDN base (<cdn-root>/<update-id>) before signing, so the lambda alone owns where the bundle lives and the URLs can't drift from the upload path.preview:mobile-ota-prod— uploads the tarballs to the preview CDN (<sha>--native-ota.preview.couchershq.org).build:native-ota-manifest+deploy:native-ota-info+app/deployment/build_native_ota_manifest.sh— record the bundles on their own manifest stream (deploy/native-ota-manifests/), uploaded to the deploy bucket independently ofbuild:deploy-manifest/deploy:deploy-info(no dependency on anyrelease:*job)..gitignore— ignore thetools/ops repo when cloned in locally.Targets
mobile/v1.1.20(notdevelop) to stack on the in-progress mobile OTA work.Testing
ota-stage.mjsis unchanged; the production job passes the placeholder via the existing--base-urlflag.build_native_ota_manifest.shemits valid JSON, the.gitlab-ci.ymlparses, and the new jobs are present.mobile/v1.1.20branch rule (matching the staging OTA jobs) so they run on this branch for validation; revert to$RELEASE_BRANCHonly before merging todevelop.tools/lambda, reviewed separately.For maintainers
This PR was created with the Couchers PR skill.