eas-cli icon indicating copy to clipboard operation
eas-cli copied to clipboard

eas build --local fails when using a Yarn 4 monorepo and Corepack

Open FezVrasta opened this issue 1 year ago • 12 comments

Build/Submit details page URL

No response

Summary

I have a monorepo managed by Yarn 4.5.1, one of the workspaces is an Expo app.

When I run eas build --local and select Android (I can't test iOS) the build fails.

Managed or bare?

managed

Environment

  expo-env-info 1.2.0 environment info:
    System:
      OS: macOS 15.1
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 20.11.1 - ~/.nvm/versions/node/v20.11.1/bin/node
      Yarn: 1.22.22 - ~/Developer/<redacted>/node_modules/.bin/yarn
      npm: 10.2.4 - ~/.nvm/versions/node/v20.11.1/bin/npm
      Watchman: 2024.11.04.00 - /opt/homebrew/bin/watchman
    Managers:
      CocoaPods: 1.16.2 - /opt/homebrew/bin/pod
    SDKs:
      iOS SDK:
        Platforms: DriverKit 24.1, iOS 18.1, macOS 15.1, tvOS 18.1, visionOS 2.1, watchOS 11.1
    IDEs:
      Android Studio: 2023.2 AI-232.10227.8.2321.11479570
      Xcode: 16.1/16B40 - /usr/bin/xcodebuild
    npmGlobalPackages:
      eas-cli: 10.2.2
    Expo Workflow: bare
❯ npx expo-doctor                          
Enabled experimental React Native Directory checks. Unset the EXPO_DOCTOR_ENABLE_DIRECTORY_CHECK environment variable to disable this check.
✔ Check package.json for common issues
✔ Check Expo config for common issues
✔ Check for common project setup issues
✔ Check dependencies for packages that should not be installed directly
✔ Check for issues with Metro config
✔ Check if the project meets version requirements for submission to app stores
✔ Check that packages match versions required by installed Expo SDK
✔ Check native tooling versions
✔ Check npm/ yarn versions
✖ Validate packages against React Native Directory package metadata
✔ Check for legacy global CLI installed locally
✔ Check Expo config (app.json/ app.config.js) schema
✔ Check for app config fields that may not be synced in a non-CNG project
✔ Check that native modules do not use incompatible support packages
✔ Check that native modules use compatible support package versions for installed Expo SDK

Detailed check results:

The following issues were found when validating your dependencies against React Native Directory:
Untested on New Architecture: lucide-react-native
No metadata available: @expo-google-fonts/inter, @gluestack-ui/nativewind-utils, @gluestack-ui/overlay, @gluestack-ui/toast, metro-config, shared, tailwind-merge, tailwindcss
Advice: 
- Use libraries that are actively maintained and support the New Architecture. Find alternative libraries with https://reactnative.directory.
- Add packages to expo.doctor.reactNativeDirectoryCheck.exclude in package.json to selectively skip validations, if the warning is not relevant.
- Update React Native Directory to include metadata for unknown packages. Alternatively, set expo.doctor.reactNativeDirectoryCheck.listUnknownPackages in package.json to false to skip warnings about packages with no metadata, if the warning is not relevant.

One or more checks failed, indicating possible issues with the project.
       

Error output

[INSTALL_DEPENDENCIES] We detected that 'workspaces/mobile-client' is a yarn workspace
[INSTALL_DEPENDENCIES] Running "yarn install --no-immutable --inline-builds" in /var/folders/c6/klv3h1_977v_x6t45d515kzc0000gn/T/eas-build-local-nodejs/dd198977-dd10-4281-aa47-d0676d994c2d/build directory
[INSTALL_DEPENDENCIES] yarn install v1.22.22
[INSTALL_DEPENDENCIES] error Workspaces can only be enabled in private projects.
[INSTALL_DEPENDENCIES] info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[INSTALL_DEPENDENCIES] 
Error: yarn install --no-immutable --inline-builds exited with non-zero code: 1
    at ChildProcess.completionListener (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/spawn-async/build/spawnAsync.js:42:23)
    at Object.onceWrapper (node:events:633:26)
    at ChildProcess.emit (node:events:518:28)
    at maybeClose (node:internal/child_process:1105:16)
    at Socket.<anonymous> (node:internal/child_process:457:11)
    at Socket.emit (node:events:518:28)
    at Pipe.<anonymous> (node:net:337:12)
    ...
    at spawnAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/spawn-async/build/spawnAsync.js:7:23)
    at spawn (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/turtle-spawn/dist/index.js:16:47)
    at installDependenciesAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/common/installDependencies.js:24:50)
    at async runInstallDependenciesAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/common/setup.js:148:50)
    at async /Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/common/setup.js:57:9
    at async BuildContext.runBuildPhase (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/context.js:107:28)
    at async setupAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/common/setup.js:56:5)
    at async buildAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/builders/android.js:41:5)
    at async runBuilderWithHooksAsync (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/builders/common.js:12:13)
    at async Object.androidBuilder (/Users/federicozivolo/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/build-tools/dist/builders/android.js:26:16)

Build failed
Unknown error. See logs of the Install dependencies build phase for more information.
npx -y [email protected] eyJqb2IiOnsidHlwZSI6Im1hbmFnZWQiLCJwbGF0Zm9ybSI6ImFuZHJvaWQiLCJwcm9qZWN0Um9vdERpcmVjdG9yeSI6IndvcmtzcGFjZXMvbW9iaWxlLWNsaWVudCIsInByb2plY3RBcmNoaXZlIjp7InR5cGUiOiJQQVRIIiwicGF0aCI6Ii92YXIvZm9sZGVycy9jNi9rbHYzaDFfOTc3dl94NnQ0NWQ1MTVremMwMDAwZ24vVC9lYXMtY2xpLW5vZGVqcy8wYTQwZjJlNS01NmIwLTRiMDUtODI0YS1iM2NjMDAyZDk2OGYudGFyLmd6In0sImJ1aWxkZXJFbnZpcm9ubWVudCI6e30sImNhY2hlIjp7ImRpc2FibGVkIjpmYWxzZSwicGF0aHMiOltdLCJjbGVhciI6ZmFsc2V9LCJzZWNyZXRzIjp7ImJ1aWxkQ3JlZGVudGlhbHMiOnsia2V5c3RvcmUiOnsiZGF0YUJhc2U2NCI6Ii91Mys3UUFBQUFJQUFBQUJBQUFBQVFBZ09HVTRZelU0T1dNMU1qWTRaR0V5WWpjelpqazBOamd5WVRCa09EWmtORGtBQUFHVERMUkZKd0FBQlA4d2dnVDdNQXdHQ2lzR0FRUUJLZ0lSQVFFRWdnVHB5eHNYelVVUmFCYTRkR0F6VjY0dlJrOStqckFRWDZ6RE9aNnpjSTlFb05MblJ1RFNQcFhFZ0RtT3E1b3ZOejAySWlDaDdtRHpZdEhQeituL1dwOVM5eGNJdVArVkMxajh6ZXgxMC9hQUhza2o4VWdUNXVqdms5UnRGdHVMRnBCSVBUSTlDRkRiUFJGb2twOFpiUkgvaVFZcTl5bFpaT2ZlL28zV1VoakYrVS9Md1ZXMVlvV2Nxc3pvdWJyb3F6UUlNcUlQRE1hN3d5RTZ1OGRJZitVUlBSeXgwcitQeDMvY1lZWDBWV3pBc0k1NVZxdmJjdzdNVERydXhGbnQ3Tm1CQUdlUm9qSnNPTjZRdkVvaytZK3hQM0Nsb3lpRXdXUUg3V2pEbDZRdWxQOTAyenFYRE8yM05UeUo5MnNrSW9hbWNjNjYrY09BYlJFeHk1MjVxMUhwakpJWnZyUHhnTklOWDJyNzNZQUJrSlExUkVXeStyZkJLdW9LTi8zczQ1ZU9ueWhCblRFZ0hKbGJFNSt2YUNXY3NFTTRQSjVna25tR0RnRDVEZ0FmbUVNUEZ6bTdRdVZGbkgrR1BDSlR3SThsem1vYTh2cE1pSlNVelhSVDBaRlNRT0hQU0Z4bmwxeHVBOHNxcFY3bTJpMkYzYnhBNUhCZGtvVTBiNWR3TUlKN2x4N0R1OTRWdCtqd1A4Tml0U3hVa0NpWndld3RDdFR4c1ZCT1V2b1cyZFJQTUxvMnFwblM3Q3A4V3plR2E2SXhYMXpsVHN1N1RwUGRPeDBHWWVIakp2amdFN0pMNkZodWFROTN5ZEgwMDNsOHhLODBFQmJ5RWd1OEIvYTNHZFRrem11VGcvYkFJaHhwMjVIZHhNNkhTQkVvc0MrVjl2amtFQ0JXZWxTUGdsZnRLakNUcVpTelVNY01LTzk1RDg0VWk3a2JkSmN6Uk03ZkZOYkxYZGZxUHBMRUQvNEhXRnM4NkRnTUw5VGdqb2EzNUxjb2lzNkF0N2pFZTMvRkVkSDlDRGozYVIvU1ZtVkJDZW5VZWRrVmtzWWVxcnlIZEZvVy9pOWJPeTVPVDJ5MEIzb2JsL0g2RUxrdmxmay9weTh6Q3Jpbk9VclErZnB2c2NNQXVnOUEzVU9iOGJTYmNXcWZJOFJ4WTZub2NGT2E4cXdnSlE0ckp0amQ4M0RWQm1nZTVmUy91bFNPUG5xMmJ6YlZUL1dnRXJGNERLanpyYmlZSTlUZkpxcUtjbjJLeUxsYzhqQWs3WXJVWW9HM2cwY2twVXZWd2Uwcm5xQlpQQ2pYUXhHaVRnSzlkRCtHR2FxVms3dWo5cWJ3TE5iWnRWelg1dUJoOFBsNnNVNC8ybmhSanRmT1RqUkluUGlOeXo4UkJNRWdobHphTGdZQUQ0OTlxMmh5cE1HeFFWc21ObDY3UFluVmVWMlpaZzBYa2FYMHkrUytPbndYeWxVNXZWVGhpS3YyUnJnNHdyb0ppRTU0Y1BsMWNMc051cm1aclBSQy9rYkZJOE9PY3VwMmV2bFNQKzBiSVFLdmR3djlrSzMvYlprNmQrMERYb3VTMFZqdFhhd0NKS2lseTJhVE1TeHlVMVdHSWN6by9wVjlodW1tQVJMNnRBRTdsdlhYRXB6eWFwaTFNYVVXMTNidGliWHFYUHJnU3BoYzJXV3ZCSG1oWnE4SGd2WFBVbTY2cWxuejY2b1RXTW5MbEhaaWdTcFAybmVjVm5LWCtMWGxBdDBYUi9VNVdDRGNxS0lUM1Bvait1b0F0aDNzZFF0aTFaY0FCRFd0TWxoMEs1MytPWWlnRGc1b1pNd0N2aDhjOXBRd2NZeDN3R1pIbmUyUTBoeFF1aGxqN2FUcFZKak9DckVkYjdLOWZ4aTZ3NnJpL0F6SU9CSWdZanZTQ1pFa0hqVG01Z2twaFZaNit6ZkxxN2V4OHZ6MXM4VVBIRVc3U25HR2dKYUEySmhiSzVtcDlKeCtqUysvWVh0Q1QybjJHNkpEckxEcUxPemdvaTB2bWU4Yksrc0dJcnRxclBuQlRTQTNWUm9WNW1GVTJKTUhDMVNwV0d3SlNJTTl1MVErS2d0L0l3amQ2ZUtKN3N4UWI1Nmg2eUFZTEZlYmhOVWhpVVVFcFlaay9xQmo5dDlrRGM1d1N2bFJhYWxWampQamE4VzN3elJJSzJ3bUhDWGxlNFJseXNVQ0VHdFVEYSsxMGs2ZnNLNjZxUlJLb0VjREFBQUFBUUFGV0M0MU1Ea0FBQU15TUlJRExqQ0NBaGFnQXdJQkFnSUpBTzFXU2JvUzdVKy9NQTBHQ1NxR1NJYjNEUUVCREFVQU1FUXhDekFKQmdOVkJBWVRBbFZUTVFrd0J3WURWUVFJRXdBeENUQUhCZ05WQkFjVEFERUpNQWNHQTFVRUNoTUFNUWt3QndZRFZRUUxFd0F4Q1RBSEJnTlZCQU1UQURBZ0Z3MHlOREV4TURneE5qVTJNREZhR0E4eU1EVXlNRE15TmpFMk5UWXdNVm93UkRFTE1Ba0dBMVVFQmhNQ1ZWTXhDVEFIQmdOVkJBZ1RBREVKTUFjR0ExVUVCeE1BTVFrd0J3WURWUVFLRXdBeENUQUhCZ05WQkFzVEFERUpNQWNHQTFVRUF4TUFNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXV1RlJSRFl3d0Z4anREWkpGdEREc2hkKzQzbzh3ZVR5NUpYSEEzWStCWVQxVlBHSkdZd01DQ3I2aEYybEN3TjQvTVdIWGtsOHdZaUdQS3ErdldNR3ZheS9kVEVDdjd2TTNjcGJ1QzNuTk45S1lnVzdVZlYzaW80aFFyeVJ2ZENWRzl1YWgwZ2kzWTE5NGdiNTVpNEx6RHB0bC9qMmR0eWVlQnJVNm53dWRPWHo2SmFVMitvcEJJZnpnU3pJS1RoL2xNdzhCTWhpa1o2NC91TEx0c09lSHFZQnRUeG1MMmNmSncrZVp1dTc5bHF1NU1MakN0QVVYT3MxdlQvOXNDZHUyVXlLaU10dXcxT05ITFcwV0dtb0pyd3RXVkhtekwzQ1FEclg1MlhwRUN6d0hZeTY0RmxQOFlheFdZT0RCNTJ3RytJZ0dPTnJhd05lWDlDWjQ0cHJZd0lEQVFBQm95RXdIekFkQmdOVkhRNEVGZ1FVNlhlU2lIQWIwZS9JaTF3RHc3OE94V3hXK0xVd0RRWUpLb1pJaHZjTkFRRU1CUUFEZ2dFQkFGUFBSZG16bEtpVDAzK1FEWmZ6bzhPMWpIcnA0djZKazQ1enA2U1oyRjJWQkJiZzhpL09Vdnlvdkxhc3VPc1JFNnFVN3pxc3ZUYjF4dXI0SDJtS24xN2dkNCtIQ2YwcG54WE52YzFycjBRWTJzem1kVyttS2JCUEVZZTFNMFdSNExaQzEwVllGdkluYkNjRWFrL0wwWXl6ZnNrVlNKeDFERm1ja1Z0ZEsyUVBtbHFnQ3cyUExuR0NlK0NZdXpGdTJzKzlRbmplQmZRVnhQNEZrSkFqYVY0Z1Y4MXk4dE5mVTF6a2xpN2JXWmxFUFpuQ3JoYzRxQ3V2dnpDaFl3N29oS3NKQWo5bjFxS0hiM3dEaWZ2eVpubmhlRjVzUlRGYWF3bFVuZGw3Z21GZVBOaFdrd2xQSmhNNmFzbHhIejAvZFdLOURPcGF0bExmTUFLelRsVkJrL3krM2E1WDVEazUxTDdHYzRWbWMzZjVLbjJlY1E9PSIsImtleXN0b3JlUGFzc3dvcmQiOiIwZmEwNGM5NjI4YmZjOWU4MDBiYjZjMzAxY2RlY2M3YiIsImtleUFsaWFzIjoiOGU4YzU4OWM1MjY4ZGEyYjczZjk0NjgyYTBkODZkNDkiLCJrZXlQYXNzd29yZCI6IjUzZGIyMTQwNWY2M2FhZGE4MDNlZjFjYWU1Nzc0YTczIn19fSwidXBkYXRlcyI6e30sInVzZXJuYW1lIjoiZmV6dnJhc3RhIiwidmVyc2lvbiI6eyJ2ZXJzaW9uQ29kZSI6IjEifSwiZXhwZXJpbWVudGFsIjp7fSwibW9kZSI6ImJ1aWxkIiwidHJpZ2dlcmVkQnkiOiJFQVNfQ0xJIiwiYXBwSWQiOiJhMzE0OTQ1Zi02MzZiLTQwNjAtYTZkNC01MmEwMTdlMWNjYmUiLCJpbml0aWF0aW5nVXNlcklkIjoiNDFkZGJkYzUtY2Y4Zi00Njg3LTg4ZjUtZmUwZTc0ZGIwM2NjIn0sIm1ldGFkYXRhIjp7InRyYWNraW5nQ29udGV4dCI6eyJ0cmFja2luZ19pZCI6IjE4ODQzMWQ5LWRlMGQtNGM3Mi05ZDcyLTc5OWQ3YjUyMDM3MiIsInBsYXRmb3JtIjoiYW5kcm9pZCIsInNka192ZXJzaW9uIjoiNTIuMC4wIiwiYWNjb3VudF9pZCI6ImQ0NWZiOTlmLTYzNDYtNDg5NS1hNjg5LTg2YmExYzAxYzRjZCIsInByb2plY3RfaWQiOiJhMzE0OTQ1Zi02MzZiLTQwNjAtYTZkNC01MmEwMTdlMWNjYmUiLCJwcm9qZWN0X3R5cGUiOiJtYW5hZ2VkIiwiZGV2X2NsaWVudCI6ZmFsc2UsImRldl9jbGllbnRfdmVyc2lvbiI6IjQuMC4yOSIsIm5vX3dhaXQiOmZhbHNlLCJydW5fZnJvbV9jaSI6ZmFsc2UsImxvY2FsIjp0cnVlfSwiYXBwQnVpbGRWZXJzaW9uIjoiMSIsImFwcFZlcnNpb24iOiIxLjAuMCIsImNsaVZlcnNpb24iOiIxMy4xLjEiLCJ3b3JrZmxvdyI6Im1hbmFnZWQiLCJjcmVkZW50aWFsc1NvdXJjZSI6InJlbW90ZSIsInNka1ZlcnNpb24iOiI1Mi4wLjAiLCJmaW5nZXJwcmludEhhc2giOiJlNjI0NWMzNmE0ZjhiNmJmMzhiMGJhZGQ4NTUyYjI1ZWY3ZWY2ZTlhIiwiZmluZ2VycHJpbnRTb3VyY2UiOnsidHlwZSI6IlBBVEgiLCJwYXRoIjoiL3Zhci9mb2xkZXJzL2M2L2tsdjNoMV85Nzd2X3g2dDQ1ZDUxNWt6YzAwMDBnbi9UL2Vhcy1jbGktbm9kZWpzL2IyNjk0NWI1LTQ4ZGQtNDBmYS05MGE3LTA3M2NlY2RkNDQ3NC1ydW50aW1lLWZpbmdlcnByaW50Lmpzb24iLCJpc0RlYnVnRmluZ2VycHJpbnQiOmZhbHNlfSwicmVhY3ROYXRpdmVWZXJzaW9uIjoiMC43Ni4xIiwiZGlzdHJpYnV0aW9uIjoic3RvcmUiLCJhcHBOYW1lIjoiQmV0QnVja2V0IiwiYXBwSWRlbnRpZmllciI6ImNvbS5iZXRidWNrZXQuYXBwIiwiYnVpbGRQcm9maWxlIjoicHJvZHVjdGlvbiIsImdpdENvbW1pdEhhc2giOiJiZjg2YTQwNGExMjFjZTE1NmFlMGNmNDIwODE4NzdiMGVkZjViZDhmIiwiZ2l0Q29tbWl0TWVzc2FnZSI6ImxvZ2luIHdhbGwgc2NyZWVuIiwiaXNHaXRXb3JraW5nVHJlZURpcnR5Ijp0cnVlLCJ1c2VybmFtZSI6ImZlenZyYXN0YSIsInJ1bldpdGhOb1dhaXRGbGFnIjpmYWxzZSwicnVuRnJvbUNJIjpmYWxzZSwiZGV2ZWxvcG1lbnRDbGllbnQiOmZhbHNlLCJyZXF1aXJlZFBhY2thZ2VNYW5hZ2VyIjoieWFybiIsInNpbXVsYXRvciI6ZmFsc2V9fQ== exited with non-zero code: 1
    Error: build command failed.
        

Reproducible demo or steps to reproduce from a blank project

It's a bit complicated to provide a repro, to reproduce the bug create a repository, init yarn workspaces with Yarn v4, then init an Expo app in a workspace, and then run eas build --local.

I think the bug is quite obvious though, EAS is using the wrong Yarn version even though my package.json specifies the correct one and Corepack is enabled.

I noticed the same happens even if I install Yarn 4 globally, replacing Yarn 1.x. The only way around seems to be to use the internal Yarn binary loader (yarn set version) while Corepack is disabled.

FezVrasta avatar Nov 08 '24 17:11 FezVrasta

im also running into the same issue after upgrading to expo sdk 52 but it is using yarn 4.22

ethanlee123 avatar Nov 27 '24 05:11 ethanlee123

Same issue, How do we setup up pre-build steps for eas? need to do setup yarn v4 before building.

devYonz avatar Dec 02 '24 15:12 devYonz

+1

deeeed avatar Dec 11 '24 09:12 deeeed

+1

ngocan3897 avatar Jan 02 '25 01:01 ngocan3897

I fixed it using special env:

{
  "cli": {
    "version": ">= 14.1.0",
    "appVersionSource": "remote"
  },
  "build": {
    "development": {
      "distribution": "internal",
      "channel": "development",
      "developmentClient": true,
      "env": {
        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
        "YARN_ENABLE_GLOBAL_CACHE": "false"
      },
      "android": {
        "gradleCommand": ":app:assembleDebug"
      },
      "ios": {
        "buildConfiguration": "Debug"
      },
      "cache": {
        "paths": [
          "~/.yarn/cache"
        ]
      }
    },
    "preview": {
      "distribution": "internal",
      "channel": "preview",
      "ios": {
        "simulator": true
      },
      "android": {
        "buildType": "apk"
      },
      "env": {
        "APP_VARIANT": "preview",
        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
        "YARN_ENABLE_GLOBAL_CACHE": "false"
      }
    },
    "production": {
      "channel": "production",
      "android": {
        "buildType": "app-bundle",
        "credentialsSource": "remote"
      },
      "env": {
        "APP_VARIANT": "production",
        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
        "YARN_ENABLE_GLOBAL_CACHE": "false"
      },
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "$APPLE_ID",
        "ascAppId": "$APPLE_APP_ID",
        "appleTeamId": "$APPLE_TEAM_ID"
      }
    }
  }
}

and in package.json:

"scripts": {
    "eas-build-pre-install": "corepack enable && cd ../.. && yarn install",

deeeed avatar Jan 02 '25 02:01 deeeed

+1

M4cM4rco avatar Jan 17 '25 17:01 M4cM4rco

+1

solangegamboa avatar Mar 19 '25 16:03 solangegamboa

Solution for me: The expo app is generated with an .git folder. Delete it and try again!

M4cM4rco avatar Mar 19 '25 18:03 M4cM4rco

⁺1

tomoya0606 avatar May 03 '25 07:05 tomoya0606

+1

vedant-zeteo avatar May 09 '25 19:05 vedant-zeteo

Here is how I got local builds working with a monorepo using Yarn 4.9.2 and Corepack enabled elsewhere in the project.

Input: npx eas build --platform ios --profile development --local

Output (error) This project's package.json defines "packageManager": "[email protected]". However the current global version of Yarn is 1.22.22.

The fix was to switch the repo to YarnPath mode so EAS (and local builds) use a committed Yarn binary instead of relying on Corepack. First, create the releases folder and drop in the correct binary, e.g.:

mkdir -p .yarn/releases
curl -L https://github.com/yarnpkg/berry/releases/download/yarn%404.9.2/yarn-4.9.2.cjs \
  -o .yarn/releases/yarn-4.9.2.cjs
chmod +x .yarn/releases/yarn-4.9.2.cjs
yarn config set yarnPath .yarn/releases/yarn-4.9.2.cjs

Modify eas build settings for your selected environment, note the lack of corepack: true here:

"development": {
    "developmentClient": true,
    "distribution": "internal",
    "channel": "development",
    "android": {
        "buildType": "apk"
    },
    "env": {
        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
        "YARN_ENABLE_GLOBAL_CACHE": "false"
    },
    "cache": {
        "paths": [
            "~/.yarn/cache"
        ]
    }
},

This updates .yarnrc.yml with yarnPath: .yarn/releases/yarn-4.9.2.cjs. Commit both the .cjs file and .yarnrc.yml so they’re available on CI/EAS. With this setup, EAS no longer complains about Yarn versions, and local builds work too, because Yarn is always resolved via the checked-in .cjs binary. Local builds, seemingly, skip the eas-build-pre-install script. Cloud/EAS builds do not.

eli-provenform avatar Aug 18 '25 20:08 eli-provenform

Here is how I got local builds working with a monorepo using Yarn 4.9.2 and Corepack enabled elsewhere in the project.

Input: npx eas build --platform ios --profile development --local

Output (error) This project's package.json defines "packageManager": "[email protected]". However the current global version of Yarn is 1.22.22.

The fix was to switch the repo to YarnPath mode so EAS (and local builds) use a committed Yarn binary instead of relying on Corepack. First, create the releases folder and drop in the correct binary, e.g.:

mkdir -p .yarn/releases
curl -L https://github.com/yarnpkg/berry/releases/download/yarn%404.9.2/yarn-4.9.2.cjs \
  -o .yarn/releases/yarn-4.9.2.cjs
chmod +x .yarn/releases/yarn-4.9.2.cjs
yarn config set yarnPath .yarn/releases/yarn-4.9.2.cjs

Modify eas build settings for your selected environment, note the lack of corepack: true here:

"development": {
    "developmentClient": true,
    "distribution": "internal",
    "channel": "development",
    "android": {
        "buildType": "apk"
    },
    "env": {
        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
        "YARN_ENABLE_GLOBAL_CACHE": "false"
    },
    "cache": {
        "paths": [
            "~/.yarn/cache"
        ]
    }
},

This updates .yarnrc.yml with yarnPath: .yarn/releases/yarn-4.9.2.cjs. Commit both the .cjs file and .yarnrc.yml so they’re available on CI/EAS. With this setup, EAS no longer complains about Yarn versions, and local builds work too, because Yarn is always resolved via the checked-in .cjs binary. Local builds, seemingly, skip the eas-build-pre-install script. Cloud/EAS builds do not.

That might work for me but for some reason or another that curl command is returning Not Found. Do you know if there is an updated location to find that?

couturecraigj avatar Nov 06 '25 19:11 couturecraigj