Skip to content

Add staging OTA publish pipeline#8798

Merged
aapeliv merged 3 commits into
mobile/v1.1.20from
mobile/feature/ota-staging-publish
May 24, 2026
Merged

Add staging OTA publish pipeline#8798
aapeliv merged 3 commits into
mobile/v1.1.20from
mobile/feature/ota-staging-publish

Conversation

@aapeliv

@aapeliv aapeliv commented May 24, 2026

Copy link
Copy Markdown
Member

Adds the staging publish pipeline for the self-hosted mobile OTA, mirroring the web build→deploy shape. On merge to develop, CI bundles the staging variant, stages the (unsigned) Expo Updates output, uploads the bundle + assets to dev-assets, and prints the native_ota_bundles JSON to paste into the staging GrowthBook flag. The staging backend (dev-api.couchershq.org/native/ota/manifest) builds the served manifest from that flag, with asset URLs pointing at the uploaded files.

Also fixes the staging app's update URL, which still pointed at the old /mobile/ota/manifest path after the endpoint was renamed to /native/ota/manifest.

Targets the mobile/feature/prod-ota feature branch (not develop).

Changes

  • app/.gitlab-ci.yml — new develop-only build:mobile-ota-staging + deploy:mobile-ota-staging jobs.
  • app/mobile/scripts/ota-growthbook-flag.mjs — emits the native_ota_bundles flag JSON from staged manifests.
  • app/mobile/app.config.js — staging updates.url/native/ota/manifest.

Notes / follow-ups

  • Unsigned for now (code signing deferred).
  • CDN routing: asset URLs are baked at https://<sha>--ota-staging.preview.couchershq.org, expecting the host→prefix lambda to map that to /ota-staging/<sha>/ — the lambda needs updating to handle that prefix.
  • GrowthBook update is manual (printed JSON pasted into the flag) for now.
  • Production publishing will go through the tools/ ops deploy, down the line.

Testing

  • Validated app/.gitlab-ci.yml parses (js-yaml).
  • Ran ota-growthbook-flag.mjs against sample manifests; output matches the shape the backend servicer reads (id, launch_asset.{key,url}, assets).
  • Not yet exercised end-to-end in CI or on-device. When testing on-device, confirm the published bundle's fingerprint (printed in the deploy log / runtime_version in the flag JSON) matches the installed staging build.

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 24, 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 24, 2026 10:20pm

Request Review

@CouchersBot

CouchersBot commented May 24, 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%2F9e3758d4--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%2F9e3758d4--ota.preview.couchershq.org%2Fandroid%2Fmanifest

commit 9e3758d4 · pipeline

Base automatically changed from mobile/feature/prod-ota to mobile/v1.1.20 May 24, 2026 21:45
@aapeliv
aapeliv marked this pull request as ready for review May 24, 2026 21:45
aapeliv and others added 3 commits May 24, 2026 18:14
Adds a develop-only GitLab CI build+deploy pair that bundles the staging
variant, stages the (unsigned) Expo Updates output, uploads bundle+assets to
dev-assets, and prints the native_ota_bundles JSON for the staging GrowthBook
flag. Also fixes the staging app's update URL to the renamed /native/ota/manifest
endpoint.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The protos job already emits the grpc-web TS stubs to app/proto/gen/ts/proto
and the mobile OTA jobs pull that artifact in via needs, so copy the stubs in
rather than re-downloading protoc and running ci-build-protos.sh.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@aapeliv
aapeliv force-pushed the mobile/feature/ota-staging-publish branch from 9e3758d to 2d21617 Compare May 24, 2026 22:18
@aapeliv
aapeliv merged commit 1ff6eb6 into mobile/v1.1.20 May 24, 2026
4 of 5 checks passed
@aapeliv
aapeliv deleted the mobile/feature/ota-staging-publish branch May 24, 2026 22:23
@github-actions

Copy link
Copy Markdown
Contributor

📝 Release Notes

This PR does not need to be included in release notes.

Reason: This PR adds internal CI/CD and staging OTA publishing infrastructure for the mobile app, plus a staging-only update URL fix. It is primarily developer/operations work and does not introduce a user-facing feature or a clearly noticeable improvement for end users in production.

🤖 Bot Debug Information

Model: couchers.openai.gpt-5.4
Decision: exclude
Reasoning: This PR adds internal CI/CD and staging OTA publishing infrastructure for the mobile app, plus a staging-only update URL fix. It is primarily developer/operations work and does not introduce a user-facing feature or a clearly noticeable improvement for end users in production.

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