Skip to content

mobile: native OTA publish pipeline (CI side)#8804

Merged
aapeliv merged 4 commits into
mobile/v1.1.20from
mobile/feature/native-ota-publish
May 25, 2026
Merged

mobile: native OTA publish pipeline (CI side)#8804
aapeliv merged 4 commits into
mobile/v1.1.20from
mobile/feature/native-ota-publish

Conversation

@aapeliv

@aapeliv aapeliv commented May 25, 2026

Copy link
Copy Markdown
Member

Adds the CI side of the production native (mobile) OTA publish pipeline. This is the counterpart to the tools/ publish_native_ota lambda (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 of build:deploy-manifest / deploy:deploy-info (no dependency on any release:* job).
  • .gitignore — ignore the tools/ ops repo when cloned in locally.

Targets mobile/v1.1.20 (not develop) to stack on the in-progress mobile OTA work.

Testing

  • ota-stage.mjs is unchanged; the production job passes the placeholder via the existing --base-url flag.
  • Locally verified build_native_ota_manifest.sh emits valid JSON, the .gitlab-ci.yml parses, and the new jobs are present.
  • The new jobs carry a TEMP mobile/v1.1.20 branch rule (matching the staging OTA jobs) so they run on this branch for validation; revert to $RELEASE_BRANCH only before merging to develop.
  • End-to-end publish (placeholder substitution + signing + CDN upload) is exercised by the tools/ lambda, reviewed separately.

For maintainers

  • Maintainers can push commits to my branch
  • Maintainers can merge this PR for me

This PR was created with the Couchers PR skill.

@vercel

vercel Bot commented May 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
couchers Ready Ready Preview May 25, 2026 5:25pm

Request Review

@CouchersBot

CouchersBot commented May 25, 2026

Copy link
Copy Markdown
Member

Preview builds

Mobile Dev Tool preview

Scan 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.

iosOpen in Dev Tool

QR to open the ios build

Deep link
couchers-devtool://expo-development-client/?url=https%3A%2F%2F7e8d325c--ota.preview.couchershq.org%2Fios%2Fmanifest

androidOpen in Dev Tool

QR to open the android build

Deep link
couchers-devtool://expo-development-client/?url=https%3A%2F%2F7e8d325c--ota.preview.couchershq.org%2Fandroid%2Fmanifest

commit 7e8d325c · pipeline

aapeliv and others added 4 commits May 25, 2026 13:21
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>
@aapeliv
aapeliv force-pushed the mobile/feature/native-ota-publish branch from 7261e37 to 6dafba0 Compare May 25, 2026 17:22
@aapeliv
aapeliv merged commit f24546d into mobile/v1.1.20 May 25, 2026
2 of 4 checks passed
@aapeliv
aapeliv deleted the mobile/feature/native-ota-publish branch May 25, 2026 17:22
@github-actions

Copy link
Copy Markdown
Contributor

📝 Release Notes

This 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 Information

Model: couchers.openai.gpt-5.4
Decision: exclude
Reasoning: 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants