Skip to content

build: support Gradle configuration cache - #2201

Merged
thymikee merged 3 commits into
react-native-community:mainfrom
ahruss:ahruss-cli-platform-android-config-cache
Jan 15, 2024
Merged

thymikee merged 3 commits into
react-native-community:mainfrom
ahruss:ahruss-cli-platform-android-config-cache

Conversation

@ahruss

@ahruss ahruss commented Dec 11, 2023

Copy link
Copy Markdown
Contributor

Summary:

Directly calling Runtime.exec breaks Gradle configuration caching. An easy workaround is to use providers.exec instead, which supports configuration caching.

Test Plan:

This change should be functionally equivalent to existing behavior. I've tested locally that my project's gradle build still works with this change, both with and without the --configuration-cache argument

Checklist

  • Documentation is up to date to reflect these changes.
  • Follows commit message convention described in CONTRIBUTING.md

Directly using Runtime.exec breaks Gradle configuration caching. This change is to use `providers.exec` which supports configuration caching. This is a minimal fix; it's likely possible that more invasive changes could be useful to avoid having to exec these processes at all until their values are needed, but I have not looked into larger structural changes.
Comment thread packages/cli-platform-android/native_modules.gradle Outdated
Co-authored-by: Nicola Corti <corti.nico@gmail.com>
@szymonrybczak

Copy link
Copy Markdown
Collaborator

Hey @ahruss, mind looking why e2e tests are failing?

def readBuffer = new StringBuffer()
while ((buff = bufferedReader.readLine()) != null) {
readBuffer.append(buff)
def execOutput = providers.exec {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

CI fails with this error on this line:

image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

ah - created the PR from the wrong branch, should be fixed with 33fa4a1

@thymikee
thymikee merged commit d436bfe into react-native-community:main Jan 15, 2024
lukmccall added a commit to expo/expo that referenced this pull request Feb 8, 2024
# Why

Uses a cache-friendly method of executing external processes. The Gradle now has a new cache configuration setting which allows skipping the configuration step. However, the old `exec` API doesn't support running during the cacheable configuration phase. To fix this, new functions can be used. You can find more information on this topic here: https://docs.gradle.org/current/userguide/configuration_cache.html#config_cache:requirements:external_processes

Just to let you know, this pull request is quite similar to the one that was submitted by the community CLI. You can find the link for it here: react-native-community/cli#2201

PR only affects `bare-expo` projects; I didn't modify our template or Expo Go since I'm still testing different approaches. 

> ⚠️ At the moment, this PR doesn't support enabling the cache configuration. We still have a lot of work to do before we can achieve that goal. However, I was able to turn on the configuration cache by making a few changes and using some hacks. This resulted in a significant improvement in build time, reducing it by around 40%.   

# How

Used new cache-friendly API to run external processes. 

# Test Plan

- bare-expo ✅
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.

4 participants