The legacy dual-write leg posted to https://updates.bsky.app/v1/upload. That
hostname has resolved to denis on EKS since the 2026-07-26 origin flip, and denis
deliberately has no /v1/upload route -- publishing there is out-of-band via
`denis publish`. The first OTA publish attempted after the flip therefore got a
404 (run 30220289826).
Point it at ota1's own origin instead. The dual-write was never independent of
the cutover: it wrote to ota1 *through the hostname being cut over*, so flipping
the origin necessarily broke it. Addressing ota1 directly is what the step always
meant. Verified reachable: ota1.us-east.updates.bsky.network/v1/upload returns
401 (route present, auth required) where updates.bsky.app returns 404.
Also reorder the two publishes so denis goes first. This is the more serious half
of the bug. The legacy step ran before the denis steps, so when it 404'd the
three denis steps were skipped and the bundle reached NEITHER origin -- a
dual-write that takes down the working path when its deprecated half fails is
worse than no dual-write. denis is the sole origin serving clients, so it
publishes first; the legacy upload follows and is still required to pass, so a
stale ota1 remains a loud failure rather than a silent one.
The upload URL is now overridable via OTA1_ORIGIN, and the comment explains why
it must never be set back to the CDN hostname.
Both halves go away together when ota1 is decommissioned (Phase 5).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sets the "What to test" field in TestFlight to distinguish between
TestFlight and Production builds.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Configure concurrency groups so only one iOS build and one Android build
can run at a time across all workflows. This prevents manual builds from
conflicting with automatic builds triggered by fingerprint changes.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* use xlarge runner for macos build
* try and fix yarn cache
* update actions/cache for pods step
* use expo github action main rather than v8
* update all actions to the same
* use yarn cache where missing
* Clean up env files
* Use new env in Sentry setup file
* Use new env in Bitdrift setup file
* Use new env in chat proxy header
* Prefix Bitdrift key with EXPO_PUBLIC
* Deprecate SENTRY_RELEASE since we use package.json now
* Use existing EXPO_PUBLIC_BUNDLE_IDENTIFIER short commit has as Sentry dist value
* Fix missing bundle identifier for Render deploys
* Deprecate SENTRY_DIST in favor of EXPO_PUBLIC_BUNDLE_IDENTIFIER
* Prefix SENTRY_DSN with EXPO_PUBLIC to match others
* Remove debugging field
* Replace NODE_ENV in places where its safe
* Self review
* Properly patch Sentry package
* Echo variables to .env in Dockerfile instead of passing to shell script
* Make sure EXPO_PUBLIC_ENV is set for web container builds
* Update IS_TESTFLIGHT to include testflight-android
* Slice bundle hash to match other platforms, needed for render.com deployments
* [APP-1331] Migrate `app-info` to new env (#8703)
* Move env files into directory with platform specific files
* Migrate usages of app-info to new env
* Fix bad import
* Update BUNDLE_DATE format comment
* Trim RENDER_GIT_COMMIT to first 7 to match --short sha
* Clarify build process env vars and ensure they are explicitly passed in
* Revert Sentry patch as a result of prev commit
* Update webpack Sentry dist value based on prev commits
* Add PACKAGE_VERSION and replace in statsig to fix conflict
* Fix render substitution syntax
* Remove invalid syntax
* Remove unnecessary testflight check
* Just use long commit hash
* Slice full hash for display in app
* Fix missing space in ios workflow
* Pass in sentry CLI env vars, align matching values
* Align on RELEASE_VERSION
* Add new env setup to missed OTA spot
* Update webpack to use same SENTRY_RELEASE var
* Just fallback to package version for Render deploys
* Remove TF check for BUNDLE_DATE
* Set EXPO_PUBLIC_ENV for bundle update
* Consistent naming "Env"
* Add comment
* Use RELEASE_VERSION instead of package.json
* Update PR comment CI