From cafa4dd364dcbba5332222ff9be6fed8c347c7a8 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Mon, 11 Aug 2025 07:49:43 +0200 Subject: [PATCH 1/9] Update Gradle wrapper to 9.0.0 --- build-tools-internal/gradle/wrapper/gradle-wrapper.properties | 4 ++-- build-tools-internal/src/main/resources/minimumGradleVersion | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- plugins/examples/gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build-tools-internal/gradle/wrapper/gradle-wrapper.properties b/build-tools-internal/gradle/wrapper/gradle-wrapper.properties index c4a852da571d7..01450089d2c6c 100644 --- a/build-tools-internal/gradle/wrapper/gradle-wrapper.properties +++ b/build-tools-internal/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +distributionSha256Sum=f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/build-tools-internal/src/main/resources/minimumGradleVersion b/build-tools-internal/src/main/resources/minimumGradleVersion index 4dd804f10624c..c9277c5a601f8 100644 --- a/build-tools-internal/src/main/resources/minimumGradleVersion +++ b/build-tools-internal/src/main/resources/minimumGradleVersion @@ -1 +1 @@ -8.14.2 \ No newline at end of file +9.0.0 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c4a852da571d7..01450089d2c6c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +distributionSha256Sum=f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/plugins/examples/gradle/wrapper/gradle-wrapper.properties b/plugins/examples/gradle/wrapper/gradle-wrapper.properties index c4a852da571d7..01450089d2c6c 100644 --- a/plugins/examples/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/examples/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +distributionSha256Sum=f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From d2205648a98d650a6000539379f25479a0705b40 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Mon, 11 Aug 2025 09:38:10 +0200 Subject: [PATCH 2/9] WIP gradle 9.0 update --- .../org/elasticsearch/gradle/internal/AntTask.groovy | 9 +++++---- .../gradle/internal/test/AntFixture.groovy | 2 ++ .../gradle/internal/SymbolicLinkPreservingTar.java | 2 +- .../gradle/internal/idea/IdeaXmlUtil.java | 2 +- .../gradle/internal/release/AbstractVersionsTask.java | 6 +++--- .../internal/release/ExtractCurrentVersionsTask.java | 2 +- build.gradle | 2 ++ gradle/verification-metadata.xml | 10 ++++++++++ 8 files changed, 25 insertions(+), 10 deletions(-) diff --git a/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy index 01a3bdaee2337..df4fa43aad3e7 100644 --- a/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy +++ b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy @@ -9,18 +9,18 @@ package org.elasticsearch.gradle.internal +import groovy.ant.AntBuilder + import org.apache.tools.ant.BuildListener import org.apache.tools.ant.BuildLogger import org.apache.tools.ant.DefaultLogger import org.apache.tools.ant.Project import org.gradle.api.DefaultTask -import org.gradle.api.GradleException import org.gradle.api.file.FileSystemOperations -import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -import javax.inject.Inject import java.nio.charset.Charset +import javax.inject.Inject /** * A task which will run ant commands. @@ -83,7 +83,8 @@ public abstract class AntTask extends DefaultTask { return new DefaultLogger( errorPrintStream: stream, outputPrintStream: stream, - messageOutputLevel: outputLevel) + messageOutputLevel: outputLevel + ) } /** diff --git a/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy index 88a68f1194858..c09c372800af8 100644 --- a/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy +++ b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy @@ -9,6 +9,8 @@ package org.elasticsearch.gradle.internal.test +import groovy.ant.AntBuilder + import org.elasticsearch.gradle.OS import org.elasticsearch.gradle.internal.AntFixtureStop diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java index ec4b1fea9e962..b5a19dbdffd0a 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java @@ -41,7 +41,7 @@ * * This task is necessary because the built-in task {@link org.gradle.api.tasks.bundling.Tar} does not preserve symbolic links. */ -public class SymbolicLinkPreservingTar extends Tar { +public abstract class SymbolicLinkPreservingTar extends Tar { @Override protected CopyAction createCopyAction() { diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java index b7cc2862a0af1..282f398d4a9c0 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java @@ -10,7 +10,7 @@ package org.elasticsearch.gradle.internal.idea; import groovy.util.Node; -import groovy.util.XmlParser; +import groovy.xml.XmlParser; import groovy.xml.XmlNodePrinter; import org.gradle.api.Action; diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java index 8903308634ef8..0280fa11e7c8e 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java @@ -51,9 +51,9 @@ public abstract class AbstractVersionsTask extends DefaultTask { - static { - replaceDefaultJavaParserClassCsm(); - } +// static { +// replaceDefaultJavaParserClassCsm(); +// } /* * The default JavaParser CSM which it uses to format any new declarations added to a class diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java index 76d6aeeca6db9..599a82295fe30 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java @@ -29,7 +29,7 @@ import javax.inject.Inject; -public class ExtractCurrentVersionsTask extends AbstractVersionsTask { +public abstract class ExtractCurrentVersionsTask extends AbstractVersionsTask { private static final Logger LOGGER = Logging.getLogger(ExtractCurrentVersionsTask.class); private Path outputFile; diff --git a/build.gradle b/build.gradle index 60aac98ac3203..d437d004649ec 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,8 @@ import org.elasticsearch.gradle.internal.ResolveAllDependencies import org.elasticsearch.gradle.util.GradleUtils import org.gradle.plugins.ide.eclipse.model.AccessRule +import groovy.xml.XmlParser; +import groovy.xml.XmlNodePrinter; import java.nio.file.Files import static java.nio.file.StandardCopyOption.REPLACE_EXISTING diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index ff3a06c604a06..fa93508be50c0 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -929,6 +929,11 @@ + + + + + @@ -3254,6 +3259,11 @@ + + + + + From 33c93098cfa41e1b00aa3ce613c43ba6e49dca87 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Thu, 14 Aug 2025 12:03:04 +0200 Subject: [PATCH 3/9] Update Gradle compatibility --- .../gradle/internal/idea/IdeaXmlUtil.java | 2 +- .../release/AbstractVersionsTask.java | 6 ++-- .../release/UpdateVersionsTaskTests.java | 4 +-- gradle/build.versions.toml | 2 +- gradle/verification-metadata.xml | 35 +++++++++++++------ 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java index 282f398d4a9c0..7fbc9c341603b 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/idea/IdeaXmlUtil.java @@ -10,8 +10,8 @@ package org.elasticsearch.gradle.internal.idea; import groovy.util.Node; -import groovy.xml.XmlParser; import groovy.xml.XmlNodePrinter; +import groovy.xml.XmlParser; import org.gradle.api.Action; import org.xml.sax.SAXException; diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java index 0280fa11e7c8e..8903308634ef8 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/AbstractVersionsTask.java @@ -51,9 +51,9 @@ public abstract class AbstractVersionsTask extends DefaultTask { -// static { -// replaceDefaultJavaParserClassCsm(); -// } + static { + replaceDefaultJavaParserClassCsm(); + } /* * The default JavaParser CSM which it uses to format any new declarations added to a class diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/release/UpdateVersionsTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/release/UpdateVersionsTaskTests.java index d5060a2e62365..41d46929aaed4 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/release/UpdateVersionsTaskTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/release/UpdateVersionsTaskTests.java @@ -189,7 +189,7 @@ public void updateVersionFile_addsCorrectly() throws Exception { // write out & parse back in again StringWriter writer = new StringWriter(); - LexicalPreservingPrinter.print(unit, writer); + writer.append(LexicalPreservingPrinter.print(unit)); unit = StaticJavaParser.parse(writer.toString()); // a field has been added @@ -229,7 +229,7 @@ public void updateVersionFile_removesCorrectly() throws Exception { // write out & parse back in again StringWriter writer = new StringWriter(); - LexicalPreservingPrinter.print(unit, writer); + writer.append(LexicalPreservingPrinter.print(unit)); unit = StaticJavaParser.parse(writer.toString()); // a field has been removed diff --git a/gradle/build.versions.toml b/gradle/build.versions.toml index f4f8fd1bca8ea..0feea8eff0aef 100644 --- a/gradle/build.versions.toml +++ b/gradle/build.versions.toml @@ -2,7 +2,7 @@ asm = "9.7.1" jackson = "2.15.0" junit5 = "5.12.1" -spock = "2.1-groovy-3.0" +spock = "2.3-groovy-4.0" nmcp = "0.1.5" [libraries] diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index fa93508be50c0..6e93fe95d5718 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -929,11 +929,6 @@ - - - - - @@ -2551,6 +2546,11 @@ + + + + + @@ -3259,11 +3259,6 @@ - - - - - @@ -4337,6 +4332,11 @@ + + + + + @@ -4347,6 +4347,11 @@ + + + + + @@ -4937,11 +4942,21 @@ + + + + + + + + + + From 68bc5d5ea6e318471a3d74902d092ac0ea32cc1f Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Thu, 14 Aug 2025 13:49:53 +0200 Subject: [PATCH 4/9] Rework RestCompatTestTransformTask to CC compatibility To keep supporting configuration cache we need to avoid Serializing JsonNode instances --- .../compat/RestCompatTestTransformTask.java | 27 ++++++------ .../test/rest/transform/ReplaceByKey.java | 22 +++++++--- .../rest/transform/SerializableJsonNode.java | 44 +++++++++++++++++++ .../close_to/ReplaceValueInCloseTo.java | 8 ++-- .../length/ReplaceValueInLength.java | 10 ++--- .../test/rest/transform/match/AddMatch.java | 9 ++-- .../transform/match/ReplaceValueInMatch.java | 8 ++-- .../rest/transform/text/ReplaceIsFalse.java | 6 ++- .../rest/transform/text/ReplaceIsTrue.java | 6 ++- .../rest/transform/text/ReplaceTextual.java | 16 ++++--- .../close_to/ReplaceValueInCloseToTests.java | 8 +--- .../length/ReplaceValueInLengthTests.java | 3 +- .../rest/transform/match/AddMatchTests.java | 5 ++- .../match/ReplaceValueInMatchTests.java | 3 +- .../transform/text/ReplaceTextualTests.java | 13 ++---- 15 files changed, 126 insertions(+), 62 deletions(-) create mode 100644 build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/SerializableJsonNode.java diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/compat/compat/RestCompatTestTransformTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/compat/compat/RestCompatTestTransformTask.java index 6d6590429feb1..31d4947b064f2 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/compat/compat/RestCompatTestTransformTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/compat/compat/RestCompatTestTransformTask.java @@ -26,6 +26,7 @@ import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransform; import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformer; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.close_to.ReplaceValueInCloseTo; import org.elasticsearch.gradle.internal.test.rest.transform.do_.ReplaceKeyInDo; import org.elasticsearch.gradle.internal.test.rest.transform.headers.InjectHeaders; @@ -169,7 +170,7 @@ public void skipTestsByFilePattern(String filePattern, String reason) { * @param value the value used in the replacement. For example "bar" */ public void replaceValueInMatch(String subKey, Object value) { - getTransformations().add(new ReplaceValueInMatch(subKey, MAPPER.convertValue(value, JsonNode.class))); + getTransformations().add(new ReplaceValueInMatch(subKey, SerializableJsonNode.of(value, JsonNode.class))); } /** @@ -180,7 +181,7 @@ public void replaceValueInMatch(String subKey, Object value) { * @param testName the testName to apply replacement */ public void replaceValueInMatch(String subKey, Object value, String testName) { - getTransformations().add(new ReplaceValueInMatch(subKey, MAPPER.convertValue(value, JsonNode.class), testName)); + getTransformations().add(new ReplaceValueInMatch(subKey, SerializableJsonNode.of(value, JsonNode.class), testName)); } /** @@ -225,7 +226,7 @@ public void replaceKeyInLength(String oldKeyName, String newKeyName) { * @param value the value used in the replacement. For example 99 */ public void replaceValueInLength(String subKey, int value) { - getTransformations().add(new ReplaceValueInLength(subKey, MAPPER.convertValue(value, NumericNode.class))); + getTransformations().add(new ReplaceValueInLength(subKey, SerializableJsonNode.of(value, NumericNode.class))); } /** @@ -237,7 +238,7 @@ public void replaceValueInLength(String subKey, int value) { * @param testName the testName to apply replacement */ public void replaceValueInLength(String subKey, int value, String testName) { - getTransformations().add(new ReplaceValueInLength(subKey, MAPPER.convertValue(value, NumericNode.class), testName)); + getTransformations().add(new ReplaceValueInLength(subKey, SerializableJsonNode.of(value, NumericNode.class), testName)); } /** @@ -260,7 +261,7 @@ public void replaceKeyInMatch(String oldKeyName, String newKeyName) { * @param testName the testName to apply replacement */ public void replaceValueInCloseTo(String subKey, double newValue, String testName) { - getTransformations().add(new ReplaceValueInCloseTo(subKey, MAPPER.convertValue(newValue, NumericNode.class), testName)); + getTransformations().add(new ReplaceValueInCloseTo(subKey, SerializableJsonNode.of(newValue, NumericNode.class), testName)); } /** @@ -271,7 +272,7 @@ public void replaceValueInCloseTo(String subKey, double newValue, String testNam * @param newValue the value used in the replacement. For example 9.5 */ public void replaceValueInCloseTo(String subKey, double newValue) { - getTransformations().add(new ReplaceValueInCloseTo(subKey, MAPPER.convertValue(newValue, NumericNode.class))); + getTransformations().add(new ReplaceValueInCloseTo(subKey, SerializableJsonNode.of(newValue, NumericNode.class))); } /** @@ -282,7 +283,7 @@ public void replaceValueInCloseTo(String subKey, double newValue) { * @param newValue the value used in the replacement */ public void replaceIsTrue(String oldValue, Object newValue) { - getTransformations().add(new ReplaceIsTrue(oldValue, MAPPER.convertValue(newValue, TextNode.class))); + getTransformations().add(new ReplaceIsTrue(oldValue, SerializableJsonNode.of(newValue, TextNode.class))); } /** @@ -294,7 +295,7 @@ public void replaceIsTrue(String oldValue, Object newValue) { * @param testName the testName to apply replacement */ public void replaceIsTrue(String oldValue, Object newValue, String testName) { - getTransformations().add(new ReplaceIsTrue(oldValue, MAPPER.convertValue(newValue, TextNode.class), testName)); + getTransformations().add(new ReplaceIsTrue(oldValue, SerializableJsonNode.of(newValue, TextNode.class), testName)); } /** @@ -305,7 +306,7 @@ public void replaceIsTrue(String oldValue, Object newValue, String testName) { * @param newValue the value used in the replacement */ public void replaceIsFalse(String oldValue, Object newValue) { - getTransformations().add(new ReplaceIsFalse(oldValue, MAPPER.convertValue(newValue, TextNode.class))); + getTransformations().add(new ReplaceIsFalse(oldValue, SerializableJsonNode.of(newValue, TextNode.class))); } /** @@ -317,7 +318,7 @@ public void replaceIsFalse(String oldValue, Object newValue) { * @param testName the testName to apply replacement */ public void replaceIsFalse(String oldValue, Object newValue, String testName) { - getTransformations().add(new ReplaceIsFalse(oldValue, MAPPER.convertValue(newValue, TextNode.class), testName)); + getTransformations().add(new ReplaceIsFalse(oldValue, SerializableJsonNode.of(newValue, TextNode.class), testName)); } /** @@ -329,7 +330,7 @@ public void replaceIsFalse(String oldValue, Object newValue, String testName) { * @param newValue the value used in the replacement */ public void replaceValueTextByKeyValue(String key, String oldValue, Object newValue) { - getTransformations().add(new ReplaceTextual(key, oldValue, MAPPER.convertValue(newValue, TextNode.class))); + getTransformations().add(new ReplaceTextual(key, oldValue, SerializableJsonNode.of(newValue, TextNode.class))); } /** @@ -342,7 +343,7 @@ public void replaceValueTextByKeyValue(String key, String oldValue, Object newVa * @param testName the testName to apply replacement */ public void replaceValueTextByKeyValue(String key, String oldValue, Object newValue, String testName) { - getTransformations().add(new ReplaceTextual(key, oldValue, MAPPER.convertValue(newValue, TextNode.class), testName)); + getTransformations().add(new ReplaceTextual(key, oldValue, SerializableJsonNode.of(newValue, TextNode.class), testName)); } /** @@ -376,7 +377,7 @@ public void removeMatch(String subKey, String testName) { * @param testName the testName to apply addition */ public void addMatch(String subKey, Object value, String testName) { - getTransformations().add(new AddMatch(subKey, MAPPER.convertValue(value, JsonNode.class), testName)); + getTransformations().add(new AddMatch(subKey, SerializableJsonNode.of(value, JsonNode.class), testName)); } /** diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java index 17d50a1a95db1..3cf542b12398b 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java @@ -10,6 +10,7 @@ package org.elasticsearch.gradle.internal.test.rest.transform; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; @@ -25,18 +26,23 @@ public abstract class ReplaceByKey implements RestTestTransformByParentObject { private final String requiredChildKey; private final String newChildKey; - private final JsonNode replacementNode; + private final SerializableJsonNode replacementNode; private final String testName; - public ReplaceByKey(String requiredChildKey, JsonNode replacementNode) { + public ReplaceByKey(String requiredChildKey, SerializableJsonNode replacementNode) { this(requiredChildKey, replacementNode, null); } - public ReplaceByKey(String requiredChildKey, JsonNode replacementNode, String testName) { + public ReplaceByKey(String requiredChildKey, SerializableJsonNode replacementNode, String testName) { this(requiredChildKey, requiredChildKey, replacementNode, testName); } - public ReplaceByKey(String requiredChildKey, String newChildKey, JsonNode replacementNode, String testName) { + public ReplaceByKey( + String requiredChildKey, + String newChildKey, + SerializableJsonNode replacementNode, + String testName + ) { this.requiredChildKey = requiredChildKey; this.newChildKey = newChildKey; this.replacementNode = replacementNode; @@ -60,7 +66,7 @@ public boolean shouldApply(RestTestContext testContext) { @Input @Optional - public JsonNode getReplacementNode() { + public SerializableJsonNode getReplacementNode() { return replacementNode; } @@ -69,4 +75,10 @@ public JsonNode getReplacementNode() { public String getTestName() { return testName; } + + protected void updateReplacement(ObjectNode matchNode) { + matchNode.remove(requiredChildKey()); + matchNode.set(getNewChildKey(), replacementNode.toJsonNode()); + } + } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/SerializableJsonNode.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/SerializableJsonNode.java new file mode 100644 index 0000000000000..1078084daea0a --- /dev/null +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/SerializableJsonNode.java @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.gradle.internal.test.rest.transform; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +import java.io.Serializable; + +/** + * A serializable wrapper for a JsonNode that can be used as Gradle task inputs. + * This is necessary because JsonNode serialization is not supported by Gradle configuration cache + * as it relies on DataInput.readFully which is unsupported by Gradle. + * + * @param The type of JsonNode this wrapper will hold. + */ +public class SerializableJsonNode implements Serializable { + + private Object value; + private Class type; + + SerializableJsonNode(Object value, Class type) { + this.value = value; + this.type = type; + } + + public static SerializableJsonNode of(Object value, Class type) { + return new SerializableJsonNode(value, type); + } + + public T toJsonNode() { + YAMLFactory YAML_FACTORY = new YAMLFactory(); + ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); + return (T) MAPPER.convertValue(value, type); + } +} diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseTo.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseTo.java index 96561c3cf5444..0c3ac908fe224 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseTo.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseTo.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.gradle.api.tasks.Internal; /** @@ -22,11 +23,11 @@ */ public class ReplaceValueInCloseTo extends ReplaceByKey { - public ReplaceValueInCloseTo(String replaceKey, NumericNode replacementNode) { + public ReplaceValueInCloseTo(String replaceKey, SerializableJsonNode replacementNode) { this(replaceKey, replacementNode, null); } - public ReplaceValueInCloseTo(String replaceKey, NumericNode replacementNode, String testName) { + public ReplaceValueInCloseTo(String replaceKey, SerializableJsonNode replacementNode, String testName) { super(replaceKey, replaceKey, replacementNode, testName); } @@ -41,6 +42,7 @@ public void transformTest(ObjectNode matchParent) { ObjectNode closeToNode = (ObjectNode) matchParent.get(getKeyToFind()); ObjectNode subNode = (ObjectNode) closeToNode.get(requiredChildKey()); subNode.remove("value"); - subNode.set("value", getReplacementNode()); + subNode.set("value", getReplacementNode().toJsonNode()); } + } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLength.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLength.java index 936deea70703d..50a6493049bcf 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLength.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLength.java @@ -9,10 +9,10 @@ package org.elasticsearch.gradle.internal.test.rest.transform.length; -import com.fasterxml.jackson.databind.node.NumericNode; import com.fasterxml.jackson.databind.node.ObjectNode; import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.gradle.api.tasks.Internal; /** @@ -21,11 +21,11 @@ */ public class ReplaceValueInLength extends ReplaceByKey { - public ReplaceValueInLength(String replaceKey, NumericNode replacementNode) { + public ReplaceValueInLength(String replaceKey, SerializableJsonNode replacementNode) { this(replaceKey, replacementNode, null); } - public ReplaceValueInLength(String replaceKey, NumericNode replacementNode, String testName) { + public ReplaceValueInLength(String replaceKey, SerializableJsonNode replacementNode, String testName) { super(replaceKey, replaceKey, replacementNode, testName); } @@ -38,7 +38,7 @@ public String getKeyToFind() { @Override public void transformTest(ObjectNode matchParent) { ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); - matchNode.remove(requiredChildKey()); - matchNode.set(getNewChildKey(), getReplacementNode()); + updateReplacement(matchNode); } + } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatch.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatch.java index ff8ec820d60c4..f5f7a7f55ce03 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatch.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatch.java @@ -16,6 +16,7 @@ import org.elasticsearch.gradle.internal.test.rest.transform.RestTestContext; import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformByParentArray; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; @@ -28,9 +29,9 @@ public class AddMatch implements RestTestTransformByParentArray { private static JsonNodeFactory jsonNodeFactory = JsonNodeFactory.withExactBigDecimals(false); private final String matchKey; private final String testName; - private final JsonNode matchValue; + private final SerializableJsonNode matchValue; - public AddMatch(String matchKey, JsonNode matchValue, String testName) { + public AddMatch(String matchKey, SerializableJsonNode matchValue, String testName) { this.matchKey = matchKey; this.matchValue = matchValue; this.testName = Objects.requireNonNull(testName, "adding matches is only supported for named tests"); @@ -45,7 +46,7 @@ public boolean shouldApply(RestTestContext testContext) { public void transformTest(ArrayNode matchParent) { ObjectNode matchObject = new ObjectNode(jsonNodeFactory); ObjectNode matchContent = new ObjectNode(jsonNodeFactory); - matchContent.set(matchKey, matchValue); + matchContent.set(matchKey, matchValue.toJsonNode()); matchObject.set("match", matchContent); matchParent.add(matchObject); } @@ -70,6 +71,6 @@ public String getTestName() { @Input public JsonNode getMatchValue() { - return matchValue; + return matchValue.toJsonNode(); } } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java index 5e46934c8ba4a..f52558dbd2f2e 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.gradle.api.tasks.Internal; /** @@ -20,11 +21,11 @@ */ public class ReplaceValueInMatch extends ReplaceByKey { - public ReplaceValueInMatch(String replaceKey, JsonNode replacementNode) { + public ReplaceValueInMatch(String replaceKey, SerializableJsonNode replacementNode) { this(replaceKey, replacementNode, null); } - public ReplaceValueInMatch(String replaceKey, JsonNode replacementNode, String testName) { + public ReplaceValueInMatch(String replaceKey, SerializableJsonNode replacementNode, String testName) { super(replaceKey, replaceKey, replacementNode, testName); } @@ -37,7 +38,6 @@ public String getKeyToFind() { @Override public void transformTest(ObjectNode matchParent) { ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); - matchNode.remove(requiredChildKey()); - matchNode.set(getNewChildKey(), getReplacementNode()); + updateReplacement(matchNode); } } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java index 53a35b09dd087..72e225918e187 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java @@ -11,12 +11,14 @@ import com.fasterxml.jackson.databind.node.TextNode; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; + public class ReplaceIsFalse extends ReplaceTextual { - public ReplaceIsFalse(String valueToBeReplaced, TextNode replacementNode) { + public ReplaceIsFalse(String valueToBeReplaced, SerializableJsonNode replacementNode) { super("is_false", valueToBeReplaced, replacementNode); } - public ReplaceIsFalse(String valueToBeReplaced, TextNode replacementNode, String testName) { + public ReplaceIsFalse(String valueToBeReplaced, SerializableJsonNode replacementNode, String testName) { super("is_false", valueToBeReplaced, replacementNode, testName); } } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsTrue.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsTrue.java index 51db9c88774b7..c5bc8fb6e0d79 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsTrue.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsTrue.java @@ -11,12 +11,14 @@ import com.fasterxml.jackson.databind.node.TextNode; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; + public class ReplaceIsTrue extends ReplaceTextual { - public ReplaceIsTrue(String valueToBeReplaced, TextNode replacementNode) { + public ReplaceIsTrue(String valueToBeReplaced, SerializableJsonNode replacementNode) { super("is_true", valueToBeReplaced, replacementNode); } - public ReplaceIsTrue(String valueToBeReplaced, TextNode replacementNode, String testName) { + public ReplaceIsTrue(String valueToBeReplaced, SerializableJsonNode replacementNode, String testName) { super("is_true", valueToBeReplaced, replacementNode, testName); } } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextual.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextual.java index 6397e938f091c..ae9cc43dae2ed 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextual.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextual.java @@ -15,6 +15,7 @@ import org.elasticsearch.gradle.internal.test.rest.transform.RestTestContext; import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformByParentObject; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; @@ -25,17 +26,22 @@ public class ReplaceTextual implements RestTestTransformByParentObject { private final String keyToReplaceName; private final String valueToBeReplaced; - private final TextNode replacementNode; + private final SerializableJsonNode replacementNode; private final String testName; - public ReplaceTextual(String keyToReplaceName, String valueToBeReplaced, TextNode replacementNode) { + public ReplaceTextual(String keyToReplaceName, String valueToBeReplaced, SerializableJsonNode replacementNode) { this.keyToReplaceName = keyToReplaceName; this.valueToBeReplaced = valueToBeReplaced; this.replacementNode = replacementNode; this.testName = null; } - public ReplaceTextual(String keyToReplaceName, String valueToBeReplaced, TextNode replacementNode, String testName) { + public ReplaceTextual( + String keyToReplaceName, + String valueToBeReplaced, + SerializableJsonNode replacementNode, + String testName + ) { this.keyToReplaceName = keyToReplaceName; this.valueToBeReplaced = valueToBeReplaced; this.replacementNode = replacementNode; @@ -60,7 +66,7 @@ public boolean shouldApply(RestTestContext testContext) { @Override public void transformTest(ObjectNode matchParent) { - matchParent.set(getKeyToFind(), replacementNode); + matchParent.set(getKeyToFind(), replacementNode.toJsonNode()); } @Input @@ -69,7 +75,7 @@ public String getValueToBeReplaced() { } @Input - public JsonNode getReplacementNode() { + public SerializableJsonNode getReplacementNode() { return replacementNode; } diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseToTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseToTests.java index 27f7895f278e5..8756040bc2ecb 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseToTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/close_to/ReplaceValueInCloseToTests.java @@ -9,12 +9,11 @@ package org.elasticsearch.gradle.internal.test.rest.transform.close_to; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.NumericNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; import org.junit.Test; @@ -23,9 +22,6 @@ public class ReplaceValueInCloseToTests extends TransformTests { - private static final YAMLFactory YAML_FACTORY = new YAMLFactory(); - private static final ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); - @Test public void testReplaceValue() throws Exception { String test_original = "/rest/transform/close_to/close_to_replace_original.yml"; @@ -34,7 +30,7 @@ public void testReplaceValue() throws Exception { String test_transformed = "/rest/transform/close_to/close_to_replace_transformed_value.yml"; List expectedTransformation = getTests(test_transformed); - NumericNode replacementNode = MAPPER.convertValue(99.99, NumericNode.class); + var replacementNode = SerializableJsonNode.of(99.99, NumericNode.class); List transformedTests = transformTests( tests, diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLengthTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLengthTests.java index 17d7bb1c65f3e..e033c9f2a1640 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLengthTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceValueInLengthTests.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; import org.junit.Test; @@ -34,7 +35,7 @@ public void testReplaceMatch() throws Exception { String test_transformed = "/rest/transform/length/length_replace_transformed_value.yml"; List expectedTransformation = getTests(test_transformed); - NumericNode replacementNode = MAPPER.convertValue(99, NumericNode.class); + var replacementNode = SerializableJsonNode.of(99, NumericNode.class); List transformedTests = transformTests( tests, diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java index 21dce6f6c95d6..ba684e389a2d6 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; import org.hamcrest.CoreMatchers; import org.junit.Test; @@ -38,7 +39,7 @@ public class AddMatchTests extends TransformTests { public void testAddAllNotSupported() throws Exception { String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); - JsonNode addNode = MAPPER.convertValue("_doc", JsonNode.class); + var addNode = SerializableJsonNode.of("_doc", JsonNode.class); assertEquals( "adding matches is only supported for named tests", assertThrows( @@ -52,7 +53,7 @@ public void testAddAllNotSupported() throws Exception { public void testAddByTest() throws Exception { String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); - JsonNode addNode = MAPPER.convertValue(123456789, JsonNode.class); + var addNode = SerializableJsonNode.of(123456789, JsonNode.class); validateTest(tests, true); List transformedTests = transformTests( tests, diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java index f1ed68f1f3d64..c2752e4840917 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; import org.junit.Test; @@ -33,7 +34,7 @@ public void testReplaceMatch() throws Exception { String test_transformed = "/rest/transform/match/match_transformed.yml"; List expectedTransformation = getTests(test_transformed); - JsonNode replacementNode = MAPPER.convertValue("_replaced_type", JsonNode.class); + SerializableJsonNode replacementNode = SerializableJsonNode.of("_replaced_type", JsonNode.class); List transformedTests = transformTests( tests, List.of( diff --git a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java index 0fcbd0a94b333..c321c7661bfe6 100644 --- a/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java @@ -9,22 +9,17 @@ package org.elasticsearch.gradle.internal.test.rest.transform.text; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.SerializableJsonNode; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; import org.junit.Test; import java.util.List; public class ReplaceTextualTests extends TransformTests { - - private static final YAMLFactory YAML_FACTORY = new YAMLFactory(); - private static final ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); - @Test public void testReplaceAll() throws Exception { String test_original = "/rest/transform/text/text_replace_original.yml"; @@ -36,9 +31,9 @@ public void testReplaceAll() throws Exception { List transformedTests = transformTests( tests, List.of( - new ReplaceTextual("key_to_replace", "value_to_replace", MAPPER.convertValue("_replaced_value", TextNode.class), null), - new ReplaceIsTrue("is_true_to_replace", MAPPER.convertValue("is_true_replaced", TextNode.class)), - new ReplaceIsFalse("is_false_to_replace", MAPPER.convertValue("is_false_replaced", TextNode.class)) + new ReplaceTextual("key_to_replace", "value_to_replace", SerializableJsonNode.of("_replaced_value", TextNode.class), null), + new ReplaceIsTrue("is_true_to_replace", SerializableJsonNode.of("is_true_replaced", TextNode.class)), + new ReplaceIsFalse("is_false_to_replace", SerializableJsonNode.of("is_false_replaced", TextNode.class)) ) ); From 7d28ba10f60dbaaf26109a894c2b2d1eb46d6a19 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Thu, 14 Aug 2025 15:17:38 +0200 Subject: [PATCH 5/9] Fix build integration tests --- .../AbstractGitAwareGradleFuncTest.groovy | 1 + .../AbstractRestResourcesFuncTest.groovy | 6 +++-- ...tributionArchiveSetupPluginFuncTest.groovy | 11 +++------- ...lDistributionBwcSetupPluginFuncTest.groovy | 1 - .../SymbolicLinkPreservingTarFuncTest.groovy | 22 ++++++++++++------- .../LegacyYamlRestTestPluginFuncTest.groovy | 2 +- .../distribution/bwc/bugfix3/build.gradle | 0 .../distribution/bwc/bugfix4/build.gradle | 0 .../distribution/bwc/bugfix5/build.gradle | 0 .../distribution/bwc/staged2/build.gradle | 0 .../fixtures/AbstractGradleFuncTest.groovy | 3 ++- 11 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix3/build.gradle create mode 100644 build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix4/build.gradle create mode 100644 build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix5/build.gradle create mode 100644 build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged2/build.gradle diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy index d8cb55fc0373f..144910839a960 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy @@ -23,6 +23,7 @@ abstract class AbstractGitAwareGradleFuncTest extends AbstractGradleFuncTest { def setup() { remoteGitRepo = new File(setupGitRemote(), '.git') + println "remoteGitRepo = ${remoteGitRepo.absolutePath}" execute("git clone ${remoteGitRepo.absolutePath} cloned", testProjectDir.root) buildFile = new File(testProjectDir.root, 'cloned/build.gradle') settingsFile = new File(testProjectDir.root, 'cloned/settings.gradle') diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy index 150f2b1130159..13d826ceffeb6 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy @@ -53,8 +53,10 @@ abstract class AbstractRestResourcesFuncTest extends AbstractGradleFuncTest { } """ - subProject(":distribution:archives:integ-test-zip") << "configurations.create('extracted')\n" - subProject(":distribution:archives:integ-test-zip") << "configurations.create('default')\n" + subProject(":distribution:archives:integ-test-zip") << """ +apply plugin: 'base' +configurations.create('extracted') +""" } void setupRestResources(List apis, List tests = [], List xpackTests = []) { diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy index 43edd15a5dcf6..eba9001ea761c 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy @@ -80,11 +80,8 @@ class InternalDistributionArchiveSetupPluginFuncTest extends AbstractGradleFuncT def "registered distribution provides archives and directory variant"() { given: file('someFile.txt') << "some content" - - settingsFile << """ - include ':consumer' - include ':producer-tar' - """ + subProject("consumer") + subProject("producer-tar") buildFile << """ import org.gradle.api.artifacts.type.ArtifactTypeDefinition; @@ -154,9 +151,7 @@ class InternalDistributionArchiveSetupPluginFuncTest extends AbstractGradleFuncT def "builds extracted distribution via extractedAssemble"() { given: file('someFile.txt') << "some content" - settingsFile << """ - include ':producer-tar' - """ + subProject("producer-tar") buildFile << """ import org.gradle.api.artifacts.type.ArtifactTypeDefinition; diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy index bb100b6b23882..effcb8a54afb6 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy @@ -117,5 +117,4 @@ class InternalDistributionBwcSetupPluginFuncTest extends AbstractGitAwareGradleF result.output.contains("nested folder /distribution/bwc/minor/build/bwc/checkout-8.x/" + "distribution/archives/darwin-tar/build/install/elasticsearch-8.4.0-SNAPSHOT") } - } diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarFuncTest.groovy index 57ba6a7773d50..c85a3042acbd7 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarFuncTest.groovy @@ -9,7 +9,8 @@ package org.elasticsearch.gradle.internal -import spock.lang.Ignore + +import spock.lang.Unroll import org.apache.commons.compress.archivers.tar.TarArchiveEntry import org.apache.commons.compress.archivers.tar.TarArchiveInputStream @@ -17,7 +18,6 @@ import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest import org.gradle.api.GradleException -import spock.lang.Unroll import java.nio.file.Files import java.nio.file.Path @@ -66,8 +66,12 @@ tasks.register("buildBZip2Tar", SymbolicLinkPreservingTar) { SymbolicLinkPreserv from fileTree("archiveRoot") into('config') { - dirMode 0750 - fileMode 0660 + dirPermissions { + unix(0750) + } + filePermissions { + unix(0660) + } from "real-folder2" } } @@ -118,8 +122,10 @@ tasks.register("buildTar", SymbolicLinkPreservingTar) { SymbolicLinkPreservingTa preserverTimestamp << [true, false] } - private boolean assertTar(final File archive, final Function wrapper, boolean preserveFileTimestamps) - throws IOException { + private boolean assertTar(final File archive, + final Function wrapper, + boolean preserveFileTimestamps) + throws IOException { try (TarArchiveInputStream tar = new TarArchiveInputStream(wrapper.apply(new FileInputStream(archive)))) { TarArchiveEntry entry = tar.getNextTarEntry(); boolean realFolderEntry = false; @@ -132,7 +138,7 @@ tasks.register("buildTar", SymbolicLinkPreservingTar) { SymbolicLinkPreservingTa if (entry.getName().equals("real-folder/")) { assert entry.isDirectory() realFolderEntry = true - } else if (entry.getName().equals("real-folder/file")) { + } else if (entry.getName().equals("real-folder/file")) { assert entry.isFile() fileEntry = true } else if (entry.getName().equals("real-folder/link-to-file")) { @@ -145,7 +151,7 @@ tasks.register("buildTar", SymbolicLinkPreservingTar) { SymbolicLinkPreservingTa } else if (entry.getName().equals("config/sub/")) { assert entry.isDirectory() assert entry.getMode() == 16872 - }else if (entry.getName().equals("link-in-folder/")) { + } else if (entry.getName().equals("link-in-folder/")) { assert entry.isDirectory() linkInFolderEntry = true } else if (entry.getName().equals("link-in-folder/link-to-file")) { diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy index 90ac5369f5df4..d0e7d10123648 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy @@ -137,7 +137,7 @@ class LegacyYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest { """ when: - def result = gradleRunner("yamlRestTest", "--console", 'plain').buildAndFail() + def result = gradleRunner("yamlRestTest", "--console", 'plain', '--stacktrace').buildAndFail() then: result.task(":distribution:archives:integ-test-zip:buildExpanded").outcome == TaskOutcome.SUCCESS diff --git a/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix3/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix3/build.gradle new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix4/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix4/build.gradle new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix5/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix5/build.gradle new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged2/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged2/build.gradle new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy index d52b7d321c729..aa9b9d07c4461 100644 --- a/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy +++ b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy @@ -83,7 +83,8 @@ abstract class AbstractGradleFuncTest extends Specification { if (subProjectBuild.exists() == false) { settingsFile << "include \"${subProjectPath}\"\n" } - subProjectBuild + subProjectBuild.parentFile.mkdirs() + return subProjectBuild } File subProject(String subProjectPath, Closure configAction) { From ae0a41898117c03b42f9cf8a653dfa0e42489fb5 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Thu, 14 Aug 2025 16:58:10 +0200 Subject: [PATCH 6/9] Minor cleanup --- .../gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy | 1 - .../internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy index 144910839a960..d8cb55fc0373f 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy @@ -23,7 +23,6 @@ abstract class AbstractGitAwareGradleFuncTest extends AbstractGradleFuncTest { def setup() { remoteGitRepo = new File(setupGitRemote(), '.git') - println "remoteGitRepo = ${remoteGitRepo.absolutePath}" execute("git clone ${remoteGitRepo.absolutePath} cloned", testProjectDir.root) buildFile = new File(testProjectDir.root, 'cloned/build.gradle') settingsFile = new File(testProjectDir.root, 'cloned/settings.gradle') diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy index d0e7d10123648..90ac5369f5df4 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/LegacyYamlRestTestPluginFuncTest.groovy @@ -137,7 +137,7 @@ class LegacyYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest { """ when: - def result = gradleRunner("yamlRestTest", "--console", 'plain', '--stacktrace').buildAndFail() + def result = gradleRunner("yamlRestTest", "--console", 'plain').buildAndFail() then: result.task(":distribution:archives:integ-test-zip:buildExpanded").outcome == TaskOutcome.SUCCESS From 0d8883ad379da7037d4fafad57cdc999b7675c4e Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Thu, 14 Aug 2025 23:00:05 +0200 Subject: [PATCH 7/9] Updating javaparser --- gradle/build.versions.toml | 2 +- gradle/verification-metadata.xml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gradle/build.versions.toml b/gradle/build.versions.toml index 0feea8eff0aef..0c42445d9f126 100644 --- a/gradle/build.versions.toml +++ b/gradle/build.versions.toml @@ -22,7 +22,7 @@ hamcrest = "org.hamcrest:hamcrest:3.0" httpcore5 = "org.apache.httpcomponents.core5:httpcore5:5.3.3" httpclient5 = "org.apache.httpcomponents.client5:httpclient5:5.4.2" idea-ext = "gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:1.1.4" -javaparser = "com.github.javaparser:javaparser-core:3.18.0" +javaparser = "com.github.javaparser:javaparser-core:3.27.0" json-schema-validator = "com.networknt:json-schema-validator:1.0.72" json-assert = "org.skyscreamer:jsonassert:1.5.0" jackson-core = { group = "com.fasterxml.jackson.core", name="jackson-core", version.ref="jackson" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 6e93fe95d5718..dc9aa32e3d65b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -482,6 +482,11 @@ + + + + + From 08dc144065d60a4bd0cfaeb019b6c3c21704a038 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Mon, 18 Aug 2025 10:25:07 +0200 Subject: [PATCH 8/9] Some verification data cleanup --- gradle/verification-metadata.xml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index dc9aa32e3d65b..9e35986a8e4d6 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -4332,11 +4332,6 @@ - - - - - @@ -4347,11 +4342,6 @@ - - - - - @@ -4942,21 +4932,11 @@ - - - - - - - - - - From 9f747014b3079979e88abf0dcb2721049209e73a Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Tue, 19 Aug 2025 15:53:48 +0200 Subject: [PATCH 9/9] revert unrequired change of making task abstract --- .../gradle/internal/release/ExtractCurrentVersionsTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java index 599a82295fe30..76d6aeeca6db9 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ExtractCurrentVersionsTask.java @@ -29,7 +29,7 @@ import javax.inject.Inject; -public abstract class ExtractCurrentVersionsTask extends AbstractVersionsTask { +public class ExtractCurrentVersionsTask extends AbstractVersionsTask { private static final Logger LOGGER = Logging.getLogger(ExtractCurrentVersionsTask.class); private Path outputFile;