From bea3fa46db47a79edf20f7cbcebc2cb1720bfe3f Mon Sep 17 00:00:00 2001 From: Alpar Torok Date: Fri, 20 Jul 2018 09:23:54 +0300 Subject: [PATCH 1/3] Determine the minimum gradle version based on the wrapper This is restrictive and forces users of the plugin to move together with us, but without integration tests it's close to impossible to make sure that the claimed compatability is really there. If we do want to offer more flexibility, we should add those tests first. --- build.gradle | 13 +++++-------- buildSrc/build.gradle | 10 ++++++++-- .../elasticsearch/gradle/BuildPlugin.groovy | 17 +++++++---------- gradle/wrapper/gradle-wrapper.jar | Bin 54417 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 1 + 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 66f34d8f445de..915e94fdf8b49 100644 --- a/build.gradle +++ b/build.gradle @@ -16,21 +16,17 @@ * specific language governing permissions and limitations * under the License. */ - import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin -import org.apache.tools.ant.taskdefs.condition.Os -import org.apache.tools.ant.filters.ReplaceTokens import org.elasticsearch.gradle.BuildPlugin import org.elasticsearch.gradle.LoggedExec import org.elasticsearch.gradle.Version import org.elasticsearch.gradle.VersionCollection import org.elasticsearch.gradle.VersionProperties import org.gradle.plugins.ide.eclipse.model.SourceFolder - -import org.gradle.api.tasks.wrapper.Wrapper -import org.gradle.api.tasks.wrapper.Wrapper.DistributionType import org.gradle.util.GradleVersion import org.gradle.util.DistributionLocator +import org.apache.tools.ant.taskdefs.condition.Os +import org.apache.tools.ant.filters.ReplaceTokens import java.nio.file.Files import java.nio.file.Path @@ -537,7 +533,7 @@ task run(type: Run) { } wrapper { - distributionType = DistributionType.ALL + distributionType = 'ALL' doLast { final DistributionLocator locator = new DistributionLocator() final GradleVersion version = GradleVersion.version(wrapper.gradleVersion) @@ -545,7 +541,8 @@ wrapper { final URI sha256Uri = new URI(distributionUri.toString() + ".sha256") final String sha256Sum = new String(sha256Uri.toURL().bytes) wrapper.getPropertiesFile() << "distributionSha256Sum=${sha256Sum}\n" - println "Added checksum to wrapper properties" + wrapper.getPropertiesFile() << "gradleVersion=${gradleVersion}\n" + println "Added checksum and version to wrapper properties" } } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 55520728812c9..72f85ba03cafd 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -25,8 +25,13 @@ plugins { group = 'org.elasticsearch.gradle' -if (GradleVersion.current() < GradleVersion.version('4.9')) { - throw new GradleException('Gradle 4.9+ is required to build elasticsearch') +Properties wrapper = new Properties() +File wrapperProperties = project == rootProject ? + project.file('../gradle/wrapper/gradle-wrapper.properties') : + rootProject.file('gradle/wrapper/gradle-wrapper.properties') +wrapperProperties.withInputStream { wrapper.load(it) } +if (GradleVersion.current() < GradleVersion.version(wrapper.get('gradleVersion'))) { + throw new GradleException("Gradle ${wrapper.get('gradleVersion')}+ is required to build elasticsearch") } if (JavaVersion.current() < JavaVersion.VERSION_1_8) { @@ -78,6 +83,7 @@ task writeVersionProperties { processResources { dependsOn writeVersionProperties from tempPropertiesFile + from wrapperProperties } /***************************************************************************** diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy index 9f54ae8b682e6..150af96b686ae 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy @@ -67,8 +67,13 @@ class BuildPlugin implements Plugin { + 'elasticearch.standalone-rest-test, and elasticsearch.build ' + 'are mutually exclusive') } - if (GradleVersion.current() < GradleVersion.version('4.9')) { - throw new GradleException('Gradle 4.9+ is required to use elasticsearch.build plugin') + Properties wrapper = new Properties() + InputStream is = getClass().getResourceAsStream("/gradle-wrapper.properties") + try { wrapper.load(is) } finally { is.close() } + if (GradleVersion.current() < GradleVersion.version(wrapper.get('gradleVersion'))) { + throw new GradleException( + "Gradle ${wrapper.get('gradleVersion')}+ is required to use elasticsearch.build plugin" + ) } project.pluginManager.apply('java') project.pluginManager.apply('carrotsearch.randomized-testing') @@ -150,14 +155,6 @@ class BuildPlugin implements Plugin { } println " Random Testing Seed : ${project.testSeed}" - // enforce Gradle version - final GradleVersion currentGradleVersion = GradleVersion.current(); - - final GradleVersion minGradle = GradleVersion.version('4.3') - if (currentGradleVersion < minGradle) { - throw new GradleException("${minGradle} or above is required to build Elasticsearch") - } - // enforce Java version if (compilerJavaVersionEnum < minimumCompilerVersion) { final String message = diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 758de960ec7947253b058ff79c88ce51f3abe08a..0d4a9516871afd710a9d84d89e31ba77745607bd 100644 GIT binary patch delta 732 zcmYk4Ur19?9LINl)~4m3n;~1*r8tRj;+ldsTG*&j;mD0LiLwYROK2iKWQ|?~A0o3h zzap4_7J?6pUPQ=BD%&6DHm6Q~$R4bh2%#5!>&Z@s+uDW0{d~^%+{^czdwqed{y>)Z zc+T&yL!MJAm8!{SYf|rYZFe!1SDt!vF<7`q<#K4UACyiSVEQmpTWJ* zCH4Yyp=$OKJ0T0(LXSg>)8PuzGk9Y~a55RAVIwuGg?b~|_z|w56PmQvMb6Mjj-nRY z(x#K25gTpjgx1eD(Bo2p{&_ncGbpGYh+64zl`vOT0mdT|v?eK+msKu}NrWG2H3&p& z=t-@jdDx8_DRo|`ZJ~~CIRy4EIH}`;f_VcmGv8lz>^k${dF(1Rx9~&{Z%aNJQWB2D zW!4H?+{J?M#ZR(rEX8loqq`_*JA`wIMk;e7)u+cbw-)h)k!CuCwj@e%v@^4%wo?S{ zi*>97FBdP?lmGw# delta 674 zcmYk)T}V@590u^ce`_BwX^}IxS%%_;lVr!`V#{7~K>D!@P~?^<`NH4(Ing@BclV!#Ts#S?=kqkqXuP zh4b|_GMTK^ZEaC})BWsS?`2rD8(zFT^*$$2zD;)0rchoVsqNJAp+Rb5f&VDlMi zQYES(UnQk?Z>@gyS?N=rh)4VlG+4lCz=!dlOI4&Q6MV!u zbVzV*se)1`1TBHXk#o* z@F>~s=(iW+T*%107!Fxz!;Wl6Iev$X)Yr|aLv6T;iY{T%osXGt4SR+4a4YGYqG)!i z`5iSFi0EnGRbCZgAz~)AORzt>9ZfDROi?2}zLBXcG2Lu~p&2;mQ;Ja8o z&D|9&iPzEWJ Date: Mon, 23 Jul 2018 11:08:56 +0300 Subject: [PATCH 2/3] Track gradle version in individual file --- build.gradle | 5 ++++- buildSrc/build.gradle | 11 +++-------- .../org/elasticsearch/gradle/BuildPlugin.groovy | 12 +++++++----- buildSrc/src/main/resources/minimumGradleVersion | 1 + 4 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 buildSrc/src/main/resources/minimumGradleVersion diff --git a/build.gradle b/build.gradle index 915e94fdf8b49..7d08654383125 100644 --- a/build.gradle +++ b/build.gradle @@ -541,8 +541,11 @@ wrapper { final URI sha256Uri = new URI(distributionUri.toString() + ".sha256") final String sha256Sum = new String(sha256Uri.toURL().bytes) wrapper.getPropertiesFile() << "distributionSha256Sum=${sha256Sum}\n" - wrapper.getPropertiesFile() << "gradleVersion=${gradleVersion}\n" println "Added checksum and version to wrapper properties" + // Update build-tools to reflect the Gradle upgrade + // TODO: we can remove this once we have tests to make sure older versions work. + project(':build-tools').file('src/main/resources/minimumGradleVersion').text = gradleVersion + println "Updated minimum Gradle Version" } } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 72f85ba03cafd..d507c54c45a70 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -25,13 +25,9 @@ plugins { group = 'org.elasticsearch.gradle' -Properties wrapper = new Properties() -File wrapperProperties = project == rootProject ? - project.file('../gradle/wrapper/gradle-wrapper.properties') : - rootProject.file('gradle/wrapper/gradle-wrapper.properties') -wrapperProperties.withInputStream { wrapper.load(it) } -if (GradleVersion.current() < GradleVersion.version(wrapper.get('gradleVersion'))) { - throw new GradleException("Gradle ${wrapper.get('gradleVersion')}+ is required to build elasticsearch") +String minimumGradleVersion = file('src/main/resources/minimumGradleVersion').text.trim() +if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion)) { + throw new GradleException("Gradle ${minimumGradleVersion}+ is required to build elasticsearch") } if (JavaVersion.current() < JavaVersion.VERSION_1_8) { @@ -83,7 +79,6 @@ task writeVersionProperties { processResources { dependsOn writeVersionProperties from tempPropertiesFile - from wrapperProperties } /***************************************************************************** diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy index 150af96b686ae..58e2420e02b07 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy @@ -20,6 +20,7 @@ package org.elasticsearch.gradle import com.carrotsearch.gradle.junit4.RandomizedTestingTask import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin +import org.apache.commons.io.IOUtils import org.apache.tools.ant.taskdefs.condition.Os import org.eclipse.jgit.lib.Constants import org.eclipse.jgit.lib.RepositoryBuilder @@ -53,6 +54,7 @@ import org.gradle.internal.jvm.Jvm import org.gradle.process.ExecResult import org.gradle.util.GradleVersion +import java.nio.charset.StandardCharsets import java.time.ZoneOffset import java.time.ZonedDateTime /** @@ -67,12 +69,12 @@ class BuildPlugin implements Plugin { + 'elasticearch.standalone-rest-test, and elasticsearch.build ' + 'are mutually exclusive') } - Properties wrapper = new Properties() - InputStream is = getClass().getResourceAsStream("/gradle-wrapper.properties") - try { wrapper.load(is) } finally { is.close() } - if (GradleVersion.current() < GradleVersion.version(wrapper.get('gradleVersion'))) { + final String minimumGradleVersion + InputStream is = getClass().getResourceAsStream("/minimumGradleVersion") + try { minimumGradleVersion = IOUtils.toString(is, StandardCharsets.UTF_8.toString()) } finally { is.close() } + if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion.trim())) { throw new GradleException( - "Gradle ${wrapper.get('gradleVersion')}+ is required to use elasticsearch.build plugin" + "Gradle ${minimumGradleVersion}+ is required to use elasticsearch.build plugin" ) } project.pluginManager.apply('java') diff --git a/buildSrc/src/main/resources/minimumGradleVersion b/buildSrc/src/main/resources/minimumGradleVersion new file mode 100644 index 0000000000000..86a9588adcd59 --- /dev/null +++ b/buildSrc/src/main/resources/minimumGradleVersion @@ -0,0 +1 @@ +4.9 From 5aeca7fefd5eddab165f271aea79170ab237b567 Mon Sep 17 00:00:00 2001 From: Alpar Torok Date: Mon, 23 Jul 2018 23:41:37 +0300 Subject: [PATCH 3/3] PR review --- build.gradle | 2 +- buildSrc/src/main/resources/minimumGradleVersion | 2 +- gradle/wrapper/gradle-wrapper.properties | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 7d08654383125..fa4e1c6b0819c 100644 --- a/build.gradle +++ b/build.gradle @@ -541,7 +541,7 @@ wrapper { final URI sha256Uri = new URI(distributionUri.toString() + ".sha256") final String sha256Sum = new String(sha256Uri.toURL().bytes) wrapper.getPropertiesFile() << "distributionSha256Sum=${sha256Sum}\n" - println "Added checksum and version to wrapper properties" + println "Added checksum to wrapper properties" // Update build-tools to reflect the Gradle upgrade // TODO: we can remove this once we have tests to make sure older versions work. project(':build-tools').file('src/main/resources/minimumGradleVersion').text = gradleVersion diff --git a/buildSrc/src/main/resources/minimumGradleVersion b/buildSrc/src/main/resources/minimumGradleVersion index 86a9588adcd59..899dd4f5927a1 100644 --- a/buildSrc/src/main/resources/minimumGradleVersion +++ b/buildSrc/src/main/resources/minimumGradleVersion @@ -1 +1 @@ -4.9 +4.9 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8e23ccce8f6e8..94161917d1878 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,4 +4,3 @@ distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionSha256Sum=39e2d5803bbd5eaf6c8efe07067b0e5a00235e8c71318642b2ed262920b27721 -gradleVersion=4.9