Skip to content

Commit 7082489

Browse files
deps(java): bump gradle-wrapper from 9.2.1 to 9.3.1 (#15623)
* deps(java): bump gradle-wrapper from 9.2.1 to 9.3.0 Bumps gradle-wrapper from 9.2.1 to 9.3.0. --- updated-dependencies: - dependency-name: gradle-wrapper dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update scripts, min. gradle version. * Upgrade to gradle 9.3.1. * Use a custom test framework implementation that is dumb. And it's good. * Add gradle-wrapper.jar.version * Use gradle wrapper properties to determine version in the wrapper. * Try switching to https for emoji regeneration url. * Add user agent to generateEmojiTokenizationTest.pl script. Regenerate. * Another perl user agent. * Regenerate. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dawid Weiss <dawid.weiss@carrotsearch.com>
1 parent eae18f2 commit 7082489

File tree

14 files changed

+181
-27
lines changed

14 files changed

+181
-27
lines changed

build-tools/build-infra/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.Objects;
3939
import java.util.concurrent.TimeUnit;
4040
import java.util.logging.Logger;
41+
import java.util.regex.Pattern;
4142

4243
/**
4344
* Standalone class used to download the {@code gradle-wrapper.jar}.
@@ -122,12 +123,28 @@ public void run(Path destination) throws IOException, NoSuchAlgorithmException {
122123
}
123124
}
124125

125-
Path versionPath =
126-
destination.resolveSibling(destination.getFileName().toString() + ".version");
127-
if (!Files.exists(versionPath)) {
128-
throw new IOException("Wrapper version file not found: " + versionPath);
126+
Path wrapperProperties =
127+
destination.resolveSibling(
128+
destination.getFileName().toString().replace(".jar", ".properties"));
129+
if (!Files.exists(wrapperProperties)) {
130+
throw new IOException("Wrapper property file not found: " + wrapperProperties);
129131
}
130-
String wrapperVersion = Files.readString(versionPath, StandardCharsets.UTF_8).trim();
132+
133+
Pattern versionPattern = Pattern.compile("gradle-(?<version>.+?)-bin.zip");
134+
String wrapperVersion =
135+
Files.readAllLines(wrapperProperties, StandardCharsets.UTF_8).stream()
136+
.map(
137+
line -> {
138+
var matcher = versionPattern.matcher(line);
139+
if (matcher.find()) {
140+
return matcher.group("version");
141+
} else {
142+
return null;
143+
}
144+
})
145+
.filter(Objects::nonNull)
146+
.findAny()
147+
.orElseThrow();
131148

132149
MessageDigest digest = MessageDigest.getInstance("SHA-256");
133150

build-tools/build-infra/src/main/java/org/apache/lucene/gradle/plugins/java/TestsAndRandomizationPlugin.java

Lines changed: 142 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,55 @@
2020
import com.carrotsearch.gradle.buildinfra.buildoptions.BuildOptionsPlugin;
2121
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
2222
import java.io.File;
23+
import java.io.IOException;
24+
import java.lang.classfile.ClassFile;
25+
import java.lang.classfile.ClassModel;
2326
import java.nio.file.Path;
2427
import java.util.LinkedHashSet;
2528
import java.util.List;
2629
import java.util.Random;
2730
import java.util.Set;
31+
import javax.inject.Inject;
2832
import org.apache.lucene.gradle.plugins.LuceneGradlePlugin;
2933
import org.apache.lucene.gradle.plugins.globals.LuceneBuildGlobalsExtension;
3034
import org.apache.tools.ant.taskdefs.condition.Os;
3135
import org.apache.tools.ant.types.Commandline;
36+
import org.gradle.api.Action;
3237
import org.gradle.api.GradleException;
3338
import org.gradle.api.JavaVersion;
3439
import org.gradle.api.Project;
3540
import org.gradle.api.file.Directory;
3641
import org.gradle.api.file.DirectoryProperty;
3742
import org.gradle.api.file.RegularFileProperty;
43+
import org.gradle.api.internal.file.RelativeFile;
44+
import org.gradle.api.internal.tasks.testing.ClassTestDefinition;
45+
import org.gradle.api.internal.tasks.testing.TestDefinitionProcessor;
46+
import org.gradle.api.internal.tasks.testing.TestFramework;
47+
import org.gradle.api.internal.tasks.testing.WorkerTestDefinitionProcessorFactory;
48+
import org.gradle.api.internal.tasks.testing.detection.TestFrameworkDetector;
49+
import org.gradle.api.internal.tasks.testing.filter.DefaultTestFilter;
50+
import org.gradle.api.internal.tasks.testing.junit.JUnitSpec;
51+
import org.gradle.api.internal.tasks.testing.junit.JUnitTestDefinitionProcessorFactory;
3852
import org.gradle.api.invocation.Gradle;
53+
import org.gradle.api.model.ObjectFactory;
3954
import org.gradle.api.plugins.JavaPlugin;
4055
import org.gradle.api.provider.Provider;
4156
import org.gradle.api.tasks.Delete;
4257
import org.gradle.api.tasks.InputFile;
4358
import org.gradle.api.tasks.Internal;
59+
import org.gradle.api.tasks.Nested;
4460
import org.gradle.api.tasks.PathSensitive;
4561
import org.gradle.api.tasks.PathSensitivity;
4662
import org.gradle.api.tasks.TaskContainer;
4763
import org.gradle.api.tasks.compile.JavaCompile;
4864
import org.gradle.api.tasks.testing.Test;
65+
import org.gradle.api.tasks.testing.TestFilter;
66+
import org.gradle.api.tasks.testing.junit.JUnitOptions;
4967
import org.gradle.api.tasks.testing.logging.TestExceptionFormat;
5068
import org.gradle.api.tasks.testing.logging.TestLogEvent;
69+
import org.gradle.internal.Factory;
5170
import org.gradle.process.CommandLineArgumentProvider;
71+
import org.gradle.process.internal.worker.WorkerProcessBuilder;
5272

5373
/** Sets up gradle's Test task configuration, including all kinds of randomized options */
5474
public class TestsAndRandomizationPlugin extends LuceneGradlePlugin {
@@ -425,7 +445,18 @@ public void apply(Project project) {
425445
}
426446

427447
task.setWorkingDir(testsCwd);
428-
task.useJUnit();
448+
449+
// do not use any of the existing gradle frameworks.
450+
// see https://github.com/gradle/gradle/issues/36508
451+
task.getTestFrameworkProperty()
452+
.set(
453+
project
454+
.getObjects()
455+
.newInstance(
456+
LuceneTestFramework.class,
457+
new Object[] {
458+
task.getFilter(), task.getTemporaryDirFactory(), task.getDryRun()
459+
}));
429460

430461
task.setMinHeapSize(minHeapSizeOption.get());
431462
task.setMaxHeapSize(heapSizeOption.get());
@@ -601,4 +632,114 @@ private static boolean addVectorizationOptions(
601632

602633
return defaultVectorizationOption.get();
603634
}
635+
636+
public abstract static class LuceneTestFramework implements TestFramework {
637+
private final DefaultTestFilter filter;
638+
private final Factory<File> testTaskTemporaryDir;
639+
private final Provider<Boolean> dryRun;
640+
private TestFrameworkDetector detector =
641+
new TestFrameworkDetector() {
642+
private TestDefinitionProcessor<? super ClassTestDefinition> testDefinitionProcessor;
643+
644+
@Override
645+
public void startDetection(
646+
TestDefinitionProcessor<? super ClassTestDefinition> testDefinitionProcessor) {
647+
this.testDefinitionProcessor = testDefinitionProcessor;
648+
}
649+
650+
@Override
651+
public boolean processTestClass(RelativeFile testClassFile) {
652+
var cc =
653+
ClassFile.of(
654+
ClassFile.ConstantPoolSharingOption.NEW_POOL,
655+
ClassFile.DebugElementsOption.DROP_DEBUG,
656+
ClassFile.LineNumbersOption.DROP_LINE_NUMBERS,
657+
ClassFile.StackMapsOption.DROP_STACK_MAPS);
658+
659+
try {
660+
ClassModel parsed = cc.parse(testClassFile.getFile().toPath());
661+
String internalName = parsed.thisClass().asInternalName().replace('/', '.');
662+
testDefinitionProcessor.processTestDefinition(new ClassTestDefinition(internalName));
663+
} catch (Exception e) {
664+
throw new RuntimeException(e);
665+
}
666+
667+
return true;
668+
}
669+
670+
@Override
671+
public void setTestClasses(List<File> testClasses) {}
672+
673+
@Override
674+
public void setTestClasspath(List<File> classpath) {}
675+
};
676+
677+
@Inject
678+
public LuceneTestFramework(
679+
DefaultTestFilter filter, Factory<File> testTaskTemporaryDir, Provider<Boolean> dryRun) {
680+
this.filter = filter;
681+
this.testTaskTemporaryDir = testTaskTemporaryDir;
682+
this.dryRun = dryRun;
683+
}
684+
685+
@Inject
686+
protected abstract ObjectFactory getObjectFactory();
687+
688+
@Override
689+
public TestFramework copyWithFilters(TestFilter newTestFilters) {
690+
var newTestFramework =
691+
this.getObjectFactory()
692+
.newInstance(
693+
LuceneTestFramework.class,
694+
new Object[] {newTestFilters, this.testTaskTemporaryDir, this.dryRun});
695+
newTestFramework.getOptions().copyFrom(this.getOptions());
696+
return newTestFramework;
697+
}
698+
699+
@Override
700+
public WorkerTestDefinitionProcessorFactory<?> getProcessorFactory() {
701+
this.validateOptions();
702+
return new JUnitTestDefinitionProcessorFactory(
703+
new JUnitSpec(
704+
this.filter.toSpec(),
705+
this.getOptions().getIncludeCategories(),
706+
this.getOptions().getExcludeCategories(),
707+
this.dryRun.get()));
708+
}
709+
710+
@Override
711+
public Action<WorkerProcessBuilder> getWorkerConfigurationAction() {
712+
return (workerProcessBuilder) -> {
713+
workerProcessBuilder.sharedPackages(new String[] {"junit.framework"});
714+
workerProcessBuilder.sharedPackages(new String[] {"junit.extensions"});
715+
workerProcessBuilder.sharedPackages(new String[] {"org.junit"});
716+
};
717+
}
718+
719+
@Override
720+
@Nested
721+
public abstract JUnitOptions getOptions();
722+
723+
@Override
724+
public TestFrameworkDetector getDetector() {
725+
return detector;
726+
}
727+
728+
@Override
729+
public void close() throws IOException {
730+
this.detector = null;
731+
}
732+
733+
private void validateOptions() {
734+
if (!this.getOptions().getIncludeCategories().isEmpty()
735+
|| !this.getOptions().getExcludeCategories().isEmpty()) {
736+
throw new RuntimeException("Include and exclude categories are not supported in Lucene.");
737+
}
738+
}
739+
740+
@Override
741+
public String getDisplayName() {
742+
return "JUnit";
743+
}
744+
}
604745
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jts = "1.20.0"
3535
# unit tests
3636
junit = "4.13.2"
3737
# @keep Minimum gradle version to run the build
38-
minGradle = "9.2.1"
38+
minGradle = "9.3.1"
3939
# @keep This is the minimum required Java version.
4040
minJava = "25"
4141
# analysis/morfologik polish support
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3 *gradle-wrapper.jar
1+
b3a875ddc1f044746e1b1a55f645584505f4a10438c1afea9f15e92a7c42ec13 *gradle-wrapper.jar

gradle/wrapper/gradle-wrapper.jar.version

Lines changed: 0 additions & 1 deletion
This file was deleted.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

gradlew

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradlew.bat

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/EmojiTokenizationTestUnicode_12_1.java": "9c4bc3ce66359cbe1e20d8e3ee718cc90caf21a4",
3-
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/generateEmojiTokenizationTest.pl": "b178c0ec31dc843d5b7a8ff4ae85601a00b0a89f",
2+
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/EmojiTokenizationTestUnicode_12_1.java": "5e771f9188b774ccd4fea87a9b8d53bc798f9095",
3+
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/generateEmojiTokenizationTest.pl": "d859fead98e8c4ca9d6fa37e8723bdd583708c73",
44
"property:unicodeVersion": "12.1"
55
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/WordBreakTestUnicode_12_1.java": "--",
3-
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/generateJavaUnicodeWordBreakTest.pl": "ff0d692c51f777daa72e706c2f7e527e88aecb01",
3+
"lucene/test-framework/src/java/org/apache/lucene/tests/analysis/standard/generateJavaUnicodeWordBreakTest.pl": "7e82363c86893919234395e5297e6995a9b687ea",
44
"property:unicodeVersion": "12.1"
55
}

0 commit comments

Comments
 (0)