-
Notifications
You must be signed in to change notification settings - Fork 914
Scaffold Gradle Wrapper differenly #1837
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
Comments
I believe the CLI can hash those files (as you know beforehand which version of Gradle we ship in a given version of RN), and if the hash doesn't match:
|
Running it twice seems to be a known issue for the last 10yrs. I don't think there's a programatic way to determine if we need to run this once or twice? The first time I run it, it produces the diff that @cortinico showed. After running for the 2nd time it made these changes (not that it matters, because what you're proposing is significantly more robust and simplifies upgrades): diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar
index 249e583..943f0cb 100644
Binary files a/android/gradle/wrapper/gradle-wrapper.jar and b/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index f42e62f..2b22d05 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
+networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/android/gradlew b/android/gradlew
index a69d9cb..65dcd68 100755
--- a/android/gradlew
+++ b/android/gradlew
@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,10 +80,10 @@ do
esac
done
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
@@ -143,12 +143,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
diff --git a/android/gradlew.bat b/android/gradlew.bat
index 53a6b23..6689b85 100644
--- a/android/gradlew.bat
+++ b/android/gradlew.bat
@@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
|
It should be safe to always run it twice |
Another related issue but for iOS is about the |
There hasn't been any activity on this issue in the past 3 months, so it has been marked as stale and it will be closed automatically if no further activity occurs in the next 7 days. |
This is still a thing. I've asked @pvinis to take a stance and add a banner to the upgrade helper at least to mitigate the impact of those files appearing in the upgrade helper |
oh god I'm sorry I haven't done that yet! it's been busy. I'll try to take a look this week 🙇🏼 |
There hasn't been any activity on this issue in the past 3 months, so it has been marked as stale and it will be closed automatically if no further activity occurs in the next 7 days. |
Do we have any updates here? cc. @cortinico @pvinis |
I have not had time to check this, sorry for that. To be honest, it's kinda hard to find the motivation, when I'm not using, thanks to expo. I still have a reminder to check this issue out, but have not found the time. I feel like the upgrades even without that tweak are not hard, just less readable. |
I think the minimal change we could do is just to "hide" those changes in the diff helper and mention what is the command to invoke to update those files. |
Also 0.73 is going to be affected by this as well |
Alright, I will try to tackle this. Hopefully before React Native 0.73 release. |
@cortinico - did small PR with proposed solution. Mind taking a look please? |
Describe the Feature
I'm not sure how to name this feature, but I just wanted to share my thoughts on a problem which is affecting the CLI and can improve the developer experience somehow. Happy to collect opinion.
The current situation is that we have the following files committed in the new app template and in every project of users:
Those files are The Gradle Wrapper, essentially scripts that download and execute the correct Gradle version.
The problem is that those files are committed in the repo of users, and create noise in the upgrade helper. For example: https://react-native-community.github.io/upgrade-helper/?from=0.67.5&to=0.68.6
With the upcoming version of React Native, we'll be having similar problems as the version of Gradle got updated and the Gradle Wrapper was also updated.
The problem is that we can't expect users to go inside the
./gradlew.bat
(which is a Windows only file) to replicate the changes that the Gradle Wrapper brings over.The problems are the following:
android/gradle/wrapper/gradle-wrapper.properties
this is probably the only file we want to commit (if any) as it contains the Gradle version.android/gradle/wrapper/gradle-wrapper.jar
this is a binary file. We can't expect users to go to the react-native repo to download the corresponding binaryandroid/gradlew
this is a bash script that has to be updated.android/gradlew.bat
this is a windows bat script that has to be updated.Simple Implementation
The updates to those mentioned files can be achieved easily by the user if they run
So we could simply update the upgrade helper to:
Still users could miss the popup on top and never update their Gradle Wrapper version (which could cause build failures).
More complicated implementation
Potentially we can:
android/gradle/wrapper/gradle-wrapper.properties
gradlew
,gradlew.bat
, andgradle/wrapper/gradle-wrapper.jar
from the upgrade helper.run-android
andbuild-android
commands that check if the wrapper is up to date (i.e. by diffing the files against local versions of the wrapper), if not, run the command above that updates the wrapper for the user.The text was updated successfully, but these errors were encountered: