ci: use builds.yml as single source of truth for OTA push env config#28839
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
| QUICKNODE_BASE_URL: ${{ secrets.QUICKNODE_BASE_URL }} | ||
| QUICKNODE_LINEA_MAINNET_URL: ${{ secrets.QUICKNODE_LINEA_MAINNET_URL }} | ||
| QUICKNODE_MONAD_URL: ${{ secrets.QUICKNODE_MONAD_URL }} | ||
| QUICKNODE_HYPEREVM_URL: ${{ secrets.QUICKNODE_HYPEREVM_URL }} |
There was a problem hiding this comment.
MM_PERPS_ENABLED dropped from OTA builds without builds.yml entry
Medium Severity
The old workflow explicitly set MM_PERPS_ENABLED: 'true' as a job-level env var, but this PR removes it without adding a corresponding entry to builds.yml's _public_envs. The app code in selectPerpsEnabledFlag uses process.env.MM_PERPS_ENABLED === 'true' as a fallback when the remote feature flag is unavailable or invalid. With the env var now unset, the fallback evaluates to false, silently disabling perps in OTA builds whenever the remote flag service is unreachable or the flag isn't configured. Other perps-related vars like MM_PERPS_HIP3_ENABLED and MM_PERPS_BLOCKED_REGIONS are present in _public_envs, suggesting this omission is unintentional.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit c030552. Configure here.
There was a problem hiding this comment.
If MM_PERPS_ENABLED isn't in builds.yml we don't have it to begin with so this is fine
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
None of these changes touch:
The changes are a build system refactoring to centralize configuration management. No E2E tests need to run to validate these changes — they are validated by the CI pipeline itself running successfully. Performance Test Selection: |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 2fd32c0. Configure here.
| MM_BRAZE_SDK_ENDPOINT: 'MM_BRAZE_SDK_ENDPOINT' | ||
| # Expo | ||
| EXPO_PROJECT_ID: 'EXPO_PROJECT_ID' | ||
| EXPO_TOKEN: 'EXPO_TOKEN' |
There was a problem hiding this comment.
BSC and SEI QuickNode secrets missing from builds.yml
High Severity
QUICKNODE_BSC_URL and QUICKNODE_SEI_URL were removed from the OTA workflow's hardcoded env block but never added to the _secrets anchor in builds.yml. The PR changelog claims all three secrets (QUICKNODE_BSC_URL, QUICKNODE_SEI_URL, EXPO_TOKEN) were added, but only EXPO_TOKEN actually appears in the diff. These variables are actively used in production code (app/util/networks/customNetworks.tsx) for BSC and SEI network failover URLs, so OTA updates will silently lose failover capability for those chains.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 2fd32c0. Configure here.
There was a problem hiding this comment.
I've confirmed with @Prithpal-Sooriya that we don't need QUICKNODE_BSC_URL and QUICKNODE_SEI_URL
|





Description
The OTA workflow (
push-eas-update.yml) had ~65 hardcoded environment variables in its YAML, duplicating whatbuilds.ymlalready defines. This caused drift: theexpchannel received production API defaults instead of dev/staging, new variables added tobuilds.ymlwere missing from OTA, andMM_CHARTING_LIBRARY_URLwas incorrectly treated as a secret.This PR eliminates the duplication by having the OTA workflow read from
builds.ymlusing the sameapply-build-config.js+set-secrets-from-config.jspattern that native builds (build.yml) already use.I've confirmed that we don't need the following env variables for now:
QUICKNODE_BSC_URL
QUICKNODE_SEI_URL
Changelog
push-eas-update.yml: Added apreparejob that maps channel → build name (e.g.exp→main-exp) and readsbuilds.yml. Thepush-updatejob now usesapply-build-config.jsandset-secrets-from-config.jsto set env vars and secrets, replacing the 65-line hardcoded env block with 7 OTA-specific vars.builds.yml: Added 3 missing secrets that were only in the OTA workflow:QUICKNODE_BSC_URL,QUICKNODE_SEI_URL,EXPO_TOKEN.build.sh: MovedloadBuildConfigoutside theexpo-updateguard so OTA builds also load config frombuilds.yml. Replaced the hardcodedcreateEnvFile()var list with dynamic reads frombuilds.yml, eliminating a second source of duplication.Key fix: OTA updates to the
expchannel will now correctly getBRIDGE_USE_DEV_APIS=true,RAMPS_ENVIRONMENT=staging, dev portfolio URLs, etc. — matching whatmain-expnative builds use.CHANGELOG entry: null
Related issues
Fixes:
Manual testing steps
Screenshots/Recordings
Before
After (should be the same as before)
Pre-merge author checklist
Pre-merge reviewer checklist
Note
Medium Risk
Changes CI/release automation for OTA publishing and how secrets/env vars are sourced, so misconfiguration could break updates or target the wrong environment despite limited code-path impact.
Overview
Migrates the OTA publish workflow to use
builds.ymlas the single source of truth for environment selection, non-secret env vars, and secret mappings, removing the large hardcoded env block frompush-eas-update.yml.Adds a
preparejob that maps OTA channel → build name (main-exp/main-rc/main-prod), sets the GitHub Environment dynamically, and passes the build’s secret mapping intopush-update, which now applies config viascripts/apply-build-config.jsand injects secrets viascripts/set-secrets-from-config.js.Updates
scripts/build.shsoexpo-updateloads build config frombuilds.ymland generates.envdynamically from the keys defined in that build’senv+secrets;builds.ymlis also extended to includeEXPO_TOKENin the shared secrets mapping.Reviewed by Cursor Bugbot for commit 2fd32c0. Bugbot is set up for automated code reviews on this repo. Configure here.