Skip to content

fix(ci): evaluate the release build config as the production profile - #8578

Merged
iscekic merged 2 commits into
mainfrom
fix/mobile-release-production-config-eval
Oct 22, 2026
Merged

iscekic merged 2 commits into
mainfrom
fix/mobile-release-production-config-eval

Conversation

@iscekic

@iscekic iscekic commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

Problem

Every mobile release run since the Artifacts File Provider work merged fails in build-and-submit before any artifact exists:

Failed to patch capabilities: [ { capabilityType: 'FILEPROVIDER_TESTINGMODE', option: 'ON' } ]
✖ Failed to sync capabilities com.kilocode.kiloapp.ArtifactsFileProvider
Apple API error: The request entity is not a valid request document object
Error: build command failed.

app.config.ts and plugins/withArtifactFileProvider.js gate the dev-only
com.apple.developer.fileprovider.testing-mode entitlement on
EAS_BUILD_PROFILE === 'production'. The Build iOS and Android step sets only
EXPO_TOKEN, so the eas-cli evaluation of app.config.ts — the one whose
entitlements it syncs onto the App IDs — ran as non-production, put the dev-only
entitlement in the extension's EAS entry, and asked Apple to enable a capability
a release must not carry. Apple rejected the sync and the whole eas build
command exited 1, so that run lost its iOS and Android artifacts.

Change

Run the release build through eas env:exec production, the same mechanism the
preflight assertion already uses, so the CLI evaluates the production profile:

pnpx eas-cli@24.8.0 env:exec production --non-interactive \
  'EAS_BUILD_PROFILE=production SENTRY_AUTH_TOKEN=preflight-placeholder pnpx eas-cli@24.8.0 build ... > build.json'
  • EAS_BUILD_PROFILE=production makes the CLI evaluation match the builder's.
  • The production environment supplies the values a production evaluation
    asserts, so a bare EAS_BUILD_PROFILE alone would throw.
  • SENTRY_AUTH_TOKEN is a SECRET variable only a builder can read, so the
    evaluation gets the placeholder the preflight step already uses.

Verification

  • preflight is green on the failing commit and already runs
    env:exec production --non-interactive 'EAS_BUILD_PROFILE=production SENTRY_AUTH_TOKEN=preflight-placeholder pnpm assert:config', so the production
    evaluation with that placeholder passes on main.
  • env:exec --non-interactive is a pure passthrough (spawn(shell: true, stdio: 'inherit')), so the redirection and the exit status of the inner
    command are unchanged.
  • The next release run is the end-to-end check: the ArtifactsFileProvider target
    must show no testing-mode capability patch, and the run must reach artifact
    download.

Comment thread .github/workflows/kilo-app-release.yml Resolved
@kilo-code-bot

kilo-code-bot Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
.github/workflows/kilo-app-release.yml 265 Release fix relies on an unasserted invariant: assert-expo-config.mjs (already run by preflight under env:exec production) never checks that the ArtifactsFileProvider EAS entry omits com.apple.developer.fileprovider.testing-mode, so a regression would again only surface at Apple's capability sync
Files Reviewed (1 file)
  • .github/workflows/kilo-app-release.yml - 1 issue

Fix these issues in Kilo Cloud


Reviewed by deepseek-flash-latest · Input: 50K · Output: 15.7K · Cached: 652.4K

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic requested a review from joshburt October 22, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants