fix(ci): unbreak the kilo-app release preflight - #5454
Merged
Conversation
The preflight job failed at "Verify EAS production environment". eas-cli spawns `expo/bin/cli config --json` directly, so it bypasses the pnpm bin shim that exports NODE_PATH. react-native-appsflyer's Expo plugin requires `@expo/config-plugins` without declaring it, so the config evaluation threw `Cannot find module '@expo/config-plugins'` and every eas-cli command that reads the app config failed. Declare the dep through packageExtensions, the same way @sentry/react-native and expo-share-intent already do. The next step, "Assert production config contract", failed for a second reason: EAS_BUILD_PROFILE=production applied to eas-cli itself, so eas-cli's own config evaluation threw on env vars it never injects. Move the variable into the quoted command, and give the run a placeholder SENTRY_AUTH_TOKEN, because that variable is SECRET and only EAS builders can read it. Also print the eas-cli output when env:list fails. The command substitution swallowed stdout, where eas-cli writes the real reason.
Contributor
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (3 files)
Reviewed by grok-4.6 · Input: 53.4K · Output: 9.1K · Cached: 376.1K Review guidance: REVIEW.md from base branch |
iscekic
enabled auto-merge (squash)
August 24, 2026 21:03
pandemicsyn
approved these changes
Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the
preflightjob in kilo-app Release run 32768868183.Failure 1:
Verify EAS production environmentThe log showed only
Error: env:list command failed.The real reason went to eas-cli's stdout, which the step captured into$ENV_OUTPUT.The reason: eas-cli spawns
node_modules/.pnpm/expo@.../expo/bin/cli config --jsondirectly, so it bypasses the pnpm bin shim that exportsNODE_PATH.react-native-appsflyer/expo/withAppsFlyerIos.jsrequires@expo/config-pluginsand deep paths under it, but the package declares no dependencies at all. Without the shim the require fails, so every eas-cli command that reads the app config fails.The fix declares the dep through
packageExtensions, next to the identical entries for@sentry/react-nativeandexpo-share-intent. It resolves to@expo/config-plugins@57.0.6— the same instance the SDK 57 graph already uses, so no duplicate copy.Failure 2:
Assert production config contractThis step would have failed next, for a different reason.
EAS_BUILD_PROFILE=productionapplied to the eas-cli process itself, and eas-cli evaluatesapp.config.tsto resolve the project before it injects any environment. Under the production profile that evaluation throws on the missing env, and it also throws on the missingSENTRY_AUTH_TOKEN, which is aSECRETvariable only EAS builders can read.The variable now sits inside the quoted command, so it applies to
pnpm assert:configand not to eas-cli. The run gets a placeholderSENTRY_AUTH_TOKEN; step 8 already proves the real secret exists in the EAS production environment.Verification
Both steps ran locally against the real EAS project, with the CI environment (
GITHUB_ACTIONS=1, no.envloading):expo config --jsonoutside the pnpm shimCannot find module '@expo/config-plugins'eas env:list --environment production --format longeas env:exec production ... assert:configExpo config contract OKpnpm install --frozen-lockfilepasses on the updated lockfile.Not in scope
No CI job evaluates the app config outside the pnpm shim, so nothing catches a repeat of failure 1 before the nightly release. A guard is a separate change.