Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Correctly assign the hermes-engine pod tag when installing pods from a different folder #38754

Closed

Conversation

gvarandas
Copy link
Contributor

@gvarandas gvarandas commented Aug 2, 2023

Summary:

This PR aims to fix an issue where installing iOS pods from a different directory causes the hermes-engine :tag: not to be properly resolved.

Ever since #37148 was merged, the setup_hermes script tries to resolve the node_modules/react-native/sdks/.hermesversion file and use its content to generate the pod tag, in order to verify when it changes over time.
This works perfectly when installing pods within the ios folder, as the react_native_path should point to the correct relative folder (../node_modules/react-native by default).

However, when installing pods from a different directory (the project root, for example) and leveraging the --project-directory flag, the file fails to resolve, as the current working directory is considered when resolving the .hermesversion file.

Quick Example:

  • react_native_path: ../node_modules/react-native (the default config)

Installing pods from the ios folder:

  • cd ios
  • bundle exec pod install
  • hermestag_file resolved path: $project_root/node_modules/react-native
  • hermes-engine :tag:: hermes-2023-03-20-RNv0.72.0-49794cfc7c81fb8f69fd60c3bbf85a7480cc5a77

Installing pods from the $project_root folder

  • bundle exec pod install --project-directory=ios
  • hermestag_file resolved path: $parent_folder/$project_root/node_modules/react-native
  • hermes-engine :tag:: ''

The fix

Turns out that the same file had a resolved reference to the react-native folder, assigned to the react_native_dir variable:

react_native_dir = Pod::Config.instance.installation_root.join(react_native_path)

By resolving the .hermesversion using that folder, we guarantee that the relative path will always reference the directory where the Podfile is defined, which is the expected behaviour.

Changelog:

Test Plan:

  • Init a new react-native repo
  • Remove the generated Podfile.lock file
  • Navigate to the project root folder
  • bundle exec pod install -project-directory=ios
  • Check that the hermes-engine entry has a properly populated :tag: attribute:

Before:

hermes-engine:
    :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
    :tag: ''

After:

hermes-engine:
    :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
    :tag: hermes-2023-03-20-RNv0.72.0-49794cfc7c81fb8f69fd60c3bbf85a7480cc5a77

@facebook-github-bot facebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Aug 2, 2023
@analysis-bot
Copy link

Platform Engine Arch Size (bytes) Diff
android hermes arm64-v8a 8,894,300 -1
android hermes armeabi-v7a 7,942,875 +3
android hermes x86 9,292,201 -1
android hermes x86_64 9,193,733 -3
android jsc arm64-v8a 9,480,955 -1
android jsc armeabi-v7a 8,422,521 +0
android jsc x86 9,464,983 -2
android jsc x86_64 9,779,239 -2

Base commit: 1f24750
Branch: main

Copy link
Contributor

@cipolleschi cipolleschi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Love it! Thanks @gvarandas for this fix!

@facebook-github-bot
Copy link
Contributor

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

@facebook-github-bot facebook-github-bot added the Merged This PR has been merged. label Aug 3, 2023
@facebook-github-bot
Copy link
Contributor

@cipolleschi merged this pull request in 08688d3.

lunaleaps pushed a commit that referenced this pull request Aug 7, 2023
…s from a different folder (#38754)

Summary:
This PR aims to fix an issue where installing iOS pods from a different directory causes the `hermes-engine` `:tag:` not to be properly resolved.

Ever since #37148 was merged, the `setup_hermes` script tries to resolve the `node_modules/react-native/sdks/.hermesversion` file and use its content to generate the pod tag, in order to verify when it changes over time.
This works perfectly when installing pods within the `ios` folder, as the `react_native_path` should point to the correct relative folder (`../node_modules/react-native` by default).

However, when installing pods from a different directory (the project root, for example) and leveraging the `--project-directory` flag, the file fails to resolve, as the current working directory is considered when resolving the `.hermesversion` file.

### Quick Example:

- `react_native_path`: `../node_modules/react-native` (the default config)

**Installing pods from the `ios` folder:**
- `cd ios`
- `bundle exec pod install`
- `hermestag_file` resolved path: `$project_root/node_modules/react-native` ✅
- `hermes-engine` `:tag:`: `hermes-2023-03-20-RNv0.72.0-49794cfc7c81fb8f69fd60c3bbf85a7480cc5a77` ✅

**Installing pods from the `$project_root` folder**
- `bundle exec pod install --project-directory=ios`
- `hermestag_file` resolved path: `$parent_folder/$project_root/node_modules/react-native` ❌
- `hermes-engine` `:tag:`: `''` ❌

### The fix

Turns out that the same file had a resolved reference to the `react-native` folder, assigned to the `react_native_dir` variable:
```ruby
react_native_dir = Pod::Config.instance.installation_root.join(react_native_path)
```

By resolving the `.hermesversion` using that folder, we guarantee that the relative path will always reference the directory where the `Podfile` is defined, which is the expected behaviour.

## Changelog:

[Internal] - Fix an issue where installing pods from a different directory would fail to resolve `hermes-engine` tags correctly.

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests

Pull Request resolved: #38754

Test Plan:
- Init a new `react-native` repo
- Remove the generated `Podfile.lock` file
- Navigate to the project root folder
- `bundle exec pod install -project-directory=ios`
- Check that the `hermes-engine` entry has a properly populated `:tag:` attribute:

**Before:**
```
hermes-engine:
    :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
    :tag: ''
```

**After:**
```
hermes-engine:
    :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
    :tag: hermes-2023-03-20-RNv0.72.0-49794cfc7c81fb8f69fd60c3bbf85a7480cc5a77
```

Reviewed By: cortinico

Differential Revision: D48029413

Pulled By: cipolleschi

fbshipit-source-id: 82d465abd5c888eeb9eacd32858fa4ecf4f8c217
@gvarandas gvarandas deleted the fix/resolve-rn-dir-cocoapods branch August 8, 2023 13:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Merged This PR has been merged. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants