You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2025/05/04 21:00:44 UTC
(lucene) branch main updated: Always check gradle wrapper sha checksum and download if necessary (#14608)
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new 73aca0c6d03 Always check gradle wrapper sha checksum and download if necessary (#14608)
73aca0c6d03 is described below
commit 73aca0c6d036c8be74c7f410f84e093b96494158
Author: Dawid Weiss <da...@carrotsearch.com>
AuthorDate: Sun May 4 23:00:37 2025 +0200
Always check gradle wrapper sha checksum and download if necessary (#14608)
---
.../apache/lucene/gradle/WrapperDownloader.java | 43 ++++++++++++++++++++--
gradle/wrapper/gradle-wrapper.jar.sha256 | 2 +-
gradlew | 2 +-
gradlew.bat | 20 ++++++++--
4 files changed, 58 insertions(+), 9 deletions(-)
diff --git a/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java b/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java
index 0fa2e9584b8..8f3e5aeba20 100644
--- a/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java
+++ b/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java
@@ -35,7 +35,9 @@ import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Locale;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
/**
* Standalone class that can be used to download a gradle-wrapper.jar
@@ -66,12 +68,47 @@ public class WrapperDownloader {
}
public void run(Path destination) throws IOException, NoSuchAlgorithmException {
- Path checksumPath =
- destination.resolveSibling(destination.getFileName().toString() + ".sha256");
+ var expectedFileName = destination.getFileName().toString();
+ Path checksumPath = destination.resolveSibling(expectedFileName + ".sha256");
if (!Files.exists(checksumPath)) {
throw new IOException("Checksum file not found: " + checksumPath);
}
- String expectedChecksum = Files.readString(checksumPath, StandardCharsets.UTF_8).trim();
+
+ String expectedChecksum;
+ try (var lines = Files.lines(checksumPath, StandardCharsets.UTF_8)) {
+ expectedChecksum =
+ lines
+ .map(
+ line -> {
+ // "The default mode is to print a line with: checksum, a space,
+ // a character indicating input mode ('*' for binary, ' ' for text
+ // or where binary is insignificant), and name for each FILE."
+ var spaceIndex = line.indexOf(" ");
+ if (spaceIndex != -1 && spaceIndex + 2 < line.length()) {
+ var mode = line.charAt(spaceIndex + 1);
+ String fileName = line.substring(spaceIndex + 2);
+ if (mode == '*' && fileName.equals(expectedFileName)) {
+ return line.substring(0, spaceIndex);
+ }
+ }
+
+ Logger.getLogger(WrapperDownloader.class.getName())
+ .warning(
+ "Something is wrong with the checksum file. Regenerate with "
+ + "'sha256sum -b gradle-wrapper.jar > gradle-wrapper.jar.sha256'");
+ return null;
+ })
+ .filter(Objects::nonNull)
+ .findFirst()
+ .orElse(null);
+
+ if (expectedChecksum == null) {
+ throw new IOException(
+ "The checksum file did not contain the expected checksum for '"
+ + expectedFileName
+ + "'?");
+ }
+ }
Path versionPath =
destination.resolveSibling(destination.getFileName().toString() + ".version");
diff --git a/gradle/wrapper/gradle-wrapper.jar.sha256 b/gradle/wrapper/gradle-wrapper.jar.sha256
index 30bde90fc90..bd9f4c67630 100644
--- a/gradle/wrapper/gradle-wrapper.jar.sha256
+++ b/gradle/wrapper/gradle-wrapper.jar.sha256
@@ -1 +1 @@
-7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172
\ No newline at end of file
+7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172 *gradle-wrapper.jar
diff --git a/gradlew b/gradlew
index 37f1028864b..1b3f68d9fa7 100755
--- a/gradlew
+++ b/gradlew
@@ -222,7 +222,7 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
fi
GRADLE_WRAPPER_JAR="$APP_HOME/gradle/wrapper/gradle-wrapper.jar"
-if [ ! -e "$GRADLE_WRAPPER_JAR" ]; then
+if ! ( cd $APP_HOME/gradle/wrapper && sha256sum --status -c ${GRADLE_WRAPPER_JAR}.sha256 ); then
"$JAVACMD" $JAVA_OPTS "$APP_HOME/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java" "$GRADLE_WRAPPER_JAR"
WRAPPER_STATUS=$?
if [ "$WRAPPER_STATUS" -eq 1 ]; then
diff --git a/gradlew.bat b/gradlew.bat
index 69177e49f98..34db8faf1db 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -81,10 +81,22 @@ SET DEFAULT_JVM_OPTS=%DEFAULT_JVM_OPTS% "-Djava.io.tmpdir=%GRADLE_TEMPDIR%"
@rem LUCENE-9266: verify and download the gradle wrapper jar if we don't have one.
set GRADLE_WRAPPER_JAR=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-IF NOT EXIST "%GRADLE_WRAPPER_JAR%" (
- "%JAVA_EXE%" %JAVA_OPTS% "%APP_HOME%/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java" "%GRADLE_WRAPPER_JAR%"
- IF %ERRORLEVEL% EQU 1 goto failWithJvmMessage
- IF %ERRORLEVEL% NEQ 0 goto fail
+set GRADLE_WRAPPER_CHECKSUM=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar.sha256
+
+@rem Read the expected hash from .sha256 file
+for /f "tokens=1" %%A in (%GRADLE_WRAPPER_CHECKSUM%) do (
+ set "EXPECTED=%%A"
+)
+@rem Get actual SHA-256 hash using certutil
+for /f "tokens=* delims=" %%H in ('certutil -hashfile "%GRADLE_WRAPPER_JAR%" SHA256 ^| findstr /R /B /I /X "[0-9a-f]*"') do (
+ set "ACTUAL=%%H"
+)
+
+if /i "%ACTUAL%" NEQ "%EXPECTED%" (
+ echo "Checking gradle shas."
+ "%JAVA_EXE%" -XX:TieredStopAtLevel=1 %JAVA_OPTS% "%APP_HOME%/build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java" "%GRADLE_WRAPPER_JAR%"
+ IF %ERRORLEVEL% EQU 1 goto failWithJvmMessage
+ IF %ERRORLEVEL% NEQ 0 goto fail
)
@rem Generate gradle.properties if they don't exist