react-native icon indicating copy to clipboard operation
react-native copied to clipboard

fix: android autolinkLibrariesFromCommand should handle timeout or non zero exit code

Open mfazekas opened this issue 1 year ago • 4 comments

Fixes: https://github.com/facebook/react-native/issues/45307

Changelog:

[Android] [Fixed] - if npx @react-native-community/cli config fails or timeouts proper error is shown and built is aborted, instead of leaving and empty autolinking.json

Summary

During build npx @react-native-community/cli config is generated into autolinking.json. When command fails, we should error and should not leave and empty autolinking.json

Test Plan

Output of the reproducer in #45307 looks like this:

android % ./gradlew assembleDebug
Starting a Gradle Daemon (subsequent builds will be faster)
ERROR: autolinkLibrariesFromCommand: Failed to create /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/build/generated/autolinking/autolinking.json - process npx @react-native-community/cli config  exited with error code: 126

FAILURE: Build failed with an exception.

* Where:
Settings file '/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/settings.gradle' line: 3

* What went wrong:
A problem occurred evaluating settings 'android'.
> ERROR: autolinkLibrariesFromCommand: Failed to create /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/build/generated/autolinking/autolinking.json - process npx @react-native-community/cli config  exited with error code: 126

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 10s
8 actionable tasks: 4 executed, 4 up-to-date

Output if you modify the package.json to be invalid looks like this:

android % ./gradlew assembleDebug
ERROR: autolinkLibrariesFromCommand: process npx @react-native-community/cli config  exited with error code: 1
JSONError: JSON Error in /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/package.json: 

  35 |     "node": ">=18"
  36 |   },
> 37 |   SOMETHING_NON_JSON
     |   ^
  38 |   "packageManager": "[email protected]",
  39 |   "resolutions": {
  40 |     "rtn-centered-text": "portal:../RTNCenteredText"

Unexpected token "S" (0x53) in JSON at position 1019 while parsing near "...ode\": \">=18\"\n  },\n  SOMETHING_NON_JSON\n ..." 

  35 |     "node": ">=18"
  36 |   },
> 37 |   SOMETHING_NON_JSON
     |   ^
  38 |   "packageManager": "[email protected]",
  39 |   "resolutions": {
  40 |     "rtn-centered-text": "portal:../RTNCenteredText"

    at parseJson (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/parse-json/index.js:29:21)
    at loadJson (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/loaders.js:48:16)
    at #loadConfiguration (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:116:36)
    at #loadConfigFileWithImports (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:87:54)
    at #readConfiguration (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:84:82)
    at search (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:50:63)
    at emplace (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/util.js:36:20)
    at ExplorerSync.search (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:78:42)
    at getUserDefinedOptionsFromMetaConfig (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/index.js:32:37)
    at mergeOptionsBase (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/@react-native-community/cli-config/node_modules/cosmiconfig/dist/index.js:60:31)


FAILURE: Build failed with an exception.

* Where:
Settings file '/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/settings.gradle' line: 3

* What went wrong:
A problem occurred evaluating settings 'android'.
> ERROR: autolinkLibrariesFromCommand: process npx @react-native-community/cli config  exited with error code: 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 2s
8 actionable tasks: 4 executed, 4 up-to-date

mfazekas avatar Jul 08 '24 18:07 mfazekas

Platform Engine Arch Size (bytes) Diff
android hermes arm64-v8a 21,285,119 -15,285
android hermes armeabi-v7a n/a --
android hermes x86 n/a --
android hermes x86_64 n/a --
android jsc arm64-v8a 24,481,981 -15,510
android jsc armeabi-v7a n/a --
android jsc x86 n/a --
android jsc x86_64 n/a --

Base commit: b4b66140345ececd1375f0be255b0efc4fcaa829 Branch: main

analysis-bot avatar Jul 09 '24 18:07 analysis-bot

Thanks for the PR. Can we make the CI green @mfazekas ?

@cortinico sorry, my bad should be fixed now, along with suggestions in review

mfazekas avatar Jul 09 '24 19:07 mfazekas

@cortinico sorry, my bad should be fixed now, along with suggestions in review

Yup I've left just a follow up comment and then we can merge this 👍

cortinico avatar Jul 10 '24 09:07 cortinico

@cortinico has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

facebook-github-bot avatar Jul 10 '24 13:07 facebook-github-bot

@cortinico merged this pull request in facebook/react-native@3782511350c069425ad11cdefb8c6d3f10526fc2.

facebook-github-bot avatar Jul 11 '24 10:07 facebook-github-bot

This pull request was successfully merged by @mfazekas in 3782511350c069425ad11cdefb8c6d3f10526fc2.

When will my fix make it into a release? | How to file a pick request?

github-actions[bot] avatar Jul 11 '24 10:07 github-actions[bot]

Hey guys @mfazekas @cortinico, does this fix support monorepos projects?

I'd like to try to help.

I get the following error:


FAILURE: Build failed with an exception.

* Where:
Settings file '/Users/migueldaipre/Desktop/Projects/bitcoinly/apps/mobile/android/settings.gradle' line: 3

* What went wrong:
A problem occurred evaluating settings 'android'.
> ERROR: autolinkLibrariesFromCommand: process npx @react-native-community/cli config exited with error code: 126

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 2s

My settings.gradle file

pluginManagement { includeBuild("../../../node_modules/@react-native/gradle-plugin") }
plugins { id("com.facebook.react.settings") }
extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() }
rootProject.name = 'Bitcoinly'
include ':app'
includeBuild('../../../node_modules/@react-native/gradle-plugin')

migueldaipre avatar Jul 30 '24 01:07 migueldaipre

If I run

npx @react-native-community/cli config

I receive

sh: /Users/migueldaipre/Desktop/Projects/bitcoinly/node_modules/.bin/rnc-cli: Permission denied

migueldaipre avatar Jul 30 '24 02:07 migueldaipre

Hey guys @mfazekas @cortinico, does this fix support monorepos projects?

Yes it should. @migueldaipre please open a separate issue and provide a reproducer of your repo setup. Ultimately, you should be able to invoke npx @react-native-community/cli config in your monorepo. If the invocation of config is different, you can customize it inside the settings.gradle file

cortinico avatar Jul 30 '24 09:07 cortinico

@migueldaipre

sh: /Users/migueldaipre/Desktop/Projects/bitcoinly/node_modules/.bin/rnc-cli: Permission denied

I saw this too, that lead to this PR, but wasn't able to reproduce after nuking the. node_modules and yarn install again. This fix doesn't address rnc-cli: Permission denied, but if it does happen, codegen should behave correctly, report correct error, and not create an empty auto linking.json .

mfazekas avatar Jul 30 '24 10:07 mfazekas

After I ran chmod +x /Users/migueldaipre/Desktop/Projects/bitcoinly/node_modules/.bin/rnc-cli it's sync correctly again.

migueldaipre avatar Jul 30 '24 11:07 migueldaipre

rm-rf node_modules and re-install packages, this fixed the issue for me after a recent upgrade to 0.75

Immacio avatar Aug 20 '24 05:08 Immacio