fix(android): with-release-signing plugin requires '@expo/config-plugins' from non-declared dep — use 'expo/config-plugins' re-export #284
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol#284
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
release-android.yml(run #708) now reaches Gradle task execution (thanks #279) but fails at:Root cause
apps/client/plugins/with-release-signing.jsline 32 does:but
@expo/config-pluginsis not declared inapps/client/package.json— neither as a direct dep nor a peer. The Gradle tasks:expo-constants:createExpoConfigand:app:createBundleReleaseJsAndAssetsspawnnodeprocesses that resolve the plugin from the strict pnpm node_modules layout, where unscoped transitives aren't visible.This bug has been latent since #187 added the plugin. The previous release-android runs never surfaced it because they died earlier — at the foojay/IBM_SEMERU configuration-phase blowup that #279 fixed.
Fix
Official Expo plugins use
require("expo/config-plugins")— a one-line re-export from theexpopackage (expo/config-plugins.jsis literallymodule.exports = require('@expo/config-plugins')). That works without a separate dep declaration becauseexpois already a direct dep of@carol/client.Change
apps/client/plugins/with-release-signing.jsline 32:Matches the pattern used by every other Expo config plugin in the ecosystem (
expo-secure-store/plugin/build/withSecureStore.js, etc.).Acceptance
The next release-android run gets past
:expo-constants:createExpoConfigand:app:createBundleReleaseJsAndAssets. The plugin's runtime behaviour is unchanged — it's the same module either way.Out of scope
The in-tree vitest test for the plugin (covered in #187) imports the module via a different path — confirm it still passes after the require swap, but no test changes expected.