Skip to content

Commit db1ee63

Browse files
authored
MINOR: new checksum verification in gradlew (#20658)
According to the [discussion](#19513 (comment)) in #19513 , add a new checksum verification process to determine whether a new wrapper JAR needs to be downloaded. This prevents developers from running into incompatibility issues when using an outdated wrapper JAR after a Gradle upgrade. Reviewers: Chia-Ping Tsai <[email protected]>
1 parent c38476f commit db1ee63

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

gradlew

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ fi
201201

202202

203203
# Loop in case we encounter an error.
204+
REQUIRED_WRAPPER_JAR_CHECKSUM="76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3"
204205
for attempt in 1 2 3; do
205206
if [ ! -e "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" ]; then
206207
if ! curl -s -S --retry 3 -L -o "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" "https://raw.githubusercontent.com/gradle/gradle/v9.1.0/gradle/wrapper/gradle-wrapper.jar"; then
@@ -209,6 +210,26 @@ for attempt in 1 2 3; do
209210
sleep 5
210211
continue
211212
fi
213+
else
214+
# Verify checksum of existing wrapper JAR.
215+
# This prevents developers from running into incompatibility issues when using an outdated wrapper JAR after a Gradle upgrade.
216+
# Use sha256sum or shasum, whichever is available.
217+
if command -v sha256sum >/dev/null 2>&1; then
218+
LOCAL_WRAPPER_JAR_CHECKSUM=$(sha256sum "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" | awk '{print $1}')
219+
elif command -v shasum >/dev/null 2>&1; then
220+
LOCAL_WRAPPER_JAR_CHECKSUM=$(shasum -a 256 "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" | awk '{print $1}')
221+
else
222+
# If no checksum tool is found, this verification is skipped .
223+
warn "Cannot find sha256sum or shasum to verify wrapper JAR."
224+
break
225+
fi
226+
227+
# If the local checksum does not match the required checksum, delete the JAR to force re-download.
228+
if [ "$LOCAL_WRAPPER_JAR_CHECKSUM" != "$REQUIRED_WRAPPER_JAR_CHECKSUM" ] ; then
229+
rm -f "$APP_HOME/gradle/wrapper/gradle-wrapper.jar"
230+
else
231+
break
232+
fi
212233
fi
213234
done
214235

wrapper.gradle

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ task bootstrapWrapper() {
3939
// github.com servers deprecated TLSv1/TLSv1.1 support some time ago, so older versions
4040
// of curl (built against OpenSSL library that doesn't support TLSv1.2) would fail to
4141
// fetch the jar.
42-
def wrapperBaseUrl = "https://raw.githubusercontent.com/gradle/gradle/v$versions.gradle/gradle/wrapper"
43-
def wrapperJarUrl = wrapperBaseUrl + "/gradle-wrapper.jar"
42+
// IMPORTANT: This checksum **must** be updated whenever the Gradle version changes.
43+
String wrapperChecksum = "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3"
44+
def wrapperJarUrl = "https://raw.githubusercontent.com/gradle/gradle/v$versions.gradle/gradle/wrapper/gradle-wrapper.jar"
4445

4546
def bootstrapString = """
4647
# Loop in case we encounter an error.
48+
REQUIRED_WRAPPER_JAR_CHECKSUM="$wrapperChecksum"
4749
for attempt in 1 2 3; do
4850
if [ ! -e "$wrapperJarPath" ]; then
4951
if ! curl -s -S --retry 3 -L -o "$wrapperJarPath" "$wrapperJarUrl"; then
@@ -52,6 +54,26 @@ task bootstrapWrapper() {
5254
sleep 5
5355
continue
5456
fi
57+
else
58+
# Verify checksum of existing wrapper JAR.
59+
# This prevents developers from running into incompatibility issues when using an outdated wrapper JAR after a Gradle upgrade.
60+
# Use sha256sum or shasum, whichever is available.
61+
if command -v sha256sum >/dev/null 2>&1; then
62+
LOCAL_WRAPPER_JAR_CHECKSUM=\$(sha256sum "$wrapperJarPath" | awk '{print \$1}')
63+
elif command -v shasum >/dev/null 2>&1; then
64+
LOCAL_WRAPPER_JAR_CHECKSUM=\$(shasum -a 256 "$wrapperJarPath" | awk '{print \$1}')
65+
else
66+
# If no checksum tool is found, this verification is skipped .
67+
warn "Cannot find sha256sum or shasum to verify wrapper JAR."
68+
break
69+
fi
70+
71+
# If the local checksum does not match the required checksum, delete the JAR to force re-download.
72+
if [ "\$LOCAL_WRAPPER_JAR_CHECKSUM" != "\$REQUIRED_WRAPPER_JAR_CHECKSUM" ] ; then
73+
rm -f "$wrapperJarPath"
74+
else
75+
break
76+
fi
5577
fi
5678
done
5779
""".stripIndent()

0 commit comments

Comments
 (0)